Разделить оболочку горизонтально, чтобы показать ls -al и pwd

Я использую zsh в качестве моей оболочки по умолчанию для OSX. Я бы хотел, чтобы у моей оболочки всегда был горизонтальный раскол, показывающий pwd и ls текущего каталога, в котором я нахожусь. Как мне это сделать?

  • Удалить назад до тех пор, пока не встретит символ, например alt + bksp
  • Как изменить оболочку по умолчанию на ZSH - chsh говорит «Недопустимая оболочка»
  • Как сделать работу с закладкой ZSH с двумя вкладками
  • Как сортировать имена файлов с пробелами в них и объединять файлы?
  • Почему диапазон расширения скобок использует две точки вместо трех (эллипсис)?
  • Завершение Zsh для монтирования (/ run / media / DISK-LABEL)?
  • Как я могу подавить пространство между сгенерированными аргументами во время расширения фигурной скобки?
  • Как удалить каждый файл с x в заголовке?
  • 2 Solutions collect form web for “Разделить оболочку горизонтально, чтобы показать ls -al и pwd”

    Ваш прецедент не очень убедителен. Большинство людей включают текущий каталог как часть своего приглашения; zsh имеет чрезвычайно богатые возможности быстрого конфигурирования (включая многострочные подсказки, левые и правые подсказки и т. д.). С завершением (которое снова в zsh очень настраивается), вы можете отображать списки файлов в тех контекстах, где они вам нужны. Это, как говорится, есть способы достичь того, что вы описываете, но ни один из них не является простым и приятным.

    Только с оболочкой

    Оболочка контролирует только свой вход и выход. Когда вы выполняете команду, оболочка ничего не контролирует. Если вы хотите зарезервировать часть терминала для таких вещей, как ls output, вам необходимо сотрудничество с терминалом. Какая разница между «терминалом», «оболочкой», «tty» и «консолью»? может быть полезным.

    На некоторых терминалах вы можете определить прокручиваемую область; то, что находится за пределами прокручиваемой области, остается на месте. Я знаю, что xterm поддерживает эту функцию, я не знаю, работают ли другие популярные эмуляторы терминалов. Вот базовая концепция отображения вывода date , pwd и ls в нижней части терминала.

     reset () { tput reset scrollable_lines=$((LINES*2/3)) tput csr 0 $((scrollable_lines-1)) } update_status () { tput sc tput cup $((scrollable_lines+2)) 0 tput ed date pwd ls -x --color=always | head -n $((LINES-scrollable_lines-3)) tput rc } PROMPT_COMMAND='update_status' reset 

    Несколько слов объяснения:

    • Команда tput отправляет управляющие последовательности, полученные с помощью terminfo на терминал.
    • Вызов tput csr определяет область прокрутки в верхние 2/3 строки.
    • Функция reset должна выполняться при сбросе терминала, поскольку сброс терминала сбрасывает область прокрутки в качестве всего терминала.
    • tput sc сохраняет позицию курсора, которую нужно восстановить позже с помощью tput rc .
    • tput cup перемещает курсор в верхнюю часть области без прокрутки. tput ed стирает то, что уже есть.
    • Функция update_status выполняется каждый раз, когда bash собирается отобразить новое приглашение.

    Я пробовал это в zsh, но он взаимодействует с терминалом больше, чем bash, поэтому даже доказательство концепции требует большей настройки.

    С терминальным мультиплексором

    Оба экрана и Tmux могут разделить терминал на несколько под-окон (экран вызывает их регионы, tmux вызывает их панели). Вы можете запустить мультиплексор, запустить свою оболочку в верхнем окне и запустить ее в нижнем окне.

    Легко вызвать что-то в оболочке, чтобы заставить вещи отображаться в нижнем окне: просто перенаправьте вывод на правый терминал. Громоздкая часть здесь – получение имени устройства и сохранение нижнего окна до тех пор, пока это необходимо, но больше не нужно.

    Вот доказательство концепции с использованием zsh и экрана. Запустить screen -c ~/etc/split.screenrc где ~/etc/split.screenrc содержит

     escape ^\\\ hardstatus off split focus resize 10 screen ~/bin/bottom_tty focus screen zsh 

    Это создает 10- ~/bin/bottom_tty нижнюю область, которая запускает программу ~/bin/bottom_tty и запускает zsh в верхней области. В ~/bin/bottom_tty , получите несколько параметров, затем спать навсегда:

     #!/bin/sh cat <<EOF >~/.split-screen.$PPID.tmp bottom_tty=$(tty) bottom_lines=$(tput lines) bottom_pid=$$ EOF mv ~/.split-screen.$PPID.tmp ~/.split-screen.$PPID while true; do sleep 999999999; done 

    В .zshrc , прочитайте информацию и настройте пару вещей:

    • Каждый раз, когда отображается приглашение, запустите refresh_bottom_tty чтобы обновить содержимое нижней области.
    • Когда zsh завершает работу, запустите программу в нижней области, чтобы сценарий завершился.
     refresh_bottom_tty () { printf %s $terminfo[clear] date pwd ls -x --color | head -n $((bottom_lines-2)) } precmd () { refresh_bottom_tty <>$bottom_tty 1>&0 2>&0 } zshexit () { kill -HUP -$bottom_pid } while [[ ! -e ~/.split-screen.$PPID ]]; do sleep 1 done . ~/.split-screen.$PPID rm ~/.split-screen.$PPID 

    Выделенная оболочка терминала

    Было бы возможно сделать намного лучшую и более надежную работу с выделенной оболочкой, которая понимает, что вы хотите с ней делать. Обертка будет определять виртуальный терминал, в котором выполняется оболочка, и будет интерфейс, позволяющий оболочке обновлять то, что отображается за пределами виртуального терминала.

    Экран и tmux на самом деле довольно близки к обеспечению требуемой функциональности через строку состояния. Однако оба ограничены одной строкой состояния. Если они были расширены для поддержки многострочных строк состояния, вы можете отобразить то, что вы там хотите.

    Кроме того, вы можете использовать модуль zpty для записи выделенной оболочки. Тогда будут два экземпляра zsh: один для обертки, один для запуска команд. Получение этого даже для доказательства концепции – это больше кода, чем я хочу написать в этом ответе.

    Я не знаю, как выводить showins ls , но zsh имеет RPROMPT функцию RPROMPT . Поместите это в .zshrc и посмотрите, соответствует ли оно вашим потребностям:

     PROMPT=$'%n@%m\n%! %% ' RPROMPT='# %d' 

    Это помещает текущий рабочий каталог в правую часть подсказки для меня. Я включаю пример PROMPT с новой RPROMPT в нем, так что, если RPROMPT не работает так, как вам бы хотелось, вы можете увидеть, как поместить «% d» в значение PROMPT чтобы он мог быть в отдельной строке ,

    Interesting Posts

    Что такое корреляция пользователя / usr / share?

    Мне нужно объединить несколько CSV-файлов вместе друг с другом с неравным количеством строк

    Нет звука при подключении к док-станции

    Как документировать мои собственные функции bash и псевдонимы?

    «Ошибка: не может быть раздел вне диска!», Хотя число секторов в порядке

    debuild создает неудовлетворительную зависимость

    Проблемы с настройкой веб-сервера в CentOS

    Исключить один исполняемый файл из PATH, без chmod -x it

    Найти, где символ общей библиотеки, определенный в живой системе, / список всех символов, экспортированных в систему

    Как выполнить команду find с помощью набора строк из строки в текстовом файле

    Почему две директории отличаются после синхронизации с rsync?

    Курсор мыши стал большим X

    Logrotate не вращает журналы

    lxde: активное окно в lxpanel Плагин панели задач (список окон) неотличим от других (неактивных)

    Как монтировать / usr во время загрузки без initramf?

    Linux и Unix - лучшая ОС в мире.