Mercurial > vim
comparison src/libvterm/include/vterm.h @ 11761:7846efd291d7 v8.0.0763
patch 8.0.0763: libvterm can be improved
commit https://github.com/vim/vim/commit/9cc5f75932b10f611d8b3f444d025053f9dbcab1
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 23 22:07:27 2017 +0200
patch 8.0.0763: libvterm can be improved
Problem: Libvterm can be improved.
Solution: Various small improvements, more comments.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 23 Jul 2017 22:15:05 +0200 |
parents | b8299e742f41 |
children | c76b672df584 |
comparison
equal
deleted
inserted
replaced
11760:0899182defdb | 11761:7846efd291d7 |
---|---|
158 VTerm *vterm_new_with_allocator(int rows, int cols, VTermAllocatorFunctions *funcs, void *allocdata); | 158 VTerm *vterm_new_with_allocator(int rows, int cols, VTermAllocatorFunctions *funcs, void *allocdata); |
159 | 159 |
160 /* Free and cleanup a terminal and all its data. */ | 160 /* Free and cleanup a terminal and all its data. */ |
161 void vterm_free(VTerm* vt); | 161 void vterm_free(VTerm* vt); |
162 | 162 |
163 /* Get the current size of the terminal and store in "rowsp" and "colsp". */ | |
163 void vterm_get_size(const VTerm *vt, int *rowsp, int *colsp); | 164 void vterm_get_size(const VTerm *vt, int *rowsp, int *colsp); |
165 | |
164 void vterm_set_size(VTerm *vt, int rows, int cols); | 166 void vterm_set_size(VTerm *vt, int rows, int cols); |
165 | 167 |
166 int vterm_get_utf8(const VTerm *vt); | 168 int vterm_get_utf8(const VTerm *vt); |
167 void vterm_set_utf8(VTerm *vt, int is_utf8); | 169 void vterm_set_utf8(VTerm *vt, int is_utf8); |
168 | 170 |
193 * 1 4 and 5 are final. | 195 * 1 4 and 5 are final. |
194 * 2 and 3 are non-final and will have this bit set | 196 * 2 and 3 are non-final and will have this bit set |
195 * | 197 * |
196 * Don't confuse this with the final byte of the CSI escape; 'a' in this case. | 198 * Don't confuse this with the final byte of the CSI escape; 'a' in this case. |
197 */ | 199 */ |
198 #define CSI_ARG_FLAG_MORE (1<<31) | 200 #define CSI_ARG_FLAG_MORE (1<<30) |
199 #define CSI_ARG_MASK (~(1<<31)) | 201 #define CSI_ARG_MASK (~(1<<30)) |
200 | 202 |
201 #define CSI_ARG_HAS_MORE(a) ((a) & CSI_ARG_FLAG_MORE) | 203 #define CSI_ARG_HAS_MORE(a) ((a) & CSI_ARG_FLAG_MORE) |
202 #define CSI_ARG(a) ((a) & CSI_ARG_MASK) | 204 #define CSI_ARG(a) ((a) & CSI_ARG_MASK) |
203 | 205 |
204 /* Can't use -1 to indicate a missing argument; use this instead */ | 206 /* Can't use -1 to indicate a missing argument; use this instead */ |
205 #define CSI_ARG_MISSING ((1UL<<31)-1) | 207 #define CSI_ARG_MISSING ((1<<30)-1) |
206 | 208 |
207 #define CSI_ARG_IS_MISSING(a) (CSI_ARG(a) == CSI_ARG_MISSING) | 209 #define CSI_ARG_IS_MISSING(a) (CSI_ARG(a) == CSI_ARG_MISSING) |
208 #define CSI_ARG_OR(a,def) (CSI_ARG(a) == CSI_ARG_MISSING ? (def) : CSI_ARG(a)) | 210 #define CSI_ARG_OR(a,def) (CSI_ARG(a) == CSI_ARG_MISSING ? (def) : CSI_ARG(a)) |
209 #define CSI_ARG_COUNT(a) (CSI_ARG(a) == CSI_ARG_MISSING || CSI_ARG(a) == 0 ? 1 : CSI_ARG(a)) | 211 #define CSI_ARG_COUNT(a) (CSI_ARG(a) == CSI_ARG_MISSING || CSI_ARG(a) == 0 ? 1 : CSI_ARG(a)) |
210 | 212 |
246 | 248 |
247 /* Only invokes control, csi, osc, dcs */ | 249 /* Only invokes control, csi, osc, dcs */ |
248 void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermParserCallbacks *fallbacks, void *user); | 250 void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermParserCallbacks *fallbacks, void *user); |
249 void *vterm_state_get_unrecognised_fbdata(VTermState *state); | 251 void *vterm_state_get_unrecognised_fbdata(VTermState *state); |
250 | 252 |
253 /* Initialize the state. */ | |
251 void vterm_state_reset(VTermState *state, int hard); | 254 void vterm_state_reset(VTermState *state, int hard); |
255 | |
252 void vterm_state_get_cursorpos(const VTermState *state, VTermPos *cursorpos); | 256 void vterm_state_get_cursorpos(const VTermState *state, VTermPos *cursorpos); |
253 void vterm_state_get_default_colors(const VTermState *state, VTermColor *default_fg, VTermColor *default_bg); | 257 void vterm_state_get_default_colors(const VTermState *state, VTermColor *default_fg, VTermColor *default_bg); |
254 void vterm_state_get_palette_color(const VTermState *state, int index, VTermColor *col); | 258 void vterm_state_get_palette_color(const VTermState *state, int index, VTermColor *col); |
255 void vterm_state_set_default_colors(VTermState *state, const VTermColor *default_fg, const VTermColor *default_bg); | 259 void vterm_state_set_default_colors(VTermState *state, const VTermColor *default_fg, const VTermColor *default_bg); |
256 void vterm_state_set_palette_color(VTermState *state, int index, const VTermColor *col); | 260 void vterm_state_set_palette_color(VTermState *state, int index, const VTermColor *col); |
293 int (*resize)(int rows, int cols, void *user); | 297 int (*resize)(int rows, int cols, void *user); |
294 int (*sb_pushline)(int cols, const VTermScreenCell *cells, void *user); | 298 int (*sb_pushline)(int cols, const VTermScreenCell *cells, void *user); |
295 int (*sb_popline)(int cols, VTermScreenCell *cells, void *user); | 299 int (*sb_popline)(int cols, VTermScreenCell *cells, void *user); |
296 } VTermScreenCallbacks; | 300 } VTermScreenCallbacks; |
297 | 301 |
302 /* Return the screen of the vterm. */ | |
298 VTermScreen *vterm_obtain_screen(VTerm *vt); | 303 VTermScreen *vterm_obtain_screen(VTerm *vt); |
299 | 304 |
300 /* | 305 /* |
301 * Install screen callbacks. These are invoked when the screen contents is | 306 * Install screen callbacks. These are invoked when the screen contents is |
302 * changed. "user" is passed into to the callback. | 307 * changed. "user" is passed into to the callback. |
315 VTERM_DAMAGE_ROW, /* entire rows */ | 320 VTERM_DAMAGE_ROW, /* entire rows */ |
316 VTERM_DAMAGE_SCREEN, /* entire screen */ | 321 VTERM_DAMAGE_SCREEN, /* entire screen */ |
317 VTERM_DAMAGE_SCROLL /* entire screen + scrollrect */ | 322 VTERM_DAMAGE_SCROLL /* entire screen + scrollrect */ |
318 } VTermDamageSize; | 323 } VTermDamageSize; |
319 | 324 |
325 /* Invoke the relevant callbacks to update the screen. */ | |
320 void vterm_screen_flush_damage(VTermScreen *screen); | 326 void vterm_screen_flush_damage(VTermScreen *screen); |
327 | |
321 void vterm_screen_set_damage_merge(VTermScreen *screen, VTermDamageSize size); | 328 void vterm_screen_set_damage_merge(VTermScreen *screen, VTermDamageSize size); |
322 | 329 |
330 /* | |
331 * Reset the screen. Also invokes vterm_state_reset(). | |
332 * Must be called before the terminal can be used. | |
333 */ | |
323 void vterm_screen_reset(VTermScreen *screen, int hard); | 334 void vterm_screen_reset(VTermScreen *screen, int hard); |
324 | 335 |
325 /* Neither of these functions NUL-terminate the buffer */ | 336 /* Neither of these functions NUL-terminate the buffer */ |
326 size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect); | 337 size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect); |
327 size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect); | 338 size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect); |