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

View File

@@ -44,10 +44,42 @@
# define GNUC_PRINTF(a, b) # define GNUC_PRINTF(a, b)
#endif #endif
#ifdef USE_PDCURSES // define some Ctrl-? keys
# undef KEY_BACKSPACE #define KEY_CTRL_A 1
# define KEY_BACKSPACE 8 #define KEY_CTRL_B 2
#else #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 // 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 // that it sometimes returns 134217728 (2^27) instead of expected mask, so the
// modified define does it right but is rather experimental. // modified define does it right but is rather experimental.