summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-08-03 13:20:59 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-08-03 13:20:59 (GMT)
commit382c4fca6b895c2c7a68445918a8fd73a15e1f91 (patch)
tree08c344a95ec0661dab3a7d9c6f8b674c12ce3edc /Source
parentc2bc47f2662ec7e80469bee634c2444ee3d28bcc (diff)
parente34e9c2705c9e0bb568f5f69a655a9d425ef8adb (diff)
downloadCMake-382c4fca6b895c2c7a68445918a8fd73a15e1f91.zip
CMake-382c4fca6b895c2c7a68445918a8fd73a15e1f91.tar.gz
CMake-382c4fca6b895c2c7a68445918a8fd73a15e1f91.tar.bz2
Merge topic 'ccmake-vim-navigation'
e34e9c27 ccmake: Add VIM-like bindings for navigation 9a1b6c60 ccmake: Revise documentation for [d] 31b6cf41 ccmake: Fix typo in help (it's -> its)
Diffstat (limited to 'Source')
-rw-r--r--Source/CursesDialog/cmCursesBoolWidget.cxx3
-rw-r--r--Source/CursesDialog/cmCursesMainForm.cxx24
-rw-r--r--Source/CursesDialog/cmCursesStringWidget.cxx14
3 files changed, 26 insertions, 15 deletions
diff --git a/Source/CursesDialog/cmCursesBoolWidget.cxx b/Source/CursesDialog/cmCursesBoolWidget.cxx
index 9bcf050..e36ac34 100644
--- a/Source/CursesDialog/cmCursesBoolWidget.cxx
+++ b/Source/CursesDialog/cmCursesBoolWidget.cxx
@@ -27,8 +27,9 @@ cmCursesBoolWidget::cmCursesBoolWidget(int width, int height, int left,
bool cmCursesBoolWidget::HandleInput(int& key, cmCursesMainForm*, WINDOW* w)
{
+ // toggle boolean values with enter or space
// 10 == enter
- if (key == 10 || key == KEY_ENTER) {
+ if (key == 10 || key == KEY_ENTER || key == ' ') {
if (this->GetValueAsBool()) {
this->SetValueAsBool(false);
} else {
diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx
index 9ae38d6..964f3af 100644
--- a/Source/CursesDialog/cmCursesMainForm.cxx
+++ b/Source/CursesDialog/cmCursesMainForm.cxx
@@ -388,7 +388,7 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */)
curses_move(y - 4, 0);
char fmt_s[] = "%s";
- char fmt[512] = "Press [enter] to edit option";
+ char fmt[512] = "Press [enter] to edit option Press [d] to delete an entry";
if (process) {
strcpy(fmt, " ");
}
@@ -837,7 +837,9 @@ void cmCursesMainForm::HandleInput()
// therefore, the label field for the prev. entry is index-5
// and the label field for the next entry is index+1
// (index always corresponds to the value field)
- else if (key == KEY_DOWN || key == ctrl('n')) {
+ // scroll down with arrow down, ctrl+n (emacs binding), or j (vim
+ // binding)
+ else if (key == KEY_DOWN || key == ctrl('n') || key == 'j') {
FIELD* cur = current_field(this->Form);
size_t findex = field_index(cur);
if (findex == 3 * this->NumberOfVisibleEntries - 1) {
@@ -854,7 +856,8 @@ void cmCursesMainForm::HandleInput()
// therefore, the label field for the prev. entry is index-5
// and the label field for the next entry is index+1
// (index always corresponds to the value field)
- else if (key == KEY_UP || key == ctrl('p')) {
+ // scroll down with arrow up, ctrl+p (emacs binding), or k (vim binding)
+ else if (key == KEY_UP || key == ctrl('p') || key == 'k') {
FIELD* cur = current_field(this->Form);
int findex = field_index(cur);
if (findex == 2) {
@@ -1122,16 +1125,17 @@ const char* cmCursesMainForm::s_ConstHelpMessage =
"Navigation: "
"You can use the arrow keys and page up, down to navigate the options. "
"Alternatively, you can use the following keys: \n"
- " C-n : next option\n"
- " C-p : previous options\n"
+ " C-n or j : next option\n"
+ " C-p or k : previous options\n"
" C-d : down one page\n"
" C-u : up one page\n\n"
"Editing options: "
"To change an option press enter or return. If the current options is a "
- "boolean, this will toggle it's value. "
- "Otherwise, ccmake will enter edit mode. In this mode you can edit an "
- "option using arrow keys and backspace. Alternatively, you can use the "
- "following keys:\n"
+ "boolean, this will toggle its value. "
+ "Otherwise, ccmake will enter edit mode. Alternatively, you can toggle "
+ "a bool variable by pressing space, and enter edit mode with i."
+ "In this mode you can edit an option using arrow keys and backspace. "
+ "Alternatively, you can use the following keys:\n"
" C-b : back one character\n"
" C-f : forward one character\n"
" C-a : go to the beginning of the field\n"
@@ -1140,7 +1144,6 @@ const char* cmCursesMainForm::s_ConstHelpMessage =
" C-k : kill the rest of the field\n"
" Esc : Restore field (discard last changes)\n"
" Enter : Leave edit mode\n"
- "You can also delete an option by pressing 'd'\n\n"
"Commands:\n"
" q : quit ccmake without generating build files\n"
" h : help, shows this screen\n"
@@ -1148,6 +1151,7 @@ const char* cmCursesMainForm::s_ConstHelpMessage =
" g : generate build files and exit, only available when there are no "
"new options and no errors have been detected during last configuration.\n"
" l : shows last errors\n"
+ " d : delete an option\n"
" t : toggles advanced mode. In normal mode, only the most important "
"options are shown. In advanced mode, all options are shown. We recommend "
"using normal mode unless you are an expert.\n"
diff --git a/Source/CursesDialog/cmCursesStringWidget.cxx b/Source/CursesDialog/cmCursesStringWidget.cxx
index 6eb5310..46b8b86 100644
--- a/Source/CursesDialog/cmCursesStringWidget.cxx
+++ b/Source/CursesDialog/cmCursesStringWidget.cxx
@@ -67,8 +67,10 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
int x, y;
FORM* form = fm->GetForm();
+ // when not in edit mode, edit mode is entered by pressing enter or i (vim
+ // binding)
// 10 == enter
- if (!this->InEdit && (key != 10 && key != KEY_ENTER)) {
+ if (!this->InEdit && (key != 10 && key != KEY_ENTER && key != 'i')) {
return false;
}
@@ -97,11 +99,15 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
}
// If resize occurred during edit, move out of edit mode
- if (!this->InEdit && (key != 10 && key != KEY_ENTER)) {
+ if (!this->InEdit && (key != 10 && key != KEY_ENTER && key != 'i')) {
return false;
}
- // 10 == enter
- if (key == 10 || key == KEY_ENTER) {
+ // enter edit with return and i (vim binding)
+ if (!this->InEdit && (key == 10 || key == KEY_ENTER || key == 'i')) {
+ this->OnReturn(fm, w);
+ }
+ // leave edit with return (but not i -- not a toggle)
+ else if (this->InEdit && (key == 10 || key == KEY_ENTER)) {
this->OnReturn(fm, w);
} else if (key == KEY_DOWN || key == ctrl('n') || key == KEY_UP ||
key == ctrl('p') || key == KEY_NPAGE || key == ctrl('d') ||