2012-12-10 34 views
7

Tôi đang cố gắng thay đổi màu của con trỏ bên trong Emacs thành màu khác một cách linh hoạt.Emacs bên trong màu con trỏ thay đổi thiết bị đầu cuối động

Tôi đang sử dụng emacs -nw cho thiết bị đầu cuối Emacs. Thiết bị đầu cuối tôi đang sử dụng là Rxvt-Unicode (Urxvt).

Vì Emacs không thể (tôi nghĩ) thay đổi thiết bị đầu cuối, (set-cursor-color "red") sẽ không hoạt động. Để thay đổi màu con trỏ của thiết bị đầu cuối, tôi có thể chạy echo -ne '\033]12;red\007'. Điều này thay đổi màu của con trỏ thành màu đỏ.

Những gì tôi đã cố gắng làm trong Emacs là chạy lệnh này bên trong nó. M-x shell-command RET echo -ne '\033]12;red\007' RET

Tuy nhiên, Emacs sẽ thoát khỏi chuỗi lặp lại và in ở cuối cửa sổ và không thực sự thực hiện bất kỳ thay đổi nào đối với con trỏ.

Tôi thực sự không biết mình có thể làm gì khác ở đây, tôi không muốn sử dụng GUI Emacs. Có ai biết cách này không? Tôi muốn có thể thay đổi màu sắc của con trỏ tùy thuộc vào chế độ hiện tại của tôi, đó là lý do tại sao nó cần phải năng động. Nếu bất cứ ai có bất cứ đề nghị nào khác, tôi sẽ rất vui khi được nghe chúng!

+0

'shell-command' chạy lệnh trong một shell kém hơn, vì vậy nó sẽ không có hiệu lực trong các Emacs chứa. Tôi không biết làm sao để Emacs có thể lặp lại các chuỗi thoát trực tiếp ... Tôi đã thử sử dụng (thông điệp ...) với chuỗi thoát trong đó nhưng không may mắn. – scottfrazer

Trả lời

5

Tôi nghĩ bạn muốn sử dụng send-string-to-terminal.

Ví dụ: (send-string-to-terminal "\033]12;red\007").

+0

Có vẻ như đây là giải pháp tốt nhất! Cảm ơn rất nhiều. Làm tôi đau khổ phải không chấp nhận câu trả lời của Francesco, nhưng câu trả lời này hiệu quả nhất. Vẫn cảm ơn cả hai bạn vì sự giúp đỡ của bạn! – Attic

+0

Ok bây giờ tôi cảm thấy ngớ ngẩn: (mặc dù tôi nghĩ rằng nó hoạt động (và nó không) tuy nhiên bất cứ khi nào tôi chạy chức năng nó in văn bản trong trình soạn thảo chính nó.Vì vậy, điều này sẽ không làm việc tôi sợ. Để lại câu hỏi này không được trả lời lâu hơn một chút và nếu không tôi sẽ phải chấp nhận câu trả lời của Francesco một lần nữa.Xin lỗi của tôi .. – Attic

+0

Điều này chắc chắn có vẻ như đó là một con đường đúng đắn, nhưng tôi không hiểu tại sao nó không hoạt động như kỳ vọng...(Trong thiết lập của tôi, nó không thay đổi màu con trỏ và in chuỗi ANSI trong thiết bị đầu cuối; Tôi phải chạy 'M-x vẽ lại hiển thị' để loại bỏ nó) – Francesco

2

Đây là một giải pháp rất hackish - Tôi hy vọng ai đó sẽ tìm thấy một tốt hơn một:

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

Nó hoạt động bằng cách tạm thời đình chỉ việc emacs quá trình và nhồi lệnh vào terminal cơ bản để làm cho vỏ thay đổi con trỏ màu sắc và tiếp tục emacs sau đó. Tuy nhiên, điều này làm cho màn hình nhấp nháy trong khi khung emacs tạm thời biến mất.


Dưới đây là một giải pháp rất hackish và hệ thống phụ thuộc vào:

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

Nó hoạt động (ít nhất là trên Linux) bằng cách trực tiếp gửi các dãy thoát ANSI đến thiết bị đầu cuối (được truy cập thông qua /proc/PID hệ thống tập tin giả). Tôi không tìm thấy giải pháp này thanh lịch hơn so với trước đó, nhưng ít nhất nó không làm cho màn hình nhấp nháy.

+0

Điều này dường như hoạt động, màn hình nhấp nháy hơi khó chịu nhưng có thể không có cách nào tốt hơn. Nếu ai đó có thể nghĩ ra một cách tốt hơn sẽ tuyệt vời hơn. – Attic

+0

Ngay cả khi nó không "thanh lịch" nó hoạt động! Cảm ơn rất nhiều vì giải pháp này! – Attic

Các vấn đề liên quan