ズズズなブログ

はてブロ出戻り組です〜

embark-exportのバッファをテキストで出力する

今までぜんぜん慣れる努力をしてなかったembarkをちょっと使ってみることにした。

で、vertico + consultでemacsのfaceとかをリストに出したら、適当に絞り込んでembark-exportすると、なぜかカスタマイズ用のバッファが作られてしまう。

このバッファを使うと絞り込んだfaceの設定を確認したり変更できたりするんだけど、今はそんなのじゃなくて、単純にface名のリストが欲しいんですよってなる。

というわけでembark.elのソースを見ると、embark-exporters-alistというのを発見。どうやら、これでエクスポートする対象によって挙動をかえてるみたい。

ファイル以外のときは見たままのテキストでエクスポートしてほしいので、以下のように上書きする。

(use-package embark
  :custom
  (embark-exporters-alist '(;; (buffer . embark-export-ibuffer)
                            (file . embark-export-dired)
                            ;; (package . embark-export-list-packages)
                            ;; (bookmark . embark-export-bookmarks)
                            ;; (variable . embark-export-customize-variable)
                            ;; (face . embark-export-customize-face)
                            ;; (symbol . embark-export-apropos)
                            ;; (minor-mode . embark-export-apropos)
                            ;; (function . embark-export-apropos)
                            ;; (command . embark-export-apropos)
                            (t . embark-collect)))
)

まあ、propertizeされてるからプレーンテキストとは違うけど、これでやりたいことはできる。


にしても、あのEmacsのカスタマイズモードには何年経っても慣れない。

あれを初めて見たときは、「GUIを自動生成するなんてEmacsはやっぱスゲーな、おい!」とか思ったけど、実際に使えと言われると困ってしまうな。

慣れる努力か。難しいもんだ。

end-of-bufferとかでミニバッファにいちいちメッセージ出されるのがウザい

リンク:https://emacs.stackexchange.com/questions/10932/how-do-you-disable-the-buffer-end-beginning-warnings-in-the-minibuffer

evil使ってるから、ちょっといじって以下のように。

github.com

ていうか、こういうの前にも仕込んだ気がする…。

けど、ま、そのうちリファクタリングするか。

elispでブロックコメント

たとえば、Cで

/*
    comment
*/

とするところをelispでどうやるか。

結論:ブラケット[]で囲む(と一応できる)。

リンク:elisp - How can I create block (multiline) comments in Lisp code? - Emacs Stack Exchange

以上。


以下は補足というか注意事項。

まあ、elispにブロックコメントがないというのは昔から知られている。

じゃあ、一時的にコメントアウトして動作を確認したいときとかどうするのかというとM-x comment-regionとかやればええやん、というのが通説である。

じゃあなんでブラケットで囲むのが一般的でないのかというと、ちょっと問題があってそれほど便利なわけでもないからだと思う。

たとえば、下のfoo関数を評価してM-x fooしてもcomment!はエコーされない。これは意図通り。

(defun foo ()
  (interactive)
  (message "foo")

  [
   (message "comment!")
   ]

)

でも、シンタックスハイライトでコメントの色がついたりしないから、正直つかいにくい。あと、インデントもなんか変。

参考にしたリンク先によると、「ブラケットで囲んだものは、elispではベクタ(配列っぽいやつ)として扱われて、ベクタの中身は評価されない」という習性を利用してるだけらしいので、これは当然ではある。

ベクタを書くためのブラケットを変な使い方してる、いわゆるバッドノウハウなのであまり人に勧められないんだろう。でもまとりあえず手数を減らすには便利なこともあると思う。

ところで、common lisp#| ... |#でブロックコメントできるのに、なんでelispにはないのかと昔から思ってた。

そこで、21世紀になって20年以上経った今ならもしや…と思って

