У меня возникла странная проблема с 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 возвращал объект ввода-вывода, и я мог вручную вызвать его, но это не имеет никакого значения.
Я определил, что независимо от проблемы, это в xsel. Я попытался добавить строку в конец файла (без сумасшедшего puts "цикла), который просто сбрасывает выделенный код в файл, и это содержимое правильно, независимо от того, _how_ Я запускаю скрипт. Я попробовал xclip вместо этого, и, похоже, он работает в большем количестве ситуаций, хотя я только что получил основной (ака, средний клик) буфер обмена для работы с ним. xclip работает при вызове из другого скрипта, где xsel не будет, но xclip все равно не работает через xterm -e. – Matthew