Skip to content

Instantly share code, notes, and snippets.

@youz
Created August 21, 2012 08:39
Show Gist options
  • Save youz/3413557 to your computer and use it in GitHub Desktop.
Save youz/3413557 to your computer and use it in GitHub Desktop.
shell-modeでキーワードハイライト
(in-package :editor)
(defvar *shell-mode-keyword-file* "Shell")
(defvar *shell-mode-keyword-table* nil)
(defun shell-mode-enable-highlighting ()
(when *shell-mode-keyword-file*
(unless *shell-mode-keyword-table*
(setq *shell-mode-keyword-table*
(load-keyword-file *shell-mode-keyword-file*)))
(make-local-variable 'keyword-hash-table)
(setq highlight-keyword t ; <- これ
keyword-hash-table *shell-mode-keyword-table*)))
(add-hook '*shell-mode-hook* 'shell-mode-enable-highlighting)
@youz
Copy link
Author

youz commented Aug 21, 2012

memo

ed:highlight-keyword が nil だと ed:keyword-hash-table を設定しても色付けされない。
ref. disp.cc の Window::redraw_window

ed:highlight-keyword の値は[共通設定]→[表示]→[キーワードに色を付ける]で設定できる(/lisp/optprop.l)が、
fundamental-modeとtext-modeではbuffer-localにした後setqでnilにしている。(
/lisp/misc.l)

*default-buffer-mode* をいじってなければnew-fileやget-buffer-create等で作成したバッファは
fundamental-mode になるので、空の新規バッファでは大体 ed:highlight-keyword は nil。

(get-buffer-create ..)
 -> (create-new-buffer ..)
  -> (run-hooks '*create-buffer-hook*)
   -> (ed::create-buffer-hook ..)
    -> (funcall *default-buffer-mode*)
     -> fundamental-mode

キーワードハイライトを使っているほとんどの言語モードでは初期化処理中でkill-all-local-variablesを
実行しているので ed:highlight-keyword の値は共通設定の通りになるが、shell-modeは
kill-all-local-variablesしないためget-buffer-createされた時点のnilのままになっている。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment