Updated to latest git version and patches

This commit is contained in:
David Thurstenson 2017-06-09 10:32:40 -05:00
parent 01bba932c3
commit 907fad0672
4 changed files with 147 additions and 133 deletions

View File

@ -2,8 +2,8 @@
pkgname=st-tl
_pkgname=st
pkgver=0.7.r17.gc63a87c
pkgrel=3
pkgver=0.7.r26.gb331da5
pkgrel=1
pkgdesc='A simple virtual terminal emulator for X.'
arch=('i686' 'x86_64')
license=('MIT')
@ -11,14 +11,14 @@ depends=('libxft' 'libxext' 'xorg-fonts-misc' 'dmenu' 'xurls')
makedepends=('ncurses')
conflicts=('st')
url="http://st.suckless.org"
source=('git://git.suckless.org/st#commit=c63a87cd936c1eeef14c4c21572e5b782d3df4bc'
source=('git://git.suckless.org/st#commit=b331da550b290d54592b7ba11242c92f5a303a48'
tl-config.diff
st-externalpipe.diff
st-hidecursor.diff)
md5sums=('SKIP'
'0a61cd23b891bce98c56cf97eafb24f7'
'c54c87489342b8d77c6dd8f3c2ff997e'
'8ff8a77b34dfc09a4dd0d2cf876d68e7')
'4d1089c3845767e52f1bd79f0022acb0'
'a75266ee959386a4b50e0ad7d1c41580'
'487dc42b84ea464474aac527c2b47191')
pkgver() {
cd "$_pkgname"

View File

@ -1,70 +1,67 @@
diff --git a/st.c b/st.c
index d6fe58a..1595e59 100644
index 8d4a9f2..3b05f0b 100644
--- a/st.c
+++ b/st.c
@@ -344,6 +344,7 @@ static void printscreen(const Arg *) ;
@@ -138,6 +138,7 @@ static void printscreen(const Arg *) ;
static void iso14755(const Arg *);
static void toggleprinter(const Arg *);
static void sendbreak(const Arg *);
+static void externalpipe(const Arg *);
/* Config.h for applying patches and the configuration. */
/* config.h for applying patches and the configuration. */
#include "config.h"
@@ -2996,6 +2997,62 @@ eschandle(uchar ascii)
@@ -2344,6 +2345,59 @@ eschandle(uchar ascii)
}
void
+externalpipe(const Arg *arg)
+{
+ int to[2]; /* 0 = read, 1 = write */
+ pid_t child;
+ int n;
+ void (*oldsigpipe)(int);
+ int to[2];
+ char buf[UTF_SIZ];
+ void (*oldsigpipe)(int);
+ Glyph *bp, *end;
+ int lastpos, n, newline;
+
+ if(pipe(to) == -1)
+ if (pipe(to) == -1)
+ return;
+
+ /* sigchld() handles this */
+ switch(child = fork()){
+ case -1:
+ close(to[0]), close(to[1]);
+ return;
+ case 0:
+ /* child */
+ close(to[1]);
+ dup2(to[0], STDIN_FILENO); /* 0<&to */
+ close(to[0]);
+ execvp(
+ "sh",
+ (char *const []){
+ "/bin/sh",
+ "-c",
+ (char *)arg->v,
+ 0
+ });
+ exit(127);
+ 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 ", ((char **)arg->v)[0]);
+ perror("failed");
+ exit(0);
+ }
+
+ /* parent */
+ close(to[0]);
+ /* ignore sigpipe for now, in case child exits early */
+ oldsigpipe = signal(SIGPIPE, SIG_IGN);
+
+ for(n = 0; n < term.row; n++){
+ bp = &term.line[n][0];
+ end = &bp[MIN(tlinelen(n), term.col) - 1];
+ if(bp != end || bp->u != ' ')
+ for(; bp <= end; ++bp)
+ if(xwrite(to[1], buf, utf8encode(bp->u, buf)) < 0)
+ break;
+ if(xwrite(to[1], "\n", 1) < 0)
+ 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);
+}
@ -73,3 +70,33 @@ index d6fe58a..1595e59 100644
tputc(Rune u)
{
char c[UTF_SIZ];
diff --git a/win.h b/win.h
index 428111c..a012a24 100644
--- a/win.h
+++ b/win.h
@@ -28,3 +28,5 @@ void xresize(int, int);
void xselpaste(void);
unsigned long xwinid(void);
void xsetsel(char *, Time);
+
+extern char winid[64];
diff --git a/x.c b/x.c
index fbfd350..ff052e6 100644
--- a/x.c
+++ b/x.c
@@ -139,6 +139,7 @@ static void (*handler[LASTEvent])(XEvent *) = {
static DC dc;
static XWindow xw;
static XSelection xsel;
+char winid[64];
/* Font Ring Cache */
enum {
@@ -915,6 +916,7 @@ xinit(void)
win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
| CWEventMask | CWColormap, &xw.attrs);
+ snprintf(winid, LEN(winid), "%lu", (unsigned long)xw.win);
memset(&gcvalues, 0, sizeof(gcvalues));
gcvalues.graphics_exposures = False;

View File

@ -1,8 +1,8 @@
diff --git a/st.c b/st.c
index 2594c65..2a031f0 100644
--- a/st.c
+++ b/st.c
@@ -260,6 +260,11 @@ typedef struct {
diff --git a/x.c b/x.c
index fbfd350..2f72214 100644
--- a/x.c
+++ b/x.c
@@ -47,6 +47,11 @@ typedef struct {
Draw draw;
Visual *vis;
XSetWindowAttributes attrs;
@ -14,21 +14,21 @@ index 2594c65..2a031f0 100644
int scr;
int isfixed; /* is fixed geometry? */
int l, t; /* left and top offset */
@@ -1291,6 +1296,13 @@ bmotion(XEvent *e)
@@ -535,6 +540,13 @@ bmotion(XEvent *e)
{
int oldey, oldex, oldsby, oldsey;
+ if(!xw.pointerisvisible) {
+ if (!xw.pointerisvisible) {
+ XDefineCursor(xw.dpy, xw.win, xw.vpointer);
+ xw.pointerisvisible = 1;
+ if(!IS_SET(MODE_MOUSEMANY))
+ if (!IS_SET(MODE_MOUSEMANY))
+ xsetpointermotion(0);
+ }
+
if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
mousereport(e);
return;
@@ -3435,10 +3447,10 @@ void
@@ -871,10 +883,10 @@ void
xinit(void)
{
XGCValues gcvalues;
@ -40,7 +40,7 @@ index 2594c65..2a031f0 100644
if (!(xw.dpy = XOpenDisplay(NULL)))
die("Can't open display\n");
@@ -3511,8 +3523,9 @@ xinit(void)
@@ -947,8 +959,9 @@ xinit(void)
die("XCreateIC failed. Could not obtain input method.\n");
/* white cursor, black outline */
@ -52,7 +52,7 @@ index 2594c65..2a031f0 100644
if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) {
xmousefg.red = 0xffff;
@@ -3526,7 +3539,10 @@ xinit(void)
@@ -962,7 +975,10 @@ xinit(void)
xmousebg.blue = 0x0000;
}
@ -64,20 +64,20 @@ index 2594c65..2a031f0 100644
xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False);
@@ -4026,6 +4042,8 @@ unmap(XEvent *ev)
@@ -1462,6 +1478,8 @@ unmap(XEvent *ev)
void
xsetpointermotion(int set)
{
+ if(!set && !xw.pointerisvisible)
+ if (!set && !xw.pointerisvisible)
+ return;
MODBIT(xw.attrs.event_mask, set, PointerMotionMask);
XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs);
}
@@ -4125,6 +4143,12 @@ kpress(XEvent *ev)
@@ -1521,6 +1539,12 @@ kpress(XEvent *ev)
Status status;
Shortcut *bp;
+ if(xw.pointerisvisible) {
+ if (xw.pointerisvisible) {
+ XDefineCursor(xw.dpy, xw.win, xw.bpointer);
+ xsetpointermotion(1);
+ xw.pointerisvisible = 0;

View File

@ -1,12 +1,12 @@
--- a/config.h 2017-03-16 15:22:46.638368708 -0500
+++ b/config.h 2017-03-16 15:31:48.438413697 -0500
--- a/config.h 2017-06-09 09:57:08.991613650 -0500
+++ b/config.h 2017-06-09 10:30:35.471854916 -0500
@@ -5,7 +5,7 @@
*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/
-static char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
+static char font[] = "Monospace:size=11.5:antialias=true:autohint=true";
static int borderpx = 2;
-char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
+char font[] = "Monospace:size=11.5:antialias=true:autohint=true";
int borderpx = 2;
/*
@@ -60,7 +60,7 @@
@ -17,14 +17,10 @@
+static int bellvolume = 50;
/* default TERM value */
static char termname[] = "st-256color";
@@ -82,33 +82,32 @@
*/
static unsigned int tabspaces = 8;
+/*TERMINAL.SEXY START*/
char termname[] = "st-256color";
@@ -85,30 +85,29 @@
/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
const char *colorname[] = {
/* 8 normal colors */
- "black",
- "red3",
@ -34,14 +30,15 @@
- "magenta3",
- "cyan3",
- "gray90",
+ [0] = "#1c1c1c", /* black */
+ [1] = "#b40f0f", /* red */
+ [2] = "#12981b", /* green */
+ [3] = "#faff00", /* yellow */
+ [4] = "#048ac7", /* blue */
+ [5] = "#833c9f", /* magenta */
+ [6] = "#0ac1cd", /* cyan */
+ [7] = "#e5e5e5", /* white */
+ [0] = "#1c1c1c", /* black */
+ [1] = "#b40f0f", /* red */
+ [2] = "#12981b", /* green */
+ [3] = "#faff00", /* yellow */
+ [4] = "#048ac7", /* blue */
+ [5] = "#833c9f", /* magenta */
+ [6] = "#0ac1cd", /* cyan */
+ [7] = "#e5e5e5", /* white */
+
/* 8 bright colors */
- "gray50",
@ -58,70 +55,60 @@
- /* more colors can be added after 255 to use with DefaultXX */
- "#cccccc",
- "#555555",
+ [8] = "#666666", /* black */
+ [9] = "#e31313", /* red */
+ [10] = "#1ce129", /* green */
+ [11] = "#fbff3f", /* yellow */
+ [12] = "#48c6ff", /* blue */
+ [13] = "#be67e1", /* magenta */
+ [14] = "#63e7f0", /* cyan */
+ [15] = "#f3f3f3", /* white */
+ [8] = "#666666", /* black */
+ [9] = "#e31313", /* red */
+ [10] = "#1ce129", /* green */
+ [11] = "#fbff3f", /* yellow */
+ [12] = "#48c6ff", /* blue */
+ [13] = "#be67e1", /* magenta */
+ [14] = "#63e7f0", /* cyan */
+ [15] = "#f3f3f3", /* white */
+
+ /* special colors */
+ [256] = "#131313", /* background */
+ [257] = "#dddddd", /* foreground */
+ /* special colors */
+ [256] = "#131313", /* background */
+ [257] = "#dddddd", /* foreground */
};
@@ -116,10 +115,10 @@
@@ -116,10 +115,11 @@
* Default colors (colorname index)
* foreground, background, cursor, reverse cursor
*/
-static unsigned int defaultfg = 7;
-static unsigned int defaultbg = 0;
-static unsigned int defaultcs = 256;
-static unsigned int defaultrcs = 257;
+static unsigned int defaultfg = 257;
+static unsigned int defaultbg = 256;
+static unsigned int defaultcs = 257;
+static unsigned int defaultrcs = 256;
-unsigned int defaultfg = 7;
-unsigned int defaultbg = 0;
-unsigned int defaultcs = 256;
-unsigned int defaultrcs = 257;
+unsigned int defaultfg = 257;
+unsigned int defaultbg = 256;
+unsigned int defaultcs = 257;
+unsigned int defaultrcs = 256;
+
/*
* Default shape of cursor
@@ -164,20 +163,22 @@
@@ -164,6 +164,14 @@
#define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)
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} },
- { MODKEY|ShiftMask, XK_Prior, xzoom, {.f = +1} },
- { MODKEY|ShiftMask, XK_Next, xzoom, {.f = -1} },
- { MODKEY|ShiftMask, XK_Home, xzoomreset, {.f = 0} },
- { ShiftMask, XK_Insert, selpaste, {.i = 0} },
- { MODKEY|ShiftMask, XK_Insert, clippaste, {.i = 0} },
- { MODKEY|ShiftMask, XK_C, clipcopy, {.i = 0} },
- { MODKEY|ShiftMask, XK_V, clippaste, {.i = 0} },
- { MODKEY, XK_Num_Lock, numlock, {.i = 0} },
- { MODKEY, XK_Control_L, iso14755, {.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} },
+ { MODKEY|ShiftMask, XK_Prior, xzoom, {.f = +1} },
+ { MODKEY|ShiftMask, XK_Next, xzoom, {.f = -1} },
+ { MODKEY|ShiftMask, XK_Home, xzoomreset, {.f = 0} },
+ { ShiftMask, XK_Insert, selpaste, {.i = 0} },
+ { MODKEY|ShiftMask, XK_Insert, clippaste, {.i = 0} },
+ { MODKEY|ShiftMask, XK_C, clipcopy, {.i = 0} },
+ { ControlMask|ShiftMask, XK_V, clippaste, {.i = 0} },
+ { MODKEY, XK_Num_Lock, numlock, {.i = 0} },
+ { ControlMask|ShiftMask, XK_X, externalpipe, {.v = "xurls | tac | dmenu -l 10 | xargs -r chromium" } },
+ { ControlMask|ShiftMask, XK_Z, externalpipe, {.v = "xurls | tac | dmenu -l 10 -p 'Copy URL:' | xsel -ib" } },
+ { ControlMask|ShiftMask, XK_U, iso14755, {.i = 0} },
+static char *openurlcmd[] = { "/bin/sh", "-c",
+ "xurls | tac | dmenu -l 10 -w $1 | xargs -r open",
+ "externalpipe", winid, NULL };
+
+static char *copyurlcmd[] = { "/bin/sh", "-c",
+ "xurls | tac | dmenu -l 10 -w $1 -p 'Copy URL:' | xsel -ib",
+ "externalpipe", winid, NULL };
+
Shortcut shortcuts[] = {
/* mask keysym function argument */
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
@@ -178,6 +186,10 @@
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
{ TERMMOD, XK_I, iso14755, {.i = 0} },
+ { TERMMOD, XK_X, externalpipe, {.v = openurlcmd } },
+ { TERMMOD, XK_Z, externalpipe, {.v = copyurlcmd} },
+ { TERMMOD, XK_U, iso14755, {.i = 0} },
+
};
/*