VSCodeで「初めて保存操作されるまでは実際に保存しない」的な処理はできる?
なのでたとえば[まだ作成したことのないファイル名]に対してブラケット内でopenしても、
https://gyazo.com/82bf1f6d38539cf56f8222d2cd80d7ec
この時点ではまだファイルは存在していない
https://gyazo.com/549f9ba348da6768b254e1590fbdb764
書き込んでるだけでもまだ保存されてない
https://gyazo.com/07fa2e421f26f0f19b819fb3f259baec
上書き保存操作とかすると、はじめて保存される
これをVSCodeでもやりたいんですけど、is it possible?
workspace.openTextDocument?
https://gyazo.com/99dd894eb0cf6dc0b5c82bd0e9b41f5a
こっちでやってみるしかないか
✅
未存在のオープン、できそう
code:ts
async function smartopenIfDoesnotExists(filepath: string){
const smartopen = vscode.Uri.file(filepath).with({ scheme: 'untitled' })
const promise = vscode.workspace.openTextDocument(smartopen);
return promise.then(
vscode.window.showTextDocument,
() => {
// 既存ファイルだった場合はこっちに来る(失敗扱いになる)
return false;
}
);
}
ただ既存ファイルに対して行うとエラーになる
rejected promise not handled within 1 second: Error: cannot open untitled:/d%3A/work/github/stakiran_sub/vscode-scb/language-feature/test2.scb. Detail: file already exists
✅
既存の場合にファイル開かれないんだけど?sta.icon
code:ts
async function openIfExists(filepath: string){
const uri = vscode.Uri.file(filepath);
const promise = vscode.workspace.openTextDocument(uri);
return promise.then(
(resolved) => {
console.log(resolved);
return true;
},
() => {
return false;
}
);
// workbench.action.files.openFile
}
ぐえ、openFileってそっちかい
https://gyazo.com/5d153f26be1cab8307b9ae7a2684f9eb
なんか opentextdocument の後に show が必要らしいよ?
できた
code:ts
async function openExistingFile(filepath: string){
const uri = vscode.Uri.file(filepath);
const textdocument = await vscode.workspace.openTextDocument(uri);
await vscode.window.showTextDocument(textdocument);
}
ただしこれ実行前に未存在チェックなど他のパターンが全部済んでること
あとは未存在開いたあと、閉じたいときにdialog入るのがウザイ件
諦めるかsta.icon
閉じたいときは alt + w、tab、space でダイアログのdon't saveを素早く選べばいい
そんな頻出する操作じゃないから許容