window: interpret ctrl-h as backspace

This commit is contained in:
Andrzej Rybczak
2012-07-16 01:38:19 +02:00
parent 8b2fd356b7
commit 7b8a286c49
2 changed files with 49 additions and 16 deletions

View File

@@ -483,7 +483,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
gotoend = 0;
}
mvwhline(itsWindow, y, minx, 32, width+1);
mvwhline(itsWindow, y, minx, ' ', width+1);
if (!encrypted)
mvwprintw(itsWindow, y, minx, "%ls", tmp->substr(beginning, width+1).c_str());
@@ -498,12 +498,11 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
ReadKey(input);
// these key codes are special and should be ignored
if ((input < 10 || (input > 10 && input != 21 && input < 32))
# ifdef USE_PDCURSES
&& input != KEY_BACKSPACE)
# else
)
# endif // USE_PDCURSES
if (input >= KEY_CTRL_A
&& input != KEY_CTRL_H
&& input != KEY_ENTER
&& input != KEY_CTRL_U
&& input <= KEY_CTRL_Z)
continue;
switch (input)
@@ -542,7 +541,9 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
beginning++;
break;
}
case KEY_BACKSPACE: case 127:
case KEY_CTRL_H:
case KEY_BACKSPACE:
case KEY_BACKSPACE_2:
{
if (x <= minx && !beginning)
break;
@@ -556,7 +557,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
}
else if (beginning > 0)
beginning--;
if (input != KEY_BACKSPACE && input != 127)
if (input != KEY_CTRL_H && input != KEY_BACKSPACE && input != KEY_BACKSPACE_2)
break; // backspace = left & delete.
}
case KEY_DC:
@@ -582,9 +583,9 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
gotoend = 1;
break;
}
case 10:
case KEY_ENTER:
break;
case 21: // CTRL+U
case KEY_CTRL_U:
tmp->clear();
real_maxx = maxx = real_x = x = minx;
maxbeginning = beginning = 0;
@@ -627,7 +628,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
}
}
}
while (input != 10);
while (input != KEY_ENTER);
curs_set(0);
if (itsHistory && !encrypted)

View File

@@ -44,10 +44,42 @@
# define GNUC_PRINTF(a, b)
#endif
#ifdef USE_PDCURSES
# undef KEY_BACKSPACE
# define KEY_BACKSPACE 8
#else
// define some Ctrl-? keys
#define KEY_CTRL_A 1
#define KEY_CTRL_B 2
#define KEY_CTRL_C 3
#define KEY_CTRL_D 4
#define KEY_CTRL_E 5
#define KEY_CTRL_F 6
#define KEY_CTRL_G 7
#define KEY_CTRL_H 8
#define KEY_CTRL_I 9
#define KEY_CTRL_J 10
#define KEY_CTRL_K 11
#define KEY_CTRL_L 12
#define KEY_CTRL_M 13
#define KEY_CTRL_N 14
#define KEY_CTRL_O 15
#define KEY_CTRL_P 16
#define KEY_CTRL_Q 17
#define KEY_CTRL_R 18
#define KEY_CTRL_S 19
#define KEY_CTRL_T 20
#define KEY_CTRL_U 21
#define KEY_CTRL_V 22
#define KEY_CTRL_W 23
#define KEY_CTRL_X 24
#define KEY_CTRL_Y 25
#define KEY_CTRL_Z 26
// define alternative KEY_BACKSPACE (used in some terminal emulators)
#define KEY_BACKSPACE_2 127
// KEY_ENTER is 343, which doesn't make any sense. This makes it useful.
#undef KEY_ENTER
#define KEY_ENTER 10
#ifndef USE_PDCURSES
// NOTICE: redefine BUTTON2_PRESSED as it doesn't always work, I noticed
// that it sometimes returns 134217728 (2^27) instead of expected mask, so the
// modified define does it right but is rather experimental.