2012-07-25 105 views
1

在我的Ruby应用程序,我用下面的函数很长一段时间来写到剪贴板:固定osascript剪贴板OSX山狮

def pbcopy(text) 
    IO.popen("osascript -e 'set the clipboard to do shell script \"cat\"'","w+") {|pipe| pipe << text} 
end 

我得到这个代码here,它取代了我早些时候通过反引号使用pbpaste,因为UTF8和其他东西似乎更可靠。它一直非常完美,但是随着新的OSX Mountain Lion,它停止工作。 osascript -e'将剪贴板设置为“hi”'效果很好,所以它可能与管道不起作用。任何帮助将非常感激!

回答

0

我只是尝试这样做,它工作得很好用UTF-8字符:

def pbcopy(text) 
    IO.popen("pbcopy", "w+") {|pipe| pipe << text} 
end 

pbcopy "smörgåsbord" 
puts `pbpaste` 
+0

人物仍然混乱了,当我尝试文本到文本视图贴在10.8。 – user495470 2012-07-30 11:13:32

+0

不适合我,如果我粘贴在TextEdit或Chrome地址栏中。也许它是Ruby的不同版本(1.9.3)或本地环境。我也是10.8。 – 2012-07-30 14:34:14

0

do shell script "cat"似乎不再返回STDIN。

尽管您可以使用on run处理程序获取参数。 {input, parameters}窗体似乎只能在Automator中工作。

system("osascript", "-e", "on run {input} 
set the clipboard to input 
end", "あä") 

你也可以设置__CF_USER_TEXT_ENCODING variable

IO.popen("__CF_USER_TEXT_ENCODING=$UID:0x8000100:0x8000100 pbcopy", "w") { |i| 
    i << "あä" 
} 
+0

你提供的第一个例子似乎不起作用 - OSX ML中的剪贴板上没有任何结果。 – 2012-07-31 14:52:47

+0

@StianHåklev你是对的; '在运行{input}上'丢失大括号。 – user495470 2012-07-31 15:11:36