簡體   English   中英

失去焦點時更改Emacs窗口外觀

[英]Change Emacs window appearance when it loses focus

當我編程時,我使用帶有Emacs的兩個屏幕,兩個緩沖區在每個窗口中分開,在任何時候在屏幕上共計4個開源文件。

我在具有Cx b緩沖區之間以及在使用Alt-TAB Windows之間切換。 當我通過為mode-linemode-line-inactive定義不同的面來切換它們時,我改變了緩沖區的外觀。 但是當我通過Alt-TAB從Emacs窗口完全切換到另一個Emacs窗口時,如何禁用緩沖區?

我在Ubuntu 11.04和Gnome 2.32.1上使用Emacs 23.2.1可能也是相關的。

PS: 如何在Emacs中自動保存失去焦點的文件的問題是在一個不同的目標之后,但是具有相同的原始事件“窗口失去焦點”。

它可能取決於您的窗口管理器以及它如何管理多個窗口或框架,用emacs的說法。 下面的代碼就像fvwm中的冠軍一樣,但並不總是在gnome中。

我將鍵擊Co映射到幀之間,這有助於你想要轉到另一幀但是alt-tab會帶你通過一些多余的應用程序。

如果您正在運行具有兩個框架的單個emacs實例,則可以使用以下內容:

(defun pgr-previous-frame ()
  "go to the previous frame"
  (interactive)
  (pgr-switch-frame (previous-frame)))

(defun pgr-next-frame ()
  "go to the next frame"
  (interactive)
  (pgr-switch-frame (next-frame)))

(defun pgr-switch-frame (frame)
  "go to the specified frame and raise it"
  ;; reset the frame properties here
  (select-frame frame)     
  (raise-frame frame)
  ;;change the display in some manner here
  )

您還可以嘗試添加一些建議來提升幀和低幀沒有嘗試過,但它值得一試。

在Emacs 24.4及更高版本中,您可以使用focus-in-hookfocus-out-hook 這段代碼似乎有用,這樣非活動幀的活動窗口與非活動窗口的顏色相同:

(defvar my-mode-line-active-background "gray75")
(defvar my-mode-line-inactive-background "gray40")

(defun my-unhighlight-mode-line ()
  (set-face-attribute 'mode-line nil
                      :background my-mode-line-inactive-background))

(add-hook 'focus-out-hook 'my-unhighlight-mode-line)

(defun my-highlight-mode-line ()
  (set-face-attribute 'mode-line nil
                      :background my-mode-line-active-background))

(add-hook 'focus-in-hook 'my-highlight-mode-line)

我真的很喜歡@logoscia的答案,這讓我可以做更通用的版本。 它在沒有焦點時使用mode-line-inactive面。

(add-hook 'focus-out-hook
      (lambda ()
        (copy-face 'mode-line '--mode-line-backup)
        (copy-face 'mode-line-inactive 'mode-line)))
(add-hook 'focus-in-hook
      (lambda ()
        (copy-face '--mode-line-backup 'mode-line)))

我不知道它是否只能用Emacs完成,但是一個可能的替代方法是在shell腳本中運行wmctrl ,它可以永久地檢查哪個窗口具有焦點,如果有更改,那么它可以通過emacsclient知道Emacs可以發送lisp用於評估的正在運行的Emacs的代碼:

-e' eval'告訴Emacs評估一些Emacs Lisp代碼,而不是訪問某些文件。 當給出這個選項時,`emacsclient'的參數被解釋為要評估的表達式列表, 而不是要訪問的文件列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM