4

*.el ファイルに対してのみ Show-Paren モードを有効にするにはどうすればよいですか?

私が試してみました

(add-hook 'emacs-lisp-mode-hook '(lambda()
                                   (show-paren-mode 1)
                                   ))

ただし、すべてのケースで Show-Paren モードを有効にします。バッファ内でも、*scratch*Show-Paren モードを有効にしています。

4

4 に答える 4

9

すでに述べたようにshow-paren-mode、グローバル マイナー モードです。つまり、次のようなバッファでのみ実行できる場合があります。

(show-paren-mode)                       ;; activate the needed timer
(setq show-paren-mode ())                ;; The timer will do nothing if this is nil

(defun show-paren-local-mode ()
  (interactive)
  (make-local-variable 'show-paren-mode) ;; The value of shom-paren-mode will be local to this buffer.
  (setq show-paren-mode t))

(add-hook 'emacs-lisp-mode-hook 'show-paren-local-mode)

動作確認していないため、動作しない可能性があります。ドキュメントを見るとうまくいくかもしれませんが、コードを見るとうまくいくかもしれません。これは、一部のバージョンの show-paren-mode でのみ機能する場合があります。

于 2012-04-22T13:39:36.963 に答える
4

show-paren-modeグローバルマイナーモードです。それはまさにそれがどのように聞こえるかを意味します。ほとんどの人 (私自身を含む) は、このマイナー モードがすべてのバッファーで役立つと考えているため、これは設計によるものです。どのファイルに対しても無効にする必要があるのはなぜですか?

ドキュメントから

Show Paren モードは、グローバル マイナー モードです。有効にすると、対応する括弧がshow-paren-style' after show-paren-delay 秒の Emacs アイドル時間で強調表示されます。

于 2012-04-22T12:51:35.703 に答える
1

あなたのコードは正しいです。*scratch*ただし、バッファーのメジャー モードが(ほとんど無関係である)lisp-interaction-modeから派生したものemacs-lisp-modeであり、モードの定義であるという事実を考慮する必要があります。

(define-minor-mode show-paren-mode
  "Toggle visualization of matching parens (Show Paren mode).
With a prefix argument ARG, enable Show Paren mode if ARG is
positive, and disable it otherwise.  If called from Lisp, enable
the mode if ARG is omitted or nil.

Show Paren mode is a global minor mode.  When enabled, any
matching parenthesis is highlighted in `show-paren-style' after
`show-paren-delay' seconds of Emacs idle time."
  :global t :group 'paren-showing
...)

:global tがここで重要です。モードはグローバルであり、メジャー モードに関係なくすべてのバッファで有効になります。

于 2012-04-22T10:12:41.443 に答える