Làm cách nào tôi có thể gửi tab theo nghĩa đen để bash trong chế độ shell của emacs?


7

Tôi muốn bỏ qua hoàn toàn hỗ trợ hoàn thành chế độ comint, thay vào đó dựa vào quy trình cấp dưới để thực hiện cho tôi. Cụ thể, nếu tôi đang chạy:

  • emacs
    • chế độ vỏ
      • bash

Sau đó tôi muốn TAB được chuyển qua quy trình bash và mở rộng bởi nó.

Nếu tôi đang chạy:

  • emacs
    • chế độ vỏ
      • bash
        • ps

Sau đó tôi muốn TAB được xử lý bởi psql.

Tôi đã thử điều này trong hook-mode-hook nhưng không có kết quả:

(define-key shell-mode-map "\t" 'self-insert-command)

Khi điều này được đặt, TAB Phím chèn một tab bằng chữ trên dòng lệnh, điều này hoàn toàn không hữu ích với tôi.

Tôi cũng đã thử điều này, nhưng khi tôi nhấn TAB chẳng có gì xảy ra:

(defun cr/comint-send-tab ()
  "Send a tab character to the current buffer's process"
  (interactive)
  (comint-send-input t t)
  (process-send-string (current-buffer) "\t"))

(define-key shell-mode-map "\t" 'cr/comint-send-tab)

Tôi có thể làm cái này như thế nào?


+1: Tôi đã khám phá gần như chính xác trường hợp sử dụng tương tự khi tôi tìm thấy câu hỏi này!
SetJmp

Câu trả lời:


7

Emacs shell-mode bộ đệm không phải là thiết bị đầu cuối (nghĩa là chúng không sử dụng ptys (thiết bị giả) đầu vào. Mỗi dòng được gõ đầy đủ và chỉ được gửi khi ĐI VÀO bị ép buộc. Để xem bằng chứng, hãy chạy tty lệnh trong một shell-mode bộ đệm, và đầu ra của nó sẽ là not a tty.


1
FYI, mặc dù có vẻ như điều này không đúng vì bạn có thể thực hiện chỉnh sửa dòng lệnh với Ctrl-B, Ctrl-Fvv
Fran

3

Thử quoted-insert đó là (theo mặc định) ràng buộc với C-q . Ký tự tiếp theo bạn nhập sẽ được chèn vào bộ đệm.

Vì thế C-q CHUYỂN HƯỚNG sẽ chèn một tab theo nghĩa đen.

Tôi không biết cái này làm gì hôn mê các chế độ (liên quan đến hoàn thành bash) và không ở vị trí để kiểm tra nó.


1
Điều đó có tác dụng tương tự như lần thử thứ hai của tôi, ở trên. Không đi, thật đáng buồn.
Chris R

2

Làm thế nào về việc thử Emacs ' thiết bị đầu cuối (thay vì vỏ).

M-x hạn


1
Thuật ngữ có tập hợp vấn đề riêng của nó, bắt đầu bằng một số tương tác thú vị với bộ chỉnh sửa bashrc còn tồn tại của tôi.
Chris R

1

Bạn có thể sử dụng ký tự trích dẫn của bash, đó là Ctrl-V. Để chèn TAB theo nghĩa đen vào bash đang chạy trong bộ đệm shell của Emacs, hãy làm

C-q C-v C-q TAB

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.