Мои комментарии к статье про комбинации Emacspeak.

Комбинации Emacspeak не всегда начинаются с C-e. Emacspeak довольно
часто определяет свои команды в раскладках разных режимов Emacs.
Например, в Dired есть a (читать время доступа к выбранному файлу), c
(читать время модификации выбранного файла), z (читать размер
выбранного файла). Обычно имена команд Emacspeak начинаются с
emacspeak-, dtk-, tts- и их нетрудно обнаружить в буфере списка
комбинаций, доступных в текущем буфере, который вызывается по C-h b.
Их можно отфильтровать, например, с помощью ещё одной полезной команды
Emacspeak, которая вызывается по C-e (emacspeak-filtertext). Действует
она следующим образом. Выделяем интересующую нас область текста и жмём
C-e ^. Появится буфер с копией выделенного текста. В этом буфере можно
редактировать текст так, как вы пожелаете. Для этого там сделаны
дополнительные комбинации для некоторых команд редактирования. Наша
задача - оставить в буфере список команд Emacspeak, которые назначены
на комбинации, не начинающиеся с C-e. Для этого в открывшемся буфере
нажимаем = (команда keep-lines) и вводим регулярное выражение,
которому отвечают команды Emacspeak:

emacspeak-\|dtk-\|tts-

Команда оставит в буфере после курсора только те строки, которые
содержат совпадение для регулярного выражения. Если перед выполнением
операции курсор стоял в начале буфера, то получим список всех команд
Emacspeak, доступных по комбинации в исходном буфере. Нам нужно убрать
из него все те, которые начинаются с C-e. Для этого нажимаем ^
(команда flush-lines) и вводим регулярное выражение:

^C-e

Команда уберёт из буфера все строки после курсора, которые содержат
совпадение для регулярного выражения. То есть, строки, начинающиеся с
C-e.

Буфер можно вернуть к начальному состоянию, нажав r.

Ещё одна полезная функция Emacspeak - возможность задавать фильтры для
строк. Фильтр позволяет сделать так, чтобы при построчном чтении
читалась не вся строка, а только её часть, определённая фильтром. Его
можно использовать, например, для того, чтобы в буфере w3m
отфильтровать ненужные колонки таблицы. Фильтр можно задать
комбинацией C-e | (команда emacspeak-speak-line-set-column-filter).
Раньше этот фильтр надо было вводить в виде списка, состоящего из пар
(начало конец), где начало - номер столбца, с которого начинается
фильтр, а конец - столбец, перед которым фильтр заканчивается.
Например, фильтр

((0 10) (20 44))

будет отфильтровывать из строки столбцы с 0 по 9 и с 20 по 43.

Далее, у Emacspeak есть много всяких команд, но не все из них нужно
знать. Я, например, совсем не пользуюсь командами для чтения окон и
командами типа C-e стрелка вправо
(emacspeak-speak-this-buffer-next-display). Мне проще переключиться в
нужное окошко и там прочитать всё, что надо. Также я не пользуюсь
командой для чтения строки, на которой установлена пометка. Мне проще
перейти туда, поменяв местами курсор и пометку с помощью C-x C-x. При
этом автоматически читается строка, на которой раньше была пометка, а
теперь - курсор. Обратно вернуться можно той же комбинацией C-x C-x.

Для некоторых команд Emacspeak я сделал переназначения. Например, мне
кажется неудобным набирать C-u C-e l, чтобы услышать конец строки.
Поэтому я сделал две очень простые команды для чтения начала и конца
строки и назначил их на шифт со стрелкой влево и шифт со стрелкой
вправо соответственно (в обозначениях Emacs это - S-left и S-right).
Чтение всей строки я назначил на шифт со стрелкой вниз (S-down), а
чтение символа под курсором - на шифт со стрелкой вверх (S-up).
Привожу здесь эти команды и назначение их на клавиши.

(defun emacspeak-speak-line-right ()
  (interactive)
  (emacspeak-speak-line 1))

(defun emacspeak-speak-line-left ()
  (interactive)
  (emacspeak-speak-line -1))

(global-set-key [S-right] 'emacspeak-speak-line-right)
(global-set-key [S-left] 'emacspeak-speak-line-left)
(global-set-key [S-down] 'emacspeak-speak-line)
(global-set-key [S-up] 'emacspeak-speak-char)

Кроме того, удобно иметь под рукой прерывание речи, поэтому я назначил
его на клавишу insert на цифровой клавиатуре:

(global-set-key [kp-insert] 'dtk-stop)

И ещё назначил перемещение по параграфам на C-up и C-down, а по словам
- на C-left и C-right. Хотя, возможно, некоторые из этих комбинаций
работают уже из коробки.

(global-set-key [C-right] 'forward-word)
(global-set-key [C-left] 'backward-word)
(global-set-key [C-up] 'backward-paragraph)
(global-set-key [C-down] 'forward-paragraph)

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

-- 
Дмитрий Падучих
-- 
Blinux-rus mailing list
[email protected]
http://www.a11ywiki.org/cgi-bin/mailman/listinfo/blinux-rus

Ответить