Sublime Text Plugin Открыть символ файла - PullRequest
0 голосов
/ 11 июля 2019

Я пытался выполнить команду, чтобы открыть файл в строке текстового символа.Я пытался добиться этого с помощью команды show_overlay , но она не открывается правильно, если вы попытаетесь использовать «#» в поиске.

Пример.создайте проект, содержащий файл,

app / code / community / MagicToolbox / MagicZoomPlus / Model / Observer.php :

class MagicToolbox_MagicZoomPlus_Model_Observer {
    public function fixLayoutUpdates($observer) {
    }
}

, если вы попытаетесь создатьплагин с такой командой:

class MyPluginCommand(sublime_plugin.TextCommand):
    def run(self, view):
            sublime_api.window_run_command(
                self.view.window().id(),
                'show_overlay',
                {
                    'overlay': 'goto',
                    'show_files': True,
                    'text': 'MagicToolbox/MagicZoomPlus/Model/Observer#fixLayoutUpdates'
                }
            )

он не будет отображать файл из первых рук.но если вы удалите весь текст из входных данных поиска, а затем вставите его снова MagicToolbox/MagicZoomPlus/Model/Observer#fixLayoutUpdates, он отобразит файл и выделит функцию.

Возможно, есть другой способ добиться того же.

1 Ответ

1 голос
/ 11 июля 2019

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

Как вы заметили, открытие оверлея, а затем ввод текста в виде двух действий дает желаемый эффект. Таким образом, чтобы сделать это через плагин, вам нужно сделать это в два действия:

import sublime
import sublime_plugin


class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.window().run_command("show_overlay", {
            "overlay": "goto",
            "show_files": True
        })
        self.view.window().run_command("insert", {
            "characters": "Observer#fixLayoutUpdates"
        })

Здесь мы сначала открываем наложение, а затем используем команду insert для вставки текста. Важным ключом здесь является запрос window на команду insert. Хотя insert - это TextCommand, запрос window на выполнение указывает окну переслать команду тому, что view имеет фокус ввода в этом окне, которое является областью ввода в оверлее.

Если команда, в которой вы делаете это, не изменяет выделение или содержимое файла самостоятельно, вы можете сократить это, сделав вместо этого WindowCommand и используя self.window вместо self.view.window().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...