Sublime Forum

Command palette close and return

#1
  1. Hello. If I start editing text, command palette is closed.

What should I do to command palette closes just pressing Esc?


2. For example, I write in the command palette prvHTML. How I can back return, in the menu which appears at prv choice?

Thanks.

0 Likes

#2

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.

Example:

self.window.show_quick_panel(
			self.entries, # Entries
			self._on_select_prompt_done, # OnDone 
			sublime.MONOSPACE_FONT | sublime.KEEP_OPEN_ON_FOCUS_LOST, # Flags
			0, # SelectedIndex
			None # OnHighlighted
			)
2 Likes

#4

I copy your code in file show_quick_panel.py to my User path.

Then I tried to add command as in documentation. In PackagesUser i create file show_quick_panel.sublime-commands, its contents:

[
    { "caption": "Command Palette: show quick panel", "command": "show_quick_panel", "args": {"file": "${packages}/User/show_quick_panel.py"} }
]

I’m trying to write my caption in the command palette, but I have not shown this command.

What am I doing wrong? I’m sorry, I do not quite understand.

Thanks.

0 Likes

#5

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.

0 Likes

#6

Если я правильно понимаю, вопрос о кнопке, по нажатию которой закрывается панель Package ResourceViewer’а и открывается Command Pallete?

К сожалению, фичи “открыть предыдущую панель” в ST нет. И реализовать ее может только сам Package Resource Viewer, так как Command Pallete передает управление в команду от PRV. И уже PRV решает, как ему обрабатывать нажатия клавиш.

Соответсвенно, возможные решения:

  1. Если дело касается только Command Pallete, можно просто еще раз ее открыть (используя, например, ctrl+shift+p).
  2. Изменить код PRV

@dubeg подумал, что вопрос о том как заставить панель не закрываться при потере фокуса. :smiley:

0 Likes

#7

dubeg правильно подумал :slightly_smiling:. Это был первый вопрос (да, понимаю, что плохо задавать 2 сразу), у меня не работает код, который он выложил.

import sublime, sublime_plugin

class show_quick_panel(sublime_plugin.WindowCommand):
	def run(self, edit):
		self.window.show_quick_panel(
						self.entries, # Entries
						self._on_select_prompt_done, # OnDone
						sublime.MONOSPACE_FONT | sublime.KEEP_OPEN_ON_FOCUS_LOST, # Flags
						0, # SelectedIndex
						None # OnHighlighted
						)

В консоли такая ошибка:

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.

Go Back in command palette

Иногда в выпадающем меню такой пункт есть, а иногда его нету. Хочется, чтобы в command palette можно было всегда возвращаться назад нажатием какой-нибудь клавиши или хоткея.

Спасибо.

0 Likes

#8

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 :disappointed:).

2 .
Как я уже писал, возвращаться в целом ST не умеет :frowning:
Все зависит от авторов плагина.

P.S.
В случае PRV .. это не возврат к предыдущей панели, а кнопка поднятия на уровень выше в иерархии файловой системы. И именно поэтому, когда вы в самом верху этой самой иерархии (относительно пакета), этого элемента нет.

0 Likes

#9

dubeg разместил лишь пример того, как открыть панель, которая не закрывается при потере фокуса.


Однако незакрывающийся Command Pallete оно не откроет,

Что-то не понял ничего( . Нужно ведь, чтобы панель не закрывалась при потере фокуса.

Прошу прощения.

0 Likes

#10

Нет встроенной настройки, заставляющей Command Pallete не закрываться при потере фокуса.
Добавить такую настройку мы не можем, так как Command Pallete это не плагин, а кусок closed-source части ST.

Однако, плагины могут открывать собственные панели, используя window.show_quick_panel, и их уже можно делать фокусо-независимыми (о чем и говорил dubeg).

1 Like

#11

Спасибо в очередной раз) . Будем надеяться на лучшее. И можно проголосовать по этому вопросу: «Command Palette shouldn’t close on Sublime losing focus».

1 Like