X-Git-Url: https://git.armaanb.net/?p=st.git;a=blobdiff_plain;f=st.h;h=62181c4c750d429dd9012c447f70add55876cf56;hp=be39ef412870047ffd79989b1443d1affe0ad1e4;hb=HEAD;hpb=d58dd3b8bc42ed31232e4145696d7dacb117a31c diff --git a/st.h b/st.h index be39ef4..62181c4 100644 --- a/st.h +++ b/st.h @@ -1,181 +1,128 @@ -/* See LICENSE for licence details. */ - -#define _XOPEN_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* special keys */ -#define KEYDELETE "\033[3~" -#define KEYHOME "\033[1~" -#define KEYEND "\033[4~" -#define KEYPREV "\033[5~" -#define KEYNEXT "\033[6~" - -#define TNAME "st" -#define SHELL "/bin/bash" -#define TAB 8 - -#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*" -#define BORDER 3 -#define LINESPACE 1 /* additional pixel between each line */ - -/* Default colors */ -#define DefaultFG 7 -#define DefaultBG 0 -#define DefaultCS 1 -#define BellCol DefaultFG /* visual bell color */ - -static char* colorname[] = { - "black", - "red", - "green", - "yellow", - "blue", - "magenta", - "cyan", - "white", -}; +/* See LICENSE for license details. */ +#include +#include -/* Arbitrary sizes */ -#define ESCSIZ 256 -#define ESCARG 16 +/* 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 DEFAULT(a, b) (a) = (a) ? (a) : (b) +#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) +#define ATTRCMP(a, b) (((a).mode & (~ATTR_WRAP) & (~ATTR_LIGA)) != ((b).mode & (~ATTR_WRAP) & (~ATTR_LIGA)) || \ + (a).fg != (b).fg || \ + (a).bg != (b).bg) +#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_LIGA = 1 << 11, + ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT, +}; -#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 DEFAULT(a, b) (a) = (a) ? (a) : (b) -#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) -#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) +enum selection_mode { + SEL_IDLE = 0, + SEL_EMPTY = 1, + SEL_READY = 2 +}; +enum selection_type { + SEL_REGULAR = 1, + SEL_RECTANGULAR = 2 +}; -enum { ATnone=0 , ATreverse=1 , ATunderline=2, ATbold=4 }; /* Attribute */ -enum { CSup, CSdown, CSright, CSleft, CShide, CSdraw, CSwrap, CSsave, CSload }; /* Cursor */ -enum { CRset=1 , CRupdate=2 }; /* Character state */ -enum { TMwrap=1 , TMinsert=2 }; /* Terminal mode */ -enum { SCupdate, SCredraw }; /* screen draw mode */ +enum selection_snap { + SNAP_WORD = 1, + SNAP_LINE = 2 +}; -#ifdef TRUECOLOR -#error Truecolor not implemented yet -typedef int Color; -#else -typedef char Color; -#endif +typedef unsigned char uchar; +typedef unsigned int uint; +typedef unsigned long ulong; +typedef unsigned short ushort; +typedef uint_least32_t Rune; +#define Glyph Glyph_ typedef struct { - char c; /* character code */ - char mode; /* attribute flags */ - Color fg; /* foreground */ - Color bg; /* background */ - char state; /* state flag */ + Rune u; /* character code */ + ushort mode; /* attribute flags */ + uint32_t fg; /* foreground */ + uint32_t bg; /* background */ } Glyph; -typedef Glyph* Line; +typedef Glyph *Line; -typedef struct { - Glyph attr; /* current char attributes */ - char hidden; - int x; - int y; -} TCursor; +typedef union { + int i; + uint ui; + float f; + const void *v; + const char *s; +} Arg; -/* Escape sequence structs */ -typedef struct { - char buf[ESCSIZ+1]; /* raw string */ - int len; /* raw string length */ - /* ESC
 [[ []  [;]] ] */
-	char pre;           
-	char priv;
-	int arg[ESCARG+1];
-	int narg;           /* nb of args */
-	char mode;
-} Escseq;
-
-/* Internal representation of the screen */
-typedef struct {
-	int row;    /* nb row */  
-	int col;    /* nb col */
-	Line* line; /* screen */
-	TCursor c;  /* cursor */
-	int top;    /* top    scroll limit */
-	int bot;    /* bottom scroll limit */
-	int mode;   /* terminal mode */
-} Term;
-
-/* Purely graphic info */
-typedef struct {
-	Display* dis;
-	Window win;
-	int scr;
-	int w;  /* window width  */
-	int h;  /* window height */
-	int ch; /* char height */
-	int cw; /* char width  */
-} XWindow; 
-
-/* Drawing Context */
-typedef struct {
-	unsigned long col[LEN(colorname)];
-	XFontStruct* font;
-	GC gc;
-} DC;
-
-
-void die(const char *errstr, ...);
-void draw(int);
-void execsh(void);
-void kpress(XKeyEvent *);
-void resize(XEvent *);
-void run(void);
-
-int escaddc(char);
-int escfinal(char);
-void escdump(void);
-void eschandle(void);
-void escparse(void);
-void escreset(void);
-
-void tclearregion(int, int, int, int);
-void tcpos(int);
-void tcursor(int);
-void tdeletechar(int);
-void tdeleteline(int);
-void tdump(void);
-void tinsertblank(int);
-void tinsertblankline(int);
-void tmoveto(int, int);
+void die(const char *, ...);
+void redraw(void);
+void draw(void);
+
+void printscreen(const Arg *);
+void printsel(const Arg *);
+void sendbreak(const Arg *);
+void toggleprinter(const Arg *);
+void copyurl(const Arg *);
+
+int tattrset(int);
 void tnew(int, int);
-void tnewline(void);
-void tputc(char);
-void tputs(char*, int);
 void tresize(int, int);
-void tscroll(void);
-void tsetattr(int*, int);
-void tsetchar(char);
-void tsetscroll(int, int);
-
-void ttynew(void);
-void ttyread(void);
+void tsetdirtattr(int);
+void ttyhangup(void);
+int ttynew(const char *, char *, const char *, char **);
+size_t ttyread(void);
 void ttyresize(int, int);
-void ttywrite(char *, size_t);
-
-unsigned long xgetcol(const char *);
-void xclear(int, int, int, int);
-void xcursor(int);
-void xdrawc(int, int, Glyph);
-void xinit(void);
-void xscroll(void);
+void ttywrite(const char *, size_t, int);
+
+void resettitle(void);
+
+void selclear(void);
+void selinit(void);
+void selstart(int, int, int);
+void selextend(int, int, int, int);
+int selected(int, int);
+char *getsel(void);
+
+size_t utf8encode(Rune, char *);
+
+void *xmalloc(size_t);
+void *xrealloc(void *, size_t);
+char *xstrdup(const char *);
+
+/* config.h globals */
+extern char *utmp;
+extern char *scroll;
+extern char *stty_args;
+extern char *vtiden;
+extern wchar_t *worddelimiters;
+extern int allowaltscreen;
+extern int allowwindowops;
+extern char *termname;
+extern unsigned int tabspaces;
+extern unsigned int defaultfg;
+extern unsigned int defaultbg;