返回: XYplorer使用指南
收藏文件夹、收藏文件 | Favorite Folder & Favorite File
我们都知道在开启树的左侧栏后,在其空白处右键可以打开收藏文件夹列表,示意图如下:
但如果我们把树左侧栏关闭后,这个快速打开收藏文件夹列表的功能就用不了了。为了快速打开收藏文件夹列表,我写了脚本专门用于设置快捷键后,从鼠标出呼出收藏文件夹列表。
以下脚本文件通过设置快捷键后可以达到“使用快捷键在鼠标所在位置呼出收藏文件夹列表”的效果:
显示无图标版收藏文件夹列表的脚本(ShowFavoriteFolders-noicons.xys):
1 2 3 4 5 6 7 8 9 10
| $fav_folders = favs('d'); // If $fav_folders is "", then terminate the running script, and else nothing be done. end $fav_folders == ""; $fav_folders_list =; foreach($token, $fav_folders, "<crlf>") { $fav_folders_list .= '|'.$token; } $selected = popupmenu($fav_folders_list); end $selected == ""; goto $selected;
|
显示有限图标的收藏文件夹列表的脚本(ShowFavoriteFolders-limitedicons.xys):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $fav_folders = favs('d'); // If $fav_folders is "", then terminate the running script, and else nothing be done. end $fav_folders == ""; $fav_folders_list =; foreach($token, $fav_folders, "<crlf>") { // sep_item: "Caption;Data;Icon;State" // is paper? if(regexmatches($token, "^paper:") == "paper:") { $token = $token.';;:paper'; }// is folder but not paper folder elseif(exists($token) == 2) { //Please substitute the generic folder icon you want for "Folders\Folder Yellow.ico" $token = $token.";;Folders\Folder Yellow.ico"; } $fav_folders_list .= '|'.$token; } $selected = popupmenu($fav_folders_list); end $selected == ""; goto $selected;
|
脚本说明:$token = token.";;Folders\Folder Yellow.ico";
换成你想要的图标位置,不加绝对路径,默认位置为\。比如,脚本中这部分替换为token = token.";;你想要的图标.ico";
,那么会从XY的"Data\Icons"目录下寻找;或者这部分替换为token = $token.“;;G:\你想要的图标.ico”;
,那么会寻找"G:\你想要的图标.ico"。
"ShowFavoriteFolders-limitedicons.xys"效果演示:(我设置的快捷键是Shift+F,关于如何设置脚本与快捷键关联请参考XYplorer-用户自定义命令篇(UDC))
在打开收藏文件夹列表是否能根据Customize File Icons(CFI)信息动态获取自定义的图标么?
如果想要根据文件名和文件的扩展名获取来自Customize File Icons(CFI)的图标,在Scripting Commands中并没有类似getIcons()这样的函数,那么想要获取CFI图标信息,需要读取XY使用的配置文件。比如XY使用的配置文件是XYplorer.ini,那么CFI图标信息在配置文件的[FileIcons]
中,可以通过文本编辑器自带的搜索功能搜索此关键词组。
显示CFI图标的收藏文件夹列表的脚本(ShowFavoriteFolders-CFI_V0.1.xys):(该脚本只适用CFI信息不为空时才可打开收藏文件夹列表)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| // 该脚本只适用CFI信息不为空时才可打开收藏文件夹列表 // XY配置文件路径 $ini = "<xydata>\XYplorer.ini"; $section_count = getkey("Count", "FileIcons", $ini); $iterator = 1; $value_list = ; while($iterator <= $section_count) { $value_list .= getkey($iterator, "FileIcons", $ini)."<crlf>"; $iterator++; } if($value_list != "") { // extract folder info for CFI //echo $value_list; $cfi_list = ; // 读取CFI信息到$cfi_list foreach($token, $value_list, "<crlf>") { if(regexmatches($token, "\\>") != "") { $cfi_list .= $token."<crlf>"; } } }
// 该函数支持匹配形如“[A-Z]:\Shortcuts\>Folders\User Links.ico|Term PS.ico”这样的CFI项目 // 该函数不适合纸文件夹的图标匹配 // @src: 收藏文件夹名(该字符串最末尾以'\'结尾) // @cfi_list: 从.ini扫描到的CFI项目 // @return: src若与CFI其中一项匹配上,返回加上CFI图标路径的sep_item,否则返回Generic folder图标 function match_cfi($src, $cfi_list) { // Fav folder e.g D:\Shortcuts\ 取出字符串最后面的'\' $src_temp = substr($src, 0, -1); foreach($token, $cfi_list, "<crlf>") { // [可选编程]先过滤掉一些规则 // token_pre="Selected State of Folder In Tree" **\ // "**\" //echo regexmatches($token, "\*\*\\"); // CFI项目不包括图标路径的部分进行修改:将'\'改成"\\",并且去掉开头的'+'。这是前缀用于匹配 $token_pre = replace(substr($token, 1, strpos($token, ">")-2), "\", "\\"); // Regex pattern 可能包含'*','?',需要进行转换为正确的pattern $token_pre = replace($token_pre, "*", "\*"); $token_pre = replace($token_pre, "?", "[A-Z]"); // CFI项目获得图标部分 $token_post = substr($token, strpos($token, ">")+1, strlen($token)); //echo "token_pre=".$token_pre."<crlf>"."token_post=".$token_post."<crlf>"; //echo "src=".$src."<crlf>"."src_temp=".$src_temp."<crlf>"; // Match specified folder if(regexmatches($src_temp, $token_pre) == $src_temp) { $src = $src.";;".substr($token_post, 0, strpos($token_post, "|")); return $src; } } // 没有匹配到CFI就返回一般性文件图标的sep_item return $src.";;Folders\Folder Yellow.ico"; }
// CFI信息为空 if($cfi_list != "") { $fav_folders = favs('d'); // If $fav_folders is "", then terminate the running script, and else nothing be done. end $fav_folders == ""; $fav_folders_list =; foreach($token, $fav_folders, "<crlf>") { // sep_item: "Caption;Data;Icon;State" // is paper? if(regexmatches($token, "^paper:") == "paper:") { $token = $token.';;:paper'; }// is folder but not paper folder elseif(exists($token) == 2) { $token = match_cfi($token, $cfi_list); } $fav_folders_list .= '|'.$token; } } $selected = popupmenu($fav_folders_list); end $selected == ""; goto $selected;
|
使用演示:
这个脚本目前如图所示这样的规则:
当然你也可以设置为"[A-Z]:\A\B>xxx.ico"这样的多级目录试一试。
这个脚本比上面两个脚本执行速度要慢得多。