mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 21:33:09 +00:00
Minor bug correction in new cursor movement code.
darcs-hash:20070921142301-75c98-7fc9bbdf1591e0fc24a562e69bf483845a160df5.gz
This commit is contained in:
parent
2375578310
commit
624878d35f
2 changed files with 23 additions and 37 deletions
|
@ -208,7 +208,7 @@ int parse_util_get_offset( wchar_t *buff, int line, int line_offset )
|
||||||
|
|
||||||
if( off2 < 0 )
|
if( off2 < 0 )
|
||||||
{
|
{
|
||||||
off2 = wcslen( buff );
|
off2 = wcslen( buff )+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( line_offset2 < 0 )
|
if( line_offset2 < 0 )
|
||||||
|
|
56
reader.c
56
reader.c
|
@ -2884,61 +2884,47 @@ wchar_t *reader_readline()
|
||||||
case R_UP_LINE:
|
case R_UP_LINE:
|
||||||
case R_DOWN_LINE:
|
case R_DOWN_LINE:
|
||||||
{
|
{
|
||||||
int line = parse_util_get_line_from_offset( data->buff,
|
int line_old = parse_util_get_line_from_offset( data->buff,
|
||||||
data->buff_pos );
|
data->buff_pos );
|
||||||
int new_line;
|
int line_new;
|
||||||
|
|
||||||
if( c == R_UP_LINE )
|
if( c == R_UP_LINE )
|
||||||
new_line = line-1;
|
line_new = line_old-1;
|
||||||
else
|
else
|
||||||
new_line = line+1;
|
line_new = line_old+1;
|
||||||
|
|
||||||
int line_count = parse_util_lineno( data->buff, data->buff_len )-1;
|
int line_count = parse_util_lineno( data->buff, data->buff_len )-1;
|
||||||
|
|
||||||
if( new_line >= 0 && new_line <= line_count)
|
if( line_new >= 0 && line_new <= line_count)
|
||||||
{
|
{
|
||||||
int base_pos;
|
int base_pos_new;
|
||||||
|
int base_pos_old;
|
||||||
|
|
||||||
int indent_old;
|
int indent_old;
|
||||||
int indent_new;
|
int indent_new;
|
||||||
int old_line_offset;
|
int line_offset_old;
|
||||||
int new_total_offset;
|
int total_offset_new;
|
||||||
|
|
||||||
// debug( 0, L"Move up one line to %d", new_line );
|
// debug( 0, L"Move up one line to %d", line_new );
|
||||||
|
|
||||||
base_pos = parse_util_get_offset_from_line( data->buff,
|
base_pos_new = parse_util_get_offset_from_line( data->buff,
|
||||||
new_line );
|
line_new );
|
||||||
/* debug( 0, L"Old cursor offset is %d, new base offset is %d",
|
/* debug( 0, L"Old cursor offset is %d, new base offset is %d",
|
||||||
data->buff_pos,
|
data->buff_pos,
|
||||||
base_pos );
|
base_pos_new );
|
||||||
*/
|
*/
|
||||||
|
base_pos_old = parse_util_get_offset_from_line( data->buff,
|
||||||
|
line_old );
|
||||||
|
|
||||||
if( data->buff_pos ==(data->buff_len) )
|
|
||||||
{
|
|
||||||
if( data->buff_pos == 0 )
|
|
||||||
{
|
|
||||||
indent_old = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
indent_old = data->indent[data->buff_pos-1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( data->buff[data->buff_pos] == L'\n' )
|
|
||||||
indent_old = data->indent[data->buff_pos-1];
|
|
||||||
else
|
|
||||||
indent_old = data->indent[data->buff_pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
indent_new = data->indent[base_pos];
|
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 );
|
// debug( 0, L"Old indent %d, new indent %d", indent_old, indent_new );
|
||||||
|
|
||||||
old_line_offset = data->buff_pos - parse_util_get_offset_from_line( data->buff,
|
line_offset_old = data->buff_pos - parse_util_get_offset_from_line( data->buff,
|
||||||
line );
|
line_old );
|
||||||
new_total_offset = parse_util_get_offset( data->buff, new_line, old_line_offset - 4*(indent_new-indent_old));
|
total_offset_new = parse_util_get_offset( data->buff, line_new, line_offset_old - 4*(indent_new-indent_old));
|
||||||
data->buff_pos = new_total_offset;
|
data->buff_pos = total_offset_new;
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue