- 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.
[originally from svn r741]
int nethack_keypad;
int alt_f4; /* is it special? */
int alt_space; /* is it special? */
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 ldisc_term;
int scroll_on_key;
+ int scroll_on_disp;
+ int compose_key;
char wintitle[256]; /* initial window title */
/* Terminal options */
int savelines;
char wintitle[256]; /* initial window title */
/* Terminal options */
int savelines;
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, "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);
write_setting_i (sesskey, "LdiscTerm", cfg->ldisc_term);
write_setting_i (sesskey, "BlinkCur", cfg->blink_cur);
write_setting_i (sesskey, "Beep", cfg->beep);
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, "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);
write_setting_i (sesskey, "LockSize", cfg->locksize);
write_setting_i (sesskey, "BCE", cfg->bce);
write_setting_i (sesskey, "BlinkText", cfg->blinktext);
gppi (sesskey, "NetHackKeypad", 0, &cfg->nethack_keypad);
gppi (sesskey, "AltF4", 1, &cfg->alt_f4);
gppi (sesskey, "AltSpace", 0, &cfg->alt_space);
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);
gppi (sesskey, "LdiscTerm", 0, &cfg->ldisc_term);
gppi (sesskey, "BlinkCur", 0, &cfg->blink_cur);
gppi (sesskey, "Beep", 1, &cfg->beep);
gppi (sesskey, "CapsLockCyr", 0, &cfg->xlat_capslockcyr);
gppi (sesskey, "ScrollBar", 1, &cfg->scrollbar);
gppi (sesskey, "ScrollOnKey", 0, &cfg->scroll_on_key);
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);
gppi (sesskey, "LockSize", 0, &cfg->locksize);
gppi (sesskey, "BCE", 0, &cfg->bce);
gppi (sesskey, "BlinkText", 0, &cfg->blinktext);
ctx = get_ctx();
if (ctx) {
if ( (seen_key_event && (cfg.scroll_on_key)) ||
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();
disptop = scrtop;
seen_disp_event = seen_key_event = 0;
update_sbar();
IDC_TITLE_KEYBOARD,
IDC_BOX_KEYBOARD1, IDC_BOXT_KEYBOARD1,
IDC_BOX_KEYBOARD2, IDC_BOXT_KEYBOARD2,
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,
IDC_DELSTATIC,
IDC_DEL008,
IDC_DEL127,
IDC_CURSTATIC,
IDC_CURNORMAL,
IDC_CURAPPLIC,
IDC_CURSTATIC,
IDC_CURNORMAL,
IDC_CURAPPLIC,
keyboardpanelend,
terminalpanelstart,
keyboardpanelend,
terminalpanelstart,
IDC_SAVEEDIT,
IDC_ALTF4,
IDC_ALTSPACE,
IDC_SAVEEDIT,
IDC_ALTF4,
IDC_ALTSPACE,
windowpanelend,
connectionpanelstart,
windowpanelend,
connectionpanelstart,
cfg.app_keypad ? IDC_KPAPPLIC : IDC_KPNORMAL);
CheckDlgButton (hwnd, IDC_ALTF4, cfg.alt_f4);
CheckDlgButton (hwnd, IDC_ALTSPACE, cfg.alt_space);
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_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);
CheckDlgButton (hwnd, IDC_WRAPMODE, cfg.wrap_mode);
CheckDlgButton (hwnd, IDC_DECOM, cfg.dec_om);
switch (msg) {
case WM_INITDIALOG:
switch (msg) {
case WM_INITDIALOG:
SetWindowLong(hwnd, GWL_USERDATA, 0);
/*
* Centre the window.
SetWindowLong(hwnd, GWL_USERDATA, 0);
/*
* Centre the window.
treeview_insert(&tvfaff, 0, "Terminal");
}
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);
{
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
"Appl&ication", IDC_KPAPPLIC,
"N&etHack", IDC_KPNH, NULL);
endbox(&cp);
"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");
}
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);
{
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
IDC_SAVESTATIC, IDC_SAVEEDIT, 50);
checkbox(&cp, "&Display scrollbar", IDC_SCROLLBAR);
checkbox(&cp, "Reset scrollback on &keypress", IDC_SCROLLKEY);
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);
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");
endbox(&cp);
treeview_insert(&tvfaff, 0, "Window");
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.alt_space = IsDlgButtonChecked (hwnd, IDC_ALTSPACE);
break;
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)
case IDC_LDISCTERM:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.scroll_on_key = IsDlgButtonChecked (hwnd, IDC_SCROLLKEY);
break;
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)
case IDC_WRAPMODE:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
#endif
/* Note if AltGr was pressed and if it was used as a compose key */
#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))
/* Nastyness with NUMLock - Shift-NUMLock is left alone though */
if ( (cfg.funky_type == 3 || (cfg.funky_type <= 1 && app_keypad_keys))
}
/* This stops ALT press-release doing a 'COMMAND MENU' function */
}
/* 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;
+ }