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 プロセスを一時的に中断し、基になるターミナルにコマンドを詰め込んで、シェルにカーソルの色を変更させ、その後 emacs を再開させることによって機能します。ただし、これにより、emacs フレームが一時的に消える間、画面がちらつきます。


これは、非常にハックでシステムに依存する別のソリューションです。

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

ANSIエスケープシーケンスを端末に直接送信することで(少なくともLinuxでは)機能します(/proc/PID疑似ファイルシステムを介してアクセスされます)。このソリューションが前のソリューションよりも洗練されているとは思いませんが、少なくとも画面がちらつくことはありません。

于 2012-12-10T21:33:52.207 に答える