]> git.lyx.org Git - features.git/commitdiff
Show suggestions containing the input in the command buffer
authorDaniel Ramoeller <d.lyx@web.de>
Sat, 6 Aug 2022 05:13:51 +0000 (07:13 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 4 Nov 2022 21:27:31 +0000 (22:27 +0100)
Previously, only the suggestions starting with the current input were
shown.

Contains the following minor improvements:
- Add space to indicate when only one suggestion is found

- Select first item in suggestion-list in order to make selecting with
  arrow keys more intuitive

- Fix selection with Shift+Up/Down in text-field

Fix for bug #12572.

src/frontends/qt/GuiCommandBuffer.cpp
src/frontends/qt/GuiCommandEdit.cpp

index 4d28bfb0c29e73db1b6e69c70921368c7bea85f3..ee68013e2f91aa4a546be8e302f5ca82904ce999 100644 (file)
@@ -184,9 +184,12 @@ void GuiCommandBuffer::complete()
        string new_input;
        vector<string> const & comp = completions(input, new_input);
 
-       if (comp.empty()) {
+       if (comp.empty() || comp.size() == 1) {
                if (new_input != input)
                        edit_->setText(toqstr(new_input));
+               // If there is only one match, indicate this by adding a space
+               if (comp.size() == 1)
+                       edit_->setText(edit_->text() + " ");
                return;
        }
 
@@ -208,6 +211,8 @@ void GuiCommandBuffer::showList(vector<string> const & list,
                else
                        listBox->addItem(toqstr(item));
        }
+       // Select the first item
+       listBox->setCurrentItem(listBox->item(0));
 
        listBox->resize(listBox->sizeHint());
 
@@ -296,6 +301,11 @@ GuiCommandBuffer::completions(string const & prefix, string & new_prefix)
                if (prefixIs(act.first, prefix))
                        comp.push_back(act.first);
        }
+       // now add all the other items that contain the prefix
+       for (auto const & act : lyxaction) {
+               if (!prefixIs(act.first, prefix) && contains(act.first, prefix))
+                       comp.push_back(act.first);
+       }
 
        if (comp.empty()) {
                new_prefix = prefix;
@@ -304,7 +314,7 @@ GuiCommandBuffer::completions(string const & prefix, string & new_prefix)
 
        if (comp.size() == 1) {
                new_prefix = comp[0];
-               return vector<string>();
+               return comp;
        }
 
        // find maximal available prefix
index 22dd9c8f033a4476cfa762e75a729b5367058435..89883da50a2099b65e68f8873a286a13bda03254 100644 (file)
@@ -29,26 +29,29 @@ GuiCommandEdit::GuiCommandEdit(QWidget * parent)
 
 void GuiCommandEdit::keyPressEvent(QKeyEvent * e)
 {
-       switch (e->key()) {
-       case Qt::Key_Escape:
-               // emit signal
-               escapePressed();
-               break;
-
-       case Qt::Key_Up:
-               // emit signal
-               upPressed();
-               break;
-
-       case Qt::Key_Down:
-               // emit signal
-               downPressed();
-               break;
-
-       default:
-               QLineEdit::keyPressEvent(e);
-               break;
+       if (e->modifiers() == Qt::NoModifier) {
+               switch (e->key()) {
+               case Qt::Key_Escape:
+                       // emit signal
+                       escapePressed();
+                       return;
+
+               case Qt::Key_Up:
+                       // emit signal
+                       upPressed();
+                       return;
+
+               case Qt::Key_Down:
+                       // emit signal
+                       downPressed();
+                       return;
+
+               default:
+                       // do nothing
+                       break;
+               }
        }
+       QLineEdit::keyPressEvent(e);
 }