终端内的Emacs动态更改光标颜色

问题描述 投票:8回答:2

我正在尝试动态地将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。有没有人知道这方面的方法?我希望能够根据我当前的模式更改光标的颜色,这就是为什么它需要是动态的。如果有人有任何其他建议我会很高兴听到他们!

emacs terminal elisp
2个回答
5
投票

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

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


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上)。我没有发现这个解决方案比前一个更优雅,但至少它不会使屏幕闪烁。

© www.soinside.com 2019 - 2024. All rights reserved.