Split X-specific code into x.c
This commit is contained in:
		
							parent
							
								
									c63a87cd93
								
							
						
					
					
						commit
						e2ee5ee611
					
				
							
								
								
									
										5
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										5
									
								
								Makefile
								
								
								
								
							| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include config.mk
 | 
					include config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRC = st.c
 | 
					SRC = st.c x.c
 | 
				
			||||||
OBJ = ${SRC:.c=.o}
 | 
					OBJ = ${SRC:.c=.o}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: options st
 | 
					all: options st
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,9 @@ config.h:
 | 
				
			||||||
	@echo CC $<
 | 
						@echo CC $<
 | 
				
			||||||
	@${CC} -c ${CFLAGS} $<
 | 
						@${CC} -c ${CFLAGS} $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					st.o: config.h st.h win.h
 | 
				
			||||||
 | 
					x.o: arg.h st.h win.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
${OBJ}: config.h config.mk
 | 
					${OBJ}: config.h config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
st: ${OBJ}
 | 
					st: ${OBJ}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										64
									
								
								config.def.h
								
								
								
								
							
							
						
						
									
										64
									
								
								config.def.h
								
								
								
								
							| 
						 | 
					@ -5,8 +5,8 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
 | 
					 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
 | 
					char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
 | 
				
			||||||
static int borderpx = 2;
 | 
					int borderpx = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * What program is execed by st depends of these precedence rules:
 | 
					 * What program is execed by st depends of these precedence rules:
 | 
				
			||||||
| 
						 | 
					@ -24,8 +24,8 @@ static char stty_args[] = "stty raw pass8 nl -echo -iexten -cstopb 38400";
 | 
				
			||||||
static char vtiden[] = "\033[?6c";
 | 
					static char vtiden[] = "\033[?6c";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Kerning / character bounding-box multipliers */
 | 
					/* Kerning / character bounding-box multipliers */
 | 
				
			||||||
static float cwscale = 1.0;
 | 
					float cwscale = 1.0;
 | 
				
			||||||
static float chscale = 1.0;
 | 
					float chscale = 1.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * word delimiter string
 | 
					 * word delimiter string
 | 
				
			||||||
| 
						 | 
					@ -35,26 +35,26 @@ static float chscale = 1.0;
 | 
				
			||||||
static char worddelimiters[] = " ";
 | 
					static char worddelimiters[] = " ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* selection timeouts (in milliseconds) */
 | 
					/* selection timeouts (in milliseconds) */
 | 
				
			||||||
static unsigned int doubleclicktimeout = 300;
 | 
					unsigned int doubleclicktimeout = 300;
 | 
				
			||||||
static unsigned int tripleclicktimeout = 600;
 | 
					unsigned int tripleclicktimeout = 600;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* alt screens */
 | 
					/* alt screens */
 | 
				
			||||||
static int allowaltscreen = 1;
 | 
					int allowaltscreen = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* frames per second st should at maximum draw to the screen */
 | 
					/* frames per second st should at maximum draw to the screen */
 | 
				
			||||||
static unsigned int xfps = 120;
 | 
					unsigned int xfps = 120;
 | 
				
			||||||
static unsigned int actionfps = 30;
 | 
					unsigned int actionfps = 30;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * blinking timeout (set to 0 to disable blinking) for the terminal blinking
 | 
					 * blinking timeout (set to 0 to disable blinking) for the terminal blinking
 | 
				
			||||||
 * attribute.
 | 
					 * attribute.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int blinktimeout = 800;
 | 
					unsigned int blinktimeout = 800;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * thickness of underline and bar cursors
 | 
					 * thickness of underline and bar cursors
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int cursorthickness = 2;
 | 
					unsigned int cursorthickness = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * bell volume. It must be a value between -100 and 100. Use 0 for disabling
 | 
					 * bell volume. It must be a value between -100 and 100. Use 0 for disabling
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ static unsigned int cursorthickness = 2;
 | 
				
			||||||
static int bellvolume = 0;
 | 
					static int bellvolume = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* default TERM value */
 | 
					/* default TERM value */
 | 
				
			||||||
