剪贴簿增强工具Ditto可以分好几次选取不同的段落,
分别复制多次以后,打开复制的历史列表,
按住Ctrl或Shift选择多个复制的历史,
然后将所有复制的内容全部一次贴上。
“用FireGestures召唤Ditto”
Ditto有全域的热键可以随时弹出复制历史列表,
默认是Ctrl+`,其实按起来很快,
不过因为我已经有用AutoCopy,
选取文字后就会自动复制,不需要按到键盘的按键,
所以如果能够用手势就打开Ditto的历史列表,
就可以单手完成复制贴上的工作。
(如果鼠标有很多的按键,也可以用鼠标的宏)
在整个Windows系统上,可以用StrokesPlus画手势送出
Ditto的热键acSendKeys("^`"),
就可以在Windows系统的任何地方快速的打开Ditoo的历史列表。
在Fx里由于我排除了StrokesPlus,只用FireGesture来侦测手势,
所以需要由FireGestures来送出按键传送给系统,
这个功能不能用FireGestures自己的sendKeyEvent,
所以要用别的做法。
Ditto本身支援命令列的参数,执行Ditto.exe -open,
就可以打开Ditto的历史列表,
所以FireGestures的脚本可以写成
var localFile = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
createInstance(Components.interfaces.nsIProcess);
var args = ["-open"];
localFile.initWithPath("C:\\Program Files\\Ditto\\Ditto.exe");
//Ditto.exe的位置
process.init(localFile);
process.run(false, args, args.length);
但是因为我的Fx放在沙盒里,被限制权限,所以不能这样用。
也可以写成bat从命令列执行,但是我的沙盒又限制其他程式启动执行,
只有少数程式程式放行,因此无法启动cmd.exe,所以这个方法也不行。
因为要放行cmd.exe觉得不太好,刚好我有用NirCmd,
所以想说改用NirCmd来传送按键给系统会不会好一点?
使用NirCmd的方法,下载NirCmd,免安装,
解压缩放到任意位置,例如C:\nircmd-x64底下。
新增一个FireGestures鼠标手势,脚本填入
var localFile = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
createInstance(Components.interfaces.nsIProcess);
var args = ["sendkeypress", "ctrl+192"]; //('的VirtualKeyCode=192)
localFile.initWithPath("C:\\nircmd-x64\\nircmd.exe"); //NirCmd的位置
process.init(localFile);
process.run(false, args, args.length);
然后在沙盒里放行nircmd.exe。
另一种方法还是用StrokesPlus,
可以单独设定一个手势给firefox.exe弹出Ditto,
然后勾选Preferences设定里面的"Relay Gesture on No Match*",
这样除了单独设定的弹出Ditto的手势以外,
其他没有设定的手势都会被StrokesPlus忽略,
重新传递给FireGestures去处理。
不过这个方法有很大的缺点,
因为StrokesPlus要判断是否要忽略要等手势完全画完,
等手势画完让StrokesPlus判断完以后才能交给FireGestures处理,
因此手势处理的回应会慢半拍,用起来感觉会顿顿的。
请问有没有其他比较好的方法,可以在沙盒里不用放行额外的程式,
直接用手势画出Ditto的历史列表视窗?