diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in index 07e1bdc17..6e504114e 100644 --- a/doc_src/index.hdr.in +++ b/doc_src/index.hdr.in @@ -1091,7 +1091,11 @@ You can also bind a pice of shellscript to a key using the same syntax. For example, the Alt-p functionality described above is implemented using the following keybinding. -
"\M-p": if commandline -j|grep -v 'less *$' >/dev/null; commandline -aj "|less;"; end
+
"\M-p": if commandline -j|grep -v 'less *$' >/dev/null; commandline -aj "|less;"; end;
+ +If such a script produces output, the script needs to finish by +calling 'commandline -f repaint' in order to tell fish that a repaint +is in order. \subsection killring Copy and paste (Kill Ring) diff --git a/input.c b/input.c index f7a1d1d35..8b913e01c 100644 --- a/input.c +++ b/input.c @@ -1539,7 +1539,7 @@ static wint_t input_exec_binding( mapping *m, const wchar_t *seq ) for( i=0; i 0 && repeat <= 9 ) repeat_count *= repeat; - return R_NULL; + return R_REPAINT; } case R_VI_DELETE_TO: { first_command = R_VI_DELETE_TO; - return R_NULL; + return R_REPAINT; } default: @@ -1610,19 +1610,16 @@ static wint_t input_exec_binding( mapping *m, const wchar_t *seq ) is sent to the parser for evaluation. */ - /* - First clear the commandline. Do not issue a linebreak, since - many shortcut commands do not procuce output. - */ - write( 1, "\r", 1 ); - tputs(clr_eol,1,&writeb); - eval( m->command, 0, TOP ); /* We still need to return something to the caller, R_NULL - tells the reader that no key press needs to be handled, but - it might be a good idea to redraw. + tells the reader that no key press needs to be handled, + and no repaint is needed. + + Bindings that produce output should emit a R_REPAINT + function by calling 'commandline -f repaint' to tell + fish that a repaint is in order. */ return R_NULL; diff --git a/reader.c b/reader.c index 4261d041f..f138334fd 100644 --- a/reader.c +++ b/reader.c @@ -2447,10 +2447,6 @@ wchar_t *reader_readline() case R_NULL: { -// exec_prompt(); - write( 1, "\r", 1 ); - s_reset( &data->screen ); - repaint(); break; } @@ -2887,7 +2883,7 @@ wchar_t *reader_readline() int line_old = parse_util_get_line_from_offset( data->buff, data->buff_pos ); int line_new; - + if( c == R_UP_LINE ) line_new = line_old-1; else @@ -2905,21 +2901,15 @@ wchar_t *reader_readline() int line_offset_old; int total_offset_new; -// debug( 0, L"Move up one line to %d", line_new ); - base_pos_new = parse_util_get_offset_from_line( data->buff, line_new ); -/* debug( 0, L"Old cursor offset is %d, new base offset is %d", - data->buff_pos, - base_pos_new ); -*/ + base_pos_old = parse_util_get_offset_from_line( data->buff, line_old ); indent_old = data->indent[base_pos_old]; indent_new = data->indent[base_pos_new]; - // debug( 0, L"Old indent %d, new indent %d", indent_old, indent_new ); line_offset_old = data->buff_pos - parse_util_get_offset_from_line( data->buff, line_old ); @@ -2927,8 +2917,7 @@ wchar_t *reader_readline() data->buff_pos = total_offset_new; repaint(); } - - + break; }