我经常使用TextMate窗口打开代码,并在与其相邻的终端窗口中进行irb处理。我希望能够在TextMate中按下一个键序列,它执行以下操作:
我在R中编码时使用了这种交互式开发方式,发现非常方便。我很确定emacs和SLIME也让你像这样工作。是否可以使用Ruby和TextMate?
答案 0 :(得分:6)
您必须创建一个Bundle Command和一个键盘快捷键才能执行此操作。
命令:
#!/usr/bin/ruby
input = STDIN.gets
`osascript << EOF
tell application "Terminal"
activate
end tell
delay 1
tell application "System Events"
keystroke "#{input.gsub('"', '\"')}"
keystroke return
end tell
EOF`
答案 1 :(得分:0)
假设您不想查看终端,而是希望结果显示在TextMate中,就像在Smalltalk工作区中一样。
本质上,您希望在文本配合中运行ruby,但是您希望在执行之间记住变量。你可以拥有它。
(感谢stef有关如何添加新命令的说明)
gem install daemons
@@hi = "Hello World"
行和@@hi + "ya"
irb服务器:
#!/usr/bin/env ruby -w
require 'rubygems'
require 'daemons'
require 'socket'
LARGE = 100000000
PIPE = "/tmp/.irbservepipe"
def kill_pipe
`rm -f #{PIPE}`
end
def respond_to(pipe)
inp = pipe.recv LARGE
inp.nil? and return
begin
out = eval(inp)
rescue Exception => e
out = e
end
pipe.send out.inspect, 0
end
def ensure_server
["EXIT", "INT", "HUP", "TERM"].each {|ea| trap( ea ) { kill_pipe }}
File.exists?(PIPE) and kill_pipe
server = UNIXServer.new(PIPE)
loop {
c = server.accept
respond_to c
c.close
}
end
Daemons.daemonize
ensure_server
命令:
#!/usr/bin/env macruby -w
require 'socket'
LARGE = 100000000
PIPE = "/tmp/.irbservepipe"
input = STDIN.read
socket = UNIXSocket.new(PIPE)
socket.send input, 0
puts socket.recv LARGE