Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Small style change.
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
1df4fde
..
4d4f115
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-17,6
+17,7
@@
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <termios.h>
#include <time.h>
#include <unistd.h>
#include <libgen.h>
#include <time.h>
#include <unistd.h>
#include <libgen.h>
@@
-333,6
+334,7
@@
static void xzoomreset(const Arg *);
static void printsel(const Arg *);
static void printscreen(const Arg *) ;
static void toggleprinter(const Arg *);
static void printsel(const Arg *);
static void printscreen(const Arg *) ;
static void toggleprinter(const Arg *);
+static void sendbreak(const Arg *);
/* Config.h for applying patches and the configuration. */
#include "config.h"
/* Config.h for applying patches and the configuration. */
#include "config.h"
@@
-1002,7
+1004,10
@@
getsel(void)
/* append every set & selected glyph to the selection */
for (y = sel.nb.y; y <= sel.ne.y; y++) {
/* append every set & selected glyph to the selection */
for (y = sel.nb.y; y <= sel.ne.y; y++) {
- linelen = tlinelen(y);
+ if ((linelen = tlinelen(y)) == 0) {
+ *ptr++ = '\n';
+ continue;
+ }
if (sel.type == SEL_RECTANGULAR) {
gp = &term.line[y][sel.nb.x];
if (sel.type == SEL_RECTANGULAR) {
gp = &term.line[y][sel.nb.x];
@@
-1130,10
+1135,10
@@
selnotify(XEvent *e)
*repl++ = '\r';
}
*repl++ = '\r';
}
- if (IS_SET(MODE_BRCKTPASTE))
+ if (IS_SET(MODE_BRCKTPASTE)
&& ofs == 0
)
ttywrite("\033[200~", 6);
ttysend((char *)data, nitems * format / 8);
ttywrite("\033[200~", 6);
ttysend((char *)data, nitems * format / 8);
- if (IS_SET(MODE_BRCKTPASTE))
+ if (IS_SET(MODE_BRCKTPASTE)
&& rem == 0
)
ttywrite("\033[201~", 6);
XFree(data);
/* number of 32-bit chunks returned */
ttywrite("\033[201~", 6);
XFree(data);
/* number of 32-bit chunks returned */
@@
-1425,8
+1430,7
@@
ttynew(void)
if (opt_line) {
if ((cmdfd = open(opt_line, O_RDWR)) < 0)
die("open line failed: %s\n", strerror(errno));
if (opt_line) {
if ((cmdfd = open(opt_line, O_RDWR)) < 0)
die("open line failed: %s\n", strerror(errno));
- close(0);
- dup(cmdfd);
+ dup2(cmdfd, 0);
stty();
return;
}
stty();
return;
}
@@
-1531,7
+1535,8
@@
ttywrite(const char *s, size_t n)
* This means the buffer is getting full
* again. Empty it.
*/
* This means the buffer is getting full
* again. Empty it.
*/
- ttyread();
+ if (n < 256)
+ ttyread();
n -= r;
s += r;
} else {
n -= r;
s += r;
} else {
@@
-2577,6
+2582,13
@@
strreset(void)
memset(&strescseq, 0, sizeof(strescseq));
}
memset(&strescseq, 0, sizeof(strescseq));
}
+void
+sendbreak(const Arg *arg)
+{
+ if (tcsendbreak(cmdfd, 0))
+ perror("Error sending break");
+}
+
void
tprinter(char *s, size_t len)
{
void
tprinter(char *s, size_t len)
{
@@
-2773,18
+2785,37
@@
tcontrolcode(uchar ascii)
case '\023': /* XOFF (IGNORED) */
case 0177: /* DEL (IGNORED) */
return;
case '\023': /* XOFF (IGNORED) */
case 0177: /* DEL (IGNORED) */
return;
+ case 0x80: /* TODO: PAD */
+ case 0x81: /* TODO: HOP */
+ case 0x82: /* TODO: BPH */
+ case 0x83: /* TODO: NBH */
case 0x84: /* TODO: IND */
break;
case 0x85: /* NEL -- Next line */
tnewline(1); /* always go to first col */
break;
case 0x84: /* TODO: IND */
break;
case 0x85: /* NEL -- Next line */
tnewline(1); /* always go to first col */
break;
+ case 0x86: /* TODO: SSA */
+ case 0x87: /* TODO: ESA */
+ break;
case 0x88: /* HTS -- Horizontal tab stop */
term.tabs[term.c.x] = 1;
break;
case 0x88: /* HTS -- Horizontal tab stop */
term.tabs[term.c.x] = 1;
break;
+ case 0x89: /* TODO: HTJ */
+ case 0x8a: /* TODO: VTS */
+ case 0x8b: /* TODO: PLD */
+ case 0x8c: /* TODO: PLU */
case 0x8d: /* TODO: RI */
case 0x8e: /* TODO: SS2 */
case 0x8f: /* TODO: SS3 */
case 0x8d: /* TODO: RI */
case 0x8e: /* TODO: SS2 */
case 0x8f: /* TODO: SS3 */
+ case 0x91: /* TODO: PU1 */
+ case 0x92: /* TODO: PU2 */
+ case 0x93: /* TODO: STS */
+ case 0x94: /* TODO: CCH */
+ case 0x95: /* TODO: MW */
+ case 0x96: /* TODO: SPA */
+ case 0x97: /* TODO: EPA */
case 0x98: /* TODO: SOS */
case 0x98: /* TODO: SOS */
+ case 0x99: /* TODO: SGCI */
break;
case 0x9a: /* DECID -- Identify Terminal */
ttywrite(vtiden, sizeof(vtiden) - 1);
break;
case 0x9a: /* DECID -- Identify Terminal */
ttywrite(vtiden, sizeof(vtiden) - 1);
@@
-2793,9
+2824,9
@@
tcontrolcode(uchar ascii)
case 0x9c: /* TODO: ST */
break;
case 0x90: /* DCS -- Device Control String */
case 0x9c: /* TODO: ST */
break;
case 0x90: /* DCS -- Device Control String */
- case 0x9f: /* APC -- Application Program Command */
- case 0x9e: /* PM -- Privacy Message */
case 0x9d: /* OSC -- Operating System Command */
case 0x9d: /* OSC -- Operating System Command */
+ case 0x9e: /* PM -- Privacy Message */
+ case 0x9f: /* APC -- Application Program Command */
tstrsequence(ascii);
return;
}
tstrsequence(ascii);
return;
}
@@
-2895,15
+2926,15
@@
tputc(Rune u)
int width, len;
Glyph *gp;
int width, len;
Glyph *gp;
+ control = ISCONTROL(u);
len = utf8encode(u, c);
len = utf8encode(u, c);
- if ((width = wcwidth(u)) == -1) {
+ if (
!control &&
(width = wcwidth(u)) == -1) {
memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
width = 1;
}
if (IS_SET(MODE_PRINT))
tprinter(c, len);
memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
width = 1;
}
if (IS_SET(MODE_PRINT))
tprinter(c, len);
- control = ISCONTROL(u);
/*
* STR sequence must be checked before anything else
/*
* STR sequence must be checked before anything else
@@
-3824,10
+3855,10
@@
xdrawcursor(void)
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
if (IS_SET(MODE_REVERSE)) {
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
if (IS_SET(MODE_REVERSE)) {
-
g.mode |= ATTR_REVERSE;
-
g.fg = defaultcs;
-
g.bg = defaultfg;
-
}
+ g.mode |= ATTR_REVERSE;
+ g.fg = defaultcs;
+ g.bg = defaultfg;
+ }
g.mode |= term.line[term.c.y][curx].mode & ATTR_WIDE;
xdrawglyph(g, term.c.x, term.c.y);
g.mode |= term.line[term.c.y][curx].mode & ATTR_WIDE;
xdrawglyph(g, term.c.x, term.c.y);
@@
-4274,7
+4305,7
@@
usage(void)
" [-i] [-t title] [-T title] [-w windowid] [-e command ...]"
" [command ...]\n"
" st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
" [-i] [-t title] [-T title] [-w windowid] [-e command ...]"
" [command ...]\n"
" st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
- " [-i] [-t title] [-T title] [-w windowid]
[-l line]
"
+ " [-i] [-t title] [-T title] [-w windowid]
-l line
"
" [stty_args ...]\n",
argv0);
}
" [stty_args ...]\n",
argv0);
}
@@
-4286,7
+4317,7
@@
main(int argc, char *argv[])
xw.l = xw.t = 0;
xw.isfixed = False;
xw.l = xw.t = 0;
xw.isfixed = False;
- xw.cursor =
0
;
+ xw.cursor =
cursorshape
;
ARGBEGIN {
case 'a':
ARGBEGIN {
case 'a':