如何更改emacs上的光标颜色

Posted

技术标签:

【中文标题】如何更改emacs上的光标颜色【英文标题】:How to change the cursor color on emacs 【发布时间】:2011-06-06 06:47:46 【问题描述】:

我对 Emacs 的颜色进行了一些更改,现在唯一错误的是黑色背景上的黑色光标,我将不得不更改它。我该怎么办?

【问题讨论】:

【参考方案1】:

如果您运行的是最新版本的 emacs,您可以使用:

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

你可以使用任何你喜欢的颜色来代替#ffffff。对于十六进制代码的列表,谷歌说: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)))
  )

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

【讨论】:

注意这里的第一个建议只会影响当前帧。如果您想更改所有新框架的颜色,请按照@TreyJackson 在他的回答中的建议修改default-frame-alist【参考方案2】:

以上都不适合我,所以我自己做了一些研究。来自 EmacsWiki:

14.20 显示光标

在文本终端上,光标的外观由 终端,很大程度上不受 Emacs 的控制。一些终端提供 两种不同的游标:一个“可见”静态游标和一个“非常可见” 闪烁的光标。默认情况下,Emacs 使用非常明显的光标,并且 当您启动或恢复 Emacs 时切换到它。如果变量 当 Emacs 启动或恢复时,visible-cursor 为 nil,它使用普通的 光标。

在图形显示中,文本光标的更多属性可以是 改变。要自定义其颜色,请更改 :background 属性 名为 cursor 的面(请参阅面自定义)。 (其他属性 这张脸没有效果;光标下显示的文本被绘制 使用框架的背景颜色。)要更改其形状,请自定义 缓冲区局部变量游标类型;可能的值是框( 默认),hollow(空心盒子),bar(垂直条),(bar .n)(a 垂直条 n 像素宽), hbar (水平条), (hbar . n) (a 水平条 n 像素高)或 nil(根本没有光标)。

要禁用光标闪烁,请将变量 blink-cursor-mode 更改为 nil(请参阅 Easy Customization),或将行 (blink-cursor-mode 0) 添加到 你的初始化文件。或者,您可以更改光标的外观 当它通过自定义列表变量“闪烁”时 闪烁光标列表。列表中的每个元素都应具有以下形式 (开型。关型);这意味着如果光标显示为 on-type 闪烁时(其中 on-type 是光标类型之一 如上所述),然后它在闪烁时显示为关闭类型。

某些字符(例如制表符)是“超宽”的。当。。。的时候 光标定位在这样的字符上,通常用 默认字符宽度。您可以使光标伸展以覆盖 宽字符,通过将变量 x-stretch-cursor 更改为 非零值。

光标通常以不闪烁的形式出现在未选择的窗口中 空心盒子。 (对于条形光标,它改为显示为更细的条形。) 要关闭非选定窗口中的光标,请更改变量 cursor-in-non-selected-windows 为 nil。

为了使光标更加明显,您可以使用 HL Line 模式, 次要模式,突出显示包含点的线。使用 M-x hl-line-mode 在当前缓冲区中启用或禁用它。 M-x global-hl-line-mode 全局启用或禁用相同的模式。

所以这里是这样做的方法: 1.M-x customize-face,输入 2.cursor进入 3.选择你喜欢的背景颜色。 4. 点击状态,为以后的会话保存。

此处为截图:

【讨论】:

【参考方案3】:

试试这个:

(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")) @Henry 这很合理,尽管我构建的 Emacs 中的 default-frame-alist 似乎默认为 ((menu-bar-lines . 1) (tool-bar-lines . 1)) - 这不会被严重错过。调整答案。【参考方案4】:

如果你使用 X 窗口系统,试试把这样的东西放到.Xdefaults:

*cursorColor: #ff7700

【讨论】:

【参考方案5】:

您可以使用它来自定义 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)

【讨论】:

请注意,在这种情况下您不需要 progn 包装器(即在函数的顶层)。 这对光标@0xAX的颜色没有任何改变 设置所有缓冲区的背景【参考方案6】:

还有一个命令行选项:

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

【讨论】:

【参考方案7】:

请记住,如果您使用的是 iTerm2,则必须更改其设置,否则不会更改 .emacs 配置文件。

Preferences => Profiles => Color => Cursor Colors

【讨论】:

【参考方案8】:

对我来说,使用其他答案的建议在 init 上设置光标颜色并不会真正起作用,因为可能会干扰我正在加载的主题和包。我的解决方案是添加以下内容:

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

这个解决方案使得对 set-cursor-color 的调用只会在 init 完成后 5 秒发生,从而为所有其他包和主题更改提供足够的时间来完全加载。

【讨论】:

以上是关于如何更改emacs上的光标颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何把vim的光标设置成emacs闪烁的那种

如何在苹果Mac上更改“终端”窗口的颜色光标样式?

eclipse如何更改光标颜色

如何更改 Python 文档字符串的 Emacs 字体?

如何在 Tkinter 中更改文本光标颜色?

如何在 android 中更改 EditText 气泡颜色(光标下)?