Глава о мыши в HOWTO по программированию ncurses может оказаться полезной для прочтения.
В самом первом подразделе представлены все маски событий мыши. :Имеется сообщение о положении мыши, которое включает координаты x, y и z, поэтому одно из них можно использовать для покрытия одного колеса прокрутки. Есть события для четырех кнопок, а также двойные -и тройные -щелчки для каждой из них. Существуют события для использования клавиш Shift, Control и Alt в качестве модификаторов для событий щелчка. И это вся информация, которую вы можете получить через API мыши ncurses.
Но этому документу больше 10 лет -возможно он не актуален?
Нет. Поиск слова «touch» в /usr/include/ncurses.h
приводит к нескольким совпадениям, но перекрестные -ссылки на соответствующие справочные страницы указывают на то, что все они относятся к принятию решений о том, требуется ли обновление содержимого на экране или нет. Ничего особенного для сенсорного экрана -нет.
Даже последняя версия 6.1 больше не поддерживает расширенную поддержку сенсорного экрана.
Если вы не найдете то, что ищете, проверив источники, о которых я упоминал выше, вы можете довольно убедительно определить, что то, что вы ищете, не существует.
Это всего лишь мое мнение, но мне кажется, что мультитач и жесты часто требуют некоторых графических возможностей, позволяющих довольно свободно масштабировать и вращать некоторые -элементы экрана, чтобы просто показать, что жесты что-то делать . Дисплей на основе символов -может плохо подходить для такого интерфейса, поэтому, вероятно, поэтому никто еще не предпринял усилий для добавления конкретной поддержки сенсорного экрана.
Но похоже, что у вас могут быть новые идеи относительно сенсорных пользовательских интерфейсов на текстовых -дисплеях. Возможно, вы могли бы прототипировать свои идеи, если бы ваше демонстрационное приложение взаимодействовало непосредственно с реальным драйвером сенсорного экрана.
Как только у вас появится некоторое представление о том, какие элементы пользовательского интерфейса сенсорного экрана на самом деле работают с текстовыми -базовыми дисплеями, (может быть, вы наймете несколько студентов университета для выполнения базового исследовательского проекта по юзабилити для вас? ), следующим вопросом будет :какая абстракция событий сенсорного экрана будет наиболее полезной для их реализации?
Может оказаться, что в передаче событий сенсорного экрана через сам ncurses нет никакой дополнительной ценности :вместо этого вы можете счесть целесообразным создать отдельную библиотеку элементов сенсорного пользовательского интерфейса, которая подключается к ncurses для отображения и драйвер сенсорного экрана для Вход. Кто сказал, что вы должны использовать только один программный API за раз?
Если вам нравится заголовок, напечатанный head
и tail
, вы можете заставить одного из них напечатать его. Чтобы получить строки от A до B включительно, считая от 1, сначала скажите tail
начать со строки A (+A
), затем скажите head, чтобы сохранить первые B -A+1 строки, плюс одну для строки заголовка.
tail -n "+$na" -v -- "$filename" | head -n $((nb - na + 2))
Вызывается из find с пустой строкой после каждого файла (почти как head
или tail
— здесь код добавляет пустую строку в самый конец):
find … -exec sh -c 'tail -n "+$1" -v -- "$0" | head -n $(($2 - $1 + 2)); echo' {} "$1" "$2" \;
Вы можете позволить find
выполнить эту печать с помощью операторов printf
-. Обратите внимание, что в-exec
+
это больше невозможно, вам придется использовать case -с помощью вызова case -для awk
.
print-lines () {
na=$1
nb=$2
dir=$3
find "$dir" \( -name \*.org -o -name \*.texi \) \
-printf '==> %p <==\n\n' \
-exec awk -v a="$na" -v b="$nb" 'FNR >= a && FNR <= b' '{}' \; \
-printf '\n'
}
Может быть немного менее эффективным, чем использование толькоawk
-решений.
Если имя файла должно быть напечатано только в том случае, если файл содержит не менее $na
строк:
find. -name '*.csv' -exec awk -v a="$na" -v b="$nb" '
FNR == a {print "==>", FILENAME, "<=="}
a <= FNR && FNR <= b
' {} +
Если имя файла должно быть напечатано для каждого файла независимо от его содержимого, удобен GNU awk
find. -name '*.csv' -exec gawk -v a="$na" -v b="$nb" '
BEGINFILE {print "==>", FILENAME, "<=="}
a <= FNR && FNR <= b
' {} +
Используя GNU sed мы используем опцию -s, чтобы передать несколько файлов для sed и обрабатывать их отдельно.
find "$dir" -type f \
\( -name "*.texi" -o -name "*.org" \) \
-exec sed -sne "
${na}{x;s/.*/==>/p;F;s//<==/p;x;}
$na,${nb}p
" {} +;
Python в сочетании с модулем pathlib для обхода иерархии и itertools для нарезки файлов
python3 -c 'import pathlib, itertools, sys
na,nb,dir = sys.argv[1:]
p = pathlib.Path(dir)
for q in p.glob("**/*"):
if q.suffix in [".texi",".org"] and q.is_file():
with open(q.name) as f:
L = [l.rstrip("\n") for l in itertools.islice(f, int(na)-1, int(nb))]
if len(L) > 0:
print("==>",q.name,"<==")
print(*L,sep="\n")
' 2 4.