アクティブなウィンドウのフリンジの色を変更する方法はありますか?


14

フォーカスされたウィンドウとそうでない残りのウィンドウを区別するために、このウィンドウのフリンジの色を変更したいと思います。フリンジキーワードによるカスタマイズの発見アクティブな色とアクティブでない色に異なる色を設定することなく、bgカラーを変更する方法のみを見つけました。まったく可能ですか?THX。


フリンジについてはわかりませんが、非アクティブなウィンドウのモードラインを変更できます。試してみてくださいM-x customize-face mode-line-inactive
タイラー

3
フレームローカルのように見えるので、答えはノーです。(face-remap-add-relative 'fringe '((:background "yellow")))他の面ではどれをバッファローカルで使用するのに十分か試してみましたが、それはフレーム内のすべてのウィンドウに影響fringeします @Tylerの提案に加えて、アクティブウィンドウのみにカーソルが表示されるようにカーソルをカスタマイズすることもできます。変数を参照してくださいcursor-in-non-selected-windows
ローリスト

私はこれがあなたが必要とするものだと思う:http
Pedro Luz

私は、modeline、thxについて知っています。もっと明確にしたかっただけです。
サンドラ

ここでは、アクティブなウィンドウを助けるために追加的なアイデアのカップル作るされているより多くの視覚的注意を引き付ける:(1)は、非アクティブモードラインが目立たなくなるように、アクティブでないウィンドウのモード行の背景がバッファの色と一致すること stackoverflow.com/ a / 20936397/2112489および(2)mode-line-formatアクティブおよび非アクティブウィンドウ内の特定のテキストコンポーネントの色の変更: emacs.stackexchange.com/a/22682/2287
法律リスト

回答:


6

「フォーカスされたウィンドウをよりよく区別する」ために、アクティブウィンドウのフリンジカラーを変更するだけでなく、他の方法を使用してそれを行うことができます。

3つの方法を組み合わせて、アクティブウィンドウと非アクティブウィンドウをより適切に区別します。

  1. アクティブウィンドウと非アクティブウィンドウに異なる色のモードラインを使用します。
  2. ポイントがアクティブなウィンドウにある現在の行を強調表示します。
  3. アクティブウィンドウと非アクティブウィンドウに異なる背景色を使用します。

上記で選択したすべての色は、Emacsテーマでうまく機能するはずです。

3つの方法はすべて次のとおりです。

  1. アクティブウィンドウと非アクティブウィンドウに異なる色のモードラインを使用します。

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. ポイントがアクティブなウィンドウにある現在の行を強調表示します。

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. アクティブウィンドウと非アクティブウィンドウに異なる背景色を使用します。

    (defun highlight-selected-window ()
      "Highlight selected window with a different background color."
      (walk-windows (lambda (w)
                      (unless (eq w (selected-window))
                        (with-current-buffer (window-buffer w)
                          (buffer-face-set '(:background "#111"))))))
      (buffer-face-set 'default))
    (add-hook 'buffer-list-update-hook 'highlight-selected-window)
    

コードスニペットの色を変更して、Emacsテーマに合わせて機能させることができます。

これが最終的なスクリーンショットです。

3つの方法のスクリーンショット

また、アクティブウィンドウを手動でフラッシュするために使用できる別の機能があります。

(global-set-key (kbd "<f12>") 'flash-active-buffer)
(make-face 'flash-active-buffer-face)
(set-face-attribute 'flash-active-buffer-face nil
                    :background "blue" :foreground nil)
(defun flash-active-buffer ()
  (interactive)
  (run-at-time "100 millisec" nil
               (lambda (remap-cookie)
                 (face-remap-remove-relative remap-cookie))
               (face-remap-add-relative 'default 'flash-active-buffer-face)))

コードスニペットでキーバインドを変更できます。アクティブウィンドウを表示する場合、キーを押すと、アクティブウィンドウが青色になり、ポイントを移動すると色が消えます。


0

同じ問題がありました。スマートラインモードを使用してカスタマイズし、アクティブウィンドウで非常に特徴的な色を取得しました。これがサンプルフレームです。アクティブなウィンドウは、金色の文字が付いた黒いモード線のあるウィンドウです。

ここに画像の説明を入力してください

このコードを使用する前に、smart-mode-lineが必要であることを確認してください。必要な色にカスタマイズすることをお勧めします。

(deftheme smart-mode-line-dmg "dmg theme for smart-mode-line.")
(custom-theme-set-faces
 'smart-mode-line-dmg
                                        ; '(mode-line-inactive ((t :inverse-video nil)))
                                        ; '(mode-line     ((t :inverse-video nil)))
 '(mode-line     ((t :foreground "grey70" :background "black" :inverse-video nil)))
 '(mode-line-inactive  ((t :foreground "black" :background "white" :inverse-video nil)))
 '(sml/global    ((t :inherit font-lock-preprocessor-face)))
 '(sml/filename  ((t :inherit sml/global :foreground "gold" :weight bold)))
 '(sml/prefix    ((t :inherit (font-lock-variable-name-face sml/global))))
 '(sml/read-only ((t :inherit (font-lock-type-face sml/not-modified))))
 '(sml/modes     ((t :foreground nil :inherit sml/filename :weight normal))))

(sml/setup)

0

次のような操作を行って、現在選択されているウィンドウを強調表示できます。複数のウィンドウのバッファが同じ場合、これは機能しないことに注意してください。これにより、選択したウィンドウ以外のすべてのウィンドウが暗くなります。

(defvar dim-window-face
  '((t  (:background "grey40")))
  "Face for a dimmed window in the current frame.")

(defvar current-window-face
  '((t  (:background "black")))
  "Face for a dimmed window in the current frame.")

(defvar window->overlay (make-hash-table)
  "A hash table of window to dimmed overlay.")

(defun dim-windows ()
  "Dim all windows except the `selected-window' in current frame."
  (interactive)
  (walk-windows (lambda (w)
                  ;; Delete existing overlay on window W
                  (when-let ((ol (gethash w window->overlay)))
                    (delete-overlay ol))
                  (let ((ol (make-overlay (window-start w)
                                          (window-end w)
                                          (window-buffer w))))
                    (overlay-put ol 'face (if (eql (selected-window) w)
                                              current-window-face
                                            dim-window-face))
                    (puthash w ol window->overlay)))))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.