Bất kỳ cách nào để làm cho lời nhắc và đầu ra trước đó không thể chỉnh sửa trong chế độ shell / term-term?


9

Đây là một câu hỏi hời hợt.

Mặc dù ansi-termbắt đầu hoạt động chính xác khi tôi mở lần đầu tiên, nó dường như chuyển sang chế độ 'có thể chỉnh sửa' sau một vài lệnh, ví dụ: khi tôi thực hiện C-a(bắt đầu dòng) theo sau C-k(dòng giết), nó sẽ xóa sạch toàn bộ dấu nhắc.

Đối với sự tỉnh táo thẩm mỹ của tôi, có cách nào để làm cho lời nhắc và đầu ra trước đó không thể chỉnh sửa (cho shell)? (Được cập nhật để loại trừ thuật ngữ ansi với những khác biệt có ý nghĩa.)

Tôi đang sử dụng zsh trong Emacs 24.4; HĐH là LXDE (Ubuntu 14.04) thông qua Hộp ảo.

(Lý tưởng nhất là tôi vẫn có thể di chuyển con trỏ của mình xung quanh ...)


1
Bạn có đang sử dụng hệ điều hành "kỳ quặc" không? Thông thường trong chế độ shell Ca nhảy đến điểm bắt đầu của dòng lệnh, sau dấu nhắc và Ca thứ hai được yêu cầu để nhảy đến điểm bắt đầu. Trên Windows và Solaris (ở kiếp trước) tôi thường thấy rằng Ca đã nhảy lên ngay từ đầu, máy ảnh trên MacOS, Linux, v.v. nó hoạt động như mong đợi đối với tôi.
Đánh dấu Aufflick

@Mark A: Tôi đã cập nhật bài viết gốc để thêm một vài chi tiết, bao gồm cả thiết lập hiện tại của tôi.
iceman

Hành vi được mô tả của âm thanh thuật ngữ ansi giống như bạn đã chuyển sang chế độ đường truyền bằng một mặc định kỳ lạ hoặc C-c C-j. Hãy thử tìm hiểu mặc định đó hoặc chuyển sang chế độ char với C-c C-k.
wasamasa

1
shell-mode/ term-modetương ứng làm / không xuất phát từ comint-mode, bạn đang hỏi hai câu hỏi rất khác nhau cùng một lúc ở đây. Tâm chia điều này thành hai câu hỏi riêng biệt?
Purple_arrows

Câu trả lời:


16

COMINT chế độ -derived (như shell, ielm, ...) chức năng hỗ trợ bộ lọc, đoạn sau đây làm cho sản lượng và kịp thời chỉ đọc:

(setq comint-prompt-read-only t)

(defun my-comint-preoutput-turn-buffer-read-only (text)
  (propertize text 'read-only t))

(add-hook 'comint-preoutput-filter-functions 'my-comint-preoutput-turn-buffer-read-only)

Đối với ansi-term(không bắt nguồn từ comint ), nó có hai chế độ hoạt động, char modevẫn trung thực với các ràng buộc của vỏ và phần mềm chạy trong nó càng tốt và line modecho phép bạn chỉnh sửa bộ đệm theo ý muốn. Nói chung, bạn nên ở lại char mode(bị ràng buộc C-c C-k) và đôi khi chuyển sang line mode(bị ràng buộc C-c C-j) để chỉnh sửa đầu ra lệnh.


Đây là thực sự xinh đẹp, nhưng ngừng làm việc ... :( Tôi có một giải pháp làm việc mà có đang đáng kể hơn → github.com/michalrus/dotfiles/commit/...
Michal Rus

Dunno, vẫn làm việc cho tôi vào ngày 25.2.
wasamasa

Theo một nghĩa nào đó, bạn không thể xóa văn bản này, nhưng bạn có thể chèn mới, xen kẽ với văn bản bất biến đó.
Michal Rus

1
Tôi thấy, đã không kiểm tra cụ thể.
wasamasa

Rất tiếc, một thay đổi nữa cho bất cứ ai tìm kiếm. Tôi đã bỏ lỡ một số sơ hở trước đây. Điều này làm việc hoàn hảo cho tôi. github.com/michalrus/dotfiles/blob/
Michal Rus

2

Khi trộn termvới shell-mode, biến comint-use-prompt-regexpdường như được đặt đôi khi. Điều này gây ra hành vi hơi giống như bạn đã mô tả: trong chế độ shell C-a sẽ đi đến đầu dòng, C-ksẽ giết toàn bộ dòng, bao gồm cả dấu nhắc.

Một sửa chữa đơn giản là để thiết lập lại comint-use-prompt-regexpvới C-: (setq comint-use-prompt-regexp nil), buộc chế độ vỏ để tính văn bản sử dụng các phím di chuyển con trỏ nhận thức được.

Có một mô tả về cách thức này hoạt động trong hướng dẫn sử dụng GNU Emacs tại đây: https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html


1

Hãy thử tùy chỉnh biến comint-prompt-read-onlythành t.

Điều này sẽ ảnh hưởng shell-modevà những người khác bắt nguồn từ comint-mode, nhưng không term-mode.

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.