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);