2005-10-17 13:24:12 +00:00
|
|
|
/** \file output.h
|
|
|
|
Generic output functions
|
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Constants for various character classifications. Each character of a command string can be classified as one of the following types.
|
|
|
|
*/
|
2005-10-04 15:11:39 +00:00
|
|
|
|
|
|
|
#ifndef FISH_OUTPUT_H
|
|
|
|
#define FISH_OUTPUT_H
|
|
|
|
|
|
|
|
#include <wchar.h>
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
2010-09-18 01:51:16 +00:00
|
|
|
Constants for various colors as used by the set_color function.
|
2005-09-20 13:26:39 +00:00
|
|
|
*/
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
FISH_COLOR_BLACK,
|
|
|
|
FISH_COLOR_RED,
|
|
|
|
FISH_COLOR_GREEN,
|
|
|
|
FISH_COLOR_YELLOW,
|
|
|
|
FISH_COLOR_BLUE,
|
|
|
|
FISH_COLOR_MAGENTA,
|
|
|
|
FISH_COLOR_CYAN,
|
|
|
|
FISH_COLOR_WHITE,
|
|
|
|
/** The default fg color of the terminal */
|
2006-05-27 13:39:30 +00:00
|
|
|
FISH_COLOR_NORMAL,
|
|
|
|
FISH_COLOR_IGNORE,
|
|
|
|
FISH_COLOR_RESET
|
2005-09-20 13:26:39 +00:00
|
|
|
}
|
|
|
|
;
|
2006-05-27 13:39:30 +00:00
|
|
|
|
2006-06-20 00:50:10 +00:00
|
|
|
/**
|
|
|
|
The value to send to set_color to tell it to use a bold font
|
|
|
|
*/
|
2006-05-27 13:39:30 +00:00
|
|
|
#define FISH_COLOR_BOLD 0x80
|
2006-06-20 00:50:10 +00:00
|
|
|
/**
|
|
|
|
The value to send to set_color to tell it to underline the text
|
|
|
|
*/
|
2006-06-14 13:22:40 +00:00
|
|
|
#define FISH_COLOR_UNDERLINE 0x100
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the fg and bg color. May be called as often as you like, since
|
|
|
|
if the new color is the same as the previous, nothing will be
|
|
|
|
written. Negative values for set_color will also be ignored. Since
|
|
|
|
the terminfo string this function emits can potentially cause the
|
|
|
|
screen to flicker, the function takes care to write as little as
|
|
|
|
possible.
|
|
|
|
|
|
|
|
Possible values for color are any form the FISH_COLOR_* enum,
|
|
|
|
FISH_COLOR_IGNORE and FISH_COLOR_RESET. FISH_COLOR_IGNORE will
|
|
|
|
leave the color unchanged, and FISH_COLOR_RESET will perform an
|
|
|
|
exit_attribute_mode, even if set_color thinks it is already in
|
|
|
|
FISH_COLOR_NORMAL mode.
|
|
|
|
|
|
|
|
In order to set the color to normal, three terminfo strings may
|
|
|
|
have to be written.
|
|
|
|
|
|
|
|
- First a string to set the color, such as set_a_foreground. This
|
|
|
|
is needed because otherwise the previous strings colors might be
|
|
|
|
removed as well.
|
|
|
|
|
|
|
|
- After that we write the exit_attribute_mode string to reset all
|
|
|
|
color attributes.
|
|
|
|
|
|
|
|
- Lastly we may need to write set_a_background or set_a_foreground
|
|
|
|
to set the other half of the color pair to what it should be.
|
|
|
|
|
|
|
|
\param c Foreground color.
|
|
|
|
\param c2 Background color.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
void set_color( int c, int c2 );
|
|
|
|
|
2008-01-13 16:47:47 +00:00
|
|
|
/**
|
|
|
|
Write specified multibyte string
|
|
|
|
*/
|
2007-09-09 14:04:36 +00:00
|
|
|
#define writembs( mbs ) \
|
|
|
|
{ \
|
|
|
|
char *tmp = mbs; \
|
|
|
|
if( tmp ) \
|
|
|
|
{ \
|
|
|
|
writembs_internal( tmp ); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
debug( 0, \
|
|
|
|
_(L"Tried to use terminfo string %s on line %d of %s, which is undefined in terminal of type \"%ls\". Please report this error to %s"), \
|
|
|
|
#mbs, \
|
|
|
|
__LINE__, \
|
|
|
|
__FILE__, \
|
|
|
|
output_get_term(), \
|
|
|
|
PACKAGE_BUGREPORT); \
|
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Write a char * narrow string to FD 1, needed for the terminfo
|
2006-02-16 13:40:25 +00:00
|
|
|
strings. This is usually just a wrapper aound tputs, using writeb
|
|
|
|
as the sending function. But a weird bug on PPC Linux means that on
|
|
|
|
this platform, write is instead used directly.
|
2005-09-20 13:26:39 +00:00
|
|
|
*/
|
2007-09-09 14:04:36 +00:00
|
|
|
int writembs_internal( char *str );
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2005-10-17 13:24:12 +00:00
|
|
|
/**
|
2006-10-01 15:59:18 +00:00
|
|
|
Write a wide character using the output method specified using output_set_writer().
|
2005-10-17 13:24:12 +00:00
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
int writech( wint_t ch );
|
|
|
|
|
2005-10-17 13:24:12 +00:00
|
|
|
/**
|
|
|
|
Write a wide character string to FD 1.
|
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
void writestr( const wchar_t *str );
|
|
|
|
|
2005-10-17 13:24:12 +00:00
|
|
|
/**
|
|
|
|
Write a wide character string to FD 1. If the string is wider than
|
|
|
|
the specified maximum, truncate and ellipsize it.
|
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
void writestr_ellipsis( const wchar_t *str, int max_width );
|
|
|
|
|
2005-10-17 13:24:12 +00:00
|
|
|
/**
|
|
|
|
Escape and write a string to fd 1
|
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
int write_escaped_str( const wchar_t *str, int max_len );
|
|
|
|
|
2005-10-17 13:24:12 +00:00
|
|
|
/**
|
|
|
|
Return the internal color code representing the specified color
|
|
|
|
*/
|
2005-09-20 13:26:39 +00:00
|
|
|
int output_color_code( const wchar_t *val );
|
|
|
|
|
2006-02-16 13:40:25 +00:00
|
|
|
/**
|
|
|
|
This is for writing process notification messages. Has to write to
|
|
|
|
stdout, so clr_eol and such functions will work correctly. Not an
|
|
|
|
issue since this function is only used in interactive mode anyway.
|
|
|
|
*/
|
|
|
|
int writeb( tputs_arg_t b );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set the function used for writing in move_cursor, writespace and
|
2006-02-20 13:11:46 +00:00
|
|
|
set_color and all other output functions in this library. By
|
|
|
|
default, the write call is used to give completely unbuffered
|
|
|
|
output to stdout.
|
2006-02-16 13:40:25 +00:00
|
|
|
*/
|
2006-02-16 14:21:00 +00:00
|
|
|
void output_set_writer( int (*writer)(char) );
|
2006-02-16 13:40:25 +00:00
|
|
|
|
2006-10-01 16:02:58 +00:00
|
|
|
//typedef int (*func_ptr_t)(char);
|
2008-01-13 16:47:47 +00:00
|
|
|
/**
|
|
|
|
Return the current output writer
|
|
|
|
*/
|
2006-10-01 16:02:58 +00:00
|
|
|
int (*output_get_writer())(char) ;
|
|
|
|
|
2008-01-13 16:47:47 +00:00
|
|
|
/**
|
|
|
|
Set the terminal name
|
|
|
|
*/
|
2007-09-09 14:04:36 +00:00
|
|
|
void output_set_term( wchar_t *term );
|
2008-01-13 16:47:47 +00:00
|
|
|
/**
|
|
|
|
Return the terminal name
|
|
|
|
*/
|
2007-09-09 14:04:36 +00:00
|
|
|
wchar_t *output_get_term();
|
|
|
|
|
2005-10-04 15:11:39 +00:00
|
|
|
#endif
|