Ruby 如何将TextMate中的一行发送到终端窗口中运行的irb进程?
我经常在一个TextMate窗口打开的情况下编码,在它旁边的终端窗口中有一个irb进程。我希望能够在TextMate中按一个键序列,它执行以下操作:Ruby 如何将TextMate中的一行发送到终端窗口中运行的irb进程?,ruby,macos,textmate,irb,Ruby,Macos,Textmate,Irb,我经常在一个TextMate窗口打开的情况下编码,在它旁边的终端窗口中有一个irb进程。我希望能够在TextMate中按一个键序列,它执行以下操作: 复制当前选择,如果没有,则复制当前行 将其粘贴到运行irb的最顶部终端窗口中 按enter键,以便在irb窗口中执行代码行 我在R中编写代码时使用了这种交互开发风格,并发现它非常方便。我很确定emacs和SLIME也能让你像这样工作。使用Ruby和TextMate可以吗?您必须创建一个Bundle命令和一个键盘快捷键才能做到这一点 在TextMat
我在R中编写代码时使用了这种交互开发风格,并发现它非常方便。我很确定emacs和SLIME也能让你像这样工作。使用Ruby和TextMate可以吗?您必须创建一个Bundle命令和一个键盘快捷键才能做到这一点
#!/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`
#!/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
!/usr/bin/ruby
input=STDIN.get
`osascript假设您不想查看终端,而是希望结果显示在TextMate中,就像在Smalltalk工作区中一样
本质上,您希望在text mate中运行ruby,但您希望在执行之间记住变量。您可以这样做
(感谢提供有关如何添加新命令的说明)
运行gem安装守护进程
运行irb服务器。文件如下所示
在TextMate中,转到捆绑包->捆绑包编辑器
在我们自己的包中创建一个新命令。将其称为“在终端中执行”
将“保存”设置为无,将“输入”设置为所选文本,将“或”设置为行
将“输出”设置为放弃
在“激活”中选择您自己的快捷方式。我选择了苹果
将下面的命令粘贴到“命令”框中(格式设置给我带来了麻烦)
关闭捆绑包编辑器,然后选择捆绑包->捆绑包编辑器->重新加载捆绑包
创建一个包含以下行的新文档:@@hi=“Hello World”
和@@hi+“ya”
选择刚刚用Textmate编写的第一行,然后按键盘快捷键
对第二行执行相同的操作
观看文本mate中出现的“hiya”
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/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`
#!/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
难道不需要有一种方法来运行Textmate中的代码吗?这似乎很常见,知道哪里没有标准的捆绑包吗?