8

我正在尝试将 Emacs 中光标的颜色动态更改为另一种颜色。

我正在使用emacs -nw终端 Emacs。我使用的终端是 Rxvt-Unicode (Urxvt)。

由于 Emacs 无法(我认为)对终端进行更改,(set-cursor-color "red")因此无法正常工作。为了更改终端的光标颜色,我可以运行 echo -ne '\033]12;red\007'. 这会将光标的颜色更改为红色。

我在 Emacs 中尝试做的是在其中运行这个命令。 M-x shell-command RET echo -ne '\033]12;red\007' RET

但是,Emacs 将转义回显的字符串并将其打印在窗口底部,而不实际对光标进行任何更改。

我真的不知道我还能从这里做什么,我不想使用 Emacs GUI。有谁知道解决这个问题的方法?我希望能够根据我当前的模式更改光标的颜色,这就是为什么它需要是动态的。如果有人有任何其他建议,我会很高兴听到他们的意见!

4

2 回答 2

5

我想你想用send-string-to-terminal.

例如(send-string-to-terminal "\033]12;red\007")

于 2012-12-11T02:18:46.697 回答
2

这是一个非常老套的解决方案——我希望有人能找到更好的解决方案:

(suspend-emacs "echo -ne '\\033]12;red\\007'; fg\n")

它的工作原理是暂时挂起 emacs 进程并将命令填充到底层终端中,​​以使 shell 更改光标颜色并在此之后恢复 emacs。但是,这会导致屏幕闪烁,而 emacs 框架会暂时消失。


这是另一个非常hackish且依赖于系统的解决方案:

(shell-command (format "echo -ne '\\033]12;red\\007' > /proc/%d/fd/1" (emacs-pid)))

它通过直接将 ANSI 转义序列发送到终端(通过/proc/PID伪文件系统访问)来工作(至少在 Linux 上)。我没有发现这个解决方案比前一个解决方案更优雅,但至少它不会使屏幕闪烁。

于 2012-12-10T21:33:52.207 回答