расширение макроса не запускает команды синхронно - PullRequest
1 голос
/ 13 апреля 2020

Я хочу сделать ярлык, который может вставить текущую дату в 72 позиции строки в VScode. Сначала я поместил Курсор go в Pos 72 и использовал расширение, чтобы получить текущую дату. Но расширение настройки не дожидалось перемещения курсора, и дата появилась в текущей позиции. Кажется, что асинхронный происходит, когда запускаются макросы. Вот мой код

"addDate": [
  "cursorLineEnd",
  {"command": "type", "args": {"text": "                                                                        "}},
  "cursorLineStart",
  {"command": "cursorMove", "args": {"to": "right", "by": "character", "value": 72}},
  {"command": "type", "args": {"text": "AD"}},
  "editor.action.trimTrailingWhitespace",
  {"command": "insertDateString.insertDate"},
]

{"command": "insertDateString.insertDate"}, не ждал, когда курсор закончил и работал напрямую. Есть ли какие-либо способы, такие как «обещание ... тогда» или установка приоритетов, которые позволяют PG работать по порядку? Спасибо

1 Ответ

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

Я предлагаю использовать макрокоманду мультикоманду . Он правильно обрабатывает синхронные команды. Поэтому, используя мультикоманду, поместите это в файл settings.josn:

 "multiCommand.commands": [

   {
      "command": "multiCommand.addDate",
      "sequence": [
        "cursorLineEnd",
        {
          "command": "type", 
          "args": {   "text": "                                                                        "
          }
        },
        "cursorLineStart",
        {"command": "cursorMove", "args": {"to": "right", "by": "character", "value": 72}},
        {"command": "type", "args": {"text": "AD"}},
        "editor.action.trimTrailingWhitespace",
        {"command": "insertDateString.insertDate"}
      ]
    }
  ]

, и тогда ваше связывание клавиш будет выглядеть так:

 {
    "key": "alt+d",                  // whatever you choose
    "command": "extension.multiCommand.execute",
    "args": { "command": "multiCommand.addDate" },
    // "when": "editorTextFocus"
  },

И все работает как положено.

...