mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
accessibility: speakup: phonetic spelling while arrowing letter by letter
This patch includes an enhancement requested frequently on the mailing list.[1][2] It adds a variable, cur_phonetic in the spk_vars, which can be set as a module parameter, as well as in /sys/speakup/cur_phonetic. This patch also documents cur_phonetic as a sysfs attribute in sysfs-driver-speakup. When cur_phonetic=1, it causes speakup to speak letters phonetically if paused on the character while arrowing through a word. When a user does not set cur_phonetic to any value, the default value for it would be 0. [1]: https://github.com/linux-speakup/speakup/issues/6 [2]: https://github.com/linux-speakup/speakup/issues/5 since V1: - removed unnecessary lines Signed-off-by: Mushahid Hussain<mushi.shar@gmail.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Link: https://lore.kernel.org/r/20221115100530.91174-3-mushi.shar@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f43241aafe
commit
72b8ec15f9
@@ -35,6 +35,15 @@ Description: This controls cursor delay when using arrow keys. When a
|
|||||||
characters. Set this to a higher value to adjust for the delay
|
characters. Set this to a higher value to adjust for the delay
|
||||||
and better synchronisation between cursor position and speech.
|
and better synchronisation between cursor position and speech.
|
||||||
|
|
||||||
|
What: /sys/accessibility/speakup/cur_phonetic
|
||||||
|
KernelVersion: 6.2
|
||||||
|
Contact: speakup@linux-speakup.org
|
||||||
|
Description: This allows speakup to speak letters phoneticaly when arrowing through
|
||||||
|
a word letter by letter. This doesn't affect the spelling when typing
|
||||||
|
the characters. When cur_phonetic=1, speakup will speak characters
|
||||||
|
phoneticaly when arrowing over a letter. When cur_phonetic=0, speakup
|
||||||
|
will speak letters as normally.
|
||||||
|
|
||||||
What: /sys/accessibility/speakup/delimiters
|
What: /sys/accessibility/speakup/delimiters
|
||||||
KernelVersion: 2.6
|
KernelVersion: 2.6
|
||||||
Contact: speakup@linux-speakup.org
|
Contact: speakup@linux-speakup.org
|
||||||
|
@@ -914,6 +914,8 @@ static struct kobj_attribute say_word_ctl_attribute =
|
|||||||
__ATTR(say_word_ctl, 0644, spk_var_show, spk_var_store);
|
__ATTR(say_word_ctl, 0644, spk_var_show, spk_var_store);
|
||||||
static struct kobj_attribute spell_delay_attribute =
|
static struct kobj_attribute spell_delay_attribute =
|
||||||
__ATTR(spell_delay, 0644, spk_var_show, spk_var_store);
|
__ATTR(spell_delay, 0644, spk_var_show, spk_var_store);
|
||||||
|
static struct kobj_attribute cur_phonetic_attribute =
|
||||||
|
__ATTR(cur_phonetic, 0644, spk_var_show, spk_var_store);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These attributes are i18n related.
|
* These attributes are i18n related.
|
||||||
@@ -967,6 +969,7 @@ static struct attribute *main_attrs[] = {
|
|||||||
&say_control_attribute.attr,
|
&say_control_attribute.attr,
|
||||||
&say_word_ctl_attribute.attr,
|
&say_word_ctl_attribute.attr,
|
||||||
&spell_delay_attribute.attr,
|
&spell_delay_attribute.attr,
|
||||||
|
&cur_phonetic_attribute.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -65,6 +65,7 @@ int spk_key_echo, spk_say_word_ctl;
|
|||||||
int spk_say_ctrl, spk_bell_pos;
|
int spk_say_ctrl, spk_bell_pos;
|
||||||
short spk_punc_mask;
|
short spk_punc_mask;
|
||||||
int spk_punc_level, spk_reading_punc;
|
int spk_punc_level, spk_reading_punc;
|
||||||
|
int spk_cur_phonetic;
|
||||||
char spk_str_caps_start[MAXVARLEN + 1] = "\0";
|
char spk_str_caps_start[MAXVARLEN + 1] = "\0";
|
||||||
char spk_str_caps_stop[MAXVARLEN + 1] = "\0";
|
char spk_str_caps_stop[MAXVARLEN + 1] = "\0";
|
||||||
char spk_str_pause[MAXVARLEN + 1] = "\0";
|
char spk_str_pause[MAXVARLEN + 1] = "\0";
|
||||||
@@ -1273,7 +1274,7 @@ enum spk_vars_id {
|
|||||||
BLEEPS_ID, BLEEP_TIME_ID, PUNC_LEVEL_ID,
|
BLEEPS_ID, BLEEP_TIME_ID, PUNC_LEVEL_ID,
|
||||||
READING_PUNC_ID, CURSOR_TIME_ID, SAY_CONTROL_ID,
|
READING_PUNC_ID, CURSOR_TIME_ID, SAY_CONTROL_ID,
|
||||||
SAY_WORD_CTL_ID, NO_INTERRUPT_ID, KEY_ECHO_ID,
|
SAY_WORD_CTL_ID, NO_INTERRUPT_ID, KEY_ECHO_ID,
|
||||||
V_LAST_VAR_ID, NB_ID
|
CUR_PHONETIC_ID, V_LAST_VAR_ID, NB_ID
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct var_t spk_vars[NB_ID] = {
|
static struct var_t spk_vars[NB_ID] = {
|
||||||
@@ -1290,6 +1291,7 @@ static struct var_t spk_vars[NB_ID] = {
|
|||||||
[SAY_WORD_CTL_ID] = {SAY_WORD_CTL, TOGGLE_0},
|
[SAY_WORD_CTL_ID] = {SAY_WORD_CTL, TOGGLE_0},
|
||||||
[NO_INTERRUPT_ID] = { NO_INTERRUPT, TOGGLE_0},
|
[NO_INTERRUPT_ID] = { NO_INTERRUPT, TOGGLE_0},
|
||||||
[KEY_ECHO_ID] = { KEY_ECHO, .u.n = {NULL, 1, 0, 2, 0, 0, NULL} },
|
[KEY_ECHO_ID] = { KEY_ECHO, .u.n = {NULL, 1, 0, 2, 0, 0, NULL} },
|
||||||
|
[CUR_PHONETIC_ID] = { CUR_PHONETIC, .u.n = {NULL, 0, 0, 1, 0, 0, NULL} },
|
||||||
V_LAST_VAR
|
V_LAST_VAR
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1720,8 +1722,12 @@ static void cursor_done(struct timer_list *unused)
|
|||||||
speakup_win_say(vc);
|
speakup_win_say(vc);
|
||||||
else if (is_cursor == 1 || is_cursor == 4)
|
else if (is_cursor == 1 || is_cursor == 4)
|
||||||
say_line_from_to(vc, 0, vc->vc_cols, 0);
|
say_line_from_to(vc, 0, vc->vc_cols, 0);
|
||||||
else
|
else {
|
||||||
say_char(vc);
|
if (spk_cur_phonetic == 1)
|
||||||
|
say_phonetic_char(vc);
|
||||||
|
else
|
||||||
|
say_char(vc);
|
||||||
|
}
|
||||||
spk_keydown = 0;
|
spk_keydown = 0;
|
||||||
is_cursor = 0;
|
is_cursor = 0;
|
||||||
out:
|
out:
|
||||||
@@ -2473,6 +2479,7 @@ module_param_named(say_control, spk_vars[SAY_CONTROL_ID].u.n.default_val, int, 0
|
|||||||
module_param_named(say_word_ctl, spk_vars[SAY_WORD_CTL_ID].u.n.default_val, int, 0444);
|
module_param_named(say_word_ctl, spk_vars[SAY_WORD_CTL_ID].u.n.default_val, int, 0444);
|
||||||
module_param_named(no_interrupt, spk_vars[NO_INTERRUPT_ID].u.n.default_val, int, 0444);
|
module_param_named(no_interrupt, spk_vars[NO_INTERRUPT_ID].u.n.default_val, int, 0444);
|
||||||
module_param_named(key_echo, spk_vars[KEY_ECHO_ID].u.n.default_val, int, 0444);
|
module_param_named(key_echo, spk_vars[KEY_ECHO_ID].u.n.default_val, int, 0444);
|
||||||
|
module_param_named(cur_phonetic, spk_vars[CUR_PHONETIC_ID].u.n.default_val, int, 0444);
|
||||||
|
|
||||||
MODULE_PARM_DESC(bell_pos, "This works much like a typewriter bell. If for example 72 is echoed to bell_pos, it will beep the PC speaker when typing on a line past character 72.");
|
MODULE_PARM_DESC(bell_pos, "This works much like a typewriter bell. If for example 72 is echoed to bell_pos, it will beep the PC speaker when typing on a line past character 72.");
|
||||||
MODULE_PARM_DESC(spell_delay, "This controls how fast a word is spelled when speakup's spell word review command is pressed.");
|
MODULE_PARM_DESC(spell_delay, "This controls how fast a word is spelled when speakup's spell word review command is pressed.");
|
||||||
@@ -2486,6 +2493,7 @@ MODULE_PARM_DESC(say_control, "This controls if speakup speaks shift, alt and co
|
|||||||
MODULE_PARM_DESC(say_word_ctl, "Sets thw say_word_ctl on load.");
|
MODULE_PARM_DESC(say_word_ctl, "Sets thw say_word_ctl on load.");
|
||||||
MODULE_PARM_DESC(no_interrupt, "Controls if typing interrupts output from speakup.");
|
MODULE_PARM_DESC(no_interrupt, "Controls if typing interrupts output from speakup.");
|
||||||
MODULE_PARM_DESC(key_echo, "Controls if speakup speaks keys when they are typed. One = on zero = off or don't echo keys.");
|
MODULE_PARM_DESC(key_echo, "Controls if speakup speaks keys when they are typed. One = on zero = off or don't echo keys.");
|
||||||
|
MODULE_PARM_DESC(cur_phonetic, "Controls if speakup speaks letters phonetically during navigation. One = on zero = off or don't speak phonetically.");
|
||||||
|
|
||||||
module_init(speakup_init);
|
module_init(speakup_init);
|
||||||
module_exit(speakup_exit);
|
module_exit(speakup_exit);
|
||||||
|
@@ -105,6 +105,7 @@ extern int spk_no_intr, spk_say_ctrl, spk_say_word_ctl, spk_punc_level;
|
|||||||
extern int spk_reading_punc, spk_attrib_bleep, spk_bleeps;
|
extern int spk_reading_punc, spk_attrib_bleep, spk_bleeps;
|
||||||
extern int spk_bleep_time, spk_bell_pos;
|
extern int spk_bleep_time, spk_bell_pos;
|
||||||
extern int spk_spell_delay, spk_key_echo;
|
extern int spk_spell_delay, spk_key_echo;
|
||||||
|
extern int spk_cur_phonetic;
|
||||||
extern short spk_punc_mask;
|
extern short spk_punc_mask;
|
||||||
extern short spk_pitch_shift, synth_flags;
|
extern short spk_pitch_shift, synth_flags;
|
||||||
extern bool spk_quiet_boot;
|
extern bool spk_quiet_boot;
|
||||||
|
@@ -49,7 +49,7 @@ enum var_id_t {
|
|||||||
RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG,
|
RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG,
|
||||||
DIRECT, PAUSE,
|
DIRECT, PAUSE,
|
||||||
CAPS_START, CAPS_STOP, CHARTAB, INFLECTION, FLUSH,
|
CAPS_START, CAPS_STOP, CHARTAB, INFLECTION, FLUSH,
|
||||||
MAXVARS
|
CUR_PHONETIC, MAXVARS
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
|
typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
|
||||||
|
@@ -48,6 +48,7 @@ static struct st_var_header var_headers[] = {
|
|||||||
{ "chartab", CHARTAB, VAR_PROC, NULL, NULL },
|
{ "chartab", CHARTAB, VAR_PROC, NULL, NULL },
|
||||||
{ "direct", DIRECT, VAR_NUM, NULL, NULL },
|
{ "direct", DIRECT, VAR_NUM, NULL, NULL },
|
||||||
{ "pause", PAUSE, VAR_STRING, spk_str_pause, NULL },
|
{ "pause", PAUSE, VAR_STRING, spk_str_pause, NULL },
|
||||||
|
{ "cur_phonetic", CUR_PHONETIC, VAR_NUM, &spk_cur_phonetic, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct st_var_header *var_ptrs[MAXVARS] = { NULL, NULL, NULL };
|
static struct st_var_header *var_ptrs[MAXVARS] = { NULL, NULL, NULL };
|
||||||
|
Reference in New Issue
Block a user