2012-12-10 3 views
7

Sto provando a cambiare il colore del mio cursore all'interno di Emacs su un altro colore in modo dinamico.Emacs all'interno del terminale cambia il colore del cursore in modo dinamico

Sto usando emacs -nw per il terminale Emacs. Il terminale che sto usando è Rxvt-Unicode (Urxvt).

Dato che Emacs non può (credo) apportare modifiche al terminale, (set-cursor-color "red") non funzionerà. Per cambiare il colore del cursore del terminale, posso eseguire echo -ne '\033]12;red\007'. Questo cambia il colore del cursore in rosso.

Quello che ho provato a fare in Emacs è eseguire questo comando al suo interno. M-x shell-command RET echo -ne '\033]12;red\007' RET

Tuttavia, Emacs sfuggirà la stringa con echo e stamparlo nella parte inferiore della finestra, e in realtà non apportare alcuna modifica al cursore.

Davvero non so cos'altro posso fare da qui, non voglio usare la GUI di Emacs. Qualcuno conosce un modo alternativo? Voglio essere in grado di cambiare il colore del mio cursore in base alla mia modalità corrente, che è il motivo per cui deve essere dinamico. Se qualcuno ha altri suggerimenti sarei felice di sentirli!

+0

'shell-command' esegue il comando in una shell inferiore, quindi non avrà effetto nel contenente Emacs. Non so come ottenere Emacs per echo direttamente le sequenze di escape ... Ho provato a usare (messaggio ...) con la sequenza di escape, ma senza fortuna. – scottfrazer

risposta

5

Penso che vogliate usare send-string-to-terminal.

E.g. (send-string-to-terminal "\033]12;red\007").

+0

Sembra che questa sia la soluzione migliore! Molte grazie. Mi spiace dover annullare la risposta di Francesco, ma questo funziona meglio. Grazie ancora a tutti voi per il vostro aiuto! – Attic

+0

Ok ora mi sento stupido :(anche se ho pensato che funzionasse (e lo fa) comunque ogni volta che eseguo la funzione stampa il testo nell'editor stesso, quindi non funzionerà ho paura. lascia questa domanda senza risposta ancora per un po 'e altrimenti dovrò accettare di nuovo la risposta di Francesco. Le mie scuse .. – Attic

+0

Questo sicuramente sembra che sia la strada giusta da percorrere, ma non capisco perché non funziona come previsto...(Nella mia configurazione, non cambia il colore del cursore e stampa la sequenza ANSI nel terminale, devo eseguire 'M-x ridisegna-display' per sbarazzartene) – Francesco

2

Questa è una soluzione molto hackish - spero qualcuno troverà uno migliore:

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

Funziona sospendendo temporaneamente i comandi emacs processo e imbottiture nel terminale sottostante per rendere il guscio cambiare il cursore colore e riprendi emacs dopo. Tuttavia, ciò provoca lo sfarfallio dello schermo mentre il riquadro emacs scompare temporaneamente.


Ecco un'altra soluzione molto hackish e dipendente dal sistema:

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

Funziona (almeno su Linux) inviando direttamente la sequenza di escape ANSI al terminale (a cui si accede attraverso il /proc/PID pseudo-file system). Non trovo questa soluzione più elegante della precedente, ma almeno non fa lo sfarfallio dello schermo.

+0

Sembra funzionare, lo sfarfallio dello schermo è un po 'fastidioso ma potrebbe non esserci un modo migliore. Se qualcuno riuscisse a trovare un modo migliore sarebbe fantastico. – Attic

+0

Anche se non è "elegante" funziona! Grazie mille per questa soluzione! – Attic