我遇到了Ruby無法解釋的奇怪問題。我有以下腳本,抓住任何代碼目前在剪貼板上,運行它通過一個語法高亮,然後把新版本返回到剪貼板:「ruby script.rb」與「xterm -e ruby script.rb」
#!/usr/bin/ruby1.9.1
require 'coderay'
language = "auto";
if(ARGV.length > 0)
language = ARGV[0];
end
print("Using language: #{language} \n");
codeToHighlight = `xsel --clipboard`
highlightedCode = CodeRay.scan(codeToHighlight, language.intern()).div
IO.popen("xsel --clipboard", mode='w') do |io|
io.write highlightedCode
io.flush
end
奇怪的是,如果我直接在運行一個終端,它工作正常。如果我通過「xterm -e」運行它,但它不起作用。我發現另一個網站是問同樣的問題這個線程,但人沒有得到回答:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/138423
那人發現,如果他們加入在像這樣的腳本的結尾處的停頓......
10000.times do
puts ""
end
...它的工作原理。爲什麼是這樣?有沒有辦法來解決這個問題?我試着重寫腳本,以便popen返回一個IO對象,我可以手動調用close,但這沒有什麼區別。
我已經確定,無論問題是在xsel中。我試着在文件末尾添加一行(沒有瘋狂的puts「」循環),只是將突出顯示的代碼轉儲到一個文件中,而且無論運行腳本如何,它的內容都是正確的。我嘗試了xclip,它似乎可以在更多情況下工作,儘管我只能獲得主要(即中間單擊)剪貼板來處理它。當從另一個腳本調用xclip時xclip不起作用,但xclip仍然無法通過xterm -e工作。 – Matthew 2011-02-23 14:14:12