emacs23のhtml-modeのタブ設定の無効化
HTMLモードもか、、、
(add-hook 'html-mode-hook
'(lambda()
(local-set-key "\t" '(lambda() (interactive)(insert " ")))
(local-set-key "\d" 'delete-backward-char)))
emacs 23.3.1 と kubuntu 12.04 で確認。
emacsのこの変なタブ動作やめて欲しい、、、
html文書なんて、ふつうにメモ帳でも開くのだから、空白とTABの入り混じったTABなんてやっちゃいけないと思う。
emacsのAuto indentが役にたつのはLISPだけ。
他の用途では邪魔にしかならない。
emacs23のjavascriptモード js-modeのタブ設定の無効化
なんか最近JavaScriptを使うので、、、
例によって、~/.emacsに追加。
(add-hook 'js-mode-hook
'(lambda()
;;;(message "%s" "bbbbbbbbbbbbbb")
(local-set-key "\t" '(lambda() (interactive)(insert "\t")))
(setq tab-width 4)
(local-set-key "\d" 'delete-backward-char)
(define-key js-mode-map "(" 'self-insert-command)
(define-key js-mode-map ")" 'self-insert-command)
(define-key js-mode-map ":" 'self-insert-command)
(define-key js-mode-map ";" 'self-insert-command)
(define-key js-mode-map "," 'self-insert-command)
(define-key js-mode-map "{" 'self-insert-command)
(define-key js-mode-map "}" 'self-insert-command)
;;;(message "%s" "cccccccccccc")
))
emacs 23.3.1 と kubuntu 12.04 で確認。
(メモ)
js-modeのソースの在り処。
/usr/share/emacs/23.2/lisp/progmodes/js.elc
/usr/share/emacs/23.2/lisp/progmodes/js.el.gz
js.elcはコンパイル済みのファイルで、中を見ても何も分からない。js.el.gzは、コンパイル前のソースを圧縮したもの。Synapticとかapt-getで emacs23.el パッケージをインストールすると、このコンパイル前のjs.el、もしくは、js.el.gz がインストールされる。これを覗いて、キーマップ名などを調べる。
また。/usr/share/emacs/23.2/lisp/progmodes/js.elc を消して、js.el.gzを解凍して、js.elにし、中身を弄ると、js-modeを改変できる。しないけど。
.emacsの再読み込みは、.emacsのバッファで
M-x eval-current-buffer
とする。毎回emacsを再起動する必要ない。
hookの効いてることの確認は、
JavaScriptのソースを読み込んだバッファ上で、C-x C-v としてファイルを再読み込みする。再読み込みでも、hookは呼び出される。オートインデントされないことを確認する。
.emacs内で、(message ...) とすると *Messages* バッファに印字できる。デバッグや確認に使える。また。.emacsの中でエラーがあったときも、*Messages*にエラーメッセージが印字される。
モードとファイルの関連付けの確認は、*scratch*バッファで、
auto-mode-alist
C-x C-e
とすると、*Message*バッファに関連付けの一覧表が印字される。
タブを無効にする理由は、オートインデントとか、インテリジェントなTABとかBSの動作がうっとうしいから。
Cとか、Javaみたいな言語のタブは、単純に4TAB、(もしくは、8TAB)動作してくれたほうがうれしい。
でも、キーワードに色がついてたりするのは嬉しいので、js-modeは使いたい。ため。
TAB とか BS とか ; とか打つたびに、おかしなインデントが勝手に入る。嫌がらせとしか思えないC-MODE。さんざん調べて、やっと全部無効にできました。
例によって、~/.emacsに追加。
(add-hook 'c-mode-common-hook
'(lambda()
(local-unset-key "#")
(local-unset-key "(")
(local-unset-key ")")
(local-unset-key "*")
(local-unset-key ",")
(local-unset-key "/")
(local-unset-key ":")
(local-unset-key "<")
(local-unset-key ">")
(local-unset-key "{")
(local-unset-key "}")
(local-unset-key ";")
(local-set-key "\t" '(lambda() (interactive)(insert "\t"))) ;; just a tab
(setq tab-width 4) ;; show a tab with 4 char width
;;(local-set-key "\t" '(lambda() (interactive)(insert " "))) ;; a 4 space tab if you like
(local-set-key "\d" 'delete-backward-char) ;; the normal backspace
))
emacs 23.2.1 & kubuntu 11.4 で確認。
残念ながら、xemacsでは、うまく無効化できません。(ギブアップ)↓
これで、気持ちよくCソースを弄れるようになりました。
ちなみに、今までは、fundamental-mode とか、C-q TAB とか、C-i でがんばってました。
(というか、20年くらい前のemacsは、もっと単純だったような、、、いつの間にかすごい面倒くさくなっちまって。。。)
(追記) xemacs用
~/.xemacs/init.el に追加。
(add-hook 'c-mode-common-hook
'(lambda()
(define-key c-mode-base-map "#" 'self-insert-command)
(define-key c-mode-base-map "(" 'self-insert-command)
(define-key c-mode-base-map ")" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)
(define-key c-mode-base-map "," 'self-insert-command)
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map ":" 'self-insert-command)
(local-unset-key "<")
(local-unset-key ">")
(define-key c-mode-base-map "}" 'self-insert-command)
(define-key c-mode-base-map "{" 'self-insert-command)
(define-key c-mode-base-map ";" 'self-insert-command)
(local-set-key "\t" '(lambda() (interactive)(insert "\t")))
(setq tab-width 4)
;;(local-set-key "\t" '(lambda() (interactive)(insert " ")))
(define-key c-mode-base-map [backspace] 'delete-backward-char)
))
保存先のキーマップが、emacs と違ってたみたい。 xemacs21 で確認。
(追記) c-toggle-electric-state なんてのは全然知りませんでした。これのほうがスマート↓
c-modeの自動インデントを無効化
(追記) cc-mode.elの置き場所
emacs の場合 /usr/share/emacs/23.2/lisp/progmodes/cc-mode.elc
xemacs の場合 /usr/share/xemacs21/xemacs-packages/lisp/cc-mode/cc-mode.elc
コンパイル済みしかない... orz
(追記) モードの説明書の出し方
Mーx describe-mode