history: Trim input and ignore if empty

This ports the runDialog changes of [1] to the underlying history
component, where they can benefit looking glass as well: the history is
now responsible for trimming the input and deciding that it shouldn’t be
stored if empty. (Note that _setPrevItem and _setNextItem already
skipped updating the history if the entry was empty.)

Since both users, runDialog and lookingGlass, also need the trimmed
input for other reasons – runDialog to avoid issues when interpreting
the command as a file path (if it can’t be executed as a command),
lookingGlass to decide whether a command should be run at all – have
addItem return the trimmed input. (runDialog and lookingGlass are not
yet changed to take advantage of this – that will be done in separate
commits.)

[1]: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1442

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1653>
This commit is contained in:
Lucas Werkmeister 2021-02-08 22:20:42 +01:00 committed by Marge Bot
parent 30203f2694
commit d31f805817

View File

@ -69,21 +69,24 @@ var HistoryManager = class {
} }
addItem(input) { addItem(input) {
if (this._history.length === 0 || input = input.trim();
this._history[this._history.length - 1] !== input) { if (input &&
(this._history.length === 0 ||
this._history[this._history.length - 1] !== input)) {
this._history = this._history.filter(entry => entry !== input); this._history = this._history.filter(entry => entry !== input);
this._history.push(input); this._history.push(input);
this._save(); this._save();
} }
this._historyIndex = this._history.length; this._historyIndex = this._history.length;
return input; // trimmed
} }
_onEntryKeyPress(entry, event) { _onEntryKeyPress(entry, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
if (symbol === Clutter.KEY_Up) if (symbol === Clutter.KEY_Up)
return this._setPrevItem(entry.get_text()); return this._setPrevItem(entry.get_text().trim());
else if (symbol === Clutter.KEY_Down) else if (symbol === Clutter.KEY_Down)
return this._setNextItem(entry.get_text()); return this._setNextItem(entry.get_text().trim());
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }