From a094ae434ec1d6a0f69af9b3ef6fbeb40fa96d92 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 21 Oct 2000 16:30:58 +0000 Subject: [PATCH] Three new configurable options: - Robert de Bath's Compose key is now off by default and configurable on - The ages-old controversy over whether ALT by itself should bring the System menu up is now controllable by a config option - You can now independently configure whether scrollback resets on a keypress _and_ whether it resets on screen activity. git-svn-id: svn://svn.tartarus.org/sgt/putty@741 cda61777-01e9-0310-a592-d414129be87e --- putty.h | 3 +++ settings.c | 6 ++++++ terminal.c | 2 +- windlg.c | 37 ++++++++++++++++++++++++++++++++++--- window.c | 45 +++++++++++++++++++++++++-------------------- 5 files changed, 69 insertions(+), 24 deletions(-) diff --git a/putty.h b/putty.h index 6747b42c..7f14f3d9 100644 --- a/putty.h +++ b/putty.h @@ -160,8 +160,11 @@ typedef struct { int nethack_keypad; int alt_f4; /* is it special? */ int alt_space; /* is it special? */ + int alt_only; /* is it special? */ int ldisc_term; int scroll_on_key; + int scroll_on_disp; + int compose_key; char wintitle[256]; /* initial window title */ /* Terminal options */ int savelines; diff --git a/settings.c b/settings.c index 69394f27..a5414419 100644 --- a/settings.c +++ b/settings.c @@ -90,6 +90,8 @@ void save_settings (char *section, int do_host, Config *cfg) { write_setting_i (sesskey, "NetHackKeypad", cfg->nethack_keypad); write_setting_i (sesskey, "AltF4", cfg->alt_f4); write_setting_i (sesskey, "AltSpace", cfg->alt_space); + write_setting_i (sesskey, "AltOnly", cfg->alt_only); + write_setting_i (sesskey, "ComposeKey", cfg->compose_key); write_setting_i (sesskey, "LdiscTerm", cfg->ldisc_term); write_setting_i (sesskey, "BlinkCur", cfg->blink_cur); write_setting_i (sesskey, "Beep", cfg->beep); @@ -133,6 +135,7 @@ void save_settings (char *section, int do_host, Config *cfg) { write_setting_i (sesskey, "CapsLockCyr", cfg->xlat_capslockcyr); write_setting_i (sesskey, "ScrollBar", cfg->scrollbar); write_setting_i (sesskey, "ScrollOnKey", cfg->scroll_on_key); + write_setting_i (sesskey, "ScrollOnDisp", cfg->scroll_on_disp); write_setting_i (sesskey, "LockSize", cfg->locksize); write_setting_i (sesskey, "BCE", cfg->bce); write_setting_i (sesskey, "BlinkText", cfg->blinktext); @@ -213,6 +216,8 @@ void load_settings (char *section, int do_host, Config *cfg) { gppi (sesskey, "NetHackKeypad", 0, &cfg->nethack_keypad); gppi (sesskey, "AltF4", 1, &cfg->alt_f4); gppi (sesskey, "AltSpace", 0, &cfg->alt_space); + gppi (sesskey, "AltOnly", 0, &cfg->alt_only); + gppi (sesskey, "ComposeKey", 0, &cfg->compose_key); gppi (sesskey, "LdiscTerm", 0, &cfg->ldisc_term); gppi (sesskey, "BlinkCur", 0, &cfg->blink_cur); gppi (sesskey, "Beep", 1, &cfg->beep); @@ -279,6 +284,7 @@ void load_settings (char *section, int do_host, Config *cfg) { gppi (sesskey, "CapsLockCyr", 0, &cfg->xlat_capslockcyr); gppi (sesskey, "ScrollBar", 1, &cfg->scrollbar); gppi (sesskey, "ScrollOnKey", 0, &cfg->scroll_on_key); + gppi (sesskey, "ScrollOnDisp", 1, &cfg->scroll_on_disp); gppi (sesskey, "LockSize", 0, &cfg->locksize); gppi (sesskey, "BCE", 0, &cfg->bce); gppi (sesskey, "BlinkText", 0, &cfg->blinktext); diff --git a/terminal.c b/terminal.c index 4cd003aa..c1fef2a1 100644 --- a/terminal.c +++ b/terminal.c @@ -212,7 +212,7 @@ void term_update(void) { ctx = get_ctx(); if (ctx) { if ( (seen_key_event && (cfg.scroll_on_key)) || - (seen_disp_event && (!cfg.scroll_on_key)) ) { + (seen_disp_event && (cfg.scroll_on_disp)) ) { disptop = scrtop; seen_disp_event = seen_key_event = 0; update_sbar(); diff --git a/windlg.c b/windlg.c index 27011cf7..6a45a31a 100644 --- a/windlg.c +++ b/windlg.c @@ -210,6 +210,7 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_TITLE_KEYBOARD, IDC_BOX_KEYBOARD1, IDC_BOXT_KEYBOARD1, IDC_BOX_KEYBOARD2, IDC_BOXT_KEYBOARD2, + IDC_BOX_KEYBOARD3, IDC_BOXT_KEYBOARD3, IDC_DELSTATIC, IDC_DEL008, IDC_DEL127, @@ -228,6 +229,7 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_CURSTATIC, IDC_CURNORMAL, IDC_CURAPPLIC, + IDC_COMPOSEKEY, keyboardpanelend, terminalpanelstart, @@ -268,7 +270,9 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_SAVEEDIT, IDC_ALTF4, IDC_ALTSPACE, + IDC_ALTONLY, IDC_SCROLLKEY, + IDC_SCROLLDISP, windowpanelend, connectionpanelstart, @@ -437,8 +441,11 @@ static void init_dlg_ctrls(HWND hwnd) { cfg.app_keypad ? IDC_KPAPPLIC : IDC_KPNORMAL); CheckDlgButton (hwnd, IDC_ALTF4, cfg.alt_f4); CheckDlgButton (hwnd, IDC_ALTSPACE, cfg.alt_space); + CheckDlgButton (hwnd, IDC_ALTONLY, cfg.alt_only); + CheckDlgButton (hwnd, IDC_COMPOSEKEY, cfg.compose_key); CheckDlgButton (hwnd, IDC_LDISCTERM, cfg.ldisc_term); CheckDlgButton (hwnd, IDC_SCROLLKEY, cfg.scroll_on_key); + CheckDlgButton (hwnd, IDC_SCROLLDISP, cfg.scroll_on_disp); CheckDlgButton (hwnd, IDC_WRAPMODE, cfg.wrap_mode); CheckDlgButton (hwnd, IDC_DECOM, cfg.dec_om); @@ -587,6 +594,7 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, switch (msg) { case WM_INITDIALOG: + readytogo = 0; SetWindowLong(hwnd, GWL_USERDATA, 0); /* * Centre the window. @@ -718,7 +726,7 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, treeview_insert(&tvfaff, 0, "Terminal"); } - /* The Keyboard panel. Accelerators used: [acgo] h?srvlxvnpmie */ + /* The Keyboard panel. Accelerators used: [acgo] h?srvlxvnpmiet */ { struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); @@ -748,11 +756,16 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, "Appl&ication", IDC_KPAPPLIC, "N&etHack", IDC_KPNH, NULL); endbox(&cp); + beginbox(&cp, "Enable extra keyboard features:", + IDC_BOX_KEYBOARD3, IDC_BOXT_KEYBOARD3); + checkbox(&cp, "Application and AltGr ac&t as Compose key", + IDC_COMPOSEKEY); + endbox(&cp); treeview_insert(&tvfaff, 1, "Keyboard"); } - /* The Window panel. Accelerators used: [acgo] tibsdkw4y */ + /* The Window panel. Accelerators used: [acgo] tibsdkw4ylp */ { struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); @@ -776,11 +789,14 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, IDC_SAVESTATIC, IDC_SAVEEDIT, 50); checkbox(&cp, "&Display scrollbar", IDC_SCROLLBAR); checkbox(&cp, "Reset scrollback on &keypress", IDC_SCROLLKEY); + checkbox(&cp, "Reset scrollback on dis&play activity", + IDC_SCROLLDISP); endbox(&cp); beginbox(&cp, NULL, IDC_BOX_WINDOW4, 0); checkbox(&cp, "&Warn before closing window", IDC_CLOSEWARN); checkbox(&cp, "Window closes on ALT-F&4", IDC_ALTF4); - checkbox(&cp, "S&ystem menu appears on ALT-Space)", IDC_ALTSPACE); + checkbox(&cp, "S&ystem menu appears on ALT-Space", IDC_ALTSPACE); + checkbox(&cp, "System menu appears on A< alone", IDC_ALTONLY); endbox(&cp); treeview_insert(&tvfaff, 0, "Window"); @@ -1221,6 +1237,11 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.alt_space = IsDlgButtonChecked (hwnd, IDC_ALTSPACE); break; + case IDC_ALTONLY: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.alt_only = IsDlgButtonChecked (hwnd, IDC_ALTONLY); + break; case IDC_LDISCTERM: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) @@ -1231,6 +1252,16 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.scroll_on_key = IsDlgButtonChecked (hwnd, IDC_SCROLLKEY); break; + case IDC_SCROLLDISP: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.scroll_on_disp = IsDlgButtonChecked (hwnd, IDC_SCROLLDISP); + break; + case IDC_COMPOSEKEY: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.compose_key = IsDlgButtonChecked (hwnd, IDC_COMPOSEKEY); + break; case IDC_WRAPMODE: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) diff --git a/window.c b/window.c index 09fb0133..7db845e4 100644 --- a/window.c +++ b/window.c @@ -1870,25 +1870,28 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, #endif /* Note if AltGr was pressed and if it was used as a compose key */ - if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) - { - keystate[VK_RMENU] = keystate[VK_MENU]; - if (!compose_state) compose_key = wParam; - } - if (wParam == VK_APPS && !compose_state) - compose_key = wParam; + if (cfg.compose_key) { + if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) + { + keystate[VK_RMENU] = keystate[VK_MENU]; + if (!compose_state) compose_key = wParam; + } + if (wParam == VK_APPS && !compose_state) + compose_key = wParam; - if (wParam == compose_key) - { - if (compose_state == 0 && (HIWORD(lParam)&(KF_UP|KF_REPEAT))==0) - compose_state = 1; - else if (compose_state == 1 && (HIWORD(lParam)&KF_UP)) - compose_state = 2; - else - compose_state = 0; - } - else if (compose_state==1 && wParam != VK_CONTROL) - compose_state = 0; + if (wParam == compose_key) + { + if (compose_state == 0 && (HIWORD(lParam)&(KF_UP|KF_REPEAT))==0) + compose_state = 1; + else if (compose_state == 1 && (HIWORD(lParam)&KF_UP)) + compose_state = 2; + else + compose_state = 0; + } + else if (compose_state==1 && wParam != VK_CONTROL) + compose_state = 0; + } else + compose_state = 0; /* Nastyness with NUMLock - Shift-NUMLock is left alone though */ if ( (cfg.funky_type == 3 || (cfg.funky_type <= 1 && app_keypad_keys)) @@ -2261,8 +2264,10 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, } /* This stops ALT press-release doing a 'COMMAND MENU' function */ - if (message == WM_SYSKEYUP && wParam == VK_MENU) - return 0; + if (!cfg.alt_only) { + if (message == WM_SYSKEYUP && wParam == VK_MENU) + return 0; + } return -1; } -- 2.11.0