Есть ли в любом случае возможность проверить неактивные терминалы в случае, когда arg в keybindings.json в VSCode?

#visual-studio-code #editor #vscode-keybinding

Вопрос:

Я хочу createTerminalEditor это сделать, если еще ничего не terminalEditor открыто.

Примечание: я говорю о terminalEditor том и не terminal о том .

Итак, я ищу when аргумент , в котором говорится что-то вроде editorAlreadyExists != terminalEditor , точно так же, как есть activeEditor строка из какого аса terminalEditor .

Есть ли в любом случае способ достичь этого?

Вот activeEditor пример для справки, но я хочу проверить, terminalEditor существует ли он во всех уже открытых редакторах, а не только в activeEditor .

   {
    "key": "ctrl `",
    "command": "workbench.action.createTerminalEditor",
    "when": "activeEditor != terminalEditor"
  },
 

Ответ №1:

Я вижу, что есть when пункт для:

terminalEditorFocus : истина/ложь

что, похоже, не помогло бы, за исключением того факта, что его вообще нет в списке (через Developer: Inspect Context Keys ), когда редактор терминала не открыт. Поэтому я подумал, что, возможно, есть when пункт о привязке ключей, который мог бы использовать это. Но я перепробовал все, что угодно, например, было ли оно пустым или неопределенным, или пустой строкой, или ни истинным, ни ложным и т. Д., Но ничего не сработало. Я думаю, что если ключа terminalEditorFocus не существует, то в распознаватель привязки ключей вообще ничего не доставляется, и он всегда выходит из строя.

Вы можете подать запрос с просьбой о предоставлении определенного terminalEditorExists вида when предложения.


Будет другой способ. В настоящее время существует экспериментальный api для доступа ко всем открытым вкладкам. См.Предлагаемый api. Таким образом, вы можете написать расширение, которое проверяет все открытые вкладки и запускает workbench.action.createTerminalEditor команду, если ни одна из них не является конечной. Он работает прямо сейчас в сборке Insiders, но когда он станет окончательным, я не знаю — сейчас он кажется довольно прочным. Проблема: API модели вкладки.

 const tabs = vscode.window.tabs;
const openTerminalEditor = tabs.some(tab => tab.viewId === 'terminalEditor');  // true/false
 

Затем вы можете либо установить свой собственный контекстный ключ с setContext помощью команды, либо запустить ее.