2009-10-04 6 views

Antwort

9

Mit "Fenster" meinen Sie Emacs 'Definition von Fenstern, d. H. Scheiben, nicht wirklich.

Wenn Sie mit "Fenster" alle anderen Vorstellung von Fenstern meinen, die Emacs Frames nennt, dann ja. Hier ein Beispiel:

(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) 
+1

Und wenn er es per-Fenster will, würde ich nur eine Reverse-Video-Modelllinie empfehlen. Wenn Sie mehr visuelle Hinweise benötigen, öffnen Sie weniger Fenster. – jrockway

+0

Uh, aktive Modeline, das ist. – jrockway

+2

Ich meine Emacs Fenster. Highlight der Moduszeile ist mir nicht genug. Ich benutze einen großen Bildschirm, viele Fenster sind offen .. und ziemlich oft habe ich begonnen, nicht das Fenster zu bearbeiten, das ich bearbeiten wollte. Ich werde versuchen, wenn Reverse-Video-Modus wird eine Verbesserung sein –

3

Wenn das, was Sie versuchen, den aktuellen Puffer/Rahmen zu markieren, zu erreichen, ist die Art, wie ich das tun, ist durch Highlight-Current-Line. Es zeigt Ihnen die Zeile, in der sich der Cursor befindet, aber ein Nebeneffekt ist, dass Sie auch sehen, in welchem ​​Puffer/Frame Sie sich befinden. Sie könnten ihn so konfigurieren, dass er den gesamten Puffer hervorhebt oder in den Code schaut es.

+0

Ja, was ich mit "nicht wirklich" meinte, war, dass Sie kein Fenster markieren können, nur einen Puffer, weil jede Änderung des Pufferinhalts jede Ansicht des Puffers beeinflusst. Für mich ist die Modelinie Farbe + Cursor gut. –

+0

In der Tat Puffer ist besser Begriff für das Fenster. Ich möchte den aktuellen Puffer hervorheben :) –

6

Hier ist eine Alternative mit der modeline inaktiven Farbe passend zum Hintergrund, so dass die einzige Modeline mit Farbe das aktive Fenster ist. Ich habe einen Haken für den Minibuffer eingeben und beenden, und auch beim Wechsel von Windows. Ich verwende Fett für bestimmte Modeline-Dinge wie schreibgeschützt und den Dateinamen, damit beim Wechseln von Fenstern die eine andere Farbe nicht auffällt. Wenn ich den Minipuffer betrete, wird die aktive Fenstermodelinie inaktiv, bis ich den Minibuffer verlasse oder wenn ich von einem aktiven Minibuffer (den ich offen lasse) zu einem anderen Fenster umschalte. Ich musste auch die Modelinie-Hintergrundbox anpassen.

(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)) 

ALTERNATIVE ANTWORT (ähnliches Konzept): set-face-attribute ist zu langsam für Gesichter während redisplay ändern. Das bevorzugte Verfahren zum Anpassen von Flächen in diesem Kontext ist mit der Funktion face-remap-add-relative; Diese Funktion ist jedoch etwas kompliziert zu verwenden, da die Gesichter hintereinander gestapelt werden und schattiert werden. Also, ich muss den folgenden Entwurf alternative Antwort (in der Zukunft) zu überarbeiten, um face-remap-add-relative zu integrieren - in der Zwischenzeit, ich setze die face-remapping-alist manuell (was zugegebenermaßen nicht die bevorzugte Methode nach dem Handbuch/Doc-String ist).

(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 

Example http://www.lawlist.com/images/modeline-example.png

+0

Nette Idee und inspirierender Screenshot! – katspaugh

3

Crosshairs Modus die beste Wahl ist, glaube ich. Es lenkt nicht nur die Aufmerksamkeit auf das aktive Fenster, sondern zeigt Ihnen auch sofort, wo der Cursor offensichtlich ist. Sie können es einfach ein-/ausschalten (ich binde es an C-+.)

Sie können alternativ auch crosshairs-toggle-when-idle verwenden. Es zeigt das Fadenkreuz erst, wenn eine Verzögerung vorbei ist. Es ist auch ein Schalter.

Sie können Fadenkreuz natürlich zusammen mit einem Gesicht mode-line verwenden.

2

I hiwin-mode wurde mit wie in diesem Thema vorgeschlagen, aber es gibt eine open issue mit Shell Puffer (wenn inaktiv, der Text wird unsichtbar).

Daher ist eine andere Option, die ich bisher genieße, auto-dim-other-buffers mode.

Verwandte Themen