2009-10-04 17 views

Respuesta

9

Si con "ventana" se refiere a la definición de Emacs de ventanas, es decir, paneles, no realmente.

Si con "ventana" te refieres a la concepción de windows de todos los demás, que Emacs llama marcos, entonces sí. He aquí un ejemplo:

(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

Y si él lo quiere por ventana, recomendaría una línea de modo de video inverso. Si necesita más de una señal visual que eso, abra menos ventanas. – jrockway

+0

Uh, modeline activo, eso es. – jrockway

+2

Me refiero a la ventana de Emacs. Lo más destacado de la línea de modo no es suficiente para mí. Uso una pantalla grande, muchas ventanas están abiertas ... y con bastante frecuencia he comenzado a editar no la ventana que quería editar. Lo intentaré si el modo de video inverso mejora un poco –

3

Si lo que estamos tratando de lograr es poner de relieve el buffer/marco actual, la forma en que hago que es a través de Highlight-Current-Line. Le muestra la línea donde está el cursor, pero un efecto secundario es que también le muestra en qué búfer/cuadro se encuentra. Puede configurarlo para resaltar todo el búfer, o ver el código para ver cómo lo hacen eso.

+0

Sí, lo que quise decir con "en realidad no" fue que no puede resaltar una ventana, solo un búfer, porque cualquier modificación en el contenido del búfer afectará cada vista del búfer. Para mí, el color de la línea + el cursor parpadeando bien. –

+0

Indeed buffer es mejor término para eso que window. Quiero resaltar el búfer actual :) –

6

Aquí hay una alternativa que utiliza el color de línea inactiva que coincide con el fondo por lo que la única línea de modo con color es la ventana activa. Tengo un gancho para entrar y salir del minibúfer, y también cuando cambio ventanas. Uso negrita para ciertos elementos de línea de modo como solo lectura y el nombre del archivo, para que el color diferente no se destaque al cambiar de ventana. Cuando ingreso al minibúfer, la línea de modo de la ventana activa queda inactiva hasta que salgo del minibúfer, o cuando cambio de un minibúfer activo (dejándolo abierto) a otra ventana. Tuve que configurar el cuadro de fondo modelado para que coincida también.

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

respuesta alternativa (concepto similar): set-face-attribute es demasiado lento para el cambio de caras durante redisplay. El método preferido para ajustar caras en ese contexto es con la función face-remap-add-relative; sin embargo, esa función es un poco complicada de usar porque las caras se acumulan una detrás de la otra y se ensombrecen. Por lo tanto, tendré que revisar el siguiente borrador de respuesta alternativa (en el futuro) para incorporar face-remap-add-relative - mientras tanto, estoy configurando el face-remapping-alist manualmente (lo cual no es el método preferido según el 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 

modo

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

+0

¡Bonita idea y captura de pantalla inspiradora! – katspaugh

3

Crosshairs es la mejor opción, creo. No solo llama la atención sobre la ventana activa, sino que también te muestra de inmediato dónde está el cursor de una manera obvia. Puede activarlo/desactivarlo fácilmente (lo ato al C-+.)

También puede usar crosshairs-toggle-when-idle como alternativa. No muestra el punto de mira hasta que una demora haya pasado. También es un conmutador.

Por supuesto, puede utilizar puntos de mira junto con una cara mode-line cara a cara.

2

que estaba usando hiwin-mode como se sugiere en este tema, pero no es un open issue con tampones de concha (cuando está inactivo, el texto se vuelve invisible). Por lo tanto, otra opción que estoy disfrutando hasta ahora es auto-dim-other-buffers mode.

Cuestiones relacionadas