2012-03-28 15 views
21

En emacs 24, el orden en que se aplican los temas de color parece importar. Esto es obvio si selecciona M-x color-theme-select. El orden que usted icCambiando los temas de color Emacs 24 - cuestiones de orden

¿Alguien tiene alguna idea sobre este problema?

Me gustaría ser capaz de cambiar entre los siguientes temas de color sin reiniciar:

  1. solarizados luz
  2. solarizadas-oscuro
  3. zenburn
  4. Railscasts

Supongo que necesito el equivalente de un css-reset para emacs. otro consejo que es muy valiosa es que si se utiliza mal, entonces usted necesita esta línea o de lo contrario el cursor permanece en negro, que es horrible para los temas oscuros:

(setq evil-default-cursor t) 

Se trata de un tema relacionado: Switching between color themes in Emacs (< v.24). Estoy usando Emacs 24.0. Estoy publicando esta pregunta porque estoy buscando soluciones para pre 24.1, o tal vez consejo si 24.1 es lo suficientemente estable.

+0

emacs 24.0 ??. 'M-x display-about-screen' o' M-x emacs-version' – kindahero

Respuesta

17

Me parece que incluso en Emacs 24 todavía está utilizando el viejo (y no mantenido) paquete de temas de color. Emacs 24 tiene una infraestructura de color incorporada (y temas como zenburn y solarized han sido portados) que yo sugeriría que usara en su lugar. Eche un vistazo here para detalles sobre deftheme y amigos.

То responde a tu pregunta particular sobre el tema de color: los temas generalmente no definen todas las caras que un tema anterior pudo haber modificado y que causa tus problemas. Pasar al tema predeterminado entre los temas probablemente se considere similar a un reinicio de css.

+0

¿Cómo puedo pasar al tema predeterminado entre los switches? ¡Muchas gracias! Si estoy usando elpa, ¿debería asegurarme de no instalar color-theme? Por cierto, me encanta zenburn, pero también me gustaría tener colores de railscasts para cuando quiera un poco más de contraste durante el día. Cualquiera, alguna opinión sobre .Xresources personalizada que viene con Solarized? – justingordon

+3

Supongo que ha instalado un tema que depende de 'color-theme'; hay muchos de esos en Marmalade. En Emacs 24 - 'M-x disable-theme' (aunque no estoy seguro de que el problema que ha descrito estará presente allí). No he usado 'color-theme' por un tiempo, así que no puedo ayudarte con eso. Personalmente no personalizo '.Xresources' (para temas de color) en absoluto. ¿Por qué quieres hacerlo? –

+0

Puse aquí las recomendaciones para .Xresources: http://ethanschoonover.com/solarized. Creo que eso podría entrar en conflicto con el uso de la ecología del color de emacs. – justingordon

3

Como han dicho otros, cambie a la versión de temas de Emacs 24. Una vez que esté usando eso, puede "deshacer" un tema con disable-theme. Simplemente dele el mismo argumento que pasó al load-theme y debe volver a una lista en blanco. Luego solo carga el nuevo tema.

+0

No, usted *** no puede *** * deshacer un tema personalizado *. Y puede, en su mayor parte, deshacer un tema * color *, restaurando una apariencia previa sin temática. "Desactivar" un tema personalizado solo es relativo a otro tema. – Drew

4

Escribí una función que deshabilita el tema actual antes de que emacs cambie a uno nuevo.

Puede pegar el siguiente fragmento en su init.el y usar M-x l0ad-theme.

https://github.com/maruks/.emacs.d

;; color themes 
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") 

(setq current-t43m3 nil) 

(defun enab-theme (theme) 
    (if current-t43m3 (disable-theme current-t43m3)) 
    (setq current-t43m3 theme) 
    (load-theme theme t)) 

(defun disab-current-theme() 
    (if current-t43m3 (disable-theme current-t43m3)) 
    (setq current-t43m3 nil)) 

(global-set-key (kbd "C-c ltwo") '(lambda() (interactive) (enab-theme 'wombat))) 

(global-set-key (kbd "C-c ltze") '(lambda() (interactive) (enab-theme 'zenburn))) 