(require 'cl-lib)

してみたけど、やっぱり#| ... |#は構文エラーになるので、今もelispにはブロックコメントがない模様。

verticoの補完を見直し

Emacsのverticoの補完の挙動がイマイチしっくりこない。

bashの補完みたいにTAB押したら候補の共通部分の終わりまでズバッと入力してほしい。

公式のREADMEをよく読むと、どうすればいいか書いてあった。

https://github.com/minad/vertico?tab=readme-ov-file#completion-styles-and-tab-completion

The orderless completion style does not support expansion of a common candidate prefix, as supported by shells or the basic default completion system. The reason is that the Orderless input string is usually not a prefix. In order to support completing prefixes, combine orderless with substring in your completion-styles configuration.

orderless補完スタイルは、シェルや基本的なデフォルト補完システムでサポートされているような、共通の候補接頭辞の展開をサポートしていません。その理由は、orderless の入力文字列は通常接頭辞ではないからです。接頭辞の補完をサポートするには、補完スタイルの設定で orderless を substring と組み合わせます。

というわけで、そこの例を参考に以下のようにしたらうまく行った。

(use-package vertico
  :config
  (setq completion-styles '(substring orderless basic))

  :bind (:map vertico-map
           ("TAB" . minibuffer-complete)))

もう2年以上もしっくりこないまま使ってたけど、こんなことならもっと早くやっておくんだったよ。

HiDPIでEmacs

現状のEmacs(29.3)はどうやらHiDPIに対応しきれてないっぽい。

Pop!_OS 22.04で4Kディスプレイを200%表示にしてる状態でGUIモードでEmacsを起動して、flymakeを使うと下のようになる。

めっちゃ小さな文字で、2行目と6行目の左端(フリンジ)に黄色で!マークが出ている。

要は、EmacsではOS(というかDEか)の200%拡大設定が無視されている感じ。

このままでは辛いのでググるとこれが見つかる。

github.com

これ入れると楽だけど、起動時にフレームを設定しなおすのでかなり遅い。

 

さらにググるredditのこれが見つかる。

https://www.reddit.com/r/emacs/comments/1bawdau/making_flymake_supports_error_indicators_in_margin/

よく読むと、「emacs-develにパッチ投げたぜ」と主のコメントにある。

マジかよ、やるなあと思いながら探すとこれが見つかる。

Re: [PATCH] Flymake Support Indicator Errors in Margin - Elijah G

メインコミッターのZaretskiiさんとやりとりしてるのを現在進行系で見てるうちに、オープンソースソフトウェアはこうやって恐ろしいほどの議論の末に作られていくのかと、当たり前のことに気づく。

 

というか、これほどの労力と熱意にユーザーとしては感謝しかない。

 

これがGithubなら、サムズアップでも一票入れたいところだが、静観するしかできない。

 

Elijahさん。陰ながら応援することしかできないけど、どうか頑張ってほしい。

はてなブログに戻ってきた

たぶんTwitterが楽だったから、はてなから遠ざかったんだと思う。

しばらくは楽しかった。

でも、ママ活とかのDMが増えて、そのうちXとかいうのになって、なんかもう通知で忙しくされるのに疲れた。

GRAVITYやMastodonもちょっとだけ試した。

でもなんか違った。そもそもおれは人とそんなに繋がりたいのかとか疑問に思えてきた。

どうせやるなら今度は一人で地味にやるブログにしようと思った。

だれも見てくれなくていいから、気が向いたときや書きたいことがあったときに気軽に書けるところを探した。

 

最初にSSGを試した。JykillとかGatsbyとかHugoとか。

これはいいと思った。

Emacsで記事書けるのもいいと思った。最高ではないかと。

 

でも続かなかった。なんでか。

サイトをビルドするツール一式を入れるのがめんどかったから。

WindowsとかMacとかLinuxとか、そのとき作業してるとこにビルド環境がなかったら入れなければならない。それにスマホから直接投稿とか無理だし。

あと、Emacsがないところで記事書くのも億劫だった。

 

noteやZennも試してみた。

Zennは素晴らしいと思った。技術書はPDFとかebookよりWebのほうが楽だし。

でも今は人に読んでもらう記事を書く気はあんまりない。

もっとラフに、タイポとかあってもまあいいかと思えるくらいの気軽さがほしい。

 

Qiitaもなんか書いてた気がする。でも親戚の家に偉い人がたくさん集まってる中で、隅っこで記事を書いてるような、そんな肩身の狭さを感じたからやめた。

 

Wordpressは一時期の「いかがでしたか?」ブームで、これは近づいたらだめなやつだと思ったから触ってない。侍エンジニアのブログを検索結果から外して幸せを感じるような人間にはそれが正解だ。

 

そうやって10年以上放浪して一周回ったのか、はてなブログに戻って来ようとしてる。

はてなダイアリーやってた頃はzyzzyのlisp片をひたすら上げてた気がする。

gnrr.hatenadiary.org

 

今は便利にはなったけど、あの頃のような楽しいインターネットになるといいな。

 

Emacs29になった今も、またしょうもないlisp書いたり、変なツールを試したりしたのを書きたい。それにやっぱりキーボードのことも。

 

続くかどうかちょっと心配だけど、またやってみようじゃないか。