Indeed, the command palette will always close itself when it loses focus, UNLESS you create a window command that calls show_quick_panel with the flag keep_open_on_focus_lost set.
I’ll try to explain, but we may need your Russian friend again. My previous code was not a command itself, so it didn’t work.
1. Define a window command.
Here’s an example .py file that defines the command useless_cmd.
import sublime
import sublime_plugin
class UselessCmd(sublime_plugin.WindowCommand):
def run(self):
print('haha')
2. Define a command palette entry.
In that case, your code was mostly good, but it showed a few misunderstandings.
[
{ "caption": "My Useless Command", "command": "useless_cmd" }
]
Since my command doesn’t take in arguments in the .py file, you don’t need to specify arguments in the command palette entry.
Now, you’ll have to call show_quick_panel from within the run function of the command. If you simply copy and paste my code, you will have to fix the errors it contains.
Если я правильно понимаю, вопрос о кнопке, по нажатию которой закрывается панель Package ResourceViewer’а и открывается Command Pallete?
К сожалению, фичи “открыть предыдущую панель” в ST нет. И реализовать ее может только сам Package Resource Viewer, так как Command Pallete передает управление в команду от PRV. И уже PRV решает, как ему обрабатывать нажатия клавиш.
Соответсвенно, возможные решения:
Если дело касается только Command Pallete, можно просто еще раз ее открыть (используя, например, ctrl+shift+p).
Изменить код PRV
@dubeg подумал, что вопрос о том как заставить панель не закрываться при потере фокуса.
Traceback (most recent call last):
File "E:\Sublime Text 3\sublime_plugin.py", line 553, in run_
return self.run()
TypeError: run() missing 1 required positional argument: 'edit'
2. Вопрос, как возвращаться назад в целом, когда работаешь в command palette.
Иногда в выпадающем меню такой пункт есть, а иногда его нету. Хочется, чтобы в command palette можно было всегда возвращаться назад нажатием какой-нибудь клавиши или хоткея.
dubeg разместил лишь пример того, как открыть панель, которая не закрывается при потере фокуса.
Вот исправленная версия его примера:
import sublime, sublime_plugin
class show_quick_panel(sublime_plugin.WindowCommand):
def run(self): # Убрал параметр edit. Он есть только у TextCommand
self.window.show_quick_panel(
["test", "hello"], # Добавил пример поля entries
None, # on_done не обрабатывать
sublime.KEEP_OPEN_ON_FOCUS_LOST # Сделал шрифт не моноширинным
# Убрал лишние аргументы (они нам не пригодятся)
)
Однако незакрывающийся Command Pallete оно не откроет, это, насколько мне известно, невозможно, так как он имплементирован в не-питонной части ST (а значит поменять его нельзя т.к. closed-source ).
2 .
Как я уже писал, возвращаться в целом ST не умеет
Все зависит от авторов плагина.
P.S.
В случае PRV .. это не возврат к предыдущей панели, а кнопка поднятия на уровень выше в иерархии файловой системы. И именно поэтому, когда вы в самом верху этой самой иерархии (относительно пакета), этого элемента нет.
Нет встроенной настройки, заставляющей Command Pallete не закрываться при потере фокуса.
Добавить такую настройку мы не можем, так как Command Pallete это не плагин, а кусок closed-source части ST.
Однако, плагины могут открывать собственные панели, используя window.show_quick_panel, и их уже можно делать фокусо-независимыми (о чем и говорил dubeg).