Teach autosuggestions to respect forward-bigword

Closes #5336
This commit is contained in:
George Christou 2019-02-19 21:25:14 +00:00 committed by ridiculousfish
parent 75e83cac29
commit de0b64409c
2 changed files with 7 additions and 5 deletions

View file

@ -21,6 +21,7 @@
- In the interest of consistency, `builtin -q` and `command -q` can now be used to query if a builtin or command exists (#5631). - In the interest of consistency, `builtin -q` and `command -q` can now be used to query if a builtin or command exists (#5631).
- The `path_helper` on macOS now only runs in login shells, matching the bash implementation. - The `path_helper` on macOS now only runs in login shells, matching the bash implementation.
- `math` now accepts `--scale=max` for the maximum scale (#5579). - `math` now accepts `--scale=max` for the maximum scale (#5579).
- The `forward-bigword` binding now interacts correctly with autosuggestions (#5336)
--- ---

View file

@ -1393,8 +1393,9 @@ static void update_autosuggestion() {
} }
// Accept any autosuggestion by replacing the command line with it. If full is true, take the whole // Accept any autosuggestion by replacing the command line with it. If full is true, take the whole
// thing; if it's false, then take only the first "word". // thing; if it's false, then respect the passed in style.
static void accept_autosuggestion(bool full) { static void accept_autosuggestion(bool full,
move_word_style_t style = move_word_style_punctuation) {
reader_data_t *data = current_data(); reader_data_t *data = current_data();
if (!data->autosuggestion.empty()) { if (!data->autosuggestion.empty()) {
// Accepting an autosuggestion clears the pager. // Accepting an autosuggestion clears the pager.
@ -1405,8 +1406,8 @@ static void accept_autosuggestion(bool full) {
// Just take the whole thing. // Just take the whole thing.
data->command_line.text = data->autosuggestion; data->command_line.text = data->autosuggestion;
} else { } else {
// Accept characters up to a word separator. // Accept characters according to the specified style.
move_word_state_machine_t state(move_word_style_punctuation); move_word_state_machine_t state(style);
for (size_t idx = data->command_line.size(); idx < data->autosuggestion.size(); idx++) { for (size_t idx = data->command_line.size(); idx < data->autosuggestion.size(); idx++) {
wchar_t wc = data->autosuggestion.at(idx); wchar_t wc = data->autosuggestion.at(idx);
if (!state.consume_char(wc)) break; if (!state.consume_char(wc)) break;
@ -3038,7 +3039,7 @@ const wchar_t *reader_readline(int nchars) {
move_word(el, MOVE_DIR_RIGHT, false /* do not erase */, move_word(el, MOVE_DIR_RIGHT, false /* do not erase */,
move_style, false); move_style, false);
} else { } else {
accept_autosuggestion(false /* accept only one word */); accept_autosuggestion(false, move_style);
} }
break; break;
} }