basyura's blog

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

inkdrop - 未完了のタスクにジャンプする

Vim plugin を入れている状態で、タスク * [ ] にジャンプする

inkdrop.commands.add(document.body, "mycmd:find-task", () => {
  const vim = inkdrop.packages.activePackages.vim.mainModule.vim;
  vim.getVimGlobalState().query = /\[ \]/;

  const el = inkdrop.getActiveEditor().cm.getWrapperElement();
  inkdrop.commands.dispatch(el, "vim:repeat-search");
});

もっといい方法がありそうだけど。

iPhone SE → iPhone 12 mini

iPhone SE

iPhone SE にしたのが 2016/05/14 で、同時に au から IIJ (BIC SIM) に乗り換え。それから今日までにバッテリー交換とディスプレイ交換を一回ずつ。 ディスプレイ交換したのはディスプレイが "少し" 浮き上がっていたからで、そろそろサポートされなくなりそうだけどもうちょっと使い倒したいと思って交換。 今回はディスプレイがモリモリに浮き上がっていたからで原因は発熱と思われる。もっと言うとドラクエウォーク起因。めちゃくちゃ発熱する。熱くはなるもののそれ以外に問題を感じなかったので特に冷やしたりもせず暑い時期に歩き回ったのがダメだった。

iPhone 12 mini

(amazon で本体は扱ってないのかな?)

iPhone 5s 以降ははサイズがでかいし高いしで SE を乗り越えながら長期間使い倒していこうと思っていたのだけど、SE 2 より 12 mini の方がサイズが小さかったので採用 (値段は高いけど・・・)。SE と同様に 5 年使うとして、バッテリ交換や修理が発生したとしてトータル 10 万とすると 1 年あたり 2 万というのは・・・ちょっと高く感じてしまうなぁ。

移行

iCloud のバックアップから戻したのとソフトウェアアップデートの発動でやや時間がかかったものの大きな問題はなく終了。SIM カードを入れ替えるだけで電話はつながったし、もろもろのアプリのログイン状態復帰は 1Password 経由で一瞬だった。困ったのは Overcast のリストがうまく同期されなかったぐらい。会社で必要な MS Authenticator は休み明けに対応が必要 (Google Authenticator は QR コード読み込むだけでかんたんに引き継げたのに)。

つかいごこち

まだよくわからないけど face ID は良さそう。 指紋認証も便利だったけど認識してくれない率が高すぎて毎回パスコード入れてたのでちょっと辛いなとは薄々思っていた。それに比べると iPhone を持ち上げるだけで済むのはかなり便利。

まとめ

ドラクエウォーク再開。

inkdrop - ウインドウタイトルをクリアする

Windows 版だとウインドウタイトルに記事のタイトルが出るようになった。チラつくのが気になるのでクリアするようにしてみる。

init.js

inkdrop.onEditorLoad(() => {
  const ele = document.querySelector(".editor-header-title-input input");
  const observer = new MutationObserver((_) => {
    setTimeout(() => {
      inkdrop.window.setTitle("");
    }, 300);
  });
  observer.observe(ele, {
    attributes: true,
  });
  setInterval(() => {
    inkdrop.window.setTitle("");
  }, 3000);
});

記事切替だけではなく編集中にもタイトルが書き換わるので定期的に実行するようにした。

inkdrop - active なノートを表示する

複数 book 運用で詳細表示してるときの状態を判定するのに queryContext だと不都合が多かったので sidebar.workspace を使うように改良。

inkdrop.commands.add(document.body, "mycmd:select-active", () => {
  const { sidebar } = inkdrop.store.getState();

  const status = "active";
  const bookId = sidebar.workspace.bookId;
  if (bookId != "") {
    inkdrop.commands.dispatch(
      document.body,
      "core:note-list-show-notes-in-book",
      { bookId, status }
    );
  } else {
    inkdrop.commands.dispatch(
      document.body,
      "core:note-list-show-notes-with-status",
      { status }
    );
  }
  inkdrop.commands.dispatch(document.body, "editor:focus");
});

