smenu — это фильтр выбора, точно так же, как sed
— это фильтр редактирования.
Этот инструмент считывает слова из стандартного ввода или из файла и представляет их на экране терминала в различных макетах в окне прокрутки. Курсор, легко перемещаемый с помощью клавиатуры и/или мыши , позволяет выбрать одно или несколько слов.
Обратите внимание, что экран не очищается в начале и в конце выполнения меню . Окно выбора отображается в позиции курсора, а предыдущее содержимое терминала не изменяется и не теряется.
Я постарался сделать его максимально простым в использовании. Он должен работать на всех терминалах, управляемых в базе данных terminfo
.
Поддерживается кодировка UTF-8
. Эта поддержка включает символы двойной ширины и расширенные кластеры графем. Однако последний все еще является экспериментальным и работает намного лучше, если используются соответствующие терминалы, такие как WezTerm или iTerm.
Кодировка глифов UTF-8
также должна быть в канонической форме, поскольку не будет предпринято никаких попыток привести их в эту форму.
Пожалуйста, обратитесь к прилагаемой странице руководства, чтобы узнать больше об этой небольшой программе.
Вики содержит скриншоты и анимации, подробно описывающие некоторые концепции и особенности меню .
Некоторые дистрибутивы Linux уже предоставляют smenu в виде пакета, в противном случае smenu можно построить в любой системе, в которой доступна функциональная платформа разработки terminfo
. Сюда входят все известные мне Unix и Unix-подобные системы.
Используйте предоставленный скрипт build.sh
для сборки исполняемого файла. Этот сценарий использует и принимает те же аргументы, что и сценарий configure
GNU. Чтобы просмотреть их, введите build.sh --help
.
Как только процесс сборки завершится, его выполнит простая команда make install
с соответствующими привилегиями.
Я включил обсуждения в этом репозитории.
Я знаю, что может возникнуть некоторая путаница при принятии решения о том, куда вам следует обращаться, сообщая о проблемах, задавая вопросы или отправляя запросы на добавление функций, поэтому цель этого раздела – помочь нам согласовать этот вопрос.
Пожалуйста, поднимите вопрос, если:
Пожалуйста, откройте обсуждение, если:
Эта программа должна работать на большинстве Unix, но если вы используете Linux, попробуйте ввести следующую строку в командной строке (здесь: "$ "
):
$ R=$(grep Vm /proc/$$/status | smenu -n20 -W $':tn' -q -c -b -g -s /VmH) $ эхо $R
При ожидании команд программой теперь должно отображаться что-то вроде этого: (цифры мои, у вас будут другие)
VmPeak¦ 23840 КБ VmSize¦ 23836 КБ VmLck ¦ 0 КБ VmHWM ¦ 2936 КБ VmRSS ¦ 2936 КБ VmData¦ 1316 КБ ВмСтк ¦ 136 КБ VmExe ¦ 28 КБ VmLib ¦ 3956 КБ ВмПТЕ ¦ 64 КБ VmSwap¦ 0 КБ
Курсор должен находиться под "VmHWM "
.
После перемещения курсора на " 136 kB"
и завершения программы с помощью
переменная оболочки R должна содержать: " 136 kB"
.
Следующая команда, не зависящая от бренда Unix, должна открыть окно прокрутки, если у вас в Unix более 10 учетных записей с UID ниже 100:
$ R=$(awk -F: '$3 < 100 {print $1,$3,$4,$NF}' /etc/passwd | смена -n10 -c) $ эхо $R
В моем случае ( LANG
и LC_ALL
установлены в POSIX
) отображается:
в 25 25 /bin/bash sys 0 3 /usr/bin/ksh + бункер 1 1 /bin/bash | демон 2 2 /bin/bash | ftp 40 49 /bin/bash | игры 12 100 /bin/bash | lp 4 7 /bin/bash | почта 8 12 /bin/false | по имени 44 44 /bin/false | ntp 74 108 /bin/false v
Обратите внимание на наличие полосы прокрутки.
Просто добавьте следующее в свой .bashrc
EOL=$'n' привязать -x '"Cr": READLINE_LINE=$(fc -lr 1 | sed "s/[1-9][0-9]*..//" | сменю -Q -l -ac:7/4,b -W"$EOL") READLINE_POINT=${#READLINE_LINE}'
Запустите или перезапустите bash и нажмите CTRL-R
( CTRL-C
или q
для выхода), наслаждайтесь!
Вы также можете добавить параметр -d , чтобы указать меню очистить окно выбора после выбора записи.
В этих версиях используется новая система параметров под названием ctxopt , которая может содержать ошибки. Сообщите о них, чтобы их можно было исправить в следующем выпуске smenu или ctxopt (https://github.com/p-gen/ctxopt).
Аргументы командной строки в некоторых случаях также могут потребоваться переставить из-за этой новой системы управления параметрами. Извините за дополнительную работу, которую это может повлечь за собой.
Выравнивание по правому краю строк, написанных на языках с письмом справа налево, таких как фарси или иврит, не соблюдается.
Включенная система тестирования относительно молода, будьте снисходительны.
ВАЖНО: система тестирования имеет некоторые зависимости. Прежде чем двигаться дальше, прочтите test/README.rst
.
ПРИМЕЧАНИЕ. Запуск всех тестов с помощью ./tests.sh
в каталоге tests
займет некоторое время (на данный момент около 21 минуты).
ПРИМЕЧАНИЕ. В некоторых системах, например *BSD, некоторые тесты могут завершиться неудачно. Это можно объяснить различиями в реализациях posix/libc/.... Это может произойти, в частности, при использовании некоторых определенных регулярных выражений или необычных последовательностей байтов UTF-8
.
Если тест не пройден по неизвестной причине, пришлите мне имя его каталога и соответствующий файл .bad
.
Если у вас возникла ошибка, которую не охватывает ни один тест, вы можете создать новый тест в каталоге tests
в существующем или новом каталоге: прочитайте tests/README.rst
, используйте существующий тест в качестве модели, создайте файл .in
файл и файл .tst
и пришлите мне их вместе с созданными файлами.
Вклады приветствуются, но сначала обсудите свое предложение в выпуске или с сопровождающим.
Я хочу поблагодарить тех, кто нашел время, чтобы упаковать меню для предпочитаемой ими операционной системы или дистрибутива. Их имена вы найдете здесь: https://repology.org/project/smenu/information.