Как выделить текст, когда стрелки, начало и конец сопоставлены с Mode_Switch + Letter

чтение может разбить ввод на слова и сохранить результат в массиве.Задайте для переменной IFS символ-разделитель слов (он должен быть одним символом, а не строкой - если значение IFS содержит несколько символов, то каждый символ является разделителем слов. ).

IFS=, read -a platforms

Затем сравните каждый элемент массива с набором поддерживаемых платформ.

for p in "${platforms[@]}"; do
  case "$p" in
    win|mac|linux32|linux64) :;;
    all) platforms=(win mac linux32 linux64);;
    *) printf 1>&2 "Unsupported platform: %s\n" "$p"; return 2;;
  esac
done

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

supported_platforms=(win mac linux32 linux64)
IFS=, read -a platforms
bad_platform_names=($(comm -23 <(printf '%s\n' all "${platforms[@]}" | sort -u) \
                               <(printf '%s\n' "${supported_platforms[@]}" | sort -u)))
if [[ ${#bad_platform_names[@]} -ne 0 ]]; then
  printf "Unsupported platform: %s\n" "${bad_platform_names[@]}"
  exit 1
fi
if printf '%s\n' "${platforms[@]}" | grep -qx all; then
  platforms=("${supported_platforms[@]}")
fi

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

¹ Конечно, вы можете сделать это в чистом bash, если хотите.

0
05.02.2019, 09:28
1 ответ

Если вы использовали Решение 2 ,

в соответствии с xmodmapдокументацией:

The first keysym is used when no modifier key is pressed in conjunction with this key, the second with Shift, the third when the Mode_switch key is used with this key and the fourth when both the Mode_switch and Shift keys are used.

добавить четвертыйkeysym:

код клавиши 66 = режим _переключатель
keysym h = h H Влево Влево
keysym l = l L Вправо Вправо
keysym k = k K Вверх Вверх
keysym j = j J Вниз Вниз
keysym u = u U Предыдущий Предыдущий
keysym i = i I Home Home
keysym o = o O Конец Конец
keysym p = p P Далее Далее

0
28.01.2020, 04:01

Теги

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