Skip to content

Commit d79de28

Browse files
authored
Merge pull request #110 from tadashi-aikawa/master
Support multi windows (yank <--> clipboard sync)
2 parents 1df6432 + 8c95b4c commit d79de28

File tree

2 files changed

+44
-28
lines changed

2 files changed

+44
-28
lines changed

main.ts

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default class VimrcPlugin extends Plugin {
4646
private editorMode: 'cm5' | 'cm6' = null;
4747
private initialized = false;
4848

49-
private lastYankBuffer = new Array<string>(0);
49+
private lastYankBuffer: string[] = [""];
5050
private lastSystemClipboard = "";
5151
private yankToSystemClipboard: boolean = false;
5252
private currentKeyChord: any = [];
@@ -92,19 +92,26 @@ export default class VimrcPlugin extends Plugin {
9292
console.log('Vimrc plugin: using CodeMirror 5 mode');
9393
}
9494

95-
this.registerDomEvent(document, 'click', () => {
96-
this.captureYankBuffer();
97-
});
98-
this.registerDomEvent(document, 'keyup', () => {
99-
this.captureYankBuffer();
100-
});
101-
this.registerDomEvent(document, 'focusin', () => {
102-
this.captureYankBuffer();
95+
await this.registerYankEvents(activeWindow)
96+
this.app.workspace.on("window-open", (workspaceWindow, w) => {
97+
this.registerYankEvents(w)
10398
})
10499

105100
this.initialized = true;
106101
}
107102

103+
registerYankEvents(win: Window) {
104+
this.registerDomEvent(win.document, 'click', () => {
105+
this.captureYankBuffer(win);
106+
});
107+
this.registerDomEvent(win.document, 'keyup', () => {
108+
this.captureYankBuffer(win);
109+
});
110+
this.registerDomEvent(win.document, 'focusin', () => {
111+
this.captureYankBuffer(win);
112+
})
113+
}
114+
108115
async onload() {
109116
await this.loadSettings();
110117
this.addSettingTab(new SettingsTab(this.app, this))
@@ -445,25 +452,34 @@ export default class VimrcPlugin extends Plugin {
445452

446453
}
447454

448-
captureYankBuffer() {
449-
if (this.yankToSystemClipboard) {
450-
let currentBuffer = this.codeMirrorVimObject.getRegisterController().getRegister('yank').keyBuffer;
451-
if (currentBuffer != this.lastYankBuffer) {
452-
if (this.lastYankBuffer.length > 0 && currentBuffer.length > 0 && currentBuffer[0]) {
453-
navigator.clipboard.writeText(currentBuffer[0]);
454-
navigator.clipboard.readText().then((value) => { this.lastSystemClipboard = value; });
455-
}
456-
this.lastYankBuffer = currentBuffer;
457-
return;
455+
async captureYankBuffer(win: Window) {
456+
if (!this.yankToSystemClipboard) {
457+
return
458+
}
459+
460+
const yankRegister = this.codeMirrorVimObject.getRegisterController().getRegister('yank')
461+
const currentYankBuffer = yankRegister.keyBuffer;
462+
463+
// yank -> clipboard
464+
const buf = currentYankBuffer[0]
465+
if (buf !== this.lastYankBuffer[0]) {
466+
await win.navigator.clipboard.writeText(buf);
467+
this.lastYankBuffer = currentYankBuffer
468+
this.lastSystemClipboard = await win.navigator.clipboard.readText()
469+
return
470+
}
471+
472+
// clipboard -> yank
473+
try {
474+
const currentClipboardText = await win.navigator.clipboard.readText()
475+
if (currentClipboardText !== this.lastSystemClipboard) {
476+
yankRegister.setText(currentClipboardText);
477+
this.lastYankBuffer = yankRegister.keyBuffer;
478+
this.lastSystemClipboard = currentClipboardText;
458479
}
459-
let currentClipboard = navigator.clipboard.readText().then((value) => {
460-
if (value != this.lastSystemClipboard) {
461-
let yankRegister = this.codeMirrorVimObject.getRegisterController().getRegister('yank')
462-
yankRegister.setText(value);
463-
this.lastYankBuffer = yankRegister.keyBuffer;
464-
this.lastSystemClipboard = value;
465-
}
466-
})
480+
} catch (e) {
481+
// XXX: Avoid "Uncaught (in promise) DOMException: Document is not focused."
482+
// XXX: It is not good but easy workaround
467483
}
468484
}
469485

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"@types/node": "^14.14.6",
1818
"codemirror": "^5.62.2",
1919
"keyboardevent-from-electron-accelerator": "*",
20-
"obsidian": "^0.12.17",
20+
"obsidian": "^0.15.3",
2121
"rollup": "^2.33.0",
2222
"tslib": "^2.0.3",
2323
"typescript": "^4.0.5"

0 commit comments

Comments
 (0)