Đi lạc 4m trước dấu nhắc với Zsh trong Mx ansi-term


10

Gần đây tôi đã đọc Running Shells trong Emacs và dành một chút thời gian để điều chỉnh lời nhắc Zsh phức tạp của tôi để hoạt động với các khả năng hạn chế của M-x shellM-x ansi-term.

Sau nỗ lực này, giờ đây tôi cuối cùng cũng có thể sử dụng Zsh từ bên trong Emacs, tuy nhiên có một sự phiền toái nhỏ gọn với M-x ansi-term. Tôi luôn luôn thấy văn bản đi lạc 4mtrước lời nhắc.

Văn bản đi lạc trước khi nhắc

Như bạn có thể thấy, hiện tượng này dường như độc lập với chủ đề nhanh chóng thực tế. Nó cũng xuất hiện với bất kỳ lời nhắc tích hợp nào, ngay cả những lời nhắc đơn giản không sử dụng bất kỳ ký tự điều khiển ưa thích nào. Như một vấn đề thực tế, nó thậm chí xảy ra với dấu nhắc mặc định, tức là nếu tôi khởi động Zsh mà không có tôi .zshrc.

Chà, nó thực sự chỉ là một phiền toái nhỏ, và tôi sẽ không thực sự bận tâm nếu tôi không thể thoát khỏi nó. M-x shellDù sao tôi cũng thích nhất , nơi mà vấn đề này không xảy ra.

Nhưng nó thực sự làm tôi khó chịu vì tôi không thể tìm ra nguyên nhân của vấn đề này, mặc dù tôi thực sự đã cố gắng gỡ lỗi nó. Tuy nhiên, tôi phải nói rằng sự hiểu biết của tôi về thiết bị đầu cuối khá hạn chế, vì vậy tôi có thể đã bỏ lỡ điều rất rõ ràng.

Tôi đang dùng OS X 10.10. My Emacs là 25.0.50, được xây dựng trực tiếp từ thân cây với Homebrew và không có cờ đặc biệt. Zsh là 5.0.5, như được bao gồm với Yosemite, nhưng sự cố cũng xảy ra với 5.0.7 được cài đặt qua Homebrew.

Bất cứ ai có thể làm sáng tỏ về vấn đề này?


Hãy thử đặt xuất TERM = xterm-256color trong .zshrc hoặc (setq system-used-terminfo nil) .
kmicu

system-user-terminfokhông thay đổi gì cả. Thay đổi đã $TERMkhắc phục vấn đề, nhưng đó không thể là giải pháp, phải không? Xét cho cùng, về cơ bản, đó là một lời nói dối: ansi-termkhông phải là xterm và chắc chắn không hỗ trợ 256 màu.
lunaryorn 14/1/2015

4m là một tạo phẩm từ mã thoát ANSI được sử dụng để xác định màu, ví dụ: \x1b[37;4mchỉ định màu trắng với 37 và văn bản được gạch chân bằng 4. Tôi không thể tái tạo vấn đề của bạn. Zsh của tôi là 5.0.7'echo $ TATE ' trong thuật ngữ ansi cho tôi màu eterm , emacs của tôi là 24.4.1 . Tôi cũng đã kiểm tra phiên bản mặc định 'env HOME = ~ / tmp / emacstest emacs -Q' và tôi không thể thấy bất kỳ vấn đề nào.
kmicu

@kmicu Trên OS X 10.10, tôi luôn có thể tái tạo vấn đề với emacs -Qvà không có cấu hình Zsh nào cả.
lunaryorn

Câu trả lời:


10

Rõ ràng vấn đề này là do thiếu terminfo choeterm-color . Tôi đã cố gắng khắc phục sự cố bằng cách làm theo các hướng dẫn trong câu trả lời đó để cài đặt một mục thích hợp vào cơ sở dữ liệu terminfo. Đặc biệt:

$ tic -o ~/.terminfo /usr/local/share/emacs/25.0.50/etc/e/eterm-color.ti

Tôi vẫn không chắc tại sao điều đó lại cần thiết. term.elthực sự xuất $TERMINFObiến biến trỏ đến thư mục đó, vì vậy shell sẽ có thể tìm terminfo. Zsh dường như bỏ qua thư mục, mặc dù

~/.terminfoMặc dù vậy, nó nhìn vào , vì vậy lệnh trên làm cho mục terminfo có sẵn cho Zsh.

Tôi rất vui nếu bất cứ ai có thể cung cấp một lời giải thích tốt hơn hoặc một giải pháp không cần can thiệp thủ công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.