Compare commits
3 Commits
ffd5e8750d
...
patched-4
| Author | SHA1 | Date | |
|---|---|---|---|
| 98a2dd55b0 | |||
| 634f6cb5ad | |||
| 3c9aef2597 |
29
config.def.h
29
config.def.h
@@ -16,8 +16,30 @@ static char *externaleditcmd[] = { "/bin/sh", "-c",
|
|||||||
"st -e vis \"$tmpfile\"\n",
|
"st -e vis \"$tmpfile\"\n",
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
static char *externalcopycmd[] = { "/bin/sh", "-c",
|
int lightmode = 0;
|
||||||
"sed 's/[ \t][ \t]*/\\n/g' | tac | awk '!x[$0]++' | dmenu -l 10 -w $WINDOWID | tr --delete '\\n' | vis-clipboard --copy",
|
|
||||||
|
#define COL_GRAY1 "'#222222'"
|
||||||
|
#define COL_GRAY2 "'#444444'"
|
||||||
|
#define COL_GRAY3 "'#bbbbbb'"
|
||||||
|
#define COL_GRAY4 "'#eeeeee'"
|
||||||
|
#define COL_CYAN "'#005577'"
|
||||||
|
#define DMENU_DARK "-l 10 -fn 'FiraCode Nerd Font:size=10' -nb " COL_GRAY1 " -nf " COL_GRAY3 " -sb " COL_CYAN " -sf " COL_GRAY4
|
||||||
|
#define DMENU_LIGHT "-l 10 -fn 'FiraCode Nerd Font:size=10' -nb " COL_GRAY3 " -nf " COL_GRAY1 " -sb " COL_CYAN " -sf " COL_GRAY4
|
||||||
|
|
||||||
|
static char *externalcopydarkcmd[] = { "/bin/sh", "-c",
|
||||||
|
"sed 's/[ \t][ \t]*/\\n/g' | tac | awk 'BEGIN{x[\"\"]++} !x[$0]++' | dmenu " DMENU_DARK " -w $WINDOWID -p Copy | tr -d '\\n' | vis-clipboard --copy",
|
||||||
|
NULL};
|
||||||
|
|
||||||
|
static char *externalpastedarkcmd[] = { "/bin/sh", "-c",
|
||||||
|
"sed 's/[ \t][ \t]*/\\n/g' | tac | awk 'BEGIN{x[\"\"]++} !x[$0]++' | dmenu " DMENU_DARK " -w $WINDOWID -p Paste | tr -d '\\n'",
|
||||||
|
NULL};
|
||||||
|
|
||||||
|
static char *externalcopylightcmd[] = { "/bin/sh", "-c",
|
||||||
|
"sed 's/[ \t][ \t]*/\\n/g' | tac | awk 'BEGIN{x[\"\"]++} !x[$0]++' | dmenu " DMENU_LIGHT " -w $WINDOWID -p Copy | tr -d '\\n' | vis-clipboard --copy",
|
||||||
|
NULL};
|
||||||
|
|
||||||
|
static char *externalpastelightcmd[] = { "/bin/sh", "-c",
|
||||||
|
"sed 's/[ \t][ \t]*/\\n/g' | tac | awk 'BEGIN{x[\"\"]++} !x[$0]++' | dmenu " DMENU_LIGHT " -w $WINDOWID -p Paste | tr -d '\\n'",
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -212,7 +234,8 @@ static Shortcut shortcuts[] = {
|
|||||||
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
{ TERMMOD, XK_V, clippaste, {.i = 0} },
|
||||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
||||||
{ TERMMOD, XK_E, externalpipe, { .v = externaleditcmd } },
|
{ TERMMOD, XK_E, externalpipe, { .v = externaleditcmd } },
|
||||||
{ TERMMOD, XK_K, externalpipe, { .v = externalcopycmd } },
|
{ TERMMOD, XK_K, externalpipecopy, { 0 } },
|
||||||
|
{ TERMMOD, XK_I, externalpipepaste, { 0 } },
|
||||||
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
||||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
||||||
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
|
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
|
||||||
|
|||||||
56
st.c
56
st.c
@@ -2117,9 +2117,9 @@ strparse(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
externalpipe(const Arg *arg)
|
externalpipeinout(const Arg *arg, void (*processout)(int fildes))
|
||||||
{
|
{
|
||||||
int to[2];
|
int to[2], from[2];
|
||||||
char buf[UTF_SIZ];
|
char buf[UTF_SIZ];
|
||||||
void (*oldsigpipe)(int);
|
void (*oldsigpipe)(int);
|
||||||
Glyph *bp, *end;
|
Glyph *bp, *end;
|
||||||
@@ -2127,16 +2127,27 @@ externalpipe(const Arg *arg)
|
|||||||
|
|
||||||
if (pipe(to) == -1)
|
if (pipe(to) == -1)
|
||||||
return;
|
return;
|
||||||
|
if (processout != NULL && pipe(from) == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
switch (fork()) {
|
switch (fork()) {
|
||||||
case -1:
|
case -1:
|
||||||
close(to[0]);
|
close(to[0]);
|
||||||
close(to[1]);
|
close(to[1]);
|
||||||
|
if (processout != NULL) {
|
||||||
|
close(from[0]);
|
||||||
|
close(from[1]);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case 0:
|
case 0:
|
||||||
dup2(to[0], STDIN_FILENO);
|
dup2(to[0], STDIN_FILENO);
|
||||||
close(to[0]);
|
close(to[0]);
|
||||||
close(to[1]);
|
close(to[1]);
|
||||||
|
if (processout != NULL) {
|
||||||
|
dup2(from[1], STDOUT_FILENO);
|
||||||
|
close(from[0]);
|
||||||
|
close(from[1]);
|
||||||
|
}
|
||||||
execvp(((char **)arg->v)[0], (char **)arg->v);
|
execvp(((char **)arg->v)[0], (char **)arg->v);
|
||||||
fprintf(stderr, "st: execvp %s\n", ((char **)arg->v)[0]);
|
fprintf(stderr, "st: execvp %s\n", ((char **)arg->v)[0]);
|
||||||
perror("failed");
|
perror("failed");
|
||||||
@@ -2144,6 +2155,8 @@ externalpipe(const Arg *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
close(to[0]);
|
close(to[0]);
|
||||||
|
if (processout != NULL)
|
||||||
|
close(from[1]);
|
||||||
/* ignore sigpipe for now, in case child exists early */
|
/* ignore sigpipe for now, in case child exists early */
|
||||||
oldsigpipe = signal(SIGPIPE, SIG_IGN);
|
oldsigpipe = signal(SIGPIPE, SIG_IGN);
|
||||||
newline = 0;
|
newline = 0;
|
||||||
@@ -2165,10 +2178,49 @@ externalpipe(const Arg *arg)
|
|||||||
if (newline)
|
if (newline)
|
||||||
(void)xwrite(to[1], "\n", 1);
|
(void)xwrite(to[1], "\n", 1);
|
||||||
close(to[1]);
|
close(to[1]);
|
||||||
|
if (processout != NULL) {
|
||||||
|
processout(from[0]);
|
||||||
|
close(from[0]);
|
||||||
|
}
|
||||||
/* restore */
|
/* restore */
|
||||||
signal(SIGPIPE, oldsigpipe);
|
signal(SIGPIPE, oldsigpipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
externalpipe(const Arg *arg)
|
||||||
|
{
|
||||||
|
externalpipeinout(arg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ttycopy(int fildes)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = read(fildes, buf, sizeof(buf));
|
||||||
|
if (len > 0 && len < sizeof(buf)) {
|
||||||
|
buf[len] = '\0';
|
||||||
|
ttywrite(buf, len, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
externalpipepaste(const Arg *)
|
||||||
|
{
|
||||||
|
Arg arg;
|
||||||
|
arg.v = externalpastecmd();
|
||||||
|
externalpipeinout(&arg, ttycopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
externalpipecopy(const Arg *)
|
||||||
|
{
|
||||||
|
Arg arg;
|
||||||
|
arg.v = externalcopycmd();
|
||||||
|
externalpipeinout(&arg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
strdump(void)
|
strdump(void)
|
||||||
{
|
{
|
||||||
|
|||||||
6
st.h
6
st.h
@@ -83,6 +83,8 @@ void redraw(void);
|
|||||||
void draw(void);
|
void draw(void);
|
||||||
|
|
||||||
void externalpipe(const Arg *);
|
void externalpipe(const Arg *);
|
||||||
|
void externalpipecopy(const Arg *);
|
||||||
|
void externalpipepaste(const Arg *);
|
||||||
void printscreen(const Arg *);
|
void printscreen(const Arg *);
|
||||||
void printsel(const Arg *);
|
void printsel(const Arg *);
|
||||||
void sendbreak(const Arg *);
|
void sendbreak(const Arg *);
|
||||||
@@ -121,8 +123,12 @@ extern char *vtiden;
|
|||||||
extern wchar_t *worddelimiters;
|
extern wchar_t *worddelimiters;
|
||||||
extern int allowaltscreen;
|
extern int allowaltscreen;
|
||||||
extern int allowwindowops;
|
extern int allowwindowops;
|
||||||
|
extern int lightmode;
|
||||||
extern char *termname;
|
extern char *termname;
|
||||||
extern unsigned int tabspaces;
|
extern unsigned int tabspaces;
|
||||||
extern unsigned int defaultfg;
|
extern unsigned int defaultfg;
|
||||||
extern unsigned int defaultbg;
|
extern unsigned int defaultbg;
|
||||||
extern unsigned int defaultcs;
|
extern unsigned int defaultcs;
|
||||||
|
|
||||||
|
char **externalcopycmd();
|
||||||
|
char **externalpastecmd();
|
||||||
|
|||||||
11
x.c
11
x.c
@@ -66,6 +66,16 @@ void kscrolldown(const Arg *);
|
|||||||
/* config.h for applying patches and the configuration. */
|
/* config.h for applying patches and the configuration. */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
char **externalcopycmd()
|
||||||
|
{
|
||||||
|
return (lightmode) ? externalcopylightcmd : externalcopydarkcmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
char **externalpastecmd()
|
||||||
|
{
|
||||||
|
return (lightmode) ? externalpastelightcmd : externalpastedarkcmd;
|
||||||
|
}
|
||||||
|
|
||||||
/* XEMBED messages */
|
/* XEMBED messages */
|
||||||
#define XEMBED_FOCUS_IN 4
|
#define XEMBED_FOCUS_IN 4
|
||||||
#define XEMBED_FOCUS_OUT 5
|
#define XEMBED_FOCUS_OUT 5
|
||||||
@@ -2109,6 +2119,7 @@ xrdb_load(void)
|
|||||||
XRESOURCE_LOAD_INTEGER("bellvolume", bellvolume);
|
XRESOURCE_LOAD_INTEGER("bellvolume", bellvolume);
|
||||||
XRESOURCE_LOAD_INTEGER("borderpx", borderpx);
|
XRESOURCE_LOAD_INTEGER("borderpx", borderpx);
|
||||||
XRESOURCE_LOAD_INTEGER("cursorshape", cursorshape);
|
XRESOURCE_LOAD_INTEGER("cursorshape", cursorshape);
|
||||||
|
XRESOURCE_LOAD_INTEGER("lightmode", lightmode);
|
||||||
|
|
||||||
XRESOURCE_LOAD_FLOAT("cwscale", cwscale);
|
XRESOURCE_LOAD_FLOAT("cwscale", cwscale);
|
||||||
XRESOURCE_LOAD_FLOAT("chscale", chscale);
|
XRESOURCE_LOAD_FLOAT("chscale", chscale);
|
||||||
|
|||||||
Reference in New Issue
Block a user