inkdrop - 複数の book を使ってみる

sidebar が溢れてきた

inkdrop を使い始めて 1 年半経過。

f:id:basyura:20210523193438p:plain

タグが増えてきて Status を閉じてもスクロールバーが発生するようになったので css で消した。

.sidebar-menu::-webkit-scrollbar {
  display: none;
}

Tags の下だけスクロールバーが出せるようになるといいけど HTML 構造的にできなさそうなのでガッツリ消した。気にならなくなった。タグの / 区切りを階層構造で表現できて開閉できるようになると表示領域を圧縮できて便利そうだけど開閉の手間もあるので悩ましい。

複数 book 運用

今まで 1 book 運用をしていたのだけど、複数 book をお試し中。 book は階層構造で分類しやすいし辿りやすい点はあるけどタグで横串に見れて便利。book を行き来するのも効率悪くて悩む。

switch-notebook を使ってみたのだけど book の選択 (UI で detail を選択したときの挙動) まではできてなくて、api (command) 的にも用意されてなさそうなのでちょっと微妙。

自作 switch-notebook

しかたないので自作してみた。document.querySelectorAll などを使って画面上の要素をとって一覧表示して、選択時はその要素をクリックして画面操作を再現するゴリゴリ仕様。

keymap.cson

'ctrl-x ctrl-n': 'switch-notebook:open'

f:id:basyura:20210523193539p:plain

割と便利。fork したけど中身が全く別名で plugin 登録してもいいけどこの手の plugin の挙動は個人の趣味に左右されることが多いので悩ましい。

Active Status なノートを表示する

キーボード中心の操作をするので、アクティブなステータスを表示する際の自作コマンドも見直し。 book が選択されているかそうでないかで挙動を切り替える。

init.js

inkdrop.commands.add(document.body, "mycmd:select-active", () => {
  const { queryContext } = inkdrop.store.getState();

  if (queryContext.mode == "book") {
    inkdrop.commands.dispatch(
      document.body,
      "core:note-list-show-notes-in-book",
      {
        bookId: queryContext.bookId,
        status: "active",
      }
    );
  } else {
    inkdrop.commands.dispatch(
      document.body,
      "core:note-list-show-notes-with-status",
      {
        status: "active",
      }
    );
  }
  inkdrop.commands.dispatch(document.body, "editor:focus");
});

inkdrop.commands.add(document.body, "mycmd:select-all-notes", () => {
  const { queryContext } = inkdrop.store.getState();
  if (queryContext.mode == "book") {
    inkdrop.commands.dispatch(
      document.body,
      "core:note-list-show-notes-in-book",
      {
        bookId: queryContext.bookId,
      }
    );
  } else {
    const node = document.querySelector(".sidebar-menu-item-all-notes");
    node.querySelector(".content").click();
  }
});

keymap.cson

'ctrl-@': 'mycmd:select-active'
'ctrl-x ctrl-@': 'mycmd:select-all-notes'

まとめ

また一つ便利になった。

会社 Proxy を越えて GitHub に SSH 接続する

we will no longer accept account passwords when authenticating Git operations on GitHub.com.

8/13 までに SSH 接続にしないとダメよ (パスワード認証は通さないよ) とアナウンスがあったので仕事を放置しつつ対応。

.ssh/config の最終形。

Host github.com
  User git
  Hostname ssh.github.com
  TCPKeepAlive yes
  IdentitiesOnly yes
  Port 443
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand connect.exe -H company.proxy.com:8080 %h %p

環境変数定義。

export CONNECT_USER=my_mail@company.com
export CONNECT_PASSWORD=proxy_password

ProxyCommand で @%40 に変えた id を指定していたけど @ のままでよかった (これでドハマリ)。 毎回 Proxy のパスワードを聞かれるのも面倒なので id と一緒に環境変数に定義。 最悪 GitLab に引っ越そうかなと思っていたけど解決できて良かった。

参考にさせてもらったエントリ。

mattn.kaoriya.net