如何在Emacs中更改光标颜色

36

我在Emacs中做了一些颜色上的更改,现在唯一的问题是光标变成了黑色,在黑色背景上看不清,我需要解决这个问题。我该怎么办?

9个回答

46

如果您正在运行较新版本的emacs,您可以使用:

; Set cursor color to white
(set-cursor-color "#ffffff") 

你可以使用任何颜色代替#ffffff。要获取16进制代码列表,请搜索谷歌并访问http://www.tayloredmktg.com/rgb/


也许你会喜欢这个... 以下代码将在每次闪烁时更改光标颜色。只需评估代码即可运行:

; Using in Emacs 24.0 

(defvar blink-cursor-colors (list  "#92c48f" "#6785c5" "#be369c" "#d9ca65")
  "On each blink the cursor will cycle to the next color in this list.")

(setq blink-cursor-count 0)
(defun blink-cursor-timer-function ()
  "Zarza wrote this cyberpunk variant of timer `blink-cursor-timer'. 
Warning: overwrites original version in `frame.el'.

This one changes the cursor color on each blink. Define colors in `blink-cursor-colors'."
  (when (not (internal-show-cursor-p))
    (when (>= blink-cursor-count (length blink-cursor-colors))
      (setq blink-cursor-count 0))
    (set-cursor-color (nth blink-cursor-count blink-cursor-colors))
    (setq blink-cursor-count (+ 1 blink-cursor-count))
    )
  (internal-show-cursor nil (not (internal-show-cursor-p)))
  )

请注意,此代码替换了 emacs 函数 'frame.el' 中的 'blink-cursor-timer-function'。


3
请注意,这里的第一个建议仅会影响当前帧。如果您想要更改所有新帧的颜色,请按照@TreyJackson在他的答案中提供的建议修改default-frame-alist - Scott Weldon

20
没有一个方法对我有用,所以我自己进行了一点研究。从EmacsWiki得知:
14.20 显示光标
在文本终端上,光标的外观由终端控制,Emacs很少能够控制。一些终端提供两种不同的光标:一个“可见”的静态光标和一个“非常可见”的闪烁光标。默认情况下,Emacs使用非常可见的光标,并在启动或恢复Emacs时切换到该光标。如果变量visible-cursor在Emacs启动或恢复时为nil,则使用普通光标。
在图形显示器上,可以改变文本光标的属性更多。要自定义其颜色,请更改名为cursor的face的:background属性(请参阅Face Customization)。 (此face的其他属性没有效果;在光标下方显示的文本是使用框架的背景颜色绘制的。) 要更改其形状,请自定义缓冲区局部变量cursor-type;可能的值为box(默认值),hollow(空心框),bar(垂直条) ,(bar . n)(n像素宽的垂直线),hbar(水平线),(hbar . n)(n像素高的水平线)或nil(没有光标)。
要禁用光标闪烁,请将变量blink-cursor-mode更改为nil(请参阅Easy Customization),或将行(blink-cursor-mode 0)添加到init文件中。另外,您可以通过自定义列表变量blink-cursor-alist来更改光标在“闪烁关闭”时的外观。列表中的每个元素应具有表单(on-type . off-type);这意味着如果在闪烁时显示为on-type(其中on-type是上述光标类型之一),则在闪烁关闭时显示为off-type。
某些字符,例如制表符,是“额外宽”的。当光标位于此类字符上方时,通常使用默认字符宽度进行绘制。您可以通过将变量x-stretch-cursor更改为非零值来使光标拉伸以覆盖宽字符。
光标通常在未选择的窗口中以非闪烁的空心框出现。(对于条形光标,它将作为较细的条出现。)要关闭非选定窗口中的光标,请将变量cursor-in-non-selected-windows更改为nil。
要使光标更加可见,可以使用HL线模式,这是一个次要模式,可以突出显示包含点的行。在当前缓冲区中启用或禁用它,请使用M-x hl-line-mode。M-x global-hl-line-mode在全局范围内启用或禁用相同的模式。
所以这是实现它的方法: 1. 执行M-x customize-face命令,然后回车。 2. 输入cursor,然后回车。 3. 选择你喜欢的背景颜色。 4. 点击“state”,保存设置以供将来使用。
以下是屏幕截图: enter image description here enter image description here enter image description here enter image description here

11

试一下这个:

(setq default-frame-alist
  '((cursor-color . "palegoldenrod")))

如果你想要保留 default-frame-alist 中的其他值,可以使用 Mark 的建议:

(add-to-list 'default-frame-alist '(cursor-color . "palegoldenrod"))

default-frame-alist 通常已经包含一些 X 特定的内容(例如默认框架大小)。你是不是想说 (add-to-list 'default-frame-alist '(cursor-color . "palegoldenrod")) - Alexander Gromnitsky
@Henry 这很合理,不过我的 Emacs 构建版本中的 default-frame-alist 默认似乎只有 ((menu-bar-lines . 1) (tool-bar-lines . 1)) - 这个不会被太过想念。我会调整回答。 - Trey Jackson

5
如果您使用X窗口系统,请尝试将以下内容添加到.Xdefaults文件中:
*cursorColor: #ff7700

2

对我而言,按照其他答案的建议在初始化时设置光标颜色并不能真正起作用,因为可能会与我加载的主题和软件包发生干扰。我的解决方案是添加以下内容:

(add-hook 'after-init-hook
          (lambda () (run-with-timer 5 nil #'set-cursor-color "SystemRedColor")))

这个解决方案使得对set-cursor-color的调用将会在初始化完成5秒后才会发生,从而充分留出时间让其他所有包和主题更改完全加载。


1
请记住,如果您正在使用iTerm2,则必须更改其设置,否则对.emacs配置文件的更改将不会生效。

首选项 => 配置文件 => 颜色 => 光标颜色

enter image description here


1

我在我的.emacs文件中添加了(set-face-attribute 'cursor nil :background "#A0F"),使我的光标变成了漂亮的紫色。

我不确定版本和系统信息有多重要,但我在Ubuntu 22.04.1 LTS上以GUI模式运行GNU Emacs 27.1。(Emacs 28.2可从GNU网站下载,因此可能会有所不同。)


1

你可以使用这个来自定义emacs的颜色:

(defun good-colors ()
  (progn
     ;; Set cursor color
     (set-cursor-color "Black")

     (set-background-color "grey46")
     (set-foreground-color "White")
     (set-border-color "dark orange")
     (set-mouse-color "dark orange") 
))

(good-colors)

4
请注意,在这种情况下您不需要在函数的顶层使用progn包装器。 - phils
这并没有改变光标@0xAX的颜色。 - alper
这将设置所有缓冲区的背景。 - alper

1

还有一个命令行选项:

--cursor-color, -cr COLOR       color of the Emacs cursor indicating point

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