2009-03-09 4 views
3

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

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

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

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

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

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

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

ответ

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 

Вместо hackishly, обязательные устанавливает txmt: // URL и призывает открыть на нем в оболочке.

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

+0

Это похоже, да. Он отлично открывается с терминала и с другой команды TM. Кажется, что в скрипте есть что-то, что предотвращает установку столбца должным образом. Мне придется расследовать. – Martin

Смежные вопросы