копия zsh и вставка как emacs

Все, что я когда-либо хотел узнать об оболочке (Bash), может быть найдено заранее Руководством по созданию сценариев Bash http://tldp.org/LDP/abs/html/. Существует несметное число примеров здесь также.

Это включает весь sematics и информацию о "стандартной библиотеке", можно найти здесь http://www.gnu.org/manual/manual.html

10
16.10.2012, 00:44
4 ответа

У Zsh есть встроенный буфер обмена, который не общается с другими приложениями. Так как это очень scriptable, можно заставить его общаться с несколькими строками в Вашем ~/.zshrc. Вам будут нужны xclip или xsel. Посмотрите Вставку от буфера обмена до vi-enabled zsh или колотите оболочку за подтверждение концепции в vi режиме. Вот соответствующий код для emacs режима (Вы, вероятно, захотите сделать что-то подобное другому kill-* виджеты).

x-copy-region-as-kill () {
  zle copy-region-as-kill
  print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-copy-region-as-kill
x-kill-region () {
  zle kill-region
  print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-kill-region
x-yank () {
  CUTBUFFER=$(xsel -o -b </dev/null)
  zle yank
}
zle -N x-yank
bindkey -e '\ew' x-copy-region-as-kill
bindkey -e '^W' x-kill-region
bindkey -e '^Y' x-yank

Это использует буфер обмена X11 (обычно получал доступ с Ctrl+C/Ctrl+V); удалите -b опция использовать основной выбор X11 вместо этого (автоматическая копия на выборе и вставка со средней кнопкой мыши).

11
27.01.2020, 20:01
  • 1
    Если Вы используете vi режим, просто заменяете kill-region с vi-delete и yank с vi-put-after и т.д. Так же перенеситесь vi-yank, и другие. (Я не нашел способ сделать это более централизованно) –  olejorgenb 05.09.2017, 18:19

Можно хотеть взглянуть на http://stchaz.free.fr/mouse.zsh, который, кроме того, можно добавить, что поддержка мыши также пытается взаимодействовать с X Буферами обмена.

1
27.01.2020, 20:01

Как вы можете узнать на WikiDevi или веб-сайте Asus , этот маршрутизатор работает под управлением AsusWRT . AsusWRT является производным от Tomato , который сам является одним из потомков StartWRT , дистрибутива Linux для сетевых устройств низкого класса, таких как маршрутизаторы.

Только с 8MB флэш-памяти вы не сможете установить дополнительное программное обеспечение. Тем не менее, есть порт USB, где можно подключить место хранения носитель и запустить код оттуда.

С помощью исходного образа Asus можно установить дополнительные программы с помощью Optware . Optware поставляется с диспетчером пакетов ipkg .

Вас также может заинтересовать микропрограмма сообщества asuswrt-merlin .

Я не рекомендую пытаться установить пакеты Debian, так как устройство довольно ограничено (только 64MB оперативной памяти). Получите источник пакетов, предназначенный для устройств меньшего размера, даже если это означает изучение нового менеджера пакетов.

-121--121371-

Параллельно выполняется процесс производителя (слева) и процесс потребителя (справа). Поскольку параллельно существуют два процесса, по крайней мере один из них должен быть дочерним процессом основного процесса оболочки, возможно, и тем, и другим.

Большинство оболочек выполняют обе стороны канала в подпроцессах. ATT ksh и zsh выполняют правую сторону в исходном процессе.

Команда cd изменяет текущий каталог текущего процесса оболочки, поэтому должен быть builtin . Поскольку левая сторона канала выполняется во вложенном корпусе (подпроцессе, который разветвлен из процесса оболочки, выполняющего сценарий), команда cd вступает в силу только во вложенном корпусе. Это работает, но так как субкорпорация выходит сразу после, она не делает ничего полезного. Вы можете наблюдать это с помощью

{ cd /tmp; echo -n "left-hand side: "; pwd; } | 
{ cd /usr; echo -n "right-hand side: "; pwd; }
echo -n "parent: "; pwd

Чтобы записать выходные данные из сценария, сделайте один конвейер, который применим ко всему сценарию.

main () {
  … # whole script goes here
}
main | logger
-121--139177-

Я хотел интегрировать буфер вырезания Zsh в буфер обмена X. Я попробовал вышеупомянутые http://stchaz.free.fr/mouse.zsh , но я обнаружил, что мне не нравится, когда все мои операции Zsh заполняют буфер обмена. Например, иногда я копирую что-то в браузере, а затем иду в оболочку и редактирую командную строку, а затем вставляю. Но часто редактирование командной строки - например, удаление слова - изменяет буфер вырезания Zsh. К лучшему или к худшему, у X просто есть буфер обмена, а не кольцо уничтожения, поэтому, когда операция редактирования Zsh перезаписывает буфер обмена, вещь, которую я хотел вставить, теряется - я не могу выскочить его (C-y M-y), как я мог бы сделать в Zsh или Emacs.

Вместо этого я создал новые специальные клавиатуры для взаимодействия с X-буфером обмена через zsh. Оказывается, «^ Xw» и «^ Xy» не используются как в Emacs, так и в Zsh, так что я могу получить последовательный интерфейс, связав их в обоих приложениях. Таким образом, обычные операции редактирования, cutbuffer и kill ring остаются в одиночестве.Если я хочу скопировать что-то в буфер обмена, я задаю область и делаю «^ Xw» (или если я уже убил ее и область неактивна, я могу просто сделать «^ Xw», чтобы скопировать вырезанный буфер). Вставка из буфера обмена выполняется с помощью команды «^ Xy».

# define commands to copy and paste x clipboard

# ^Xw - copy region, or cut buffer
# ^Xy - paste x clipboard

# in both cases, modifies CUTBUFFER

copy-to-xclip() {
    [[ "$REGION_ACTIVE" -ne 0 ]] && zle copy-region-as-kill
    print -rn -- $CUTBUFFER | xclip -selection clipboard -i
}

zle -N copy-to-xclip
bindkey "^Xw" copy-to-xclip

paste-xclip() {
    killring=("$CUTBUFFER" "${(@)killring[1,-2]}")
    CUTBUFFER=$(xclip -selection clipboard -o)
    zle yank
}

zle -N paste-xclip
bindkey "^Xy" paste-xclip
4
27.01.2020, 20:01

Для пользователей macOS :вот как сделать ESC -w (, также известный как Meta -w или Option -w ), скопировать на монтажный стол macOS, а также встроенный zsh -в буфере обмена.

pb-copy-region-as-kill () {
  zle copy-region-as-kill
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-copy-region-as-kill
bindkey -e '\ew' pb-copy-region-as-kill

Для полноты картины :вот код для Ctrl -u и Ctrl -k тоже

pb-backward-kill-line () {
  zle backward-kill-line
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-backward-kill-line
bindkey -e '^u' pb-backward-kill-line
pb-kill-line () {
  zle kill-line
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-kill-line
bindkey -e '^k' pb-kill-line
1
22.05.2021, 19:16

Теги

Похожие вопросы