Программирование TextMate на Ruby. Проблема с TextMate.go_to - PullRequest
3 голосов
/ 09 марта 2009

Я модифицирую пакет TextMate, хотя я начинающий в Ruby. Проблема, которую я пытаюсь решить, заключается в перемещении каретки в определенное положение после вывода команды.

В основном, что происходит, это: Я нажимаю комбинацию клавиш, которая запускает команду для фильтрации документа и вставляет текст в соответствующие места, а затем завершает работу, заменяя документ новым фильтрованным текстом.

То, что я хочу, чтобы произошло следующим, - каретка вернется на прежнее место. Я был очень счастлив, когда нашел функцию TextMate.go_to, но я могу заставить ее работать только частично. Функция:

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

Я могу поместить каретку в нужную строку, но параметр столбца не работает. Я пытался сместить их и даже выполнить функцию только с параметром столбца, но не повезло. Я также пытался использовать жестко запрограммированное целое число, но параметр positionX печатает правильный индекс строки, поэтому я сомневаюсь, что там что-то есть.

Это - единственная документация, которую я нашел по этому методу, но я взглянул на textmate.rb и, на мой взгляд, кажется, что я использую его правильно.

Я знаю, что этого можно достичь с помощью макросов, но я хочу избежать этого, если это возможно. Я также знаю, что вы можете использовать маркеры, если выберете «Вставить как фрагмент», но тогда мне придется сначала очистить документ, и я не совсем понял, как это сделать, не используя опцию «Заменить документ». Кто-нибудь? * * 1016

1 Ответ

4 голосов
/ 09 марта 2009

Давайте посмотрим на исходный код привязок:

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

Скорее всего, привязка устанавливает URL-адрес txmt: // и вызывает его в оболочке.

Итак, первое, что нужно сделать, это создать открытый URL-адрес и ввести его в Terminal / ваш браузер, чтобы увидеть, уважает ли TextMate параметр столбца. Если это работает, то, возможно, есть ошибка в реализации вашей версии Textmate.go_to.

...