static char termname[] = "st-256color";
 | 
					char termname[] = "st-256color";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * spaces per tab
 | 
					 * spaces per tab
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@ static char termname[] = "st-256color";
 | 
				
			||||||
static unsigned int tabspaces = 8;
 | 
					static unsigned int tabspaces = 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Terminal colors (16 first used in escape sequence) */
 | 
					/* Terminal colors (16 first used in escape sequence) */
 | 
				
			||||||
static const char *colorname[] = {
 | 
					const char *colorname[] = {
 | 
				
			||||||
	/* 8 normal colors */
 | 
						/* 8 normal colors */
 | 
				
			||||||
	"black",
 | 
						"black",
 | 
				
			||||||
	"red3",
 | 
						"red3",
 | 
				
			||||||
| 
						 | 
					@ -116,10 +116,10 @@ static const char *colorname[] = {
 | 
				
			||||||
 * Default colors (colorname index)
 | 
					 * Default colors (colorname index)
 | 
				
			||||||
 * foreground, background, cursor, reverse cursor
 | 
					 * foreground, background, cursor, reverse cursor
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int defaultfg = 7;
 | 
					unsigned int defaultfg = 7;
 | 
				
			||||||
static unsigned int defaultbg = 0;
 | 
					unsigned int defaultbg = 0;
 | 
				
			||||||
static unsigned int defaultcs = 256;
 | 
					unsigned int defaultcs = 256;
 | 
				
			||||||
static unsigned int defaultrcs = 257;
 | 
					unsigned int defaultrcs = 257;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Default shape of cursor
 | 
					 * Default shape of cursor
 | 
				
			||||||
| 
						 | 
					@ -128,33 +128,33 @@ static unsigned int defaultrcs = 257;
 | 
				
			||||||
 * 6: Bar ("|")
 | 
					 * 6: Bar ("|")
 | 
				
			||||||
 * 7: Snowman ("☃")
 | 
					 * 7: Snowman ("☃")
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int cursorshape = 2;
 | 
					unsigned int cursorshape = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Default columns and rows numbers
 | 
					 * Default columns and rows numbers
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned int cols = 80;
 | 
					unsigned int cols = 80;
 | 
				
			||||||
static unsigned int rows = 24;
 | 
					unsigned int rows = 24;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Default colour and shape of the mouse cursor
 | 
					 * Default colour and shape of the mouse cursor
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int mouseshape = XC_xterm;
 | 
					unsigned int mouseshape = XC_xterm;
 | 
				
			||||||
static unsigned int mousefg = 7;
 | 
					unsigned int mousefg = 7;
 | 
				
			||||||
static unsigned int mousebg = 0;
 | 
					unsigned int mousebg = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Color used to display font attributes when fontconfig selected a font which
 | 
					 * Color used to display font attributes when fontconfig selected a font which
 | 
				
			||||||
 * doesn't match the ones requested.
 | 
					 * doesn't match the ones requested.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int defaultattr = 11;
 | 
					unsigned int defaultattr = 11;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Internal mouse shortcuts.
 | 
					 * Internal mouse shortcuts.
 | 
				
			||||||
 * Beware that overloading Button1 will disable the selection.
 | 
					 * Beware that overloading Button1 will disable the selection.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static MouseShortcut mshortcuts[] = {
 | 
					MouseShortcut mshortcuts[] = {
 | 
				
			||||||
	/* button               mask            string */
 | 
						/* button               mask            string */
 | 
				
			||||||
	{ Button4,              XK_ANY_MOD,     "\031" },
 | 
						{ Button4,              XK_ANY_MOD,     "\031" },
 | 
				
			||||||
	{ Button5,              XK_ANY_MOD,     "\005" },
 | 
						{ Button5,              XK_ANY_MOD,     "\005" },
 | 
				
			||||||
| 
						 | 
					@ -163,15 +163,15 @@ static MouseShortcut mshortcuts[] = {
 | 
				
			||||||
/* Internal keyboard shortcuts. */
 | 
					/* Internal keyboard shortcuts. */
 | 
				
			||||||
#define MODKEY Mod1Mask
 | 
					#define MODKEY Mod1Mask
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static Shortcut shortcuts[] = {
 | 
					Shortcut shortcuts[] = {
 | 
				
			||||||
	/* mask                 keysym          function        argument */
 | 
						/* mask                 keysym          function        argument */
 | 
				
			||||||
	{ XK_ANY_MOD,           XK_Break,       sendbreak,      {.i =  0} },
 | 
						{ XK_ANY_MOD,           XK_Break,       sendbreak,      {.i =  0} },
 | 
				
			||||||
	{ ControlMask,          XK_Print,       toggleprinter,  {.i =  0} },
 | 
						{ ControlMask,          XK_Print,       toggleprinter,  {.i =  0} },
 | 
				
			||||||
	{ ShiftMask,            XK_Print,       printscreen,    {.i =  0} },
 | 
						{ ShiftMask,            XK_Print,       printscreen,    {.i =  0} },
 | 
				
			||||||
	{ XK_ANY_MOD,           XK_Print,       printsel,       {.i =  0} },
 | 
						{ XK_ANY_MOD,           XK_Print,       printsel,       {.i =  0} },
 | 
				
			||||||
	{ MODKEY|ShiftMask,     XK_Prior,       xzoom,          {.f = +1} },
 | 
						{ MODKEY|ShiftMask,     XK_Prior,       zoom,           {.f = +1} },
 | 
				
			||||||
	{ MODKEY|ShiftMask,     XK_Next,        xzoom,          {.f = -1} },
 | 
						{ MODKEY|ShiftMask,     XK_Next,        zoom,           {.f = -1} },
 | 
				
			||||||
	{ MODKEY|ShiftMask,     XK_Home,        xzoomreset,     {.f =  0} },
 | 
						{ MODKEY|ShiftMask,     XK_Home,        zoomreset,      {.f =  0} },
 | 
				
			||||||
	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
 | 
						{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
 | 
				
			||||||
	{ MODKEY|ShiftMask,     XK_Insert,      clippaste,      {.i =  0} },
 | 
						{ MODKEY|ShiftMask,     XK_Insert,      clippaste,      {.i =  0} },
 | 
				
			||||||
	{ MODKEY|ShiftMask,     XK_C,           clipcopy,       {.i =  0} },
 | 
						{ MODKEY|ShiftMask,     XK_C,           clipcopy,       {.i =  0} },
 | 
				
			||||||
| 
						 | 
					@ -222,7 +222,7 @@ static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
 | 
				
			||||||
 * Note that if you want to use ShiftMask with selmasks, set this to an other
 | 
					 * Note that if you want to use ShiftMask with selmasks, set this to an other
 | 
				
			||||||
 * modifier, set to 0 to not use it.
 | 
					 * modifier, set to 0 to not use it.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static uint forceselmod = ShiftMask;
 | 
					uint forceselmod = ShiftMask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This is the huge key array which defines all compatibility to the Linux
 | 
					 * This is the huge key array which defines all compatibility to the Linux
 | 
				
			||||||
| 
						 | 
					@ -451,7 +451,7 @@ static Key key[] = {
 | 
				
			||||||
 * ButtonRelease and MotionNotify.
 | 
					 * ButtonRelease and MotionNotify.
 | 
				
			||||||
 * If no match is found, regular selection is used.
 | 
					 * If no match is found, regular selection is used.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static uint selmasks[] = {
 | 
					uint selmasks[] = {
 | 
				
			||||||
	[SEL_RECTANGULAR] = Mod1Mask,
 | 
						[SEL_RECTANGULAR] = Mod1Mask,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -459,7 +459,7 @@ static uint selmasks[] = {
 | 
				
			||||||
 * Printable characters in ASCII, used to estimate the advance width
 | 
					 * Printable characters in ASCII, used to estimate the advance width
 | 
				
			||||||
 * of single wide characters.
 | 
					 * of single wide characters.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static char ascii_printable[] =
 | 
					char ascii_printable[] =
 | 
				
			||||||
	" !\"#$%&'()*+,-./0123456789:;<=>?"
 | 
						" !\"#$%&'()*+,-./0123456789:;<=>?"
 | 
				
			||||||
	"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
 | 
						"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
 | 
				
			||||||
	"`abcdefghijklmnopqrstuvwxyz{|}~";
 | 
						"`abcdefghijklmnopqrstuvwxyz{|}~";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,272 @@
 | 
				
			||||||
 | 
					/* See LICENSE for license details. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Arbitrary sizes */
 | 
				
			||||||
 | 
					#define UTF_SIZ       4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* macros */
 | 
				
			||||||
 | 
					#define MIN(a, b)		((a) < (b) ? (a) : (b))
 | 
				
			||||||
 | 
					#define MAX(a, b)		((a) < (b) ? (b) : (a))
 | 
				
			||||||
 | 
					#define LEN(a)			(sizeof(a) / sizeof(a)[0])
 | 
				
			||||||
 | 
					#define BETWEEN(x, a, b)	((a) <= (x) && (x) <= (b))
 | 
				
			||||||
 | 
					#define DIVCEIL(n, d)		(((n) + ((d) - 1)) / (d))
 | 
				
			||||||
 | 
					#define LIMIT(x, a, b)		(x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
 | 
				
			||||||
 | 
					#define ATTRCMP(a, b)		((a).mode != (b).mode || (a).fg != (b).fg || \
 | 
				
			||||||
 | 
									(a).bg != (b).bg)
 | 
				
			||||||
 | 
					#define IS_SET(flag)		((term.mode & (flag)) != 0)
 | 
				
			||||||
 | 
					#define TIMEDIFF(t1, t2)	((t1.tv_sec-t2.tv_sec)*1000 + \
 | 
				
			||||||
 | 
									(t1.tv_nsec-t2.tv_nsec)/1E6)
 | 
				
			||||||
 | 
					#define MODBIT(x, set, bit)	((set) ? ((x) |= (bit)) : ((x) &= ~(bit)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TRUECOLOR(r,g,b)	(1 << 24 | (r) << 16 | (g) << 8 | (b))
 | 
				
			||||||
 | 
					#define IS_TRUECOL(x)		(1 << 24 & (x))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum glyph_attribute {
 | 
				
			||||||
 | 
						ATTR_NULL       = 0,
 | 
				
			||||||
 | 
						ATTR_BOLD       = 1 << 0,
 | 
				
			||||||
 | 
						ATTR_FAINT      = 1 << 1,
 | 
				
			||||||
 | 
						ATTR_ITALIC     = 1 << 2,
 | 
				
			||||||
 | 
						ATTR_UNDERLINE  = 1 << 3,
 | 
				
			||||||
 | 
						ATTR_BLINK      = 1 << 4,
 | 
				
			||||||
 | 
						ATTR_REVERSE    = 1 << 5,
 | 
				
			||||||
 | 
						ATTR_INVISIBLE  = 1 << 6,
 | 
				
			||||||
 | 
						ATTR_STRUCK     = 1 << 7,
 | 
				
			||||||
 | 
						ATTR_WRAP       = 1 << 8,
 | 
				
			||||||
 | 
						ATTR_WIDE       = 1 << 9,
 | 
				
			||||||
 | 
						ATTR_WDUMMY     = 1 << 10,
 | 
				
			||||||
 | 
						ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum term_mode {
 | 
				
			||||||
 | 
						MODE_WRAP        = 1 << 0,
 | 
				
			||||||
 | 
						MODE_INSERT      = 1 << 1,
 | 
				
			||||||
 | 
						MODE_APPKEYPAD   = 1 << 2,
 | 
				
			||||||
 | 
						MODE_ALTSCREEN   = 1 << 3,
 | 
				
			||||||
 | 
						MODE_CRLF        = 1 << 4,
 | 
				
			||||||
 | 
						MODE_MOUSEBTN    = 1 << 5,
 | 
				
			||||||
 | 
						MODE_MOUSEMOTION = 1 << 6,
 | 
				
			||||||
 | 
						MODE_REVERSE     = 1 << 7,
 | 
				
			||||||
 | 
						MODE_KBDLOCK     = 1 << 8,
 | 
				
			||||||
 | 
						MODE_HIDE        = 1 << 9,
 | 
				
			||||||
 | 
						MODE_ECHO        = 1 << 10,
 | 
				
			||||||
 | 
						MODE_APPCURSOR   = 1 << 11,
 | 
				
			||||||
 | 
						MODE_MOUSESGR    = 1 << 12,
 | 
				
			||||||
 | 
						MODE_8BIT        = 1 << 13,
 | 
				
			||||||
 | 
						MODE_BLINK       = 1 << 14,
 | 
				
			||||||
 | 
						MODE_FBLINK      = 1 << 15,
 | 
				
			||||||
 | 
						MODE_FOCUS       = 1 << 16,
 | 
				
			||||||
 | 
						MODE_MOUSEX10    = 1 << 17,
 | 
				
			||||||
 | 
						MODE_MOUSEMANY   = 1 << 18,
 | 
				
			||||||
 | 
						MODE_BRCKTPASTE  = 1 << 19,
 | 
				
			||||||
 | 
						MODE_PRINT       = 1 << 20,
 | 
				
			||||||
 | 
						MODE_UTF8        = 1 << 21,
 | 
				
			||||||
 | 
						MODE_SIXEL       = 1 << 22,
 | 
				
			||||||
 | 
						MODE_MOUSE       = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
 | 
				
			||||||
 | 
						                  |MODE_MOUSEMANY,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum selection_mode {
 | 
				
			||||||
 | 
						SEL_IDLE = 0,
 | 
				
			||||||
 | 
						SEL_EMPTY = 1,
 | 
				
			||||||
 | 
						SEL_READY = 2
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum selection_type {
 | 
				
			||||||
 | 
						SEL_REGULAR = 1,
 | 
				
			||||||
 | 
						SEL_RECTANGULAR = 2
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum selection_snap {
 | 
				
			||||||
 | 
						SNAP_WORD = 1,
 | 
				
			||||||
 | 
						SNAP_LINE = 2
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum window_state {
 | 
				
			||||||
 | 
						WIN_VISIBLE = 1,
 | 
				
			||||||
 | 
						WIN_FOCUSED = 2
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef unsigned char uchar;
 | 
				
			||||||
 | 
					typedef unsigned int uint;
 | 
				
			||||||
 | 
					typedef unsigned long ulong;
 | 
				
			||||||
 | 
					typedef unsigned short ushort;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef uint_least32_t Rune;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						Rune u;           /* character code */
 | 
				
			||||||
 | 
						ushort mode;      /* attribute flags */
 | 
				
			||||||
 | 
						uint32_t fg;      /* foreground  */
 | 
				
			||||||
 | 
						uint32_t bg;      /* background  */
 | 
				
			||||||
 | 
					} Glyph;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef Glyph *Line;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						Glyph attr; /* current char attributes */
 | 
				
			||||||
 | 
						int x;
 | 
				
			||||||
 | 
						int y;
 | 
				
			||||||
 | 
						char state;
 | 
				
			||||||
 | 
					} TCursor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Internal representation of the screen */
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						int row;      /* nb row */
 | 
				
			||||||
 | 
						int col;      /* nb col */
 | 
				
			||||||
 | 
						Line *line;   /* screen */
 | 
				
			||||||
 | 
						Line *alt;    /* alternate screen */
 | 
				
			||||||
 | 
						int *dirty;  /* dirtyness of lines */
 | 
				
			||||||
 | 
						GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
 | 
				
			||||||
 | 
						TCursor c;    /* cursor */
 | 
				
			||||||
 | 
						int top;      /* top    scroll limit */
 | 
				
			||||||
 | 
						int bot;      /* bottom scroll limit */
 | 
				
			||||||
 | 
						int mode;     /* terminal mode flags */
 | 
				
			||||||
 | 
						int esc;      /* escape state flags */
 | 
				
			||||||
 | 
						char trantbl[4]; /* charset table translation */
 | 
				
			||||||
 | 
						int charset;  /* current charset */
 | 
				
			||||||
 | 
						int icharset; /* selected charset for sequence */
 | 
				
			||||||
 | 
						int numlock; /* lock numbers in keyboard */
 | 
				
			||||||
 | 
						int *tabs;
 | 
				
			||||||
 | 
					} Term;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Purely graphic info */
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						int tw, th; /* tty width and height */
 | 
				
			||||||
 | 
						int w, h; /* window width and height */
 | 
				
			||||||
 | 
						int ch; /* char height */
 | 
				
			||||||
 | 
						int cw; /* char width  */
 | 
				
			||||||
 | 
						char state; /* focus, redraw, visible */
 | 
				
			||||||
 | 
						int cursor; /* cursor style */
 | 
				
			||||||
 | 
					} TermWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						uint b;
 | 
				
			||||||
 | 
						uint mask;
 | 
				
			||||||
 | 
						char *s;
 | 
				
			||||||
 | 
					} MouseShortcut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						int mode;
 | 
				
			||||||
 | 
						int type;
 | 
				
			||||||
 | 
						int snap;
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Selection variables:
 | 
				
			||||||
 | 
						 * nb – normalized coordinates of the beginning of the selection
 | 
				
			||||||
 | 
						 * ne – normalized coordinates of the end of the selection
 | 
				
			||||||
 | 
						 * ob – original coordinates of the beginning of the selection
 | 
				
			||||||
 | 
						 * oe – original coordinates of the end of the selection
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						struct {
 | 
				
			||||||
 | 
							int x, y;
 | 
				
			||||||
 | 
						} nb, ne, ob, oe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						char *primary, *clipboard;
 | 
				
			||||||
 | 
						int alt;
 | 
				
			||||||
 | 
						struct timespec tclick1;
 | 
				
			||||||
 | 
						struct timespec tclick2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Atom xtarget;
 | 
				
			||||||
 | 
					} Selection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef union {
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						uint ui;
 | 
				
			||||||
 | 
						float f;
 | 
				
			||||||
 | 
						const void *v;
 | 
				
			||||||
 | 
					} Arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						uint mod;
 | 
				
			||||||
 | 
						KeySym keysym;
 | 
				
			||||||
 | 
						void (*func)(const Arg *);
 | 
				
			||||||
 | 
						const Arg arg;
 | 
				
			||||||
 | 
					} Shortcut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void die(const char *, ...);
 | 
				
			||||||
 | 
					void redraw(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int tattrset(int);
 | 
				
			||||||
 | 
					void tnew(int, int);
 | 
				
			||||||
 | 
					void tsetdirt(int, int);
 | 
				
			||||||
 | 
					void tsetdirtattr(int);
 | 
				
			||||||
 | 
					int match(uint, uint);
 | 
				
			||||||
 | 
					void ttynew(void);
 | 
				
			||||||
 | 
					size_t ttyread(void);
 | 
				
			||||||
 | 
					void ttyresize(void);
 | 
				
			||||||
 | 
					void ttysend(char *, size_t);
 | 
				
			||||||
 | 
					void ttywrite(const char *, size_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void resettitle(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *kmap(KeySym, uint);
 | 
				
			||||||
 | 
					void cresize(int, int);
 | 
				
			||||||
 | 
					void selclear(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void selinit(void);
 | 
				
			||||||
 | 
					void selnormalize(void);
 | 
				
			||||||
 | 
					int selected(int, int);
 | 
				
			||||||
 | 
					char *getsel(void);
 | 
				
			||||||
 | 
					int x2col(int);
 | 
				
			||||||
 | 
					int y2row(int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t utf8decode(char *, Rune *, size_t);
 | 
				
			||||||
 | 
					size_t utf8encode(Rune, char *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void *xmalloc(size_t);
 | 
				
			||||||
 | 
					char *xstrdup(char *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void usage(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Globals */
 | 
				
			||||||
 | 
					extern TermWindow win;
 | 
				
			||||||
 | 
					extern Term term;
 | 
				
			||||||
 | 
					extern Selection sel;
 | 
				
			||||||
 | 
					extern int cmdfd;
 | 
				
			||||||
 | 
					extern pid_t pid;
 | 
				
			||||||
 | 
					extern char **opt_cmd;
 | 
				
			||||||
 | 
					extern char *opt_class;
 | 
				
			||||||
 | 
					extern char *opt_embed;
 | 
				
			||||||
 | 
					extern char *opt_font;
 | 
				
			||||||
 | 
					extern char *opt_io;
 | 
				
			||||||
 | 
					extern char *opt_line;
 | 
				
			||||||
 | 
					extern char *opt_name;
 | 
				
			||||||
 | 
					extern char *opt_title;
 | 
				
			||||||
 | 
					extern int oldbutton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern char *usedfont;
 | 
				
			||||||
 | 
					extern double usedfontsize;
 | 
				
			||||||
 | 
					extern double defaultfontsize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* config.h globals */
 | 
				
			||||||
 | 
					extern char font[];
 | 
				
			||||||
 | 
					extern int borderpx;
 | 
				
			||||||
 | 
					extern float cwscale;
 | 
				
			||||||
 | 
					extern float chscale;
 | 
				
			||||||
 | 
					extern unsigned int doubleclicktimeout;
 | 
				
			||||||
 | 
					extern unsigned int tripleclicktimeout;
 | 
				
			||||||
 | 
					extern int allowaltscreen;
 | 
				
			||||||
 | 
					extern unsigned int xfps;
 | 
				
			||||||
 | 
					extern unsigned int actionfps;
 | 
				
			||||||
 | 
					extern unsigned int cursorthickness;
 | 
				
			||||||
 | 
					extern unsigned int blinktimeout;
 | 
				
			||||||
 | 
					extern char termname[];
 | 
				
			||||||
 | 
					extern const char *colorname[];
 | 
				
			||||||
 | 
					extern size_t colornamelen;
 | 
				
			||||||
 | 
					extern unsigned int defaultfg;
 | 
				
			||||||
 | 
					extern unsigned int defaultbg;
 | 
				
			||||||
 | 
					extern unsigned int defaultcs;
 | 
				
			||||||
 | 
					extern unsigned int defaultrcs;
 | 
				
			||||||
 | 
					extern unsigned int cursorshape;
 | 
				
			||||||
 | 
					extern unsigned int cols;
 | 
				
			||||||
 | 
					extern unsigned int rows;
 | 
				
			||||||
 | 
					extern unsigned int mouseshape;
 | 
				
			||||||
 | 
					extern unsigned int mousefg;
 | 
				
			||||||
 | 
					extern unsigned int mousebg;
 | 
				
			||||||
 | 
					extern unsigned int defaultattr;
 | 
				
			||||||
 | 
					extern MouseShortcut mshortcuts[];
 | 
				
			||||||
 | 
					extern size_t mshortcutslen;
 | 
				
			||||||
 | 
					extern Shortcut shortcuts[];
 | 
				
			||||||
 | 
					extern size_t shortcutslen;
 | 
				
			||||||
 | 
					extern uint forceselmod;
 | 
				
			||||||
 | 
					extern uint selmasks[];
 | 
				
			||||||
 | 
					extern size_t selmaskslen;
 | 
				
			||||||
 | 
					extern char ascii_printable[];
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					/* See LICENSE for license details. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* X modifiers */
 | 
				
			||||||
 | 
					#define XK_ANY_MOD    UINT_MAX
 | 
				
			||||||
 | 
					#define XK_NO_MOD     0
 | 
				
			||||||
 | 
					#define XK_SWITCH_MOD (1<<13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef XftGlyphFontSpec GlyphFontSpec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void draw(void);
 | 
				
			||||||
 | 
					void drawregion(int, int, int, int);
 | 
				
			||||||
 | 
					void run(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xbell(int);
 | 
				
			||||||
 | 
					void xclipcopy(void);
 | 
				
			||||||
 | 
					void xclippaste(void);
 | 
				
			||||||
 | 
					void xhints(void);
 | 
				
			||||||
 | 
					void xinit(void);
 | 
				
			||||||
 | 
					void xloadcols(void);
 | 
				
			||||||
 | 
					int xsetcolorname(int, const char *);
 | 
				
			||||||
 | 
					void xloadfonts(char *, double);
 | 
				
			||||||
 | 
					void xsetenv(void);
 | 
				
			||||||
 | 
					void xsettitle(char *);
 | 
				
			||||||
 | 
					void xsetpointermotion(int);
 | 
				
			||||||
 | 
					void xseturgency(int);
 | 
				
			||||||
 | 
					void xunloadfonts(void);
 | 
				
			||||||
 | 
					void xresize(int, int);
 | 
				
			||||||
 | 
					void xselpaste(void);
 | 
				
			||||||
 | 
					unsigned long xwinid(void);
 | 
				
			||||||
		Loading…
	
		Reference in New Issue