如何爲Emacs中的活動窗口配置不同的背景顏色?活動窗口的自定義背景
回答
如果用「窗口」表示Emacs對窗口(即窗格)的定義不是真的。
如果用「窗口」表示其他人對窗口的概念,Emacs稱之爲框架,那麼是的。這裏有一個例子:
(defadvice handle-switch-frame (around switch-frame-set-background)
(set-background-color "white")
ad-do-it
(set-background-color "yellow"))
(ad-activate 'handle-switch-frame)
(defadvice delete-frame (after delete-frame-set-background)
(set-background-color "yellow"))
(ad-activate 'delete-frame)
如果你要實現的目標是要突出當前的緩衝區/幀,我做的方式,是通過Highlight-Current-Line。它向您顯示光標所在的行,但是副作用是它還會顯示您所在的緩衝區/幀。您可以配置它以突出顯示整個緩衝區,或查看代碼以查看它們的工作方式它。
是的,我的意思是「不是真的」,是因爲對緩衝區內容的任何修改都會影響緩衝區的每個視圖,所以無法突出顯示一個窗口,只是一個緩衝區。對我來說,模式線顏色+光標閃爍會很好。 – 2009-10-05 18:03:50
確實緩衝區比窗口更好。我想突出顯示目前的緩衝區:) – 2010-06-24 12:03:21
以下是使用與背景相匹配的模式行非活動顏色的替代方法,因此只有具有顏色的模式行是活動窗口。我有一個鉤子,用於進入和退出小型緩衝器,也可以在切換窗口時使用。我使用粗體顯示特定的模式行,如只讀和文件名,以便在切換窗口時不會突出顯示不同的顏色。當我輸入小型緩衝器時,活動窗口模式行將變爲非活動狀態,直到退出小型緩衝器,或者從活動小型緩衝器(將其打開時)切換到另一個窗口時。我不得不將modeline背景框設置爲匹配。
(set-face-attribute 'default nil :background "black" :foreground "white"
:font "Courier" :height 180)
(set-face-attribute 'mode-line nil
:height 160 ;; affects everything
:foreground "black" :background "gray70")
(set-face-attribute 'mode-line-inactive nil
:foreground "gray70" :background "black" :box '(:line-width 1 :color "black"))
(defun enter-minibuffer-setup()
(whitespace-mode t)
(set-face-attribute 'mode-line nil
:height 160 :foreground "gray70" :background "black" :box '(:line-width 1 :color "black"))
(set-face-attribute 'minibuffer-prompt nil :background "black" :foreground "cyan")
(set (make-local-variable 'face-remapping-alist)
'((default :background "black" :foreground "yellow"))))
(defun exit-minibuffer-setup()
(cond
((or save-as-variable multi-extract-variable multi-attach-variable)
(set-face-attribute 'mode-line nil :height 160 :foreground "black" :background "#eab700"))
(t (set-face-attribute 'mode-line nil :height 160 :foreground "black" :background "gray70" :box nil)))
(set-face-attribute 'minibuffer-prompt nil :background "black" :foreground "cyan"))
(add-hook 'minibuffer-setup-hook 'enter-minibuffer-setup)
(add-hook 'minibuffer-exit-hook 'exit-minibuffer-setup)
(defun lawlist-minibuffer-conditions()
(cond
((minibufferp)
(set-face-attribute 'mode-line nil
:height 160 :foreground "gray70" :background "black" :box '(:line-width 1 :color "black"))
(set-face-attribute 'minibuffer-prompt nil :background "black" :foreground "cyan"))
(t
(set-face-attribute 'mode-line nil
:height 160 :foreground "black" :background "gray70")
(set-face-attribute 'minibuffer-prompt nil :background "black" :foreground "gray70"))))
(defun lawlist-forward-window()
(interactive)
(other-window 1)
(lawlist-minibuffer-conditions))
(defun lawlist-backward-window()
(interactive)
(other-window -1)
(lawlist-minibuffer-conditions))
備選答案(類似的概念):set-face-attribute
是用於在redisplay
改變面太慢。在此情況下調整面部的首選方法是使用功能face-remap-add-relative
;但是,該功能使用起來有點複雜,因爲臉部疊在一起並且被遮擋。因此,我需要修改以下草案備選答案(將來)以合併face-remap-add-relative
- 與此同時,我將手動設置爲face-remapping-alist
(根據manual/doc-string,這不是首選的方法)。
(defvar modeline-selected-window nil)
(let ((default-background (face-background 'default nil 'default)))
(set-face-attribute 'mode-line-inactive nil :background default-background :box nil))
(defun modeline-record-selected-window()
(setq modeline-selected-window (selected-window)))
(defun modeline-update-function()
(cond
((minibufferp)
(let ((default-background (face-background 'default nil 'default)))
(with-selected-window (minibuffer-window)
(setq-local face-remapping-alist '(
(default :foreground "blue")
(minibuffer-prompt :foreground "red"))))
(setq-default face-remapping-alist `((mode-line ,'mode-line-inactive)))))
(t
(with-selected-window (minibuffer-window)
(when (local-variable-p 'face-remapping-alist)
(kill-local-variable 'face-remapping-alist)))
(setq-default face-remapping-alist nil))))
(defun modeline-set-format()
(setq mode-line-format '(
(:eval
(if (eq modeline-selected-window (selected-window))
(propertize "SELECTED WINDOW" 'face 'font-lock-warning-face)
(propertize "NOT-SELECTED WINDOW" 'face 'font-lock-keyword-face)))))
;; next two lines make the affect immediately apparent
(setq modeline-selected-window (selected-window))
(force-mode-line-update))
(define-minor-mode modeline-mode
"This is a minor-mode for `modeline-mode`."
:init-value nil
:lighter " ML"
:keymap nil
:global t
:group nil
(cond
(modeline-mode
(add-hook 'post-command-hook 'modeline-record-selected-window)
(add-hook 'buffer-list-update-hook 'modeline-update-function)
(add-hook 'text-mode-hook 'modeline-set-format)
(when (called-interactively-p 'any)
(message "Globally turned ON `modeline-mode`.")))
(t
(remove-hook 'post-command-hook 'modeline-record-selected-window)
(remove-hook 'buffer-list-update-hook 'modeline-update-function)
(remove-hook 'text-mode-hook 'modeline-set-format)
(when (called-interactively-p 'any)
(message "Globally turned OFF `modeline-mode`.")))))
(modeline-mode 1) ;; globally turn on minor-mode
不錯的想法和鼓舞人心的截圖! – katspaugh 2014-01-12 09:22:07
Crosshairs模式是最好的選擇,我想。它不僅吸引了對活動窗口的注意,而且它還會立即向您顯示光標所在的位置。您可以輕鬆地將其打開/關閉(我將它綁定到C-+
。)
您也可以使用crosshairs-toggle-when-idle
作爲替代。在延遲過去之前它不會顯示十字線。它也是一個切換。
您當然可以將十字準線與臉上的mode-line
一起使用。
嘗試吉田HIWIN模式(可見光激活窗口模式):https://github.com/yoshida-mediba/hiwin-mode
像魅力一樣工作 – mico 2015-01-12 09:23:32
在emacs 25中完美運行! – 2016-09-04 07:08:55
我使用hiwin-mode
本主題中建議,但有一個open issue殼牌緩衝器(未激活時,文本變得不可見)。
因此,我目前享受的另一種選擇是auto-dim-other-buffers mode。
- 1. 綁定窗口的背景
- 2. Flex 4.5:彈出窗口的自定義背景
- 3. 谷歌地圖信息窗口的自定義樣式(背景)
- 4. 如何顯示自定義窗體窗口工作流自定義活動
- 5. 自定義彈出窗口背景問題
- 6. 自定義背景
- 7. 自定義背景?
- 8. 活瓷磚背景更換窗口8
- 9. 如何繪製自定義動畫作爲活動背景
- 10. 如果不活動,更改自定義UserControl的背景顏色?
- 11. 的JPanel自定義背景
- 12. 安卓上推出的活動設置窗口背景
- 13. 用於背景(非活動)窗口的Java機器人?
- 14. WPF主題的動態窗口背景
- 15. 更改自定義活動屬性窗口中的控件
- 16. 創建android窗口沒有背景活動
- 17. 自定義背景圖片
- 18. 自定義CAB背景android
- 19. ActionMode自定義背景
- 20. EditText自定義背景
- 21. CardView自定義背景
- 22. 自定義微調背景
- 23. JScrollPanel與自定義背景
- 24. 自定義背景圖片
- 25. Java swing自定義背景
- 26. 自定義UIPickerView背景
- 27. 背景色自定義uicollectionview
- 28. JavaScript彈出窗口(背景窗口)
- 29. 活動已泄漏窗口 - 自定義對話框
- 30. 用窗口移動背景圖片
按照建議嘗試'hiwin-mode' [這裏](https://stackoverflow.com/a/24852800/1845302) – 2017-12-03 14:42:36