aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar liljencrantz <liljencrantz@gmail.com>2007-09-22 00:44:26 +1000
committerGravatar liljencrantz <liljencrantz@gmail.com>2007-09-22 00:44:26 +1000
commit3692074e7ec8b624f2bd75e50ae3eed1c54aa784 (patch)
tree572338d3f835bed8770bcbad20ce4f2d9fd49bef
parent954c99a5ad1616104af3fa2e4729849f3fe8f7e6 (diff)
Make R_NULL not repaint and document the fact that this means some keybindings need to manually tell fish to repaint
darcs-hash:20070921144426-75c98-7db4351e14733e2c18e44515e8ed78b1f1faea80.gz
-rw-r--r--doc_src/index.hdr.in6
-rw-r--r--input.c21
-rw-r--r--reader.c17
3 files changed, 17 insertions, 27 deletions
diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in
index 07e1bdc1..6e504114 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.
-<pre>"\M-p": if commandline -j|grep -v 'less *$' &gt;/dev/null; commandline -aj "|less;"; end</pre>
+<pre>"\M-p": if commandline -j|grep -v 'less *$' &gt;/dev/null; commandline -aj "|less;"; end;</pre>
+
+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 f7a1d1d3..8b913e01 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<repeat_count; i++ )
dump_functions();
repeat_count = 1;
- return R_NULL;
+ return R_REPAINT;
}
case R_SELF_INSERT:
@@ -1563,13 +1563,13 @@ static wint_t input_exec_binding( mapping *m, const wchar_t *seq )
if( repeat > 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 4261d041..f138334f 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;
}