From 7b8a286c499916ba6c4d5600ca7b83a702c08807 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Mon, 16 Jul 2012 01:38:19 +0200 Subject: [PATCH] window: interpret ctrl-h as backspace --- src/window.cpp | 25 +++++++++++++------------ src/window.h | 40 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 7153786a..0f235a22 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -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) diff --git a/src/window.h b/src/window.h index a869fe74..a267df07 100644 --- a/src/window.h +++ b/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.