Ruby 如何将TextMate中的一行发送到终端窗口中运行的irb进程?

Ruby 如何将TextMate中的一行发送到终端窗口中运行的irb进程?,ruby,macos,textmate,irb,Ruby,Macos,Textmate,Irb,我经常在一个TextMate窗口打开的情况下编码,在它旁边的终端窗口中有一个irb进程。我希望能够在TextMate中按一个键序列,它执行以下操作: 复制当前选择,如果没有,则复制当前行 将其粘贴到运行irb的最顶部终端窗口中 按enter键,以便在irb窗口中执行代码行 我在R中编写代码时使用了这种交互开发风格,并发现它非常方便。我很确定emacs和SLIME也能让你像这样工作。使用Ruby和TextMate可以吗?您必须创建一个Bundle命令和一个键盘快捷键才能做到这一点 在TextMat

我经常在一个TextMate窗口打开的情况下编码,在它旁边的终端窗口中有一个irb进程。我希望能够在TextMate中按一个键序列,它执行以下操作:

  • 复制当前选择,如果没有,则复制当前行
  • 将其粘贴到运行irb的最顶部终端窗口中
  • 按enter键,以便在irb窗口中执行代码行

  • 我在R中编写代码时使用了这种交互开发风格,并发现它非常方便。我很确定emacs和SLIME也能让你像这样工作。使用Ruby和TextMate可以吗?

    您必须创建一个Bundle命令和一个键盘快捷键才能做到这一点

  • 在TextMate中,转到捆绑包->捆绑包编辑器
  • 在我们自己的包中创建一个新命令。称之为“在终端中执行”
  • 将“保存”设置为无,将“输入”设置为所选文本,将“或”设置为行
  • 将“输出”设置为放弃
  • 在“激活”中选择你自己的快捷方式
  • 将下面的命令粘贴到“命令”框中(格式设置给我带来了麻烦)
  • 关闭捆绑包编辑器,然后选择捆绑包->捆绑包编辑器->重新加载捆绑包
  • 创建一个新文档,其中包含“放置“Hello World”行
  • 在终端中打开IRB
  • 选择刚刚在Textmate中写入的行,然后按键盘快捷键
  • 观看IRB中出现的“Hello World”
  • 命令:

    #!/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中的代码吗?这似乎很常见,知道哪里没有标准的捆绑包吗?