Remove ellipsis and newlines from long lines

Fix for issue https://github.com/fish-shell/fish-shell/issues/300
This commit is contained in:
Siteshwar Vashisht 2012-09-18 00:42:11 +05:30
parent 86a978d9ee
commit 16f2ffc29d
7 changed files with 6 additions and 91 deletions

View file

@ -88,8 +88,6 @@ struct termios shell_modes;
static pthread_t main_thread_id = 0;
static bool thread_assertions_configured_for_testing = false;
wchar_t ellipsis_char;
char *profile=0;
const wchar_t *program_name;
@ -504,12 +502,6 @@ wcstring wsetlocale(int category, const wchar_t *locale)
char * res = setlocale(category,lang);
free( lang );
/*
Use ellipsis if on known unicode system, otherwise use $
*/
char *ctype = setlocale( LC_CTYPE, NULL );
ellipsis_char = (strstr( ctype, ".UTF")||strstr( ctype, ".utf") )?L'\x2026':L'$';
if( !res )
return wcstring();
else
@ -761,7 +753,6 @@ void write_screen( const wcstring &msg, wcstring &buff )
int line_width = 0;
int tok_width = 0;
int screen_width = common_get_width();
if( screen_width )
{
start = pos = msg.c_str();

View file

@ -89,12 +89,6 @@ void exit_without_destructors(int code) __attribute__ ((noreturn));
*/
extern struct termios shell_modes;
/**
The character to use where the text has been truncated. Is an
ellipsis on unicode system and a $ on other systems.
*/
extern wchar_t ellipsis_char;
/**
The verbosity level of fish. If a call to debug has a severity
level higher than \c debug_level, it will not be printed.
@ -570,9 +564,7 @@ void error_reset();
/**
This function behaves exactly like a wide character equivalent of
the C function setlocale, except that it will also try to detect if
the user is using a Unicode character set, and if so, use the
unicode ellipsis character as ellipsis, instead of '$'.
the C function setlocale.
*/
wcstring wsetlocale( int category, const wchar_t *locale );

View file

@ -377,8 +377,6 @@ static int print_max( const wchar_t *str, int max, int has_more )
break;
if( ( written + wcwidth(str[i]) == max) && (has_more || str[i+1]) )
{
writech( ellipsis_char );
written += wcwidth(ellipsis_char );
break;
}

View file

@ -489,43 +489,6 @@ void writestr( const wchar_t *str )
delete[] buffer;
}
void writestr_ellipsis( const wchar_t *str, int max_width )
{
int written=0;
int tot;
CHECK( str, );
tot = my_wcswidth(str);
if( tot <= max_width )
{
writestr( str );
return;
}
while( *str != 0 )
{
int w = fish_wcwidth( *str );
if( written+w+fish_wcwidth( ellipsis_char )>max_width )
{
break;
}
written+=w;
writech( *(str++) );
}
written += fish_wcwidth( ellipsis_char );
writech( ellipsis_char );
while( written < max_width )
{
written++;
writestr( L" " );
}
}
int write_escaped_str( const wchar_t *str, int max_len )
{
@ -546,8 +509,6 @@ int write_escaped_str( const wchar_t *str, int max_len )
writech( out[i] );
written += fish_wcwidth( out[i] );
}
writech( ellipsis_char );
written += fish_wcwidth( ellipsis_char );
for( i=written; i<max_len; i++ )
{

View file

@ -116,12 +116,6 @@ int writech( wint_t ch );
*/
void writestr( const wchar_t *str );
/**
Write a wide character string to FD 1. If the string is wider than
the specified maximum, truncate and ellipsize it.
*/
void writestr_ellipsis( const wchar_t *str, int max_width );
/**
Escape and write a string to fd 1
*/

View file

@ -660,7 +660,6 @@ static void exec_prompt()
for( i = 0; i < prompt_list.size(); i++ )
{
if (i > 0) data->prompt_buff += L'\n';
data->prompt_buff += prompt_list.at(i);
}
}
@ -1522,7 +1521,6 @@ static bool handle_completions( const std::vector<completion_t> &comp )
else
{
// append just the end of the string
prefix = wcstring(&ellipsis_char, 1);
prefix.append(data->command_line, prefix_start + len - PREFIX_MAX_LEN, wcstring::npos);
}

View file

@ -445,29 +445,22 @@ static void s_desired_append_char( screen_t *s,
{
int screen_width = common_get_width();
int cw = fish_wcwidth(b);
int ew = fish_wcwidth( ellipsis_char );
s->desired.create_line(line_no);
/*
Check if we are at the end of the line. If so, print an
ellipsis character and continue on the next line.
Check if we are at the end of the line. If so, continue on the next line.
*/
if( s->desired.cursor.x + cw + ew > screen_width )
if( (s->desired.cursor.x + cw) > screen_width )
{
s->desired.line(line_no).append(ellipsis_char, HIGHLIGHT_COMMENT);
line_no = (int)s->desired.line_count();
s->desired.add_line();
s->desired.cursor.y++;
s->desired.cursor.x=0;
if (prompt_width > ew) {
for( size_t i=0; i < (prompt_width-ew); i++ )
{
s_desired_append_char( s, L' ', 0, indent, prompt_width );
}
for( size_t i=0; i < prompt_width; i++ )
{
s_desired_append_char( s, L' ', 0, indent, prompt_width );
}
s_desired_append_char( s, ellipsis_char, HIGHLIGHT_COMMENT, indent, prompt_width );
}
line_t &line = s->desired.line(line_no);
@ -871,7 +864,6 @@ void s_write( screen_t *s,
assert(screen_width - prompt_width >= 1);
max_line_width = screen_width - prompt_width - 1;
truncated_autosuggestion_line = wcstring(commandline, 0, last_char_that_fits);
truncated_autosuggestion_line.push_back(ellipsis_char);
commandline = truncated_autosuggestion_line.c_str();
}
for( size_t i=0; i<prompt_width; i++ )
@ -906,17 +898,6 @@ void s_write( screen_t *s,
s_desired_append_char( s, commandline[i], col, indent[i], prompt_width );
if( i== cursor_pos && s->desired.cursor.y != cursor_arr.y && commandline[i] != L'\n' )
{
/*
Ugh. We are placed exactly at the wrapping point of a
wrapped line, move cursor to the line below so the
cursor won't be on the ellipsis which looks
unintuitive.
*/
cursor_arr.x = s->desired.cursor.x - fish_wcwidth(commandline[i]);
cursor_arr.y = s->desired.cursor.y;
}
}
if( i == cursor_pos )
{