mirror of
https://github.com/notion-enhancer/notion-enhancer.git
synced 2025-04-11 07:49:02 +00:00
add tab keybinds: alt+1...9 tab select, ctrl+t new tab, ctrl+w close tab
need to remove ctrl+w from the window menu so it doesn't override and close the whole window
This commit is contained in:
parent
a26914fdbe
commit
6a9f9bf79a
@ -16,18 +16,41 @@ module.exports = (store, __exports) => {
|
||||
)}/app/helpers/notionIpc.js`),
|
||||
{ toKeyEvent } = require('keyboardevent-from-electron-accelerator');
|
||||
|
||||
// additional hotkeys
|
||||
document.defaultView.addEventListener('keyup', (event) => {
|
||||
// additional hotkeys
|
||||
if (event.code === 'F5') location.reload();
|
||||
if (
|
||||
!(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled
|
||||
) {
|
||||
// open menu on hotkey toggle
|
||||
const hotkey = toKeyEvent(store().menu_toggle);
|
||||
// open menu on hotkey toggle
|
||||
const hotkey = toKeyEvent(store().menu_toggle);
|
||||
let triggered = true;
|
||||
for (let prop in hotkey)
|
||||
if (hotkey[prop] !== event[prop]) triggered = false;
|
||||
if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
|
||||
if ((store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled) {
|
||||
// switch between tabs via key modifier
|
||||
const select_tab_modifier = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier
|
||||
);
|
||||
let triggered = true;
|
||||
for (let prop in hotkey)
|
||||
if (hotkey[prop] !== event[prop]) triggered = false;
|
||||
if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
|
||||
for (let prop in select_tab_modifier)
|
||||
if (select_tab_modifier[prop] !== event[prop]) triggered = false;
|
||||
if (triggered && [1, 2, 3, 4, 5, 6, 7, 8, 9].includes(+event.key))
|
||||
electron.ipcRenderer.sendToHost('enhancer:select-tab', event.key);
|
||||
// create/close tab keybindings
|
||||
const new_tab_keybinding = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').new_tab
|
||||
);
|
||||
triggered = true;
|
||||
for (let prop in new_tab_keybinding)
|
||||
if (new_tab_keybinding[prop] !== event[prop]) triggered = false;
|
||||
if (triggered) electron.ipcRenderer.sendToHost('enhancer:new-tab');
|
||||
const close_tab_keybinding = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').close_tab
|
||||
);
|
||||
triggered = true;
|
||||
for (let prop in close_tab_keybinding)
|
||||
if (close_tab_keybinding[prop] !== event[prop]) triggered = false;
|
||||
console.log(triggered, event);
|
||||
if (triggered) electron.ipcRenderer.sendToHost('enhancer:close-tab');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -52,18 +52,6 @@ module.exports = (store, __exports) => {
|
||||
},
|
||||
...rect,
|
||||
});
|
||||
electron.session
|
||||
.fromPartition('persist:notion')
|
||||
.webRequest.onHeadersReceived((details, callback) => {
|
||||
callback({
|
||||
responseHeaders: {
|
||||
...details.responseHeaders,
|
||||
'Content-Security-Policy': [
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' enhancement: https://gist.github.com https://apis.google.com https://api.amplitude.com https://widget.intercom.io https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so https://checkout.stripe.com https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com https://cdn.syndication.twimg.com; connect-src 'self' https://msgstore.www.notion.so wss://msgstore.www.notion.so https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io; font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com; img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com; style-src 'self' 'unsafe-inline' enhancement: https://cdnjs.cloudflare.com https://github.githubassets.com https://platform.twitter.com https://ton.twimg.com; frame-src https: http:; media-src https: http:",
|
||||
],
|
||||
},
|
||||
});
|
||||
});
|
||||
window.once('ready-to-show', function () {
|
||||
if (
|
||||
!store().openhidden ||
|
||||
|
@ -115,6 +115,33 @@ module.exports = (store, __exports) => {
|
||||
from[1].classList.remove('slideIn');
|
||||
this.$dragging = null;
|
||||
});
|
||||
document.addEventListener('keyup', (event) => {
|
||||
// switch between tabs via key modifier
|
||||
const select_tab_modifier = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier
|
||||
);
|
||||
let triggered = true;
|
||||
for (let prop in select_tab_modifier)
|
||||
if (select_tab_modifier[prop] !== event[prop]) triggered = false;
|
||||
if (triggered && [1, 2, 3, 4, 5, 6, 7, 8, 9].includes(+event.key))
|
||||
this.selectTab(event.key);
|
||||
// create/close tab keybindings
|
||||
const new_tab_keybinding = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').new_tab
|
||||
);
|
||||
triggered = true;
|
||||
for (let prop in new_tab_keybinding)
|
||||
if (new_tab_keybinding[prop] !== event[prop]) triggered = false;
|
||||
if (triggered) this.newTab();
|
||||
const close_tab_keybinding = toKeyEvent(
|
||||
store('e1692c29-475e-437b-b7ff-3eee872e1a42').close_tab
|
||||
);
|
||||
triggered = true;
|
||||
for (let prop in close_tab_keybinding)
|
||||
if (close_tab_keybinding[prop] !== event[prop]) triggered = false;
|
||||
console.log(triggered, event);
|
||||
if (triggered) this.closeTab(this.views.current.id);
|
||||
});
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@ -192,6 +219,7 @@ module.exports = (store, __exports) => {
|
||||
? idToNotionURL(store().default_page)
|
||||
: this.views.current.$el().src
|
||||
);
|
||||
this.views.html[id].getWebContents().openDevTools();
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -228,24 +256,50 @@ module.exports = (store, __exports) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
selectTab(num) {
|
||||
num = +num;
|
||||
if (num == 9) {
|
||||
document
|
||||
.querySelector('#tabs')
|
||||
.children[
|
||||
document.querySelector('#tabs').children.length - 2
|
||||
].click();
|
||||
} else if (
|
||||
document.querySelector('#tabs').children[num - 1] &&
|
||||
document.querySelector('#tabs').children.length > num
|
||||
) {
|
||||
document.querySelector('#tabs').children[num - 1].click();
|
||||
}
|
||||
}
|
||||
|
||||
communicateWithView(event) {
|
||||
if (event.channel === 'enhancer:set-tab-theme') {
|
||||
for (const style of event.args[0])
|
||||
document.body.style.setProperty(style[0], style[1]);
|
||||
}
|
||||
if (
|
||||
event.channel === 'enhancer:set-tab-title' &&
|
||||
this.views.tabs[event.target.id]
|
||||
) {
|
||||
this.views.tabs[event.target.id].children[0].innerText =
|
||||
event.args[0];
|
||||
const electronWindow = electron.remote.getCurrentWindow();
|
||||
if (
|
||||
event.target.id == this.views.current.id &&
|
||||
electronWindow.getTitle() !== event.args[0]
|
||||
)
|
||||
electronWindow.setTitle(event.args[0]);
|
||||
switch (event.channel) {
|
||||
case 'enhancer:set-tab-theme':
|
||||
for (const style of event.args[0])
|
||||
document.body.style.setProperty(style[0], style[1]);
|
||||
break;
|
||||
case 'enhancer:set-tab-title':
|
||||
if (this.views.tabs[event.target.id]) {
|
||||
this.views.tabs[event.target.id].children[0].innerText =
|
||||
event.args[0];
|
||||
const electronWindow = electron.remote.getCurrentWindow();
|
||||
if (
|
||||
event.target.id == this.views.current.id &&
|
||||
electronWindow.getTitle() !== event.args[0]
|
||||
)
|
||||
electronWindow.setTitle(event.args[0]);
|
||||
}
|
||||
break;
|
||||
case 'enhancer:select-tab':
|
||||
this.selectTab(event.args[0]);
|
||||
break;
|
||||
case 'enhancer:new-tab':
|
||||
this.newTab();
|
||||
break;
|
||||
case 'enhancer:close-tab':
|
||||
if (event.target.id == this.views.current.id)
|
||||
this.closeTab(+event.target.id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
startSearch(isPeekView) {
|
||||
|
@ -16,4 +16,24 @@ module.exports = {
|
||||
desc: 'have multiple notion pages open in a single window.',
|
||||
version: '0.1.0',
|
||||
author: 'dragonwocky',
|
||||
options: [
|
||||
{
|
||||
key: 'select_modifier',
|
||||
label: 'tab select modifier (key+1, +2, +3, ... +9):',
|
||||
type: 'select',
|
||||
value: ['Alt', 'Command', 'Control', 'Shift', 'Super'],
|
||||
},
|
||||
{
|
||||
key: 'new_tab',
|
||||
label: 'new tab keybinding:',
|
||||
type: 'input',
|
||||
value: 'CommandOrControl+T',
|
||||
},
|
||||
{
|
||||
key: 'close_tab',
|
||||
label: 'close tab keybinding:',
|
||||
type: 'input',
|
||||
value: 'CommandOrControl+W',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user