No Such Blog or Diary

«Prev || 1 | 2 | 3 | 4 | 5 || Next»

Emacs の正規表現置換でキャプチャした内容に関数を適用して置き換えたい

という需要があったのでぐぐってみたら,Emacs: regular expression replacing to change case とか Shiny and New: Emacs 22 で答えが見つかった.

置き換え文字中に \,(hoge \1) とかあると hoge を1つ目のキャプチャ(\1)に適用した結果に置き換わるらしい.より正確には,\, で後続のS式を評価できるらしい.なので \,(substitute ?_ ? (downcase \1)) とかすると,キャプチャした内容を小文字にしたうえで空白をアンダースコアで置き換えたものにできる.

超便利.だいぶ大昔からある機能のようだけど全然知らんかったのは残念.他にも連番を生成できる \# とかもあったりしてちゃんと勉強しとかんと時間を損するね.

lhs2tex に適した Emacs の mode はないものか?

mmm-mode で LaTeX mode に Haskell mode を入れればいいのだけど,reparse を勝手にやってはくれないので一々 mmm-parse-buffer とか呼ぶ必要があって面倒.まあ,その部分だけ自分で機能を追加するというのはありかも知れない.改行を入れるたびにバッファをパースしなおすとか.重いかもしれんけど.というか,mmm-mode って最近メンテされてるんか?

そしてメインの作業が進まない.

追記:編集後に0.5 秒間アイドルが続いたらバッファを再パースするように設定してみた.問答無用でバッファ全体を走査するのでとても富豪的なのだけど. そしてマイナーモードに mmm が入っているかどうかの判定も怪しいのだけど.とりあえず満足.

;; for auto-reparsing in mmm-mode
(defun my-mmm-mode-hook ()
  (let ((my-mmm-buffer-modified nil))
	(progn
	  (defun my-mmm-after-change-hook (beg end len)
		(if (let ((l (current-minor-mode-maps))) 
			  (if l (lookup-key (car l) "mmm") nil))
			(setq my-mmm-buffer-modified t)
		  ()))
	  (defun my-mmm-idle-timer-hook ()
		(if my-mmm-buffer-modified
			(progn
			  (mmm-parse-buffer)
			  (setq my-mmm-buffer-modified nil)
			  )
		  ()
		  ))
	  (run-with-idle-timer 0.5 'true 'my-mmm-idle-timer-hook) 
	  (add-hook 'after-change-functions 'my-mmm-after-change-hook)
	  )))
(add-hook 'mmm-mode-hook 'my-mmm-mode-hook)

Matlab mode を導入

The MATLAB / Emacs integration project で配布中.CVSで落としてきてパス通して (require 'matlab-load) するだけ.

これでソースの可読性が上がった.これ入れる前はよく分からないモードになってて,転置の演算子が文字列の開始に認識されてぐちゃぐちゃになっとったからなぁ.

さて,ソースの解読を進めるか.

emacs23 でフォント設定を新しいフレームにも適用しよう

立ち上がった直後のフレームのフォント設定はできてたんだけど,C-x 5 2 とかで新しいフレームを作った時にはフォント設定がデフォルトになるのが微妙だった.で,それなら新しいフレームの作成時に現在のフレームのフォント設定をコピーできりゃいいんじゃないかと思って色々調べてみたら… 結局 modify-all-frames-parameters という現在及び将来のフレームの設定を変更する関数に行き着いた.

で,最初のフレームのフォント設定が終わったところでその関数に設定したフォントの設定を投げてあげると幸せになる.

(modify-all-frames-parameters (list (assq 'font (frame-parameters))))

そして assq とかいうクエリ関数があることを初めて知った.自分で書こうとしたのは馬鹿だった.

emacsについて今日学んだこと

1.tramp でリモートのファイルを開いているときに M-x shell でシェルを立ち上げると,ちゃんとトンネル掘ってリモートのシェルが立ち上がってくれる.もうターミナルソフト要らない.

2.M-x shell で ls とか打つと色付のためのエスケープシーケンスが酷いことになるが,次を.emacsに書いておくと幸せになれる.

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

NTEmacsの23に移行

IMEとかのパッチを当てたバイナリが2ちゃんねるのNTEmacsスレに上がってたそうで,そのバイナリを手に入れて22から23に移行.Vistaと7で使っているけど今のところ問題無し.

«Prev || 1 | 2 | 3 | 4 | 5 || Next»
Search
Feeds

Page Top