diff options
Diffstat (limited to '')
| -rw-r--r-- | st.c | 64 |
1 files changed, 32 insertions, 32 deletions
| @@ -42,6 +42,7 @@ | |||
| 42 | #define STR_ARG_SIZ ESC_ARG_SIZ | 42 | #define STR_ARG_SIZ ESC_ARG_SIZ |
| 43 | 43 | ||
| 44 | /* macros */ | 44 | /* macros */ |
| 45 | #define IS_SET(flag) ((term.mode & (flag)) != 0) | ||
| 45 | #define NUMMAXLEN(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1) | 46 | #define NUMMAXLEN(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1) |
| 46 | #define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177') | 47 | #define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177') |
| 47 | #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) | 48 | #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) |
| @@ -51,6 +52,17 @@ | |||
| 51 | /* constants */ | 52 | /* constants */ |
| 52 | #define ISO14755CMD "dmenu -w \"$WINDOWID\" -p codepoint: </dev/null" | 53 | #define ISO14755CMD "dmenu -w \"$WINDOWID\" -p codepoint: </dev/null" |
| 53 | 54 | ||
| 55 | enum term_mode { | ||
| 56 | MODE_WRAP = 1 << 0, | ||
| 57 | MODE_INSERT = 1 << 1, | ||
| 58 | MODE_ALTSCREEN = 1 << 2, | ||
| 59 | MODE_CRLF = 1 << 3, | ||
| 60 | MODE_ECHO = 1 << 4, | ||
| 61 | MODE_PRINT = 1 << 5, | ||
| 62 | MODE_UTF8 = 1 << 6, | ||
| 63 | MODE_SIXEL = 1 << 7, | ||
| 64 | }; | ||
| 65 | |||
| 54 | enum cursor_movement { | 66 | enum cursor_movement { |
| 55 | CURSOR_SAVE, | 67 | CURSOR_SAVE, |
| 56 | CURSOR_LOAD | 68 | CURSOR_LOAD |
| @@ -977,8 +989,6 @@ tnew(int col, int row) | |||
| 977 | { | 989 | { |
| 978 | term = (Term){ .c = { .attr = { .fg = defaultfg, .bg = defaultbg } } }; | 990 | term = (Term){ .c = { .attr = { .fg = defaultfg, .bg = defaultbg } } }; |
| 979 | tresize(col, row); | 991 | tresize(col, row); |
| 980 | term.numlock = 1; | ||
| 981 | |||
| 982 | treset(); | 992 | treset(); |
| 983 | } | 993 | } |
| 984 | 994 | ||
| @@ -1414,20 +1424,16 @@ tsetscroll(int t, int b) | |||
| 1414 | void | 1424 | void |
| 1415 | tsetmode(int priv, int set, int *args, int narg) | 1425 | tsetmode(int priv, int set, int *args, int narg) |
| 1416 | { | 1426 | { |
| 1417 | int *lim, mode; | 1427 | int alt, *lim; |
| 1418 | int alt; | ||
| 1419 | 1428 | ||
| 1420 | for (lim = args + narg; args < lim; ++args) { | 1429 | for (lim = args + narg; args < lim; ++args) { |
| 1421 | if (priv) { | 1430 | if (priv) { |
| 1422 | switch (*args) { | 1431 | switch (*args) { |
| 1423 | case 1: /* DECCKM -- Cursor key */ | 1432 | case 1: /* DECCKM -- Cursor key */ |
| 1424 | MODBIT(term.mode, set, MODE_APPCURSOR); | 1433 | xsetmode(set, MODE_APPCURSOR); |
| 1425 | break; | 1434 | break; |
| 1426 | case 5: /* DECSCNM -- Reverse video */ | 1435 | case 5: /* DECSCNM -- Reverse video */ |
| 1427 | mode = term.mode; | 1436 | xsetmode(set, MODE_REVERSE); |
| 1428 | MODBIT(term.mode, set, MODE_REVERSE); | ||
| 1429 | if (mode != term.mode) | ||
| 1430 | redraw(); | ||
| 1431 | break; | 1437 | break; |
| 1432 | case 6: /* DECOM -- Origin */ | 1438 | case 6: /* DECOM -- Origin */ |
| 1433 | MODBIT(term.c.state, set, CURSOR_ORIGIN); | 1439 | MODBIT(term.c.state, set, CURSOR_ORIGIN); |
| @@ -1447,36 +1453,36 @@ tsetmode(int priv, int set, int *args, int narg) | |||
| 1447 | case 12: /* att610 -- Start blinking cursor (IGNORED) */ | 1453 | case 12: /* att610 -- Start blinking cursor (IGNORED) */ |
| 1448 | break; | 1454 | break; |
| 1449 | case 25: /* DECTCEM -- Text Cursor Enable Mode */ | 1455 | case 25: /* DECTCEM -- Text Cursor Enable Mode */ |
| 1450 | MODBIT(term.mode, !set, MODE_HIDE); | 1456 | xsetmode(!set, MODE_HIDE); |
| 1451 | break; | 1457 | break; |
| 1452 | case 9: /* X10 mouse compatibility mode */ | 1458 | case 9: /* X10 mouse compatibility mode */ |
| 1453 | xsetpointermotion(0); | 1459 | xsetpointermotion(0); |
| 1454 | MODBIT(term.mode, 0, MODE_MOUSE); | 1460 | xsetmode(0, MODE_MOUSE); |
| 1455 | MODBIT(term.mode, set, MODE_MOUSEX10); | 1461 | xsetmode(set, MODE_MOUSEX10); |
| 1456 | break; | 1462 | break; |
| 1457 | case 1000: /* 1000: report button press */ | 1463 | case 1000: /* 1000: report button press */ |
| 1458 | xsetpointermotion(0); | 1464 | xsetpointermotion(0); |
| 1459 | MODBIT(term.mode, 0, MODE_MOUSE); | 1465 | xsetmode(0, MODE_MOUSE); |
| 1460 | MODBIT(term.mode, set, MODE_MOUSEBTN); | 1466 | xsetmode(set, MODE_MOUSEBTN); |
| 1461 | break; | 1467 | break; |
| 1462 | case 1002: /* 1002: report motion on button press */ | 1468 | case 1002: /* 1002: report motion on button press */ |
| 1463 | xsetpointermotion(0); | 1469 | xsetpointermotion(0); |
| 1464 | MODBIT(term.mode, 0, MODE_MOUSE); | 1470 | xsetmode(0, MODE_MOUSE); |
| 1465 | MODBIT(term.mode, set, MODE_MOUSEMOTION); | 1471 | xsetmode(set, MODE_MOUSEMOTION); |
| 1466 | break; | 1472 | break; |
| 1467 | case 1003: /* 1003: enable all mouse motions */ | 1473 | case 1003: /* 1003: enable all mouse motions */ |
| 1468 | xsetpointermotion(set); | 1474 | xsetpointermotion(set); |
| 1469 | MODBIT(term.mode, 0, MODE_MOUSE); | 1475 | xsetmode(0, MODE_MOUSE); |
| 1470 | MODBIT(term.mode, set, MODE_MOUSEMANY); | 1476 | xsetmode(set, MODE_MOUSEMANY); |
| 1471 | break; | 1477 | break; |
| 1472 | case 1004: /* 1004: send focus events to tty */ | 1478 | case 1004: /* 1004: send focus events to tty */ |
| 1473 | MODBIT(term.mode, set, MODE_FOCUS); | 1479 | xsetmode(set, MODE_FOCUS); |
| 1474 | break; | 1480 | break; |
| 1475 | case 1006: /* 1006: extended reporting mode */ | 1481 | case 1006: /* 1006: extended reporting mode */ |
| 1476 | MODBIT(term.mode, set, MODE_MOUSESGR); | 1482 | xsetmode(set, MODE_MOUSESGR); |
| 1477 | break; | 1483 | break; |
| 1478 | case 1034: | 1484 | case 1034: |
| 1479 | MODBIT(term.mode, set, MODE_8BIT); | 1485 | xsetmode(set, MODE_8BIT); |
| 1480 | break; | 1486 | break; |
| 1481 | case 1049: /* swap screen & set/restore cursor as xterm */ | 1487 | case 1049: /* swap screen & set/restore cursor as xterm */ |
| 1482 | if (!allowaltscreen) | 1488 | if (!allowaltscreen) |
| @@ -1501,7 +1507,7 @@ tsetmode(int priv, int set, int *args, int narg) | |||
| 1501 | tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); | 1507 | tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); |
| 1502 | break; | 1508 | break; |
| 1503 | case 2004: /* 2004: bracketed paste mode */ | 1509 | case 2004: /* 2004: bracketed paste mode */ |
| 1504 | MODBIT(term.mode, set, MODE_BRCKTPASTE); | 1510 | xsetmode(set, MODE_BRCKTPASTE); |
| 1505 | break; | 1511 | break; |
| 1506 | /* Not implemented mouse modes. See comments there. */ | 1512 | /* Not implemented mouse modes. See comments there. */ |
| 1507 | case 1001: /* mouse highlight mode; can hang the | 1513 | case 1001: /* mouse highlight mode; can hang the |
| @@ -1522,8 +1528,8 @@ tsetmode(int priv, int set, int *args, int narg) | |||
| 1522 | switch (*args) { | 1528 | switch (*args) { |
| 1523 | case 0: /* Error (IGNORED) */ | 1529 | case 0: /* Error (IGNORED) */ |
| 1524 | break; | 1530 | break; |
| 1525 | case 2: /* KAM -- keyboard action */ | 1531 | case 2: |
| 1526 | MODBIT(term.mode, set, MODE_KBDLOCK); | 1532 | xsetmode(set, MODE_KBDLOCK); |
| 1527 | break; | 1533 | break; |
| 1528 | case 4: /* IRM -- Insertion-replacement */ | 1534 | case 4: /* IRM -- Insertion-replacement */ |
| 1529 | MODBIT(term.mode, set, MODE_INSERT); | 1535 | MODBIT(term.mode, set, MODE_INSERT); |
| @@ -2230,10 +2236,10 @@ eschandle(uchar ascii) | |||
| 2230 | xloadcols(); | 2236 | xloadcols(); |
| 2231 | break; | 2237 | break; |
| 2232 | case '=': /* DECPAM -- Application keypad */ | 2238 | case '=': /* DECPAM -- Application keypad */ |
| 2233 | term.mode |= MODE_APPKEYPAD; | 2239 | xsetmode(1, MODE_APPKEYPAD); |
| 2234 | break; | 2240 | break; |
| 2235 | case '>': /* DECPNM -- Normal keypad */ | 2241 | case '>': /* DECPNM -- Normal keypad */ |
| 2236 | term.mode &= ~MODE_APPKEYPAD; | 2242 | xsetmode(0, MODE_APPKEYPAD); |
| 2237 | break; | 2243 | break; |
| 2238 | case '7': /* DECSC -- Save Cursor */ | 2244 | case '7': /* DECSC -- Save Cursor */ |
| 2239 | tcursor(CURSOR_SAVE); | 2245 | tcursor(CURSOR_SAVE); |
| @@ -2526,9 +2532,3 @@ redraw(void) | |||
| 2526 | tfulldirt(); | 2532 | tfulldirt(); |
| 2527 | draw(); | 2533 | draw(); |
| 2528 | } | 2534 | } |
| 2529 | |||
| 2530 | void | ||
| 2531 | numlock(const Arg *dummy) | ||
| 2532 | { | ||
| 2533 | term.numlock ^= 1; | ||
| 2534 | } | ||
