4

バックグラウンド:

訪問しているバッファーがインデントにタブまたはスペースを使用するかどうかについてユーザーに「ヒント」を与えるマイナーモードを作成しています(バッファー内の各行の最初の文字を調べるだけです)。追加する予定の機能には、モードラインの情報表示と、タブまたはスペース、タブ幅などの使用を切り替えるためのいくつかの機能が含まれます。

このマイナーモードの有用性についてはあまり心配していません。実際、これと同じことをする何かがまだそこにないのなら、私は驚きます。ほとんどの場合、これはマイナーモードを作成するための演習です。


質問:

マイナーモードを有効/無効にするときに、モードラインからテキストを挿入/削除するためのクリーンで邪魔にならない方法は何でしょうか?ユーザーが変更する必要はありません。mode-line-format非破壊的にテキストを挿入および削除するだけです。現在、次のような関数を使用しています。

(defun update-indent-hints-mode-line (what-this-buffer-loves)
  (let ((indent-hints-mode-line-text (concat " " "[" what-this-buffer-loves "-loving" "]"))
        (my-mode-line-buffer-identification
         (remq " [Tab-loving]" (remq " [Space-loving]" mode-line-buffer-identification))))
    (setq mode-line-buffer-identification
          (add-to-list 'my-mode-line-buffer-identification
                       indent-hints-mode-line-text
                       t))
    (force-mode-line-update)))

正常に動作していますが、「[Tab-loving]」と「[Space-loving]」を検索して削除すると、かなりハックで醜いようです...よりクリーンな方法はありますか?

ボーナスポイント: 同じように謙虚なマイナーモードの謙虚な始まりについてのコメント: https ://github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el 私は明らかにelisp n00bです、しかし、私は学ぶためにここにいます。

4

1 に答える 1

5

minor-mode-alist変数をモードラインの文字列に関連付ける変数を確認してください。コードを変更して、変数tab-lovingtまたはに設定space-lovingするt(そして他の変数をに設定するnil)と、次のようにして必要なものを取得できます。

(setq minor-mode-alist (cons '(space-loving " [Space-loving]")
                             (cons '(tab-loving " [Tab-loving]")
                                   minor-mode-alist)))
于 2011-07-13T02:50:40.173 に答える