From fa68c2619fe844395287c33c9109f6decb322410 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 9 May 2014 14:37:23 -0700 Subject: [PATCH] Use parm_left_cursor and parm_right_cursor for bulk cursor motions. Fixes #1448 --- output.cpp | 24 +++++++++++++++++------- output.h | 29 ++--------------------------- screen.cpp | 20 +++++++++++++++++--- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/output.cpp b/output.cpp index 7f90df4bd..149d9d99a 100644 --- a/output.cpp +++ b/output.cpp @@ -418,13 +418,6 @@ int writeb(tputs_arg_t b) return 0; } -int writembs_internal(char *str) -{ - CHECK(str, 1); - - return tputs(str,1,&writeb)==ERR?1:0; -} - int writech(wint_t ch) { mbstate_t state; @@ -725,3 +718,20 @@ const wchar_t *output_get_term() { return current_term.empty() ? L"" : current_term.c_str(); } + +void writembs_check(char *mbs, const char *mbs_name, const char *file, long line) +{ + if (mbs != NULL) + { + tputs(mbs, 1, &writeb); + } + else + { + debug( 0, _(L"Tried to use terminfo string %s on line %ld of %s, which is undefined in terminal of type \"%ls\". Please report this error to %s"), + mbs_name, + line, + file, + output_get_term(), + PACKAGE_BUGREPORT); + } +} diff --git a/output.h b/output.h index 2d05c3d05..400129421 100644 --- a/output.h +++ b/output.h @@ -78,33 +78,8 @@ void set_color(rgb_color_t c, rgb_color_t c2); /** Write specified multibyte string */ -#define writembs( mbs ) \ - { \ - char *tmp = mbs; \ - if( tmp ) \ - { \ - writembs_internal( tmp ); \ - } \ - else \ - { \ - debug( 0, \ - _(L"Tried to use terminfo string %s on line %d of %s, which is undefined in terminal of type \"%ls\". Please report this error to %s"), \ - #mbs, \ - __LINE__, \ - __FILE__, \ - output_get_term(), \ - PACKAGE_BUGREPORT); \ - } \ - } - - -/** - Write a char * narrow string to FD 1, needed for the terminfo - strings. This is usually just a wrapper aound tputs, using writeb - as the sending function. But a weird bug on PPC Linux means that on - this platform, write is instead used directly. -*/ -int writembs_internal(char *str); +void writembs_check(char *mbs, const char *mbs_name, const char *file, long line); +#define writembs(mbs) writembs_check((mbs), #mbs, __FILE__, __LINE__) /** Write a wide character using the output method specified using output_set_writer(). diff --git a/screen.cpp b/screen.cpp index 2fd7cc96d..96fe0f2a5 100644 --- a/screen.cpp +++ b/screen.cpp @@ -638,18 +638,32 @@ static void s_move(screen_t *s, data_buffer_t *b, int new_x, int new_y) x_steps = 0; } + char *multi_str = NULL; if (x_steps < 0) { str = cursor_left; + multi_str = parm_left_cursor; } else { str = cursor_right; + multi_str = parm_right_cursor; } - - for (i=0; i strlen(multi_str)); + if (use_multi) { - writembs(str); + char *multi_param = tparm(multi_str, abs(x_steps)); + writembs(multi_param); + } + else + { + for (i=0; i