Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Use as command arguments the remaining parameters
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
0558593
..
b1d3791
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-423,7
+423,7
@@
static void xsettitle(char *);
static void xresettitle(void);
static void xsetpointermotion(int);
static void xseturgency(int);
static void xresettitle(void);
static void xsetpointermotion(int);
static void xseturgency(int);
-static void xsetsel(char *);
+static void xsetsel(char *
, Time
);
static void xtermclear(int, int, int, int);
static void xunloadfont(Font *);
static void xunloadfonts(void);
static void xtermclear(int, int, int, int);
static void xunloadfont(Font *);
static void xunloadfonts(void);
@@
-449,7
+449,7
@@
static void selinit(void);
static void selnormalize(void);
static inline bool selected(int, int);
static char *getsel(void);
static void selnormalize(void);
static inline bool selected(int, int);
static char *getsel(void);
-static void selcopy(
void
);
+static void selcopy(
Time
);
static void selscroll(int, int);
static void selsnap(int, int *, int *, int);
static int x2col(int);
static void selscroll(int, int);
static void selsnap(int, int *, int *, int);
static int x2col(int);
@@
-984,8
+984,8
@@
getsel(void) {
}
void
}
void
-selcopy(
void
) {
- xsetsel(getsel());
+selcopy(
Time t
) {
+ xsetsel(getsel()
, t
);
}
void
}
void
@@
-997,7
+997,7
@@
selnotify(XEvent *e) {
XSelectionEvent *xsev;
ofs = 0;
XSelectionEvent *xsev;
ofs = 0;
- xsev =
(XSelectionEvent *)e
;
+ xsev =
&e->xselection
;
if (xsev->property == None)
return;
do {
if (xsev->property == None)
return;
do {
@@
-1083,6
+1083,9
@@
selrequest(XEvent *e) {
xev.selection = xsre->selection;
xev.target = xsre->target;
xev.time = xsre->time;
xev.selection = xsre->selection;
xev.target = xsre->target;
xev.time = xsre->time;
+ if (xsre->property == None)
+ xsre->property = xsre->target;
+
/* reject */
xev.property = None;
/* reject */
xev.property = None;
@@
-1125,11
+1128,13
@@
selrequest(XEvent *e) {
}
void
}
void
-xsetsel(char *str) {
+xsetsel(char *str
, Time t
) {
free(sel.primary);
sel.primary = str;
free(sel.primary);
sel.primary = str;
- XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, CurrentTime);
+ XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
+ if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
+ selclear(0);
}
void
}
void
@@
-1146,7
+1151,7
@@
brelease(XEvent *e) {
selclear(NULL);
} else {
getbuttoninfo(e);
selclear(NULL);
} else {
getbuttoninfo(e);
- selcopy();
+ selcopy(
e->xbutton.time
);
}
sel.mode = 0;
tsetdirt(sel.nb.y, sel.ne.y);
}
sel.mode = 0;
tsetdirt(sel.nb.y, sel.ne.y);
@@
-1571,11
+1576,9
@@
tmoveto(int x, int y) {
miny = 0;
maxy = term.row - 1;
}
miny = 0;
maxy = term.row - 1;
}
- LIMIT(x, 0, term.col-1);
- LIMIT(y, miny, maxy);
term.c.state &= ~CURSOR_WRAPNEXT;
term.c.state &= ~CURSOR_WRAPNEXT;
- term.c.x =
x
;
- term.c.y =
y
;
+ term.c.x =
LIMIT(x, 0, term.col-1)
;
+ term.c.y =
LIMIT(y, miny, maxy)
;
}
void
}
void
@@
-2392,7
+2395,7
@@
tputtab(int n) {
for(--x; x > 0 && !term.tabs[x]; --x)
/* nothing */ ;
}
for(--x; x > 0 && !term.tabs[x]; --x)
/* nothing */ ;
}
- t
moveto(x, term.c.y
);
+ t
erm.c.x = LIMIT(x, 0, term.col-1
);
}
void
}
void
@@
-2446,21
+2449,19
@@
tdectest(char c) {
void
tstrsequence(uchar c) {
void
tstrsequence(uchar c) {
- if (c & 0x80) {
- switch (c) {
- case 0x90: /* DCS -- Device Control String */
- c = 'P';
- break;
- case 0x9f: /* APC -- Application Program Command */
- c = '_';
- break;
- case 0x9e: /* PM -- Privacy Message */
- c = '^';
- break;
- case 0x9d: /* OSC -- Operating System Command */
- c = ']';
- break;
- }
+ switch (c) {
+ case 0x90: /* DCS -- Device Control String */
+ c = 'P';
+ break;
+ case 0x9f: /* APC -- Application Program Command */
+ c = '_';
+ break;
+ case 0x9e: /* PM -- Privacy Message */
+ c = '^';
+ break;
+ case 0x9d: /* OSC -- Operating System Command */
+ c = ']';
+ break;
}
strreset();
strescseq.type = c;
}
strreset();
strescseq.type = c;
@@
-2787,10
+2788,8
@@
tresize(int col, int row) {
free(term.line[i]);
free(term.alt[i]);
}
free(term.line[i]);
free(term.alt[i]);
}
- if(i > 0) {
- memmove(term.line, term.line + i, row * sizeof(Line));
- memmove(term.alt, term.alt + i, row * sizeof(Line));
- }
+ memmove(term.line, term.line + i, row * sizeof(Line));
+ memmove(term.alt, term.alt + i, row * sizeof(Line));
for(i += row; i < term.row; i++) {
free(term.line[i]);
free(term.alt[i]);
for(i += row; i < term.row; i++) {
free(term.line[i]);
free(term.alt[i]);
@@
-4009,12
+4008,12
@@
void
usage(void) {
die("%s " VERSION " (c) 2010-2015 st engineers\n" \
"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
usage(void) {
die("%s " VERSION " (c) 2010-2015 st engineers\n" \
"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
- " [-i] [-t title] [-w windowid] [-e command ...]\n", argv0);
+ " [-i] [-t title] [-w windowid] [-e command ...] [command ...]\n",
+ argv0);
}
int
main(int argc, char *argv[]) {
}
int
main(int argc, char *argv[]) {
- char *titles;
uint cols = 80, rows = 24;
xw.l = xw.t = 0;
uint cols = 80, rows = 24;
xw.l = xw.t = 0;
@@
-4029,14
+4028,8
@@
main(int argc, char *argv[]) {
opt_class = EARGF(usage());
break;
case 'e':
opt_class = EARGF(usage());
break;
case 'e':
- /* eat all remaining arguments */
- if(argc > 1) {
- opt_cmd = &argv[1];
- if(argv[1] != NULL && opt_title == NULL) {
- titles = xstrdup(argv[1]);
- opt_title = basename(titles);
- }
- }
+ if(argc > 1)
+ --argc, ++argv;
goto run;
case 'f':
opt_font = EARGF(usage());
goto run;
case 'f':
opt_font = EARGF(usage());
@@
-4063,6
+4056,12
@@
main(int argc, char *argv[]) {
} ARGEND;
run:
} ARGEND;
run:
+ if(argc > 0) {
+ /* eat all remaining arguments */
+ opt_cmd = argv;
+ if(!opt_title)
+ opt_title = basename(xstrdup(argv[0]));
+ }
setlocale(LC_CTYPE, "");
XSetLocaleModifiers("");
tnew(MAX(cols, 1), MAX(rows, 1));
setlocale(LC_CTYPE, "");
XSetLocaleModifiers("");
tnew(MAX(cols, 1), MAX(rows, 1));