(global-set-key (kbd "C-c ltsd") '(lambda() (interactive) (enab-theme 'solarized-dark))) 

(global-set-key (kbd "C-c ltsl") '(lambda() (interactive) (enab-theme 'solarized-light))) 

(global-set-key (kbd "C-c ltne") '(lambda() (interactive) (enab-theme 'tomorrow-night-eighties))) 

(global-set-key (kbd "C-c ltni") '(lambda() (interactive) (enab-theme 'tomorrow-night))) 

(global-set-key (kbd "C-c ltnb") '(lambda() (interactive) (enab-theme 'tomorrow-night-bright))) 

(global-set-key (kbd "C-c ltto") '(lambda() (interactive) (enab-theme 'tomorrow))) 

(global-set-key (kbd "C-c ltta") '(lambda() (interactive) (enab-theme 'tango))) 

(global-set-key (kbd "C-c ltdb") '(lambda() (interactive) (enab-theme 'deeper-blue))) 

(global-set-key (kbd "C-c ltdi") '(lambda() (interactive) (enab-theme 'dichromacy))) 

(global-set-key (kbd "C-c dct") '(lambda() (interactive) (disab-current-theme))) 

(defun l0ad-theme (name) 
    (interactive 
    (list 
    (intern (completing-read "Load custom theme: " 
       (mapcar 'symbol-name (custom-available-themes)))))) 
    (enab-theme name)) 

(setq d3fault-theme (getenv "EMACS_DEFAULT_THEME")) 

(when d3fault-theme 
    (enab-theme (intern d3fault-theme))) 
9

Para desactivar automáticamente el tema actual antes de cargar el nuevo, también se puede utilizar consejos:

(defadvice load-theme 
    (before theme-dont-propagate activate) 
    (mapcar #'disable-theme custom-enabled-themes)) 
5

Insertar el código de abajo en su .emacs/init.el, Afecté Ct para recorrer una lista fija de temas en el orden especificado. Esto es compatible con Emacs 24.

;;;;; Theme ;;;;; 
;; Cycle through this set of themes 
(setq my-themes '(solarized-light solarized-dark zenburn railscast)) 

(setq my-cur-theme nil) 
(defun cycle-my-theme() 
    "Cycle through a list of themes, my-themes" 
    (interactive) 
    (when my-cur-theme 
    (disable-theme my-cur-theme) 
    (setq my-themes (append my-themes (list my-cur-theme)))) 
    (setq my-cur-theme (pop my-themes)) 
    (load-theme my-cur-theme t)) 

;; Switch to the first theme in the list above 
(cycle-my-theme) 

;; Bind this to C-t 
(global-set-key (kbd "C-t") 'cycle-my-theme) 
+0

¿Qué es (kb "C-t")? ¿Por qué eso en lugar de (kbd "C-t")? Lo siento, ¿solo un error tipográfico? – ericx

+0

No fue un error tipográfico, pero en este caso, podría haber usado (kbd "C-t"). La razón por la que tengo una macro 'kb' es debido a otra pieza de código para hacer múltiples combinaciones de teclas a la vez: '(dolist (pair '((" Ck "kill-whole-line) (" Cz "deshacer) ...)) ((global-set-key (kb (par de coche)) (par de cadr))) '. Si utilicé 'kbd' en lugar de mi propia macro 'kb':' (defun kb (k) (read-kbd- macro k)) ', se quejaría de que 'kbd' fuera una macro y no una función. O algo así. Estúpido y poco útil. He arreglado 'kb' en 'kbd' en el código anterior, entonces ¡Gracias! –

2

Puede desplazarse entre los temas personalizados o de color utilizando cualquiera de estas bibliotecas:

  • Do Re Mi, los comandos doremi-custom-themes+ y doremi-color-themes+. Necesitas doremi-cmd.el para esto.

  • Icicles, multi-comandos icicle-custom-theme y icicle-color-theme.

Con la carámbanos comandos también se puede estrechar el conjunto de temas para desplazarse entre, y se puede clasificar de varias maneras (es decir, cambiar el orden de ciclo).

Cuestiones relacionadas