X-Git-Url: https://git.danieliu.xyz/?p=st.git;a=blobdiff_plain;f=st.h;h=3d351b69ea3746bf80de58a1ce1a2b2a4dc30ba5;hp=5d4441173fcb1a526feedb5641e1d0f111f740d1;hb=7d59dd715c0b5b219dbb8ac050f2fc07b604e30b;hpb=a8314643b1aeaa2187dad71dc5748aaac1760c1b diff --git a/st.h b/st.h index 5d44411..3d351b6 100644 --- a/st.h +++ b/st.h @@ -1,7 +1,7 @@ /* See LICENSE for license details. */ -/* Arbitrary sizes */ -#define UTF_SIZ 4 +#include +#include /* macros */ #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -9,10 +9,10 @@ #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 != (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))) @@ -36,34 +36,6 @@ enum glyph_attribute { 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, @@ -97,165 +69,57 @@ typedef struct { 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 */ - 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; + const char *s; } Arg; -typedef struct { - uint mod; - KeySym keysym; - void (*func)(const Arg *); - const Arg arg; -} Shortcut; - 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 *); int tattrset(int); void tnew(int, int); void tresize(int, int); -void tsetdirt(int, int); void tsetdirtattr(int); -int match(uint, uint); -void ttynew(void); +void ttyhangup(void); +int ttynew(char *, char *, char *, char **); size_t ttyread(void); -void ttyresize(void); -void ttysend(char *, size_t); -void ttywrite(const char *, size_t); +void ttyresize(int, int); +void ttywrite(const char *, size_t, int); void resettitle(void); -char *kmap(KeySym, uint); void selclear(void); - void selinit(void); -void selnormalize(void); +void selstart(int, int, int); +void selextend(int, int, int, int); int selected(int, int); char *getsel(void); -size_t utf8decode(char *, Rune *, size_t); size_t utf8encode(Rune, char *); void *xmalloc(size_t); void *xrealloc(void *, size_t); char *xstrdup(char *); -/* 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; - /* config.h globals */ -extern char font[]; -extern int borderpx; -extern float cwscale; -extern float chscale; -extern unsigned int doubleclicktimeout; -extern unsigned int tripleclicktimeout; +extern char *utmp; +extern char *scroll; +extern char *stty_args; +extern char *vtiden; +extern wchar_t *worddelimiters; extern int allowaltscreen; -extern unsigned int xfps; -extern unsigned int actionfps; -extern unsigned int cursorthickness; -extern int bellvolume; -extern unsigned int blinktimeout; -extern char termname[]; -extern const char *colorname[]; -extern size_t colornamelen; +extern int allowwindowops; +extern char *termname; +extern unsigned int tabspaces; 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[];