การใช้ตัวแก้ไขบรรทัดของ zsh เพื่อล้อมรอบกระบวนการย่อย


22

เป็นไปได้หรือไม่ที่จะใช้ตัวแก้ไขบรรทัดในตัวของ zsh ( zle) เพื่อป้อนข้อมูลเข้าสู่กระบวนการย่อย? นั่นคือผมอยากจะทำงานzlewrap mycommandที่zlewrapเป็นฟังก์ชั่น zsh และmycommandเป็นโปรแกรมใด ๆ ที่เพียงแค่อ่านบรรทัดจาก stdin; zlewrapได้อย่างมีประสิทธิภาพจะช่วยให้ความสามารถในการแก้ไขบรรทัด zle mycommandไป นี่คือรูปแบบของrlwrapที่ใช้เพียงแค่นี้ แต่มี readline และไม่ zle สำหรับการแก้ไขบรรทัด


2
นี้มีลักษณะที่เป็นประโยชน์: zsh.org/mla/users/2004/msg00917.html มันไม่ง่ายเหมือนคำสั่งเดียว แต่คุณสามารถปรับสคริปต์นี้ให้เข้ากับโปรแกรมของคุณ (อ่านการติดตามเพื่อแก้ไข)
imgx64

ปัญหาหนึ่งที่ฉันมีเมื่อคิดถึงวิธีแก้ปัญหาคือคุณจะระบุได้อย่างไรเมื่อคุณต้องการ 'แก้ไข' ใน ZLE และเมื่อคุณต้องการรอ 'mycommand' เพื่อกลับมา มันจะกลับมาบรรทัดเดียวเท่านั้น?
พหุนาม

2
@ พหุนามโพลีโนเมียแบบนี้กลับหนึ่งบรรทัดในเวลาหนึ่งไปยังกระบวนการที่อยู่เบื้องหลังพวกเขา การใช้งานrlwrapค่อนข้างแพร่หลายและคุณอาจเคยใช้มัน ลองนึกถึงสิ่งที่เชลล์แบบหลอกเล็ก ๆ น้อย ๆ ที่คุณได้รับในรูปแบบเช่น mysql, sqlite, lftp เป็นต้นพวกเขาทุกคนมีการใช้งานตัวแก้ไขบรรทัดที่ส่งคืนบรรทัดหรือบล็อกของบรรทัดในเวลาเดียวกันกับตัวประมวลผลที่แท้จริง rlwrapได้รับความนิยมค่อนข้างมากสำหรับโปรแกรมใด ๆ ที่ยอมรับ STDIN แต่มันก็ดีที่มีการผูกและความสามารถในสไตล์ zle มากกว่า readlines ซึ่งเป็นคนที่กว้างขวางน้อยกว่า
Caleb

คุณดูคู่มือสำหรับzsh- cs.elte.hu/zsh-manual/zsh_14.htmlหรือไม่ - ฉันไม่ค่อยเข้าใจคำถามของคุณ แต่ Googled ชื่อและพบหน้านั้น มันอาจช่วยได้ แต่ฉันไม่รู้
Kevdog777

1
ตกลงฉันแค่พยายามช่วยเพราะฉันเห็นคำถามของคุณไม่ได้รับคำตอบในปี ขออภัยความคิดเห็นของฉันไม่ดีพอ
Kevdog777

คำตอบ:


4

นี่คือวิธีที่คุณสามารถทำได้ถ้าใช้หน้าจอ GNU:

ใส่ไฟล์ชื่อzfของคุณ$PATHด้วย:

#! /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"

จากนั้นเรียกใช้ตัวกรองในหน้าจอเป็น

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

แทนที่ / dev / pts / x ด้วย Windows pty ที่แท้จริง (เอาต์พุตของttyคำสั่งในหน้าต่าง) และ ">" พร้อมท์ให้แสดง

จะมีข้อผิดพลาดในการแสดงผลเป็นครั้งคราวเนื่องจากทั้ง zsh และแอปพลิเคชันจะเขียนลงในเทอร์มินัลด้วยวิธีที่ไม่ผ่านการรับรอง

เป็นต้นฉบับที่http://www.zsh.org/mla/users/2005/msg00186.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.