My build of the simple terminal from suckless.org.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

131 lignes
2.9 KiB

  1. /* See LICENSE for license details. */
  2. #include <stdint.h>
  3. #include <sys/types.h>
  4. /* macros */
  5. #define MIN(a, b) ((a) < (b) ? (a) : (b))
  6. #define MAX(a, b) ((a) < (b) ? (b) : (a))
  7. #define LEN(a) (sizeof(a) / sizeof(a)[0])
  8. #define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
  9. #define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
  10. #define DEFAULT(a, b) (a) = (a) ? (a) : (b)
  11. #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
  12. #define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \
  13. (a).bg != (b).bg)
  14. #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \
  15. (t1.tv_nsec-t2.tv_nsec)/1E6)
  16. #define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(bit)))
  17. #define TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b))
  18. #define IS_TRUECOL(x) (1 << 24 & (x))
  19. enum glyph_attribute {
  20. ATTR_NULL = 0,
  21. ATTR_BOLD = 1 << 0,
  22. ATTR_FAINT = 1 << 1,
  23. ATTR_ITALIC = 1 << 2,
  24. ATTR_UNDERLINE = 1 << 3,
  25. ATTR_BLINK = 1 << 4,
  26. ATTR_REVERSE = 1 << 5,
  27. ATTR_INVISIBLE = 1 << 6,
  28. ATTR_STRUCK = 1 << 7,
  29. ATTR_WRAP = 1 << 8,
  30. ATTR_WIDE = 1 << 9,
  31. ATTR_WDUMMY = 1 << 10,
  32. ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
  33. };
  34. enum selection_mode {
  35. SEL_IDLE = 0,
  36. SEL_EMPTY = 1,
  37. SEL_READY = 2
  38. };
  39. enum selection_type {
  40. SEL_REGULAR = 1,
  41. SEL_RECTANGULAR = 2
  42. };
  43. enum selection_snap {
  44. SNAP_WORD = 1,
  45. SNAP_LINE = 2
  46. };
  47. typedef unsigned char uchar;
  48. typedef unsigned int uint;
  49. typedef unsigned long ulong;
  50. typedef unsigned short ushort;
  51. typedef uint_least32_t Rune;
  52. #define Glyph Glyph_
  53. typedef struct {
  54. Rune u; /* character code */
  55. ushort mode; /* attribute flags */
  56. uint32_t fg; /* foreground */
  57. uint32_t bg; /* background */
  58. } Glyph;
  59. typedef Glyph *Line;
  60. typedef union {
  61. int i;
  62. uint ui;
  63. float f;
  64. const void *v;
  65. const char *s;
  66. } Arg;
  67. void die(const char *, ...);
  68. void redraw(void);
  69. void tfulldirt(void);
  70. void draw(void);
  71. void kscrolldown(const Arg *);
  72. void kscrollup(const Arg *);
  73. void printscreen(const Arg *);
  74. void printsel(const Arg *);
  75. void sendbreak(const Arg *);
  76. void toggleprinter(const Arg *);
  77. void copyurl(const Arg *);
  78. int tattrset(int);
  79. void tnew(int, int);
  80. void tresize(int, int);
  81. void tsetdirtattr(int);
  82. void ttyhangup(void);
  83. int ttynew(char *, char *, char *, char **);
  84. size_t ttyread(void);
  85. void ttyresize(int, int);
  86. void ttywrite(const char *, size_t, int);
  87. void resettitle(void);
  88. void selclear(void);
  89. void selinit(void);
  90. void selstart(int, int, int);
  91. void selextend(int, int, int, int);
  92. int selected(int, int);
  93. char *getsel(void);
  94. size_t utf8encode(Rune, char *);
  95. void *xmalloc(size_t);
  96. void *xrealloc(void *, size_t);
  97. char *xstrdup(char *);
  98. /* config.h globals */
  99. extern char *utmp;
  100. extern char *scroll;
  101. extern char *stty_args;
  102. extern char *vtiden;
  103. extern wchar_t *worddelimiters;
  104. extern int allowaltscreen;
  105. extern int allowwindowops;
  106. extern char *termname;
  107. extern unsigned int tabspaces;
  108. extern unsigned int defaultfg;
  109. extern unsigned int defaultbg;
  110. extern float alpha, alphaUnfocused;