[xyzzy:04492] Re: エンコーディング, C-h
- Subject: [xyzzy:04492] Re: エンコーディング, C-h
- From: KAMEI Tetsuya <kamei@xxxxxxxxxxxx>
- X-mailer: KaMail-0.0.1.7 (ITS / PDP-10s)
- X-yzzy-version: 0.2.1.139
堀川さん、こんにちは。
2000年5月9日(火)[01:24:29]の、
[xyzzy:04491] エンコーディング, C-h
への返事です。
| エンコーディングの自動判定に失敗するようなファイルについて,例えば次
| のようにして明示的にエンコーディングを指定し,これを利用するようにした
| いのですが,.xyzzyなどでどのように書けば可能でしょうか?
とりあえずこんな感じでしょうか。ただしエラーチェックと
かが全然甘いので、なるべく使わないでください(^^;
そのうちまともにします。
指定できる名称は encoding.l の *char-encoding-list* あ
たりを参照してください。*encoding-utf8n* ならば utf8n
です。
(in-package "editor")
(defun set-auto-mode (buffer)
(save-excursion
(goto-char (point-min))
(save-restriction
(narrow-to-region (point)
(save-excursion
(forward-char 200)
(point)))
(skip-chars-forward " \t\n")
(let (beg end param)
(when (and (when (scan-buffer "-*-" :tail t)
(skip-chars-forward " \t")
(setq beg (point)))
(when (scan-buffer "-*-")
(skip-chars-backward " \t")
(setq end (point))))
(narrow-to-region beg end)
(goto-char beg)
(cond ((scan-buffer ":")
(let ((mode-ok nil))
(goto-char beg)
(loop
(cond ((setq param (auto-mode-parameter "mode:"))
(call-auto-mode param)
(setq mode-ok t))
((setq param (auto-mode-parameter "package:"))
(setq *buffer-package* (string-downcase param)))
((setq param (auto-mode-parameter "encoding:"))
(let ((encoding (find-symbol (concat "*encoding-" param "*")
"editor")))
(when (boundp encoding)
(setq encoding (symbol-value encoding))
(when (and (char-encoding-p encoding)
(not (eq encoding (buffer-fileio-encoding))))
(let ((*expected-fileio-encoding* encoding))
(declare (special *expected-fileio-encoding*))
(erase-buffer (selected-buffer))
(insert-file-contents (get-buffer-file-name) t)
(set-auto-mode buffer)
(return-from set-auto-mode)))))))
(unless (scan-buffer ";" :tail t)
(if mode-ok
(return-from set-auto-mode)
(return)))
(skip-chars-forward " \t"))))
(t
(call-auto-mode (buffer-substring beg end))
(return-from set-auto-mode)))))))
(let ((filename (get-buffer-file-name)))
(dolist (alist *auto-mode-alist*)
(when (string-matchp (car alist) filename)
(if (get (cdr alist) 'decode-auto-mode)
(funcall (cdr alist) buffer)
(funcall (cdr alist)))
(return)))))
| C-hに
| (global-set-key #\C-h 'hogehoge)
| のようにして機能を割り当てたらBackspaceも同じになってしまいました。C-h
| とBackspaceとで違う機能を割り当てるのはどうしたらいいでしょうか?
Backspace は従来のままで、C-h を別の機能にする場合は
(setf (svref *kbd-translate-table* (char-code #\C-h)) #\F24)
逆に、Backspace を別の機能にする場合は
(set-extended-key-translate-table exkey-backspace #\F24)
としてから、(global-set-key #\F24 'hogehoge) してください。
F24 は別の空いているキーで構いません。
--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx