vim いじり (vimrc, plugin) をよくしてた頃と同じ感じで inkdrop いじり (init.js, plugin) をよくしてる。ちょっと気になるところがあれば自分で直せるのは大きい (yak shaving) が捗る。
enter
でカーソル位置の url を開き、 <C-m>
でカーソル行のリンクを全部開くようにしてみた。正規表現はやっつけ。
keymap.cson
'.CodeMirror.vim-mode:not(.insert-mode):not(.key-buffering) textarea': 'enter': 'mycmd:open-cursor-link' 'ctrl-m': 'mycmd:open-current-line-links'
init.js
inkdrop.commands.add(document.body, "mycmd:open-cursor-link", () => { const editor = inkdrop.getActiveEditor(); const { cm } = editor; const cur = cm.getCursor(); const token = cm.getTokenAt(cur); if (token.type == "url") { open(token.string); } else if ((token.type = "string url")) { const link = token.string.replace("inkdrop://", ""); inkdrop.commands.dispatch(document.body, "core:open-note", { noteId: link, }); } }); inkdrop.commands.add(document.body, "mycmd:open-current-line-links", () => { const cm = inkdrop.getActiveEditor().cm; const cur = cm.getCursor(); const str = cm.doc.getLine(cur.line); // url parse const urlReg = new RegExp(/(http.*?)( |\)|$)/g); [...str.matchAll(urlReg)].forEach((v) => { open(v[0]); }); // inkdrop:// parse const idReg = new RegExp(/(inkdrop:\/\/.*?)( |\)|$)/g); const matches = [...str.matchAll(idReg)]; if (matches.length > 0) { inkdrop.commands.dispatch(document.body, "core:open-note", { noteId: matches[0][1].replace("inkdrop://", ""), }); } });