Sử dụng trình chỉnh sửa dòng của zsh để bao quanh các quy trình con


22

Có thể sử dụng trình soạn thảo dòng tích hợp ( zle) của zsh để cung cấp đầu vào cho một quy trình con không? Đó là, tôi muốn chạy zlewrap mycommandở đâu zlewraplà hàm zsh và mycommandlà bất kỳ chương trình nào chỉ đọc các dòng từ stdin; zlewrapsẽ cung cấp hiệu quả khả năng chỉnh sửa dòng của zle mycommand. Đây là mô hình rlwrapchỉ thực hiện điều này, nhưng với đường dẫn và không phải là zle để chỉnh sửa dòng.


2
Điều này có vẻ hữu ích: zsh.org/mla/users/2004/msg00917.html . Nó không dễ như một lệnh đơn lẻ, nhưng bạn có thể điều chỉnh tập lệnh này cho chương trình của mình (đọc phần tiếp theo để sửa).
imgx64

Một vấn đề tôi gặp phải khi nghĩ đến các giải pháp là làm thế nào để bạn chỉ ra khi nào bạn muốn 'chỉnh sửa' trong ZLE và khi nào bạn muốn đợi 'mycommand' trở lại? Nó chỉ bao giờ trở lại một dòng?
đa thức

2
Các hàm bao @polynomial như thế này trả về một dòng tại một thời điểm cho quá trình đằng sau chúng. Việc sử dụng rlwrapkhá phổ biến và có lẽ bạn đã sử dụng nó. Hãy suy nghĩ về những thứ giả vỏ nhỏ mà bạn có trong những thứ như mysql, sqlite, lftp, v.v. Tất cả họ đều có một số trình soạn thảo dòng trả về dòng hoặc khối dòng tại một bộ xử lý thực tế phía sau chúng. rlwrapthực hiện các cú đánh khá gọn gàng cho bất kỳ chương trình nào chấp nhận STDIN, nhưng sẽ rất tuyệt nếu có các ràng buộc và khả năng theo kiểu zle thay vì các đường dẫn là một người ít mở rộng hơn.
Caleb

Bạn đã xem hướng dẫn cho zsh- cs.elte.hu/zsh-manual/zsh_14.html chưa? - Tôi hoàn toàn không hiểu câu hỏi của bạn, nhưng đã lấy tiêu đề và tìm thấy trang đó. Nó có thể giúp, nhưng tôi không biết.
Kevdog777

1
Ok, tôi chỉ đang cố gắng giúp đỡ, vì tôi thấy câu hỏi của bạn đã không được trả lời trong hơn một năm. Xin lỗi nhận xét của tôi không đủ tốt.
Kevdog777

Câu trả lời:


4

Đây là cách bạn có thể làm nếu sử dụng màn hình GNU:

Đặt một tệp được gọi zftrong của bạn $PATHvới:

#! /usr/bin/env zsh
zmodload -i zsh/zle
trap 'printf "\03"; exit' INT
HISTSIZE=100
while a=; vared -p "${2:-zle> }" -eh a; do
{
  s=$(stty -g)
  stty -echo -iexten -isig lnext '' werase '' eof '' rprnt '' kill ''
  printf "%s\r" "$a"
  print -rs -- "$a"
  stty "$s"
} < $1
done
printf "\04"

Và sau đó, chạy bộ lọc trong màn hình như

<Ctrl-A>:exec .!. zf /dev/pts/x "> "

Thay thế / dev / pts / x bằng pty Windows thực tế (đầu ra của ttylệnh trong cửa sổ) và ">" bằng dấu nhắc hiển thị.

Thỉnh thoảng sẽ có những trục trặc hiển thị vì cả zsh và ứng dụng sẽ ghi vào thiết bị đầu cuối theo cách không xác định.

Bản gốc tại http://www.zsh.org/mla/users/2005/msg00186.html

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.