2012-12-07 76 views
6

我使用Emacs 24和想改變顯示目錄和文件的顏色,而我在外殼模式(ls命令)來的。理想情況下 - 取決於文件的權利。Emacs,如何更改M-x shell中的某些顏色?

我該怎麼做?

我試着用

(setq ansi-color-names-vector 
     ["black" "red" "green" "yellow" "PaleBlue" "magenta" "cyan" "white"]) 
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) 

打,但我認爲它不會爲我工作。
我現在有solarized的配色方案。但我不想改變它的顏色,只能用於外殼模式。

編輯:
當我改變我的系統終端的顏色(使用.dircolrs文件在我的主目錄) - Emacs讀取它,但它(emacs的)略微改變顏色 - 它使一個顏色有點暗或在外殼模式下更輕。

而且我不知道爲什麼的Emacs做的。

不同的顏色顯示目錄(遊戲,公共...:
這是系統終端: enter image description here
這是Emacs的:enter image description here

這些改變顏色,加上一些默認的顏色,solarized主題的Emacs藍色背景上的藍色迪爾斯。

我明白,這不是一個大問題找到一個黑客,只是想知道爲什麼Emacs的改變顏色有點。

+0

我的emacs殼使用由'與emacs的緩衝液背景顏色zsh'設置字體顏色。這不是你看到的嗎? – asm

+0

@AndrewMyers,我想是的,那麼我需要在bash配置中更改顏色。其實我想知道它是否可以在emacs中完成。 – Sergey

+0

我明白了,如果你做'M-X定製-group''ANSI-colors'你得到一個定製的羣體?那裏我看到了ansi-color-names-vector。 – asm

回答

5

^h ere是我用來爲emacs設置Solarized顏色的。我繼續發佈我的整個ansi-term配置,以防其他設置可能有用。

(use-package ansi-term 
    :defer t 
    :init 
    (progn 

    ;; ;; Use variable width font faces in current buffer 
    (defun my-buffer-face-mode-variable() 
    ;; "Set font to a variable width (proportional) fonts in current buffer" 
     (interactive) 
     (setq buffer-face-mode-face '(:family "Menlo For Powerline" :height 100)) 
     (text-scale-adjust 1) 
     (buffer-face-mode)) 

    (setq system-uses-terminfo nil) 
    (add-hook 'term-mode-hook 
       '(lambda() 
       (linum-mode 0) 
       (term-set-escape-char ?\C-z) 
       (term-set-escape-char ?\C-x) 
       (define-key term-raw-map "\C-c" 'term-interrupt-subjob) 
       (define-key term-raw-map (kbd "M-x") 'execute-extended-command) 
       (setq autopair-dont-activate t) 
       (setq ac-auto-start nil) 
       (visual-line-mode -1) 
       ;; (my-buffer-face-mode-variable) 
       )) 

    (defun my-term-paste (&optional string) 
     (interactive) 
     (process-send-string 
     (get-buffer-process (current-buffer)) 
     (if string string (current-kill 0)))) 

    (defun my-term-pasteboard-paste() 
     (interactive) 
     (process-send-string 
     (get-buffer-process (current-buffer)) 
     (ns-get-pasteboard))) 

    (add-hook 'term-exec-hook '(lambda() 
           (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix) 
           (goto-address-mode) 
           (define-key term-raw-map (kbd "C-y") 'my-term-paste) 
           (define-key term-raw-map (kbd "s-v") 'my-term-pasteboard-paste) 
           (let ((base03 "#002b36") 
             (base02 "#073642") 
             (base01 "#586e75") 
             (base00 "#657b83") 
             (base0 "#839496") 
             (base1 "#93a1a1") 
             (base2 "#eee8d5") 
             (base3 "#fdf6e3") 
             (yellow "#b58900") 
             (orange "#cb4b16") 
             (red "#dc322f") 
             (magenta "#d33682") 
             (violet "#6c71c4") 
             (blue "#268bd2") 
             (cyan "#2aa198") 
             (green "#859900")) 
            (setq ansi-term-color-vector 
             (vconcat `(unspecified ,base02 ,red ,green ,yellow ,blue 
                   ,magenta ,cyan ,base2)))))) 
+0

謝謝你的回答,這對我很有幫助,但我只是發現了什麼解決了問題(至少我可以手動設置顏色現在) – Sergey

7

某處,我發現這一點,它幫助我(我是一個完整的新手,但我認爲setq ansi-color-names-vector就足夠了):

(setq ansi-color-names-vector 
     ["black" "tomato" "PaleGreen2" "gold1" 
     "DeepSkyBlue1" "MediumOrchid1" "cyan" "white"]) 
(setq ansi-color-map (ansi-color-make-color-map))  # this helped 

現在ansi-color-names-vector在外殼的作品。

+0

你的任何機會知道是否有一種方法來交互測試這些顏色映射?即而不必每次更改後重新啓動shell – dolzenko

+0

@dolzenko,不知道該怎麼做 – Sergey

6

M-x customize-variable RET ansi-color-names-vector RET

現有的文本將不會受到影響,但新打印的文本(即使是在同一個shell緩衝區)將顯示新的顏色。

+0

我認爲這是最好的答案。定製變量並保存後,您可以檢查.emacs文件以查看定製的執行和保存方式。 – Qrt

相關問題