2005-09-20 21:26:39 +08:00
|
|
|
/** \file reader.h
|
|
|
|
|
|
|
|
Prototypes for functions for reading data from stdin and passing
|
|
|
|
to the parser. If stdin is a keyboard, it supplies a killring,
|
|
|
|
history, syntax highlighting, tab-completion and various other
|
|
|
|
features.
|
|
|
|
*/
|
|
|
|
|
2005-10-04 23:11:39 +08:00
|
|
|
#ifndef FISH_READER_H
|
|
|
|
#define FISH_READER_H
|
|
|
|
|
|
|
|
#include <wchar.h>
|
|
|
|
|
|
|
|
#include "util.h"
|
|
|
|
|
2005-09-20 21:26:39 +08:00
|
|
|
/**
|
|
|
|
Read commands from fd 0 until encountering EOF
|
|
|
|
*/
|
|
|
|
int reader_read();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Tell the shell that it should exit after the currently running command finishes.
|
|
|
|
*/
|
|
|
|
void reader_exit( int do_exit );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Check that the reader is in a sane state
|
|
|
|
*/
|
|
|
|
void reader_sanity_check();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Initialize the reader
|
|
|
|
*/
|
|
|
|
void reader_init();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Destroy and free resources used by the reader
|
|
|
|
*/
|
|
|
|
void reader_destroy();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the filename of the file currently read
|
|
|
|
*/
|
|
|
|
wchar_t *reader_current_filename();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Push a new filename on the stack of read files
|
|
|
|
|
|
|
|
\param fn The fileanme to push
|
|
|
|
*/
|
|
|
|
void reader_push_current_filename( wchar_t *fn );
|
|
|
|
/**
|
|
|
|
Pop the current filename from the stack of read files
|
|
|
|
*/
|
|
|
|
wchar_t *reader_pop_current_filename();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the width of the terminal window, so that not all
|
|
|
|
functions that use these values continually have to keep track of
|
|
|
|
it.
|
|
|
|
*/
|
|
|
|
int reader_get_width();
|
|
|
|
/**
|
|
|
|
Returns the height of the terminal window, so that not all
|
|
|
|
functions that use these values continually have to keep track of
|
|
|
|
it.
|
|
|
|
*/
|
|
|
|
int reader_get_height();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Write the title to the titlebar. This function is called just
|
|
|
|
before a new application starts executing and just after it
|
|
|
|
finishes.
|
|
|
|
*/
|
|
|
|
void reader_write_title();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Repaint the entire commandline. This means reset and clear the
|
|
|
|
commandline, write the prompt, perform syntax highlighting, write
|
|
|
|
the commandline and move the cursor.
|
|
|
|
*/
|
|
|
|
void repaint();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Run the specified command with the correct terminal modes, and
|
|
|
|
while taking care to perform job notification, set the title, etc.
|
|
|
|
*/
|
|
|
|
void reader_run_command( wchar_t *buff );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the string of character currently entered into the command
|
|
|
|
buffer, or 0 if interactive mode is uninitialized.
|
|
|
|
*/
|
|
|
|
wchar_t *reader_get_buffer();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set the string of characters in the command buffer, as well as the cursor position.
|
|
|
|
|
|
|
|
\param b the new buffer value
|
|
|
|
\param p the cursor position. If \c p is less than zero, the cursor is placed on the last character.
|
|
|
|
*/
|
|
|
|
void reader_set_buffer( wchar_t *b, int p );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the current cursor position in the command line. If interactive
|
|
|
|
mode is uninitialized, return -1.
|
|
|
|
*/
|
|
|
|
int reader_get_cursor_pos();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return the value of the interupted flag, which is set by the sigint
|
|
|
|
handler, and clear it if it was set.
|
|
|
|
*/
|
|
|
|
int reader_interupted();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Read one line of input. Before calling this function, reader_push()
|
|
|
|
must have been called in order to set up a valid reader
|
|
|
|
environment.
|
|
|
|
*/
|
|
|
|
wchar_t *reader_readline();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Push a new reader environment.
|
|
|
|
*/
|
|
|
|
void reader_push( wchar_t *name );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return to previous reader environment
|
|
|
|
*/
|
|
|
|
void reader_pop();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Specify function to use for finding possible tab completions. The function must take these arguments:
|
|
|
|
|
|
|
|
- The command to be completed as a null terminated array of wchar_t
|
|
|
|
- An array_list_t in which completions will be inserted.
|
|
|
|
*/
|
|
|
|
void reader_set_complete_function( void (*f)( const wchar_t *, array_list_t * ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Specify function for syntax highlighting. The function must take these arguments:
|
|
|
|
|
|
|
|
- The command to be highlighted as a null terminated array of wchar_t
|
|
|
|
- The color code of each character as an array of ints
|
|
|
|
- The cursor position
|
|
|
|
- An array_list_t used for storing error messages
|
|
|
|
*/
|
|
|
|
void reader_set_highlight_function( void (*f)( wchar_t *, int *, int, array_list_t * ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Specify function for testing if the command buffer contains syntax
|
|
|
|
errors that must be corrected before returning.
|
|
|
|
*/
|
|
|
|
void reader_set_test_function( int (*f)( wchar_t * ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Specify string of shell commands to be run in order to generate the
|
|
|
|
prompt.
|
|
|
|
*/
|
|
|
|
void reader_set_prompt( wchar_t *prompt );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns true if the shell is exiting, 0 otherwise.
|
|
|
|
*/
|
|
|
|
int exit_status();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Find the beginning and the end of the current subshell
|
|
|
|
*/
|
|
|
|
void reader_current_subshell_extent( wchar_t **a, wchar_t **b );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Find the beginning and the end of the job under the cursor
|
|
|
|
*/
|
|
|
|
void reader_current_job_extent( wchar_t **a, wchar_t **b );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Find the beginning and the end of the process under the cursor
|
|
|
|
*/
|
|
|
|
void reader_current_process_extent( wchar_t **a, wchar_t **b );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Find the beginning and the end of the token under the curor and the token before the cursor
|
|
|
|
*/
|
|
|
|
|
|
|
|
void reader_current_token_extent( wchar_t **a, wchar_t **b, wchar_t **pa, wchar_t **pb );
|
|
|
|
|
|
|
|
/**
|
|
|
|
Replace the current token with the specified string
|
|
|
|
*/
|
|
|
|
void reader_replace_current_token( wchar_t *new_token );
|
|
|
|
|
2005-10-06 06:37:08 +08:00
|
|
|
void reader_handle_winch( int signal );
|
|
|
|
void reader_handle_int( int signal );
|
|
|
|
|
|
|
|
|
2005-10-04 23:11:39 +08:00
|
|
|
#endif
|