家のmac miniのcarbon emacsでrubyを書いていて、保存しようとC-x C-sしたらこんなエラーがでた。
Symbol's function definition is void: coding-system-to-mime-charset
調べてみると、どうも最近のcarcon emacsのruby-modeが日本語に対応していないみたい。
STBBS.NET blog: Carbon Emacsで ruby-modeと日本語
上記のブログではコメントアウトして対応しているけど、もう少しキチンと対応したいなーと思ったのでソースを見てみた。
(defun ruby-mode-set-encoding () (save-excursion (widen) (goto-char (point-min)) (when (re-search-forward "[^\0-\177]" nil t) (goto-char (point-min)) (let ((coding-system (coding-system-to-mime-charset (or coding-system-for-write buffer-file-coding-system)))) (setq coding-system (if coding-system (symbol-name (or (and ruby-use-encoding-map (cdr (assq coding-system ruby-encoding-map))) coding-system)) "ascii-8bit")) (if (looking-at "^#![^\n]*ruby") (beginning-of-line 2)) (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]+\\)") (unless (string= (match-string 2) coding-system) (goto-char (match-beginning 2)) (delete-region (point) (match-end 2)) (insert coding-system))) ((looking-at "\\s *#.*coding\\s *[:=]")) (t (insert "# -*- coding: " coding-system " -*-\n")) )))))
ぜんぜんわかりません><
ちょっと勉強してみようかな。でもあんまり力を入れて勉強する暇もないので、1時間くらいやって無理そうだったらまた次回。
lispの基本要素まとめ
ソースの関数まとめ
- defun
- 呼び出されたときに新しい値関数を定義する関数。
- save-excursion
- カーソル位置を記憶
- widen
- ワイドニングを行う*1
- goto-char
- ポイント(カーソル位置)の移動
- point-min
- カレントバッファの最初の文字の位置を返す
- (let ( (var1 value1) (var2 value2))...)
- statement-block)):var1にvalu1を代入、var2にvalue2を代入。その後statement-blockを実行
- (setq var1 value2 var2 value2 ...)
- var1にvalue1を代入、var2にvalue2を代入。戻り値は最後に代入された値。
うーん
どうもきちんと理解するためにはあと数時間かかりそうな予感。とりあえず今日はここまで。
*1:ワイドニングについてはここを参考にEmacs Lisp によるプログラミング -- ナロイングとワイドニング -- - とりあえず暇だったし何となく始めたブログ