window: interpret ctrl-h as backspace
This commit is contained in:
@@ -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)
|
||||
|
||||
40
src/window.h
40
src/window.h
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user