[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:04492] Re: エンコーディング, C-h



堀川さん、こんにちは。

	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

Index Home