Використання редактора рядків 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
@polynomial обгортки, подібні до цього, повертаються по черзі до процесу, що знаходиться за ними. Використання rlwrapдосить поширене, і ви, ймовірно, ним користувалися. Подумайте про маленькі речі псевдо оболонки, які ви отримуєте в таких речах, як mysql, sqlite, lftp тощо. Всі вони мають деяку реалізацію редактора рядків, який одночасно повертається в рядку або блоку рядків до фактичного процесора за ними. rlwrapробить хіти досить акуратно для будь-якої програми, яка приймає STDIN, але було б непогано мати прив'язки та здібності в стилі zle, а не читальні рядки, які є комусь менш обширними.
Калеб

Ви подивилися посібник для zsh- cs.elte.hu/zsh-manual/zsh_14.html ? - Я не дуже розумію ваше запитання, але Google заголовок і знайшов цю сторінку. Це може допомогти, але я не знаю.
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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.