Merge topic 'ccmake-vim-navigation'
e34e9c27
ccmake: Add VIM-like bindings for navigation9a1b6c60
ccmake: Revise documentation for [d]31b6cf41
ccmake: Fix typo in help (it's -> its)
This commit is contained in:
commit
382c4fca6b
|
@ -0,0 +1,4 @@
|
||||||
|
ccmake-vim-navigation
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* :manual:`ccmake(1)` learned to support vim-like navigation bindings.
|
|
@ -27,8 +27,9 @@ cmCursesBoolWidget::cmCursesBoolWidget(int width, int height, int left,
|
||||||
bool cmCursesBoolWidget::HandleInput(int& key, cmCursesMainForm*, WINDOW* w)
|
bool cmCursesBoolWidget::HandleInput(int& key, cmCursesMainForm*, WINDOW* w)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// toggle boolean values with enter or space
|
||||||
// 10 == enter
|
// 10 == enter
|
||||||
if (key == 10 || key == KEY_ENTER) {
|
if (key == 10 || key == KEY_ENTER || key == ' ') {
|
||||||
if (this->GetValueAsBool()) {
|
if (this->GetValueAsBool()) {
|
||||||
this->SetValueAsBool(false);
|
this->SetValueAsBool(false);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -388,7 +388,7 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */)
|
||||||
|
|
||||||
curses_move(y - 4, 0);
|
curses_move(y - 4, 0);
|
||||||
char fmt_s[] = "%s";
|
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) {
|
if (process) {
|
||||||
strcpy(fmt, " ");
|
strcpy(fmt, " ");
|
||||||
}
|
}
|
||||||
|
@ -837,7 +837,9 @@ void cmCursesMainForm::HandleInput()
|
||||||
// therefore, the label field for the prev. entry is index-5
|
// therefore, the label field for the prev. entry is index-5
|
||||||
// and the label field for the next entry is index+1
|
// and the label field for the next entry is index+1
|
||||||
// (index always corresponds to the value field)
|
// (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);
|
FIELD* cur = current_field(this->Form);
|
||||||
size_t findex = field_index(cur);
|
size_t findex = field_index(cur);
|
||||||
if (findex == 3 * this->NumberOfVisibleEntries - 1) {
|
if (findex == 3 * this->NumberOfVisibleEntries - 1) {
|
||||||
|
@ -854,7 +856,8 @@ void cmCursesMainForm::HandleInput()
|
||||||
// therefore, the label field for the prev. entry is index-5
|
// therefore, the label field for the prev. entry is index-5
|
||||||
// and the label field for the next entry is index+1
|
// and the label field for the next entry is index+1
|
||||||
// (index always corresponds to the value field)
|
// (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);
|
FIELD* cur = current_field(this->Form);
|
||||||
int findex = field_index(cur);
|
int findex = field_index(cur);
|
||||||
if (findex == 2) {
|
if (findex == 2) {
|
||||||
|
@ -1122,16 +1125,17 @@ const char* cmCursesMainForm::s_ConstHelpMessage =
|
||||||
"Navigation: "
|
"Navigation: "
|
||||||
"You can use the arrow keys and page up, down to navigate the options. "
|
"You can use the arrow keys and page up, down to navigate the options. "
|
||||||
"Alternatively, you can use the following keys: \n"
|
"Alternatively, you can use the following keys: \n"
|
||||||
" C-n : next option\n"
|
" C-n or j : next option\n"
|
||||||
" C-p : previous options\n"
|
" C-p or k : previous options\n"
|
||||||
" C-d : down one page\n"
|
" C-d : down one page\n"
|
||||||
" C-u : up one page\n\n"
|
" C-u : up one page\n\n"
|
||||||
"Editing options: "
|
"Editing options: "
|
||||||
"To change an option press enter or return. If the current options is a "
|
"To change an option press enter or return. If the current options is a "
|
||||||
"boolean, this will toggle it's value. "
|
"boolean, this will toggle its value. "
|
||||||
"Otherwise, ccmake will enter edit mode. In this mode you can edit an "
|
"Otherwise, ccmake will enter edit mode. Alternatively, you can toggle "
|
||||||
"option using arrow keys and backspace. Alternatively, you can use the "
|
"a bool variable by pressing space, and enter edit mode with i."
|
||||||
"following keys:\n"
|
"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-b : back one character\n"
|
||||||
" C-f : forward one character\n"
|
" C-f : forward one character\n"
|
||||||
" C-a : go to the beginning of the field\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"
|
" C-k : kill the rest of the field\n"
|
||||||
" Esc : Restore field (discard last changes)\n"
|
" Esc : Restore field (discard last changes)\n"
|
||||||
" Enter : Leave edit mode\n"
|
" Enter : Leave edit mode\n"
|
||||||
"You can also delete an option by pressing 'd'\n\n"
|
|
||||||
"Commands:\n"
|
"Commands:\n"
|
||||||
" q : quit ccmake without generating build files\n"
|
" q : quit ccmake without generating build files\n"
|
||||||
" h : help, shows this screen\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 "
|
" g : generate build files and exit, only available when there are no "
|
||||||
"new options and no errors have been detected during last configuration.\n"
|
"new options and no errors have been detected during last configuration.\n"
|
||||||
" l : shows last errors\n"
|
" l : shows last errors\n"
|
||||||
|
" d : delete an option\n"
|
||||||
" t : toggles advanced mode. In normal mode, only the most important "
|
" t : toggles advanced mode. In normal mode, only the most important "
|
||||||
"options are shown. In advanced mode, all options are shown. We recommend "
|
"options are shown. In advanced mode, all options are shown. We recommend "
|
||||||
"using normal mode unless you are an expert.\n"
|
"using normal mode unless you are an expert.\n"
|
||||||
|
|
|
@ -67,8 +67,10 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
FORM* form = fm->GetForm();
|
FORM* form = fm->GetForm();
|
||||||
|
// when not in edit mode, edit mode is entered by pressing enter or i (vim
|
||||||
|
// binding)
|
||||||
// 10 == enter
|
// 10 == enter
|
||||||
if (!this->InEdit && (key != 10 && key != KEY_ENTER)) {
|
if (!this->InEdit && (key != 10 && key != KEY_ENTER && key != 'i')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,11 +99,15 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||||
}
|
}
|
||||||
|
|
||||||
// If resize occurred during edit, move out of edit mode
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
// 10 == enter
|
// enter edit with return and i (vim binding)
|
||||||
if (key == 10 || key == KEY_ENTER) {
|
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);
|
this->OnReturn(fm, w);
|
||||||
} else if (key == KEY_DOWN || key == ctrl('n') || key == KEY_UP ||
|
} else if (key == KEY_DOWN || key == ctrl('n') || key == KEY_UP ||
|
||||||
key == ctrl('p') || key == KEY_NPAGE || key == ctrl('d') ||
|
key == ctrl('p') || key == KEY_NPAGE || key == ctrl('d') ||
|
||||||
|
|
Loading…
Reference in New Issue