我正在尝试动态地将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。有没有人知道这方面的方法?我希望能够根据我当前的模式更改光标的颜色,这就是为什么它需要是动态的。如果有人有任何其他建议我会很高兴听到他们!
我想你想用send-string-to-terminal
。
例如。 (send-string-to-terminal "\033]12;red\007")
。
这是一个非常强硬的解决方案 - 我希望有人能找到更好的解决方案:
(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上)。我没有发现这个解决方案比前一个更优雅,但至少它不会使屏幕闪烁。