Emacs,如何在 M-x shell 中更改一些颜色?

8
我使用Emacs 24,希望在shell模式(ls命令)下更改目录和文件的颜色,最好是根据文件权限而定。如何实现呢?我尝试过以下操作:
(setq ansi-color-names-vector
      ["black" "red" "green" "yellow" "PaleBlue" "magenta" "cyan" "white"])
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

但是我认为这对我不起作用。我现在有一个太阳能色彩方案。但我不想改变它的颜色,只是为了 shell-mode。
编辑: 当我更改系统终端的颜色(使用我的主目录中的.dircolrs文件)时 - emacs 会读取它,但它(emacs)会在 shell-mode 中略微改变颜色 - 它使颜色变得更加深或浅。
我不知道 Emacs 为什么要这样做。
不同的 dirs 颜色(游戏、公共等): 这是系统终端: enter image description here
这是Emacs: enter image description here
这些是更改后的颜色,使用默认颜色和太阳能主题,Emacs 在蓝色背景上制作了蓝色 dirs。
我知道找一个 hack 并不是一个大问题,只想知道为什么 Emacs 会稍微改变颜色。

我的emacs shell使用由zsh设置的字体颜色,与emacs缓冲区背景颜色相匹配。你看到的不是这样吗? - asm
@AndrewMyers,我想是的,那么我需要在bash配置中更改颜色。实际上,我想知道它是否可以在emacs中完成。 - Sergey
我明白了,如果你执行 M-x customize-group ansi-colors,你会得到一个可自定义的组吗?我在那里看到了 ansi-color-names-vector。 - asm
@AndrewMyers,是的,我刚刚检查了它们,但是emacs忽略了它们,在shell-mode中仍然有不同的颜色,见编辑.. - Sergey
3个回答

8

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

执行上述命令后,现有文本不会受到影响,但新打印的文本(即使在同一个 shell 缓冲区中)将展示新的颜色。


我认为这是最好的答案。在自定义变量并保存后,您可以检查您的.emacs文件,以查看自定义是如何执行和保存的。 - Qrt

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))  ;; helped line

现在,ansi-color-names-vector 在shell中可用。

你知道有没有一种交互式测试这些颜色映射的方法吗?也就是说,不用在每次更改后都重新启动 shell。 - Ev Dolzhenko
@dolzenko,不知道怎么做。 - Sergey

6

以下是我用来设置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))))))

谢谢您的回答,这对我非常有帮助,但我刚刚发现解决了问题(至少现在我可以手动设置颜色)。 - Sergey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接