HTML+JavaScriptでEmacsのalign-regexpっぽいやつを作った
これは Emacs Advent Calendar 2022 3日目の記事です。
Emacsが使えない環境で不慣れなエディタを使ってテキスト編集を行う際、日常的・無意識的に使っていた機能が使えず悲しくなるということがあります。
私にとってのそんな機能の1つが、Emacs に標準で備わっているコマンド align-regexp です。
何かしらの手段で同じようなことができればよいのですが、できない場合は手でちまちまアラインメントを揃える羽目に……こんな作業は機械にやらせるべき……。
というわけで、align-regexp だけを抜き出してブラウザで使えるようにしたものを HTML + JavaScript で作ってみました。
動かしている様子:
エディタからコピペしてきて、加工してまた戻すという手間は必要ですが、全部手作業でやるよりははるかにまし、という感じのもの。
使い方は見ての通りで、加工したいテキストを編集領域(上側のテキストエリア)に貼り付けて、区切りパターンを正規表現で指定するだけです。下側のテキストエリアはリアルタイムに反映されるプレビューで、 [apply]
ボタンを押すか、または C-RET
で編集領域の方に反映されます。
簡易ながら半角・全角の判定もやっていて、割とそれっぽく動くはず。
デモというかおためし版を GitHub Pages にも置いてみました。自分用のつもりなので勝手に動作が変わったりそのうち移動させたりなくなったりする可能性があります。
以下、雑多なメモです。
- 正規表現は JavaScript のもの
- 適当に作ったものなので細かい部分では Emacs の align-regexp の挙動と違うかもしれません。違ってそう。
- 大きなテキストを処理させようとするとダメかもしれません。ダメそう。
- パブリックドメインとしますので、煮るなり焼くなりお好きに使ってください。アイデアだけパクって別実装とかも普通にアリです。
- 何番目に出現した箇所で区切るか指定できる機能もついでに付けてみたけど、要らなかったかも
- ちなみに textarea で使える dabbrev-expand も昔作ってみたことがありました。ナイーブな作りでよければ意外と手軽に自作できておもしろいです。
この記事を読んだ人は(ひょっとしたら)こっちも読んでいます
かなり昔に書いたもの。今は変わってるかもしれません。
Lisp 関連ということで。
かんたんな自作言語のかんたんなコンパイラをいろんな言語に移植するということをやっているのですが、言語ごとにあまりカスタマイズしなくても dabbrev-expand でゴリゴリ書いていけるので dabbrev-expand はえらいなあと思います。
Discussion