Apply st-externalpipe-0.8.4.diff, rightclickpaste
This commit is contained in:
parent
06aff77336
commit
fe24022e12
6 changed files with 92 additions and 18 deletions
11
README.md
11
README.md
|
@ -1,5 +1,8 @@
|
|||
# st - simple terminal emulator for X.
|
||||
# st - simple terminal emulator for X
|
||||
|
||||
This is my terminal which I use every day.
|
||||
|
||||
+ Based on [st-0.8.4](https://st.suckless.org/)
|
||||
+ Default font: [Droid Sans Mono Slashed for Powerline](https://github.com/powerline/fonts/tree/master/DroidSansMonoSlashed)
|
||||
+ Default theme: [Solarized](https://ethanschoonover.com/solarized/)
|
||||
|
||||
|
@ -9,13 +12,15 @@
|
|||
+ **Scrollback mouse**: `shift` while scrolling the mouse
|
||||
+ **Change font size**:`ctrl+shift-↑/↓`
|
||||
+ **Reset font size**: `ctrl+shifts-home` returns to default
|
||||
+ **Copy/Paste text**: with `ctrl+shift-c` and `ctrl+shift+v` or `ctrl+shift-insert`
|
||||
+ **Copy/Paste text**: with `ctrl+shift-c`, `ctrl+shift+v` and `ctrl+shift-insert` or right mouse click
|
||||
+ **Extract all visible URLs and present rofi/dmenu to select and open one**: ctrl+shift+U
|
||||
|
||||
## Requirements
|
||||
|
||||
+ `make` tool for building
|
||||
+ `libXft` library for fonts drawing
|
||||
+ `Xlib` header files for interacting with an X server
|
||||
+ `xurls` tool for extract urls from plain text
|
||||
+ `Droid Sans Mono Slashed for Powerline` just default font, which you can change it in `config.h`
|
||||
|
||||
## Patches
|
||||
|
@ -23,6 +28,8 @@
|
|||
+ st-scrollback
|
||||
+ st-scrollback-mouse
|
||||
+ alpha
|
||||
+ externalpipe
|
||||
+ rightclickpaste
|
||||
|
||||
## Simple installation
|
||||
|
||||
|
|
32
config.h
32
config.h
|
@ -170,6 +170,9 @@ static unsigned int defaultattr = 11;
|
|||
*/
|
||||
static uint forcemousemod = ShiftMask;
|
||||
|
||||
static char *openurlcmd[] = { "/bin/zsh", "-c",
|
||||
"xurls | rofi -dmenu -l 10 -columns 1 | xargs -r xdg-open",
|
||||
"externalpipe", NULL };
|
||||
|
||||
/*
|
||||
* Internal mouse shortcuts.
|
||||
|
@ -188,7 +191,7 @@ static MouseShortcut mshortcuts[] = {
|
|||
#define TERMMOD (ControlMask|ShiftMask)
|
||||
|
||||
MouseKey mkeys[] = {
|
||||
/* button mask function argument */
|
||||
/* button mask function argument */
|
||||
{ Button4, ShiftMask, kscrollup, {.i = 1} },
|
||||
{ Button5, ShiftMask, kscrolldown, {.i = 1} },
|
||||
{ Button4, TERMMOD, zoom, {.f = +1} },
|
||||
|
@ -196,19 +199,20 @@ MouseKey mkeys[] = {
|
|||
};
|
||||
|
||||
static Shortcut shortcuts[] = {
|
||||
/* mask keysym function argument */
|
||||
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
|
||||
{ ControlMask, XK_Print, toggleprinter, {.i = 0} },
|
||||
{ ShiftMask, XK_Print, printscreen, {.i = 0} },
|
||||
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
|
||||
{ TERMMOD, XK_Up, zoom, {.f = +1} },
|
||||
{ TERMMOD, XK_Down, zoom, {.f = -1} },
|
||||
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
|
||||
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
|
||||
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Insert, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||
/* mask keysym function argument */
|
||||
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
|
||||
{ ControlMask, XK_Print, toggleprinter, {.i = 0} },
|
||||
{ ShiftMask, XK_Print, printscreen, {.i = 0} },
|
||||
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
|
||||
{ TERMMOD, XK_Up, zoom, {.f = +1} },
|
||||
{ TERMMOD, XK_Down, zoom, {.f = -1} },
|
||||
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
|
||||
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
|
||||
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Insert, selpaste, {.i = 0} },
|
||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||
{ TERMMOD, XK_U, externalpipe, { .v = openurlcmd } },
|
||||
{ ShiftMask, XK_Up, kscrollup, {.i = -1} },
|
||||
{ ShiftMask, XK_Down, kscrolldown, {.i = -1} },
|
||||
{ ShiftMask, XK_K, kscrollup, {.i = -1} },
|
||||
|
|
61
st.c
61
st.c
|
@ -730,8 +730,14 @@ sigchld(int a)
|
|||
if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
|
||||
die("waiting for pid %hd failed: %s\n", pid, strerror(errno));
|
||||
|
||||
if (pid != p)
|
||||
if (pid != p) {
|
||||
if (p == 0 && wait(&stat) < 0)
|
||||
die("wait: %s\n", strerror(errno));
|
||||
|
||||
/* reinstall sigchld handler */
|
||||
signal(SIGCHLD, sigchld);
|
||||
return;
|
||||
}
|
||||
|
||||
if (WIFEXITED(stat) && WEXITSTATUS(stat))
|
||||
die("child exited with status %d\n", WEXITSTATUS(stat));
|
||||
|
@ -1988,6 +1994,59 @@ strparse(void)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
externalpipe(const Arg *arg)
|
||||
{
|
||||
int to[2];
|
||||
char buf[UTF_SIZ];
|
||||
void (*oldsigpipe)(int);
|
||||
Glyph *bp, *end;
|
||||
int lastpos, n, newline;
|
||||
|
||||
if (pipe(to) == -1)
|
||||
return;
|
||||
|
||||
switch (fork()) {
|
||||
case -1:
|
||||
close(to[0]);
|
||||
close(to[1]);
|
||||
return;
|
||||
case 0:
|
||||
dup2(to[0], STDIN_FILENO);
|
||||
close(to[0]);
|
||||
close(to[1]);
|
||||
execvp(((char **)arg->v)[0], (char **)arg->v);
|
||||
fprintf(stderr, "st: execvp %s\n", ((char **)arg->v)[0]);
|
||||
perror("failed");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
close(to[0]);
|
||||
/* ignore sigpipe for now, in case child exists early */
|
||||
oldsigpipe = signal(SIGPIPE, SIG_IGN);
|
||||
newline = 0;
|
||||
for (n = 0; n < term.row; n++) {
|
||||
bp = term.line[n];
|
||||
lastpos = MIN(tlinelen(n) + 1, term.col) - 1;
|
||||
if (lastpos < 0)
|
||||
break;
|
||||
end = &bp[lastpos + 1];
|
||||
for (; bp < end; ++bp)
|
||||
if (xwrite(to[1], buf, utf8encode(bp->u, buf)) < 0)
|
||||
break;
|
||||
if ((newline = term.line[n][lastpos].mode & ATTR_WRAP))
|
||||
continue;
|
||||
if (xwrite(to[1], "\n", 1) < 0)
|
||||
break;
|
||||
newline = 0;
|
||||
}
|
||||
if (newline)
|
||||
(void)xwrite(to[1], "\n", 1);
|
||||
close(to[1]);
|
||||
/* restore */
|
||||
signal(SIGPIPE, oldsigpipe);
|
||||
}
|
||||
|
||||
void
|
||||
strdump(void)
|
||||
{
|
||||
|
|
1
st.h
1
st.h
|
@ -88,6 +88,7 @@ void die(const char *, ...);
|
|||
void redraw(void);
|
||||
void draw(void);
|
||||
|
||||
void externalpipe(const Arg *);
|
||||
void kscrolldown(const Arg *);
|
||||
void kscrollup(const Arg *);
|
||||
void printscreen(const Arg *);
|
||||
|
|
BIN
st.o
BIN
st.o
Binary file not shown.
5
x.c
5
x.c
|
@ -702,7 +702,10 @@ brelease(XEvent *e)
|
|||
|
||||
if (mouseaction(e, 1))
|
||||
return;
|
||||
if (e->xbutton.button == Button1)
|
||||
|
||||
if (e->xbutton.button == Button3)
|
||||
selpaste(NULL);
|
||||
else if (e->xbutton.button == Button1)
|
||||
mousesel(e, 1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue