1

Emacs のモードライン形式でいくつかのメソッドを呼び出したいです。たとえば、count-words選択されている文字数や、カーソルが置かれているクラス/メソッド名を確認できます。

これは私の現在のモードライン形式ですが、 を呼び出すと、結果としてcount-words表示*invalid*され、変更で呼び出されるかどうかもわかりません。

(setq-default mode-line-format
      (list "---File:[%b%+] Line:[%l] Size:[%i] "
        (count-words (point-min) (point-max))
        ))

頻繁に更新されるモードライン領域でいくつかのカスタム メソッドを呼び出したいと思います。たとえば、何文字を選択したか、誰がこの行を変更したか (git Blame)、現在カーソルが置かれている現在のクラス名は何かなどです。

4

2 に答える 2

1
‘(:eval FORM)’
     A list whose first element is the symbol ‘:eval’ says to evaluate
     FORM, and use the result as a string to display.  Make sure this
     evaluation cannot load any files, as doing so could cause infinite
     recursion.

--C-hig (elisp)Mode Line Data

:eval通常、必要がない場合は使用を避けてください。多くの場合、変数の値をモード ラインに表示し、必要に応じてその変数を更新できるように別の場所に配置する方が効率的です (モード ラインが再表示される頻度よりもはるかに少ない場合があります)。

バッファ全体を呼び出す例ではcount-words、大きなバッファでパフォーマンスの問題が発生する可能性があります。

例:

(setq-default mode-line-format '(:eval (count-words--buffer-message)))
于 2019-11-23T22:57:19.770 に答える