Интегрируйте уничтожать-кольцо readline и буфер обмена X11

для меня, в том числе « stdc ++. 6.0.9.dylib » вместо « stdc ++. Dylib » в зависимости исправили ошибки компоновщика

12
задан Vadim Kotov 15 August 2017 в 08:35
поделиться

3 ответа

Personally, I run everything inside GNU screen. This gives me tons of functionality across all terminal-based programs, not just readline-based ones. It has its own paste buffer(s), which are shared between all screens in your current session, and can read/write an exchange file (configurable with bufferfile).

  • A screen selection is made with Ctrl+A, [, <movement>, Space, <movement>;
  • copied to the paste buffer with Enter;
  • pasted with Ctrl+A, ];
  • replaced by the contents of the exchange file with Ctrl+A, <;
  • and written out to the exchange file with Ctrl+A, >.

Then all you need are little helpers to synchronize /tmp/screen-exchange and the X selection. Something as simple as this would work.

# ~/.screenrc (or entered at C-a : command prompt)
bind '{' exec sh -c 'xclip -o>~/.screen_exchange'
bind '}' exec sh -c 'xclip -i ~/.screen_exchange'

Of course some nicer bindings and macros would make life easier (this requires C-a { C-a < C-a ] to paste X selection to the terminal), but it's completely up to you.

5
ответ дан 2 December 2019 в 06:45
поделиться

Bash 4.0 вводит некоторые новые функции:

NEWS

Команда, назначенная последовательности клавиш с помощью ` bind -x ', теперь устанавливает два новых переменные в окружении выполняемой команды: READLINE_LINE_BUFFER и READLINE_POINT . Команда может изменить текущую строку чтения и положение курсора, изменив READLINE_LINE_BUFFER и READLINE_POINT , соответственно.

Файл NEWS кажется неточным; READLINE_LINE (нет _BUFFER ) - это то, что задокументировано в другом месте и действительно работает.

Следующее будет имитировать поведение существующего Ctrl + ( U в Bash) | K | Y ), но влияет на выбор X, хотя я использую Meta / Esc , потому что мне не нравится перезапись существующих функций.

_xdiscard() {
    echo -n "${READLINE_LINE:0:$READLINE_POINT}" | xclip
    READLINE_LINE="${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT=0
}
_xkill() {
    echo -n "${READLINE_LINE:$READLINE_POINT}" | xclip
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}"
}
_xyank() {
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$(xclip -o)${READLINE_LINE:$READLINE_POINT}"
}
bind -m emacs -x '"\eu": _xdiscard'
bind -m emacs -x '"\ek": _xkill'
bind -m emacs -x '"\ey": _xyank'

Мне все еще нравится screen , но это лучше отвечает на ваш вопрос - если единственное приложение для чтения, которое вас интересует, это Bash.

13
ответ дан 2 December 2019 в 06:45
поделиться

Я хотел бы предложить следующее функцию _xyank () на основе ответа на эфемиента:

_xyank() {
    CLIP=$(xclip -o)
    COUNT=$(echo -n "$CLIP" | wc -c)
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${CLIP}${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT=$(($READLINE_POINT + $COUNT))
}

Что это делает для перемещения курсора в конец текста , что делает его более согласованным с другими встроенными командами.

5
ответ дан 2 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

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