在Ruby中编程TextMate。 TextMate.go_to的问题

时间:2009-03-09 11:46:53

标签: ruby textmate textmatebundles

即使我是Ruby的初学者,我也在修改TextMate包。我试图解决的问题是在命令输出后将插入符移动到某个位置的问题。

基本上会发生这样的事情: 我点击一个键组合,触发一个命令来过滤文档并在相关位置插入文本,然后退出并用新的过滤文本替换文档。

想要接下来发生的事情是插入符号移回原来的位置。当我找到TextMate.go_to函数时,我感到非常高兴,但我只能部分工作。功能:

positionY = ENV['TM_LINE_NUMBER']
positionX = ENV['TM_LINE_INDEX']
...
TextMate.go_to :line => positionY, :column => positionX; #column no worky

我可以将插入符号放到正确的行,但是列参数不起作用。我试过改变它们,甚至只用列参数来做功能,但没有运气。我也试过一个硬编码整数,但是positionX参数打印出正确的行索引,所以我怀疑那里有什么。

This是我在这个方法上找到的唯一文档,但我看了一下textmate.rb和我未经训练的眼睛,看来我正在使用它。

我知道这可以通过宏实现,但我希望尽可能避免这种情况。 我也知道你可以使用标记,如果你选择“插入片段”,但我必须首先清除文档,我还没有真正弄清楚如何不使用“替换文档”选项。 任何人吗?

1 个答案:

答案 0 :(得分:4)

让我们看一下绑定的源代码:

def go_to(options = {})
  default_line = options.has_key?(:file) ? 1 : ENV['TM_LINE_NUMBER']
  options = {:file => ENV['TM_FILEPATH'], :line => default_line, :column => 1}.merge(options)
  if options[:file]
    `open "txmt://open?url=file://#{e_url options[:file]}&line=#{options[:line]}&column=#{options[:column]}"`
  else
    `open "txmt://open?line=#{options[:line]}&column=#{options[:column]}"`
  end
end

相反,绑定设置了一个txmt:// URL并在shell中调用open。

所以要做的第一件事就是构建一个打开的URL并在Terminal /您的浏览器中键入它以查看TextMate是否尊重列参数。如果这样可行,那么您的版本的Textmate.go_to实现中可能存在错误。