作者mars90226 (火星人)
看板EzHotKey
标题[AHK-] [分享] ruby Text Edit Menu
时间Sun Feb 26 13:01:24 2012
是这样的,不久之前我看到了这个
http://www.animal-software.com/dolphin-text-editor-menu.php
这个小软体感觉很有趣,可是有些地方使用上不太方便
所以我决定结合一下我学的ruby
想要做出类似功能,但是可以输入ruby script来做文字改变
於是就诞生出这个"ruby Text Edit Menu"了~
由於我是第一次接触autoHotkey,有些地方可能看起来很丑,请见谅~
//其实是查了很久以後才决定要用autoHotkey做的XD
//毕竟用程式语言监测hotkey还蛮难的
程式分成两部分: ahk档 和 rb档
----------
ahk档
----------
#SingleInstance, force
#Persistent
Menu, func, add, line, lineHandler
Menu, func, add, lines, linesHandler
Gui, line:New
Gui, line:Add, Text,, line
Gui, line:Add, Edit, vlineCmd -WantReturn
Gui, line:Add, Button, Default glineButton, OK
Gui, lines:New
Gui, lines:Add, Text,, lines
Gui, lines:Add, Edit, vlinesCmd -WantReturn
Gui, lines:Add, Button, Default glinesButton, OK
Name = rubyTextEditMenu
return
!a::
Menu, func, show
return
lineHandler:
Copy()
Gui, line:Show
return
linesHandler:
Copy()
Gui, lines:Show
return
lineButton:
Gui, line:Submit
GuiControl,, lineCmd,
Gui, line:Cancel
ReplaceLineBreak()
RunWait, %comspec% /c ""ruby" "%A_WorkingDir%\%Name%.rb" "n" "%clipboard%"
"%lineCmd%" > "%A_WorkingDir%\%Name%Tmp.txt" 2>
"%A_WorkingDir%\%Name%Error.txt""
Paste()
return
linesButton:
Gui, lines:Submit
GuiControl,, linesCmd,
Gui, lines:Cancel
ReplaceLineBreak()
RunWait, %comspec% /c ""ruby" "%A_WorkingDir%\%Name%.rb" "y" "%clipboard%"
"%linesCmd%" > "%A_WorkingDir%\%Name%Tmp.txt" 2>
"%A_WorkingDir%\%Name%Error.txt""
Paste()
return
Copy()
{
clipboard =
SendInput ^c
ClipWait
}
Paste()
{
global Name
FileRead clipboard, %Name%Tmp.txt
ClipWait
SendInput ^v
}
ReplaceLineBreak()
{
StringReplace clipboard, clipboard, `r`n, \n, All
}
----------
rb档
----------
def strEvalPrint(str, evalString, lineBreak=false)
result = eval evalString
if result.is_a? Array
puts result[0..-2]
if lineBreak
puts result[-1]
else
print result[-1]
end
else
print result
end
end
def lineEval(str, evalString)
str.gsub!('\\n', "\n")
strEvalPrint str, evalString
end
def linesEval(strs, evalString)
strs = strs.split '\\n'
strs[0..-2].each do |str|
strEvalPrint str, evalString
puts ""
end
strEvalPrint strs[-1], evalString, true
end
if __FILE__ == $0
str, evalString = ARGV[1].dup, ARGV[2].dup
if ARGV[0] == 'n'
lineEval str, evalString
elsif ARGV[0] == 'y'
linesEval str, evalString
else
puts "Input Error, ARGV[0] == #{ARGV[0]}"
end
end
----------
把这个档案放在同个资料夹下应该就可以了~
使用方法如下:
选取想要的文字,按下alt+a键会跳出选单
选单有两个选项:line,lines
line表示将整个选取的文字当成一个字串,用ruby script处理
lines表示ruby script会套用到选取到的每一行上
选下去後,会跳出视窗要输入ruby script
script中的"str"即表示选取到的文字
例如: 选取了"test",在script中的"str"就是"test"
例如: 选取了"hello",script输入"str + ' world'",按下确定以後
"hello"就会被改成"hello world"
输入的script不需要加双引号! 然後字串请用单引号,想用双引号请用%Q{}
这个我还不知道该怎麽办,对autoHotkey不太熟
如果选了lines的话,每一行都会套用一次ruby script
例如: 选取了"I'm\nHe is",script输入"str + ' human.'",按下确定
结果会是"I'm human.\nHe is human."
大概就这样子了,希望大家会觉得好用~
如果觉得alt+a不太顺手的话,上方浅蓝色的部分可以改成想要的hotkey
刚刚想到了一个功能顺手加上去
现在如果script的结果是Array,就会把Array每个元素印一行出来~
这样就可以用split了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.226.31.90
※ mars90226:转录至看板 EZsoft 02/26 13:02
1F:推 eight0:跳脱字元「`」 02/26 17:29
2F:→ mars90226:欸特,你是说双引号前面要加`的意思吗? 我试试看~ 02/26 18:38
※ 编辑: mars90226 来自: 125.226.31.90 (02/26 19:19)
3F:→ mars90226:我尝试的结果是要用「\」去跳脱,我想这是command line 02/26 20:15
4F:→ mars90226:的部分 02/26 20:15
5F:→ eight0:有可能! 这麽说之前run指令喂参数给bat失败说不定也是这个 02/27 01:53
6F:→ eight0:原因 02/27 01:53
※ 编辑: mars90226 来自: 125.228.44.77 (02/27 11:56)