Humanity

Edit the world by your favorite way

ズボラのための Slack リマインド術

最近は簡単な TODO 管理(すぐやる事)とかに Google カレンダーじゃなく Slack のリマインド機能を使う事にしてる。 理由はいくつかあって

  • いつも見てるから気付きやすい(重要)
  • スヌーズで簡単にまたリマインドする時刻を後にズラせるの便利(ズボラ)

でも機能が貧弱なので色々工夫してるという話。 貧弱だけどシンプルなので工夫次第で色々できる。

不満

やっぱりいくつか不満はある。

now typing ... の表示の件とか

(ちなみに↓のスレッドで、各 Slack クライアントで設定できる now typing ... の設定項目について教えてもらった)

↓のような感じで運用したいので、Web から使ってるけど、軽くなったと噂のスタンドアロンアプリに乗り換えたいとか(スタンドアロンアプリは↓ができない)

あと投稿をクリックして選ぶリマインドやスヌーズの UI で、詳細な時刻を設定したいとか

誰か作って

まぁ↓なんだけどそんなに Slack クライアント作成自体に興味もないので誰か作ってほしい。

macOS のターミナルエミュレーター環境放浪記

ぶっちゃけ vim の :terminal から色々起動したりしてるのでターミナルエミュレーターに求めるものはあんまりないのだけど、

  • タブが使えること (いちおう)
    • (2019/9/19 15:20 追記) Alacritty はタブ使えません
  • 速いこと

ということでおそらく最速らしい Alacritty をインストールしてみた。

ちなみに日本語は現在使えません。

Full unicode support · Issue #306 · jwilm/alacritty · GitHub

できる人もいるみたいですが、自分の環境 (macOS デフォルトの日本語 IM) だと全く日本語を入力できませんでした。

Cannot input japanese characters · Issue #1101 · jwilm/alacritty · GitHub

あと変換中もキーを処理しちゃうので↑とか↓のキーを押すと bash に渡って直前の履歴を表示したりします。

macOS: unexpected characters get deleted when using backspace in Pinyin input method · Issue #1606 · jwilm/alacritty · GitHub

こんな感じで日本語を使うにはなかなかつらそうですが、ちょっと試した限り描画には特に問題なさそうな感じだったので、しばらく vim + eskk と併用してしのぐことにしました。 (vim 以外で日本語を入力したかったら vim のバッファで入力してからコピペすることにする) もともとターミナルで日本語をそんな入力することもないのでおそらく大丈夫なはず。

インストール

$ brew cask install alacritty

セットアップ

Ctrl + [ が Esc として認識されない

設定しない限りは自動で認識はしないっぽい。 自由度は高いとはいえ通常のターミナルエミュレーターっぽい動きをするオプションとかないんでしょうか (あったら教えてください)。

という訳で

Keyboard mappings · jwilm/alacritty Wiki · GitHub

を参考に

/Applications/Alacritty.app/Contents/MacOS/alacritty --print-events | grep KeyboardInput

してキーコードのイベントを見て、 [ がどういう名前で呼ばれているか見る。 (grep しているのは大量にイベントが出力されるので)

見るべきは Some(...) で囲まれている中身。

[2019-08-12 05:25] [INFO] glutin event: WindowEvent { window_id: WindowId(Id(140290951381856)), event: KeyboardInput { device_id: DeviceId(DeviceId), input: KeyboardInput { scancode: 59, state: Pressed, virtual_keycode: Some(LControl), modifiers: ModifiersState { shift: false, ctrl: true, alt: false, logo: false } } } }
[2019-08-12 05:25] [INFO] glutin event: WindowEvent { window_id: WindowId(Id(140290951381856)), event: KeyboardInput { device_id: DeviceId(DeviceId), input: KeyboardInput { scancode: 30, state: Pressed, virtual_keycode: Some(LBracket), modifiers: ModifiersState { shift: false, ctrl: true, alt: false, logo: false } } } }

Ctrl + [ を押すと、Control キーが押されたというイベントに加えて LBracket が押されたと書いてあるのでそれを Esc にマッピングする。

設定ファイル (自分は $HOME/.config/alacritty/alacritty.yml に追加した) の key_bindings に以下を追加。

- { key: LBracket, mods: Control, chars: "\e" }

ベンチマーク (雑)

雑すぎるベンチマークなので参考にしないでください。 ただ個人的に乗り換えるきっかけにはなりました。

bash

$ time yes | head -1000000
# iTerm
real    0m2.701s
user    0m0.280s
sys     0m0.433s

# macOS 標準の「ターミナル」
real    0m1.009s
user    0m0.254s
sys     0m0.424s

# Alacritty
real    0m0.759s
user    0m0.249s
sys     0m0.494s

ベンチマークと言いつつ環境についての記載がないってどういうこと?って言われそうですが上記の通りです許して… (単なる比較として見てください。ちゃんとやるなら出力 (描画) のみじゃなくキー入力についてとかも必要そう) 自己満足かもしれないけど自分もデフォルト以外のナウいターミナルエミュレータ使いたかった () っていうのもある。 まぁ個人のブログなので… (それを言ったら終わり)

Vim の :terminal で動かしているシェルで cd したら Vim のカレントディレクトリも変えるプラグイン

github.com

Vim:terminal で動かしているシェルで cd したら、 Vim のカレントディレクトリも同じパスに :cd するプラグインを作りました。

セットアップ

.bashrc / .zshrc に以下を追加してください。

source (sync-term-cwd.vim のリポジトリ)/macros/synctermcwd.sh

仕組み

実質これだけです。

plugin/synctermcwd.vim

function! Tapi_SyncTermCwd(_, cwd) abort
  let cd = get(g:, 'synctermcwd_cd_command', 'cd')
  execute cd a:cwd
endfunction

macros/synctermcwd.sh

cd() {
  builtin cd "$@" || return $?
  if [ "$VIM_TERMINAL" ]; then
    printf '\e]51;["call","Tapi_SyncTermCwd","%s"]\x07' "$PWD"
  fi
}

便利な設定

デフォルトだと :cd {path} を実行しますが、現在タブページのみカレントディレクトリを変えたければ以下を .vimrc に追加すればできます。

let g:synctermcwd_cd_command = 'tcd'

追記: :tcd について

:tcdVim 8.1.1218 からあるコマンドです。 現在タブページ固有のカレントディレクトリを設定する事ができます。

プラグインを作った当初は

let g:synctermcwd_cd_command = 'windo lcd'

と README にも書いていたのですが、 :windo は現在のウィンドウから移動してしまう事に気付き、 :SyncTermCwdTabLcd という Ex コマンドを実装したのですが*1

k-takata さんに :tcd があるよと教えてもらい、revert しました。 よって結局記事冒頭のシンプルな仕組みのままです。 素晴らしい… :tcd 便利すぎる…

あわせて読みたい

ちなみに sync-term-cwd.vim では :help terminal-api という機能を使っていますが、 過去も Terminal API を使った類似のプラグインとして以下があります。

tyru.hatenablog.com