#define ATTR_PASCURS 0x40000000UL /* passive cursor (box) */
#define ATTR_INVALID 0x20000000UL
#define ATTR_WRAPPED 0x10000000UL
+#define ATTR_RIGHTCURS 0x10000000UL /* doubles as cursor-on-RHS indicator */
#define LATTR_NORM 0x00000000UL
#define LATTR_WIDE 0x01000000UL
int dec_om;
int wrap_mode;
int lfhascr;
+ int cursor_type; /* 0=block 1=underline 2=vertical */
int blink_cur;
int beep;
int scrollbar;
write_setting_i (sesskey, "ComposeKey", cfg->compose_key);
write_setting_i (sesskey, "LdiscTerm", cfg->ldisc_term);
write_setting_i (sesskey, "AlwaysOnTop", cfg->alwaysontop);
+ write_setting_i (sesskey, "CurType", cfg->cursor_type);
write_setting_i (sesskey, "BlinkCur", cfg->blink_cur);
write_setting_i (sesskey, "Beep", cfg->beep);
write_setting_i (sesskey, "ScrollbackLines", cfg->savelines);
gppi (sesskey, "ComposeKey", 0, &cfg->compose_key);
gppi (sesskey, "LdiscTerm", 0, &cfg->ldisc_term);
gppi (sesskey, "AlwaysOnTop", 0, &cfg->alwaysontop);
+ gppi (sesskey, "CurType", 0, &cfg->cursor_type);
gppi (sesskey, "BlinkCur", 0, &cfg->blink_cur);
gppi (sesskey, "Beep", 1, &cfg->beep);
gppi (sesskey, "ScrollbackLines", 200, &cfg->savelines);
}
else
cursor = ATTR_PASCURS;
+ if (wrapnext)
+ cursor |= ATTR_RIGHTCURS;
}
else cursor = 0;
rv = (rvideo ? ATTR_REVERSE : 0);
int lattr = (disptop[idx+cols] & LATTR_MODE);
for (j=0; j<=cols; j++,idx++) {
unsigned long *d = disptop+idx;
- wanttext[idx] = lattr | ((*d ^ rv
+ wanttext[idx] = lattr | (((*d &~ ATTR_WRAPPED) ^ rv
^ (selstart <= d && d < selend ?
ATTR_REVERSE : 0)) |
(i==our_curs_y && j==curs_x ? cursor : 0));
-
if (blink_is_real) {
if (has_focus && tblinker && (wanttext[idx]&ATTR_BLINK) )
{
IDC_BOX_APPEARANCE1, IDC_BOXT_APPEARANCE1,
IDC_BOX_APPEARANCE2, IDC_BOXT_APPEARANCE2,
IDC_BOX_APPEARANCE3, IDC_BOXT_APPEARANCE3,
+ IDC_CURSTATIC,
+ IDC_CURBLOCK,
+ IDC_CURUNDER,
+ IDC_CURVERT,
IDC_BLINKCUR,
IDC_FONTSTATIC,
IDC_CHOOSEFONT,
SetDlgItemText (hwnd, IDC_WINEDIT, cfg.wintitle);
CheckDlgButton (hwnd, IDC_WINNAME, cfg.win_name_always);
+ CheckRadioButton (hwnd, IDC_CURBLOCK, IDC_CURVERT,
+ cfg.cursor_type==0 ? IDC_CURBLOCK :
+ cfg.cursor_type==1 ? IDC_CURUNDER : IDC_CURVERT);
CheckDlgButton (hwnd, IDC_BLINKCUR, cfg.blink_cur);
CheckDlgButton (hwnd, IDC_SCROLLBAR, cfg.scrollbar);
CheckDlgButton (hwnd, IDC_LOCKSIZE, cfg.locksize);
treeview_insert(&tvfaff, 0, "Window");
}
- /* The Appearance panel. Accelerators used: [acgo] rmkhti */
+ /* The Appearance panel. Accelerators used: [acgo] rmkhtibluv */
{
struct ctlpos cp;
ctlposinit(&cp, hwnd, 80, 3, 13);
IDC_TITLE_APPEARANCE);
beginbox(&cp, "Adjust the use of the cursor",
IDC_BOX_APPEARANCE1, IDC_BOXT_APPEARANCE1);
+ radioline(&cp, "Cursor appearance:", IDC_CURSTATIC, 3,
+ "B&lock", IDC_CURBLOCK,
+ "&Underline", IDC_CURUNDER,
+ "&Vertical line", IDC_CURVERT,
+ NULL);
checkbox(&cp, "Cursor &blinks", IDC_BLINKCUR);
endbox(&cp);
beginbox(&cp, "Set the font used in the terminal window",
HIWORD(wParam) == BN_DOUBLECLICKED)
cfg.win_name_always = IsDlgButtonChecked (hwnd, IDC_WINNAME);
break;
+ case IDC_CURBLOCK:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.cursor_type = 0;
+ break;
+ case IDC_CURUNDER:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.cursor_type = 1;
+ break;
+ case IDC_CURVERT:
+ if (HIWORD(wParam) == BN_CLICKED ||
+ HIWORD(wParam) == BN_DOUBLECLICKED)
+ cfg.cursor_type = 2;
+ break;
case IDC_BLINKCUR:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED)
x *= fnt_width;
y *= font_height;
- if (attr & ATTR_ACTCURS) {
+ if ((attr & ATTR_ACTCURS) && cfg.cursor_type == 0) {
attr &= (bold_mode == BOLD_COLOURS ? 0x300200 : 0x300300);
attr ^= ATTR_CUR_XOR;
}
oldpen = SelectObject (hdc, oldpen);
DeleteObject (oldpen);
}
- if (attr & ATTR_PASCURS) {
+ if ((attr & ATTR_PASCURS) && cfg.cursor.type == 0) {
POINT pts[5];
HPEN oldpen;
pts[0].x = pts[1].x = pts[4].x = x;
oldpen = SelectObject (hdc, oldpen);
DeleteObject (oldpen);
}
+ if ((attr & (ATTR_ACTCURS | ATTR_PASCURS)) && cfg.cursor_type != 0) {
+ HPEN oldpen;
+ int pentype;
+ if (attr & ATTR_PASCURS)
+ pentype = PS_DOTTED;
+ else
+ pentype = PS_SOLID;
+ oldpen = SelectObject (hdc, CreatePen(pentype, 0, colours[23]));
+ if (cfg.cursor_type == 1) {
+ MoveToEx (hdc, x, y+descent, NULL);
+ LineTo (hdc, x+fnt_width-1, y+descent);
+ } else {
+ int xadjust = 0;
+ if (attr & ATTR_RIGHTCURS)
+ xadjust = fnt_width-1;
+ MoveToEx (hdc, x+xadjust, y, NULL);
+ LineTo (hdc, x+xadjust, y+font_height-1);
+ }
+ oldpen = SelectObject (hdc, oldpen);
+ DeleteObject (oldpen);
+ }
}
static int check_compose(int first, int second) {