Могу ли я условно взять на себя привязку ключа в расширении vscode? - PullRequest
1 голос
/ 18 апреля 2020

Я работаю с синтаксисом, который обрабатывает комментарии не так, как большинство языков. Это BASI C, что означает, что переключение комментариев происходит с:

10 PRINT "Hi"

На

10 REM PRINT "Hi"

Так что в настоящее время я использовал следующий (тип) код:

// register on vscode's default comment toggle
vscode.commands.registerCommand('editor.action.commentLine', () => {
  if (vscode.window.activeTextEditor.document.languageId !== 'nextbasic') {
    // if this isn't our language give control back…?
    return;
  }

  // … handle my own bespoke comment method
})

Проблема, с которой я столкнулся, заключается в том, что после активации расширения переключение всех комментариев проходит через мой код, а ранний оператор return просто приводит к тому, что комментарии вообще не работают (за пределами мой nextbasic язык).

Кто-нибудь знает, есть ли способ сказать: пусть оригинал command.action.commentLine справится с этим, если язык не соответствует?

1 Ответ

0 голосов
/ 20 апреля 2020

Я думаю, что более разумным решением было бы создать команду с другим идентификатором и либо попросить пользователей добавить для нее привязку клавиш, либо использовать contributes.keybindings в package.json. Эта привязка клавиш должна иметь условие when, которое проверяет идентификатор активного языка.

"contributes": {
    "keybindings": [
        {
            "command": "myExtension.commentLine",
            "key": "ctrl+oem_2",
            "when": "editorLangId == 'nextbasic'"
        }
    ]
}

Обратите внимание, что это не учитывает пользователей, которые настроили привязку клавиш для встроенной команды commentLine.

Кроме этого, вы можете прослушивать onDidChangeActiveEditor события и динамически отменять регистрацию / регистрировать вашу команду в зависимости от идентификатора языка (вы можете отменить регистрацию с помощью Disposable, который возвращается при регистрации). Я не уверен, что встроенная команда восстанавливается после отмены регистрации, поскольку регистрация команды с идентификатором, который уже существует, является чем-то вроде хака.

...