hogashi.*

日記から何から

 ブレインスリープ ピロー | BRAIN SLEEP OFFICIAL SITE を実店舗に見に行った。(金額が)高い枕を実際に試せるのはありがたい。ストレートネック直す用枕とかも教えてもらって気になったのだけど、寝返りが少し難しくなる感じで心配は心配だったので、結局普通のを買った(少ししたら届く)。店員さんから色々話を聞けたのがよくて、つぶれてきたら40〜50度のお湯で戻せるのだけど50度以上でやるとふにゃふにゃになるので注意、とか教えてもらえた。寝具を長いスパンで少しずつ買い替えるフェーズにある。

 よしなに貼り付けるChrome拡張機能Haruyoshiを公開しました - hogashi.* をやった後、まったくメンテのモチベがない。全部 Claude に書かせたらコードの詳細がわからないので一から読むことになるのだけど、全然読む気にならない、 issue 立てたら勝手に直しておいてほしいと思う。
 こうならずにうまく勉強の機会とするには歯を食いしばってやるしかないのか考えたい。 vibe coding はどうやったら面白くなるのか?

よしなに貼り付けるChrome拡張機能Haruyoshiを公開しました

 Chrome 拡張機能 Haruyoshi を公開しました。よしなに貼ることができます。まだ試しに実装した程度なので自己責任のもとお使いください (なんか変だったら消してください) 。

chromewebstore.google.com

 URL とタイトルをリッチテキストでコピーしたあとの、各サイトでの貼り付けの形式を設定できます。例えば、 MDN Web Docs を貼り付けるとき:

  • GitHub では [MDN Web Docs](https://developer.mozilla.org/ja/) で貼り付ける
  • はてなブログでは [https://developer.mozilla.org/ja/:title=MDN Web Docs] で貼り付ける
  • Cosense では [MDN Web Docs https://developer.mozilla.org/ja/] で貼り付ける

……とかを設定しておくという意味。 [{{title}}]({{url}}) みたいなテンプレートを書けるので、好きな形式にもできます ([{{title}} - {{url}}]({{url}}) とか URL: {{url}} とか) 。
 リッチテキストでコピー、の部分は cocopy - Chrome Web Store などで各自頼みます、という姿勢です。

設定画面

 cocopy を使うときにやっている「各サイト向けの形式でコピーする」から連想して、「貼り付けるときに勝手に各サイト向けの形式で貼り付けられる」はできるのか? を試したくてつくりました。勢いで Claude に書かせたところなんとなくできあがったので公開してみました。

 ただ、今試したらはてなブログの貼り付けモーダルが出なくなるようでした。たぶん貼り付けイベントを遮って色々やってるせいだと思うんだけど、ちょっと直さないといけなそう。全体的に Claude に書かせているせいで実装の詳細を知らない状態なので、ちゃんとコードを見ないと詳しいことがわからなくて、こんなことではコードを書く体力も勉強をする体力も失われていくので、なんかうまく知識を吸収したい。

 祖父母のあたりの方言に"よいじゃねえ"があって割と好き。大変だ、難儀だ、骨が折れる、のような意味合いで"よいじゃねえな"などと使われる(たしか)。おそらく"容易でない"の訛りなところが意外と堅い言葉で好き。イントネーションは"よ↓い↑じゃ↑ね↓え↓"で、標準語で"容易じゃない"、と言ったときと同じはず。

Slackで検索結果のソート順を記憶する設定がある

 Slack では任意のキーワードでワークスペース内を検索ができ、その結果のソート順はデフォルトで Most relevant になっている。

Slack の検索画面

 しかし個人的にはもっとも最近のものから順番に見ることが多いので、 Newest になっていてほしい (検索するごとに変えるのは面倒)。

 これは設定を変えることで解決する。 Slack の設定画面の Advanced タブに、検索結果のソート順を記憶する設定がある ("Most relevant" を "Latest sort selection" に変える)。これで、最後に検索したときに使ったソート順が次回以降そのまま使われるので、 Newest のまま検索しまくることができる。

Slack の設定画面の Advanced タブに検索結果のソート順を記憶する設定がある

 ちょっと前までこういう仕様で、変わった途端に気づいて、困る〜と思って /feedback から元に戻せないか問い合わせたところ、設定できるよ! とすぐ教えてもらえた。問い合わせへの返答が早いのも、元の仕様に戻す余地も残しておいてくれるのもありがたい。

Bashでスラッシュ単位で削除できるようにするにはunix-filename-ruboutを使う

blog.3qe.us

 Bash で同じことをできないか見たけど、 $WORDCHARS はなかった*1。かわりに、 unix-filename-rubout という readline command があるので、それを好きな keyseq に設定すれば、スラッシュと空白を区切りとして削除ができるようになる*2

bind \\C-n:unix-filename-rubout

 unix-filename-rubout の説明を引用するとこう:

unix-word-rubout (C-w)
Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.
unix-filename-rubout ()
Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring.
https://www.gnu.org/software/bash/manual/bash.html#Commands-For-Killing

 man bash を見ると色んなコマンドが準備されていることがわかる。 Killing And Yanking が文字の削除とコピペの章で、他にも色々ある。デフォルトでは bind されていないものが多いので、必要に応じて付け替えるとよさそう。 https://www.gnu.org/software/bash/manual/bash.html#Bindable-Readline-Commands

 ちゃんと知らなかったけど、 kill-ring というのが用意されていて、 unix-word-rubout したときなどにはそこに削除されたテキストが入る。最後に入ったものを貼り付けるには C-y の yank を使う。その後に M-y の yank-pop を使うと、 (ring という名前通り) 過去に kill-ring に入れたものを順繰りに貼り付け直すことができる。

3つ unix-filename-rubout してから yank して yank-pop してる様子

 ところで C-w をただ bind で上書きしようとしてもうまくいかない。これは stty というやつの設定があるためらしい。

stackoverflow.com

 見るとたしかに ^Wwerase にあたっている (word erase ということっぽい?)。これを undef に上書きすれば、あとは Bash 側で bind で上書きして動くようになる。

$ stty -a
speed 9600 baud; 32 rows; 150 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
        -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
$ stty werase undef
$ stty -a
(略)
        stop = ^S; susp = ^Z; time = 0; werase = <undef>;
$ bind \\C-w:unix-filename-rubout

 stty は man stty によれば「set the options for a terminal device interface」 とのことで、(仮想)端末の入出力の設定ができる、というふんわりした理解だけしている (細かい設定が色々ありそうなんだけどあんまりわかってない)。 stty お前だったのか、いつも C-d で eof を送出してくれていたのは、という感じ。

*1:なので好きな文字を区切りに設定することはできなそう

*2:man bash の bind コマンドのところを参照 https://www.gnu.org/software/bash/manual/bash.html#index-bind