basyura's blog

あしたになったらほんきだす。

inkdrop いじり

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://", ""),
    });
  }
});