Печать имени файла перед печатью строк

Глава о мыши в HOWTO по программированию ncurses может оказаться полезной для прочтения.

В самом первом подразделе представлены все маски событий мыши. :Имеется сообщение о положении мыши, которое включает координаты x, y и z, поэтому одно из них можно использовать для покрытия одного колеса прокрутки. Есть события для четырех кнопок, а также двойные -и тройные -щелчки для каждой из них. Существуют события для использования клавиш Shift, Control и Alt в качестве модификаторов для событий щелчка. И это вся информация, которую вы можете получить через API мыши ncurses.

Но этому документу больше 10 лет -возможно он не актуален?

Нет. Поиск слова «touch» в /usr/include/ncurses.hприводит к нескольким совпадениям, но перекрестные -ссылки на соответствующие справочные страницы указывают на то, что все они относятся к принятию решений о том, требуется ли обновление содержимого на экране или нет. Ничего особенного для сенсорного экрана -нет.

Даже последняя версия 6.1 больше не поддерживает расширенную поддержку сенсорного экрана.

Если вы не найдете то, что ищете, проверив источники, о которых я упоминал выше, вы можете довольно убедительно определить, что то, что вы ищете, не существует.

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

Но похоже, что у вас могут быть новые идеи относительно сенсорных пользовательских интерфейсов на текстовых -дисплеях. Возможно, вы могли бы прототипировать свои идеи, если бы ваше демонстрационное приложение взаимодействовало непосредственно с реальным драйвером сенсорного экрана.

Как только у вас появится некоторое представление о том, какие элементы пользовательского интерфейса сенсорного экрана на самом деле работают с текстовыми -базовыми дисплеями, (может быть, вы наймете несколько студентов университета для выполнения базового исследовательского проекта по юзабилити для вас? ), следующим вопросом будет :какая абстракция событий сенсорного экрана будет наиболее полезной для их реализации?

Может оказаться, что в передаче событий сенсорного экрана через сам ncurses нет никакой дополнительной ценности :вместо этого вы можете счесть целесообразным создать отдельную библиотеку элементов сенсорного пользовательского интерфейса, которая подключается к ncurses для отображения и драйвер сенсорного экрана для Вход. Кто сказал, что вы должны использовать только один программный API за раз?

-1
29.06.2021, 21:07
4 ответа

Если вам нравится заголовок, напечатанный 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" \;
1
28.07.2021, 11:21

Вы можете позволить 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-решений.

0
28.07.2021, 11:21

Если имя файла должно быть напечатано только в том случае, если файл содержит не менее $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
' {} +
3
28.07.2021, 11:21

Используя 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.
0
28.07.2021, 11:21

Теги

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