Функция автозаполнения bash с доступным системным шрифтом

Да, передав его на стандартный ввод . Один из способов сделать это — конвейер (, демонстрирующий, как поменять местами две строки ):

.

$ cat > test.sh <<'EOF'
> #!/bin/sh
> read -r first
> read -r second
> printf '%s\n' "$second" "$first"
> EOF
$ chmod u+x test.sh 
$ printf '%s\n' foo bar | nohup./test.sh
nohup: appending output to 'nohup.out'
$ cat nohup.out 
bar
foo

0
20.11.2021, 10:19
1 ответ

Вы можете использовать команду fc _list, чтобы получить список доступных шрифтов в том формате, в котором вы хотите их ввести.

Вот как это вписывается в ваш пример кода:

    _completeWithFontName() { < <(fc-list -f "%{family}\n" | grep "^$2" | sort -u) mapfile -t COMPREPLY; }
    complete -F _completeWithFontName doSomethingWithFont

Обратите внимание, что вы не должны передавать команду в файл карты. :piping помещает команду назначения в подоболочку, и вы немедленно потеряете новое содержимое массива COMPREPLY при выходе из этой подоболочки. Перенаправление <из подстановки процесса <(...)работает лучше.

Параметр -fсписка fc -задает формат, простая команда grep выбирает те имена шрифтов, которые соответствуют первым символам, введенным в командной строке, а сортировка выполняется для удобства. Я также добавляю-u(уникальный параметр )в сортировку, потому что в этом примере я перечисляю только семейства; каждый вариант будет выглядеть как дубликат, поэтому мы должны их отсортировать.

0
20.11.2021, 16:42

Теги

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