mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 13:39:02 +00:00
Detect and handle terminals size changes
darcs-hash:20061004214502-ac50b-aaf5b76a6281c0ba8757e794b0a802793ce92916.gz
This commit is contained in:
parent
0ea668b260
commit
d1078f8582
5 changed files with 24 additions and 13 deletions
6
input.c
6
input.c
|
@ -123,7 +123,7 @@ static const wchar_t *name_arr[] =
|
||||||
L"kill-word",
|
L"kill-word",
|
||||||
L"backward-kill-word",
|
L"backward-kill-word",
|
||||||
L"dump-functions",
|
L"dump-functions",
|
||||||
L"clear-screen",
|
L"winch",
|
||||||
L"exit",
|
L"exit",
|
||||||
L"history-token-search-backward",
|
L"history-token-search-backward",
|
||||||
L"history-token-search-forward",
|
L"history-token-search-forward",
|
||||||
|
@ -200,7 +200,7 @@ static const wchar_t code_arr[] =
|
||||||
R_KILL_WORD,
|
R_KILL_WORD,
|
||||||
R_BACKWARD_KILL_WORD,
|
R_BACKWARD_KILL_WORD,
|
||||||
R_DUMP_FUNCTIONS,
|
R_DUMP_FUNCTIONS,
|
||||||
R_CLEAR_SCREEN,
|
R_WINCH,
|
||||||
R_EXIT,
|
R_EXIT,
|
||||||
R_HISTORY_TOKEN_SEARCH_BACKWARD,
|
R_HISTORY_TOKEN_SEARCH_BACKWARD,
|
||||||
R_HISTORY_TOKEN_SEARCH_FORWARD,
|
R_HISTORY_TOKEN_SEARCH_FORWARD,
|
||||||
|
@ -1398,7 +1398,7 @@ static int interrupt_handler()
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return R_WINCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
int input_init()
|
int input_init()
|
||||||
|
|
2
input.h
2
input.h
|
@ -39,7 +39,7 @@ enum
|
||||||
R_KILL_WORD,
|
R_KILL_WORD,
|
||||||
R_BACKWARD_KILL_WORD,
|
R_BACKWARD_KILL_WORD,
|
||||||
R_DUMP_FUNCTIONS,
|
R_DUMP_FUNCTIONS,
|
||||||
R_CLEAR_SCREEN,
|
R_WINCH,
|
||||||
R_EXIT,
|
R_EXIT,
|
||||||
R_HISTORY_TOKEN_SEARCH_BACKWARD,
|
R_HISTORY_TOKEN_SEARCH_BACKWARD,
|
||||||
R_HISTORY_TOKEN_SEARCH_FORWARD,
|
R_HISTORY_TOKEN_SEARCH_FORWARD,
|
||||||
|
|
15
reader.c
15
reader.c
|
@ -2171,6 +2171,12 @@ wchar_t *reader_readline()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case R_WINCH:
|
||||||
|
{
|
||||||
|
repaint();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case R_EOF:
|
case R_EOF:
|
||||||
{
|
{
|
||||||
exit_forced = 1;
|
exit_forced = 1;
|
||||||
|
@ -2521,15 +2527,6 @@ wchar_t *reader_readline()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case R_CLEAR_SCREEN:
|
|
||||||
{
|
|
||||||
if( clear_screen )
|
|
||||||
writembs( clear_screen );
|
|
||||||
s_reset( &data->screen );
|
|
||||||
repaint();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case R_BEGINNING_OF_HISTORY:
|
case R_BEGINNING_OF_HISTORY:
|
||||||
{
|
{
|
||||||
history_first();
|
history_first();
|
||||||
|
|
8
screen.c
8
screen.c
|
@ -490,10 +490,18 @@ static void s_update( screen_t *scr, wchar_t *prompt )
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
int prompt_width = calc_prompt_width( prompt );
|
int prompt_width = calc_prompt_width( prompt );
|
||||||
int current_width=0;
|
int current_width=0;
|
||||||
|
int screen_width = common_get_width();
|
||||||
|
|
||||||
buffer_t output;
|
buffer_t output;
|
||||||
b_init( &output );
|
b_init( &output );
|
||||||
|
|
||||||
|
if( scr->actual_width != screen_width )
|
||||||
|
{
|
||||||
|
s_move( scr, &output, 0, 0 );
|
||||||
|
scr->actual_width = screen_width;
|
||||||
|
s_reset( scr );
|
||||||
|
}
|
||||||
|
|
||||||
if( wcscmp( prompt, (wchar_t *)scr->actual_prompt.buff ) )
|
if( wcscmp( prompt, (wchar_t *)scr->actual_prompt.buff ) )
|
||||||
{
|
{
|
||||||
s_move( scr, &output, 0, 0 );
|
s_move( scr, &output, 0, 0 );
|
||||||
|
|
6
screen.h
6
screen.h
|
@ -34,6 +34,12 @@ typedef struct
|
||||||
the screen.
|
the screen.
|
||||||
*/
|
*/
|
||||||
string_buffer_t actual_prompt;
|
string_buffer_t actual_prompt;
|
||||||
|
|
||||||
|
/*
|
||||||
|
The actual width of the screen at the time of the last screen
|
||||||
|
write.
|
||||||
|
*/
|
||||||
|
int actual_width;
|
||||||
}
|
}
|
||||||
screen_t;
|
screen_t;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue