作者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)