Commit ca5b956a authored by Lukas Holecek's avatar Lukas Holecek Committed by hjk
Browse files

FakeVim: Emulate Vim option ignorecase



Change-Id: I0dc87f8a34fa458a9eab14440f7ad2ac2cfe0a98
Reviewed-by: default avatarhjk <hjk121@nokiamail.com>
parent 4394b798
......@@ -193,6 +193,7 @@ FakeVimSettings *theFakeVimSettings()
createAction(s, ConfigIncSearch, true, _("IncSearch"), _("is"));
createAction(s, ConfigUseCoreSearch, false, _("UseCoreSearch"), _("ucs"));
createAction(s, ConfigSmartCase, false, _("SmartCase"), _("scs"));
createAction(s, ConfigIgnoreCase, false, _("IgnoreCase"), _("ic"));
createAction(s, ConfigWrapScan, true, _("WrapScan"), _("ws"));
createAction(s, ConfigShowCmd, true, _("ShowCmd"), _("sc"));
createAction(s, ConfigScrollOff, 0, _("ScrollOff"), _("so"));
......
......@@ -75,6 +75,7 @@ enum FakeVimSettingsCode
ConfigIncSearch,
ConfigUseCoreSearch,
ConfigSmartCase,
ConfigIgnoreCase,
ConfigWrapScan,
// indent allow backspacing over autoindent
......
......@@ -348,7 +348,7 @@ static bool eatString(const char *prefix, QString *str)
return true;
}
static QRegExp vimPatternToQtPattern(QString needle, bool smartcase)
static QRegExp vimPatternToQtPattern(QString needle, bool ignoreCaseOption, bool smartCaseOption)
{
/* Transformations (Vim regexp -> QRegExp):
* \a -> [A-Za-z]
......@@ -379,7 +379,9 @@ static QRegExp vimPatternToQtPattern(QString needle, bool smartcase)
* \c - set ignorecase for rest
* \C - set noignorecase for rest
*/
bool ignorecase = smartcase && !needle.contains(QRegExp(_("[A-Z]")));
// FIXME: Option smartcase should be used only if search was typed by user.
bool ignorecase = ignoreCaseOption
&& !(smartCaseOption && needle.contains(QRegExp(_("[A-Z]"))));
QString pattern;
pattern.reserve(2 * needle.size());
......@@ -4724,7 +4726,8 @@ bool FakeVimHandler::Private::handleExSubstituteCommand(const ExCommand &cmd)
if (g.lastSubstituteFlags.contains(QLatin1Char('i')))
needle.prepend(_("\\c"));
QRegExp pattern = vimPatternToQtPattern(needle, hasConfig(ConfigSmartCase));
QRegExp pattern = vimPatternToQtPattern(needle, hasConfig(ConfigIgnoreCase),
hasConfig(ConfigSmartCase));
QTextBlock lastBlock;
QTextBlock firstBlock;
......@@ -5448,7 +5451,8 @@ void FakeVimHandler::Private::searchBalanced(bool forward, QChar needle, QChar o
QTextCursor FakeVimHandler::Private::search(const SearchData &sd, int startPos, int count,
bool showMessages)
{
QRegExp needleExp = vimPatternToQtPattern(sd.needle, hasConfig(ConfigSmartCase));
QRegExp needleExp = vimPatternToQtPattern(sd.needle, hasConfig(ConfigIgnoreCase),
hasConfig(ConfigSmartCase));
if (!needleExp.isValid()) {
if (showMessages) {
QString error = needleExp.errorString();
......
......@@ -24,57 +24,34 @@
<string>Vim Behavior</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxSmartTab">
<item row="11" column="0">
<widget class="QLabel" name="labelIsKeyword">
<property name="text">
<string>Smart tabulators</string>
<string>Keyword characters:</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditIsKeyword"/>
</item>
<item row="12" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>17</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="checkBoxUseCoreSearch">
<widget class="QLabel" name="labelVimRcPath">
<property name="text">
<string>Use search dialog</string>
<string>Location of .vimrc:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="checkBoxStartOfLine">
<item row="7" column="2">
<widget class="QCheckBox" name="checkBoxReadVimRc">
<property name="text">
<string>Start of line</string>
<string>Read .vimrc</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxSmartIndent">
<property name="text">
<string>Smart indentation</string>
</property>
</widget>
<item row="11" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditIsKeyword"/>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxExpandTab">
<item row="4" column="2">
<widget class="QCheckBox" name="checkBoxWrapScan">
<property name="text">
<string>Expand tabulators</string>
<string>Use wrapscan</string>
</property>
</widget>
</item>
......@@ -85,24 +62,30 @@
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QCheckBox" name="checkBoxPassControlKey">
<property name="toolTip">
<string>Pass key sequences like Ctrl-S to Qt Creator core instead of interpreting them in FakeVim. This gives easier access to Qt Creator core functionality at the price of losing some features of FakeVim.</string>
<item row="13" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="text">
<string>Pass control key</string>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>17</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxHlSearch">
<item row="1" column="2">
<widget class="QCheckBox" name="checkBoxUseCoreSearch">
<property name="text">
<string>Highlight search results</string>
<string>Use search dialog</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<item row="8" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QSpinBox" name="spinBoxShiftWidth">
......@@ -129,14 +112,37 @@
</item>
</layout>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="checkBoxShowCmd">
<property name="text">
<string>Show partial command</string>
</property>
</widget>
<item row="9" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QSpinBox" name="spinBoxTabStop">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>80</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="9" column="0">
<item row="10" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditBackspace"/>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelBackspace">
<property name="text">
<string>Backspace:</string>
......@@ -144,6 +150,13 @@
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelShiftWidth">
<property name="text">
<string>Shift width:</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelTabulator">
<property name="toolTip">
<string>Vim tabstop option</string>
......@@ -153,24 +166,32 @@
</property>
</widget>
</item>
<item row="9" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditBackspace"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelShiftWidth">
<item row="3" column="2">
<widget class="QCheckBox" name="checkBoxSmartCase">
<property name="text">
<string>Shift width:</string>
<string>Use smartcase</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxIncSearch">
<property name="text">
<string>Incremental search</string>
</property>
</widget>
<item row="12" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayoutVimRcPath">
<item>
<widget class="QLineEdit" name="lineEditVimRcPath">
<property name="toolTip">
<string>Keep empty to use the default path, i.e. %USERPROFILE%\_vimrc on Windows, ~/.vimrc otherwise.</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonVimRcPath">
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="13" column="0" colspan="3">
<item row="14" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButtonCopyTextEditorSettings">
......@@ -208,92 +229,78 @@
</item>
</layout>
</item>
<item row="4" column="2">
<item row="5" column="2">
<widget class="QCheckBox" name="checkBoxShowMarks">
<property name="text">
<string>Show position of text marks</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxSmartIndent">
<property name="text">
<string>Smart indentation</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QCheckBox" name="checkBoxPassControlKey">
<property name="toolTip">
<string>Pass key sequences like Ctrl-S to Qt Creator core instead of interpreting them in FakeVim. This gives easier access to Qt Creator core functionality at the price of losing some features of FakeVim.</string>
</property>
<property name="text">
<string>Pass control key</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="checkBoxSmartCase">
<widget class="QCheckBox" name="checkBoxIgnoreCase">
<property name="text">
<string>Use smartcase</string>
<string>Use ignorecase</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QCheckBox" name="checkBoxWrapScan">
<item row="2" column="0">
<widget class="QCheckBox" name="checkBoxExpandTab">
<property name="text">
<string>Use wrapscan</string>
<string>Expand tabulators</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QSpinBox" name="spinBoxTabStop">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>80</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<item row="3" column="0">
<widget class="QCheckBox" name="checkBoxSmartTab">
<property name="text">
<string>Smart tabulators</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelIsKeyword">
<item row="4" column="0">
<widget class="QCheckBox" name="checkBoxHlSearch">
<property name="text">
<string>Keyword characters:</string>
<string>Highlight search results</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelVimRcPath">
<item row="0" column="2">
<widget class="QCheckBox" name="checkBoxIncSearch">
<property name="text">
<string>Location of .vimrc:</string>
<string>Incremental search</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QCheckBox" name="checkBoxReadVimRc">
<item row="5" column="0">
<widget class="QCheckBox" name="checkBoxShowCmd">
<property name="text">
<string>Read .vimrc</string>
<string>Show partial command</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayoutVimRcPath">
<item>
<widget class="QLineEdit" name="lineEditVimRcPath">
<property name="toolTip">
<string>Keep empty to use the default path, i.e. %USERPROFILE%\_vimrc on Windows, ~/.vimrc otherwise.</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonVimRcPath">
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
</layout>
<item row="6" column="0">
<widget class="QCheckBox" name="checkBoxStartOfLine">
<property name="text">
<string>Start of line</string>
</property>
</widget>
</item>
</layout>
</widget>
......@@ -320,10 +327,11 @@
<tabstop>checkBoxExpandTab</tabstop>
<tabstop>checkBoxSmartTab</tabstop>
<tabstop>checkBoxHlSearch</tabstop>
<tabstop>checkBoxIncSearch</tabstop>
<tabstop>checkBoxShowCmd</tabstop>
<tabstop>checkBoxStartOfLine</tabstop>
<tabstop>checkBoxIncSearch</tabstop>
<tabstop>checkBoxUseCoreSearch</tabstop>
<tabstop>checkBoxIgnoreCase</tabstop>
<tabstop>checkBoxSmartCase</tabstop>
<tabstop>checkBoxWrapScan</tabstop>
<tabstop>checkBoxShowMarks</tabstop>
......
......@@ -313,6 +313,8 @@ QWidget *FakeVimOptionPage::createPage(QWidget *parent)
m_ui.checkBoxUseCoreSearch);
m_group.insert(theFakeVimSetting(ConfigSmartCase),
m_ui.checkBoxSmartCase);
m_group.insert(theFakeVimSetting(ConfigIgnoreCase),
m_ui.checkBoxIgnoreCase);
m_group.insert(theFakeVimSetting(ConfigWrapScan),
m_ui.checkBoxWrapScan);
......@@ -1792,9 +1794,8 @@ void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
} else if (cmd.args == _("noic") || cmd.args == _("noignorecase")) {
// :set noic
setActionChecked(Find::Constants::CASE_SENSITIVE, true);
} else {
*handled = false; // Let the handler see it as well.
}
*handled = false; // Let the handler see it as well.
} else if (cmd.matches(_("n"), _("next"))) {
// :n[ext]
switchToFile(currentFile() + cmd.count);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment