diff options
| -rw-r--r-- | src/rekonq.kcfg | 3 | ||||
| -rw-r--r-- | src/settings/settings_general.ui | 17 | ||||
| -rw-r--r-- | src/webview.cpp | 29 | 
3 files changed, 44 insertions, 5 deletions
| diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg index 4050c4a0..2d19b723 100644 --- a/src/rekonq.kcfg +++ b/src/rekonq.kcfg @@ -97,6 +97,9 @@      <entry name="clearHomePageThumbs" type="Bool">          <default>true</default>      </entry> +    <entry name="enableViShortcuts" type="Bool"> +        <default>false</default> +    </entry>  </group> diff --git a/src/settings/settings_general.ui b/src/settings/settings_general.ui index d0c31655..3f7c0675 100644 --- a/src/settings/settings_general.ui +++ b/src/settings/settings_general.ui @@ -194,6 +194,13 @@          </property>         </widget>        </item> +      <item> +       <widget class="QCheckBox" name="kcfg_enableViShortcuts"> +        <property name="text"> +         <string>Enable Vi-like navigation shortcuts</string> +        </property> +       </widget> +      </item>       </layout>      </widget>     </item> @@ -214,15 +221,15 @@   </widget>   <customwidgets>    <customwidget> -   <class>KLineEdit</class> -   <extends>QLineEdit</extends> -   <header>klineedit.h</header> -  </customwidget> -  <customwidget>     <class>KComboBox</class>     <extends>QComboBox</extends>     <header>kcombobox.h</header>    </customwidget> +  <customwidget> +   <class>KLineEdit</class> +   <extends>QLineEdit</extends> +   <header>klineedit.h</header> +  </customwidget>   </customwidgets>   <resources/>   <connections/> diff --git a/src/webview.cpp b/src/webview.cpp index d8325543..8dfcc051 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -643,6 +643,35 @@ void WebView::keyPressEvent(QKeyEvent *event)          }      } +    // vi-like navigation +    if (ReKonfig::enableViShortcuts()) +    { +        const QString tagName = page()->mainFrame()->evaluateJavaScript("document.activeElement.tagName").toString(); +        if (tagName != QL1S("INPUT") && tagName != QL1S("TEXTAREA") && event->modifiers() == Qt::NoModifier) +        { +            switch (event->key()) +            { +            case Qt::Key_J: +                event->accept(); +                event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); +                break; +            case Qt::Key_K: +                event->accept(); +                event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); +                break; +            case Qt::Key_L: +                event->accept(); +                event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier); +                break; +            case Qt::Key_H: +                event->accept(); +                event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); +                break; +            default: +                break; +            } +        } +    }      KWebView::keyPressEvent(event);  } | 
