Определить, когда документ закрыт

Я работаю над расширением Visual Studio Code, и мне нужно определить, когда какое-то окно документа закрыто. Я знаю о событии vscode.workspace.onDidCloseTextDocument, и он работает в целом.

Но если я открою файл из рабочей области через API:

vscode.workspace.openTextDocument(localPath).then(function (doc) {
    vscode.window.showTextDocument(doc, 1);
});

а затем закройте его, onDidCloseTextDocument не срабатывает как обычно. Его огонь, но через несколько минут.

Я знаю, это какая-то ошибка или VSCode так работает, но мне нужно знать, как определить, когда окно документа закрыто.

Я читал, что открываемый через API файл - это своего рода «виртуальный» файл. Так что, вероятно, это причина проблемы.


person A. Cheshirov    schedule 08.02.2018    source источник
comment
Вы проверили, обновляется ли свойство TextDocument.isClosed при закрытии TextDocument через API?   -  person HaaLeo    schedule 22.02.2018
comment
Да, я пробовал, но возвращает false, даже когда файл закрыт. Опять же, эта ошибка появляется только тогда, когда документ загружается через API. Когда документ открыт через пользовательский интерфейс, isClosed возвращает реальное состояние.   -  person A. Cheshirov    schedule 23.02.2018
comment
Не работали с документами рабочей области, но запускают ли они событие DocumentClosing непосредственно перед закрытием? Вы можете сотворить магию внутри этого события, даже если на самом деле оно не предназначено для такого использования. Если вы контролируете закрытие самостоятельно, может быть, вы могли бы положиться на проверку того, открыт ли файл (физически) или какой-нибудь другой трюк?   -  person Stacking For Heap    schedule 01.03.2018
comment
Может быть, потому, что в документации написано Note that the lifecycle of the returned document is owned by the editor and not by the extension. That means an onDidClose-event can occur at any time after opening it.?   -  person Tarun Lalwani    schedule 01.03.2018


Ответы (2)


‍‍vscode.workspace.onDidCloseTextDocument создается, когда текстовый документ удален . Чтобы добавить прослушиватель событий, когда видимый текстовый документ закрыт, используйте TextEditor в пространстве имен окна. Обратите внимание, что это событие не генерируется, когда TextEditor закрыт, но документ остается открытым в другом видимом текстовом редакторе.

Для получения дополнительной информации см. это.

person Ali Soltani    schedule 26.02.2018

к сожалению, нет возможности поймать документ близко к атм, потому что хотите верьте, хотите нет onDidCloseTextDocument срабатывает не только для закрытия файла, чтобы проверить, добавьте ниже в ur ext active

vscode.workspace.onDidCloseTextDocument((doc) => {
    console.log(doc)
})

и наблюдайте за магией в консоли.

кроме совершенно несвязанной документации

Чтобы добавить прослушиватель событий при закрытии видимого текстового документа,

используйте события TextEditor в пространстве имен окна.

нет события закрытия в пространстве имен окна https://code.visualstudio.com/api/references/vscode-api#window, возможно, я слеп, но если кто-то нашел его, пожалуйста, добавьте его сюда.

также опора isClosed в документе не является надежной, потому что на самом деле она true, когда вы открываете документ.

person ctf0    schedule 28.12.2019