返回:  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"这样的多级目录试一试。
这个脚本比上面两个脚本执行速度要慢得多。