mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 12:53:13 +00:00
Merge branch 'master' into parser_cleanup
This commit is contained in:
commit
b187125b63
63 changed files with 182 additions and 104 deletions
2
Doxyfile
2
Doxyfile
|
@ -422,7 +422,7 @@ INPUT =
|
|||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
|
||||
# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
|
||||
|
||||
FILE_PATTERNS = *.h *.cpp
|
||||
FILE_PATTERNS = *.h *.c
|
||||
|
||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
|
||||
# should be searched for input files as well. Possible values are YES and NO.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin.cpp
|
||||
/** \file builtin.c
|
||||
Functions for executing builtin functions.
|
||||
|
||||
How to add a new builtin function:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin_commandline.cpp Functions defining the commandline builtin
|
||||
/** \file builtin_commandline.c Functions defining the commandline builtin
|
||||
|
||||
Functions used for implementing the commandline builtin.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin_complete.cpp Functions defining the complete builtin
|
||||
/** \file builtin_complete.c Functions defining the complete builtin
|
||||
|
||||
Functions used for implementing the complete builtin.
|
||||
|
||||
|
@ -279,8 +279,8 @@ const wchar_t *builtin_complete_get_temporary_buffer()
|
|||
|
||||
/**
|
||||
The complete builtin. Used for specifying programmable
|
||||
tab-completions. Calls the functions in complete.cpp for any heavy
|
||||
lifting. Defined in builtin_complete.cpp
|
||||
tab-completions. Calls the functions in complete.c for any heavy
|
||||
lifting. Defined in builtin_complete.c
|
||||
*/
|
||||
static int builtin_complete(parser_t &parser, wchar_t **argv)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin_jobs.cpp
|
||||
/** \file builtin_jobs.c
|
||||
Functions for executing the jobs builtin.
|
||||
*/
|
||||
#include "config.h"
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file builtin_printf.cpp
|
||||
*/
|
||||
|
||||
/* printf - format and print data
|
||||
Copyright (C) 1990-2007 Free Software Foundation, Inc.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin_set.cpp Functions defining the set builtin
|
||||
/** \file builtin_set.c Functions defining the set builtin
|
||||
|
||||
Functions used for implementing the set builtin.
|
||||
|
||||
|
|
|
@ -646,11 +646,13 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err)
|
|||
expression *result = parser.parse_expression(0, (unsigned int)args.size());
|
||||
|
||||
/* Handle errors */
|
||||
bool errored = false;
|
||||
for (size_t i = 0; i < parser.errors.size(); i++)
|
||||
{
|
||||
err.append(L"test: ");
|
||||
err.append(parser.errors.at(i));
|
||||
err.push_back(L'\n');
|
||||
errored = true;
|
||||
// For now we only show the first error
|
||||
break;
|
||||
}
|
||||
|
@ -665,6 +667,7 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err)
|
|||
{
|
||||
append_format(err, L"test: unexpected argument at index %lu: '%ls'\n", (unsigned long)result->range.end, args.at(result->range.end).c_str());
|
||||
}
|
||||
errored = true;
|
||||
|
||||
delete result;
|
||||
result = NULL;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file builtin_ulimit.cpp Functions defining the ulimit builtin
|
||||
/** \file builtin_ulimit.c Functions defining the ulimit builtin
|
||||
|
||||
Functions used for implementing the ulimit builtin.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file common.cpp
|
||||
/** \file common.c
|
||||
|
||||
Various functions, mostly string utilities, that are used by most
|
||||
parts of fish.
|
||||
|
@ -866,7 +866,11 @@ void write_screen(const wcstring &msg, wcstring &buff)
|
|||
/*
|
||||
If token is zero character long, we don't do anything
|
||||
*/
|
||||
if (overflow)
|
||||
if (pos == start)
|
||||
{
|
||||
start = pos = pos+1;
|
||||
}
|
||||
else if (overflow)
|
||||
{
|
||||
/*
|
||||
In case of overflow, we print a newline, except if we already are at position 0
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file complete.cpp Functions related to tab-completion.
|
||||
/** \file complete.c Functions related to tab-completion.
|
||||
|
||||
These functions are used for storing and retrieving tab-completion data, as well as for performing tab-completion.
|
||||
*/
|
||||
|
|
2
env.cpp
2
env.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file env.cpp
|
||||
/** \file env.c
|
||||
Functions for setting and getting environment variables.
|
||||
*/
|
||||
#include "config.h"
|
||||
|
|
|
@ -1,9 +1,3 @@
|
|||
/** \file env_universal.cpp
|
||||
|
||||
Various functions, mostly string utilities, that are used by most
|
||||
parts of fish.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/** \file env_universal_common.cpp
|
||||
/**
|
||||
\file env_universal_common.c
|
||||
|
||||
The utility library for universal variables. Used both by the
|
||||
client library and by the daemon.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file event.cpp
|
||||
/** \file event.c
|
||||
|
||||
Functions for handling event triggers
|
||||
|
||||
|
|
2
exec.cpp
2
exec.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file exec.cpp
|
||||
/** \file exec.c
|
||||
Functions for executing a program.
|
||||
|
||||
Some of the code in this file is based on code from the Glibc
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/**\file expand.cpp
|
||||
/**\file expand.c
|
||||
|
||||
String expansion functions. These functions perform several kinds of
|
||||
parameter expansion.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
/** \file fallback.cpp
|
||||
|
||||
/**
|
||||
This file only contains fallback implementations of functions which
|
||||
have been found to be missing or broken by the configuration
|
||||
scripts.
|
||||
|
|
10
fish.cpp
10
fish.cpp
|
@ -1,6 +1,3 @@
|
|||
/** \file fish.cpp
|
||||
The main loop of fish.
|
||||
*/
|
||||
/*
|
||||
Copyright (C) 2005-2008 Axel Liljencrantz
|
||||
|
||||
|
@ -18,6 +15,11 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
|
||||
/** \file fish.c
|
||||
The main loop of <tt>fish</tt>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
||||
|
@ -211,6 +213,8 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0)
|
|||
paths.sysconf = L"" SYSCONFDIR "/fish";
|
||||
paths.doc = L"" DOCDIR;
|
||||
paths.bin = L"" BINDIR;
|
||||
|
||||
done = true;
|
||||
}
|
||||
|
||||
return paths;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file fish_indent.cpp
|
||||
The fish_indent proegram.
|
||||
*/
|
||||
/*
|
||||
Copyright (C) 2005-2008 Axel Liljencrantz
|
||||
|
||||
|
@ -18,6 +15,11 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
|
||||
/** \file fish_indent.cpp
|
||||
The fish_indent proegram.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
/** \file fish_pager.cpp
|
||||
*/
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
@ -443,6 +439,9 @@ static void completion_print_item(const wchar_t *prefix, comp_t *c, int width, b
|
|||
writech(L' ');
|
||||
}
|
||||
set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg);
|
||||
written += print_max(L"(", 1, 0);
|
||||
written += print_max(c->desc.c_str(), desc_width, 0);
|
||||
written += print_max(L")", 1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file fish_tests.cpp
|
||||
/** \file fish_tests.c
|
||||
Various bug and feature tests. Compiled and run by make test.
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file fishd.cpp
|
||||
/** \file fishd.c
|
||||
|
||||
The universal variable server. fishd is automatically started by fish
|
||||
if a fishd server isn't already running. fishd reads any saved
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file function.cpp
|
||||
/** \file function.c
|
||||
|
||||
Prototypes for functions for storing and retrieving function
|
||||
information. These functions also take care of autoloading
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file highlight.cpp
|
||||
/** \file highlight.c
|
||||
Functions for syntax highlighting
|
||||
*/
|
||||
#include "config.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file input.cpp
|
||||
/** \file input.c
|
||||
|
||||
Functions for reading a character of input from stdin.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file input_common.cpp
|
||||
/** \file input_common.c
|
||||
|
||||
Implementation file for the low level input library
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file intern.cpp
|
||||
/** \file intern.c
|
||||
|
||||
Library for pooling common strings
|
||||
|
||||
|
|
2
io.cpp
2
io.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file io.cpp
|
||||
/** \file io.c
|
||||
|
||||
Utilities for io redirection.
|
||||
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file iothread.cpp
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "iothread.h"
|
||||
#include "common.h"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
/** \file key_reader.cpp
|
||||
|
||||
/*
|
||||
A small utility to print the resulting key codes from pressing a
|
||||
key. Servers the same function as hitting ^V in bash, but I prefer
|
||||
the way key_reader works.
|
||||
|
|
2
kill.cpp
2
kill.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file kill.cpp
|
||||
/** \file kill.c
|
||||
The killring.
|
||||
|
||||
Works like the killring in emacs and readline. The killring is cut
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file mimedb.cpp
|
||||
/** \file mimedb.c
|
||||
|
||||
mimedb is a program for checking the mimetype, description and
|
||||
default action associated with a file or mimetype. It uses the
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file output.cpp
|
||||
/** \file output.c
|
||||
Generic output functions
|
||||
*/
|
||||
|
||||
|
|
14
pager.cpp
14
pager.cpp
|
@ -1,7 +1,3 @@
|
|||
/** \file pager.cpp
|
||||
*/
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "pager.h"
|
||||
|
@ -149,6 +145,9 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s
|
|||
{
|
||||
written += print_max(L" ", packed_color, 1, false, &line_data);
|
||||
}
|
||||
written += print_max(L"(", packed_color, 1, false, &line_data);
|
||||
written += print_max(c->desc, packed_color, desc_width, false, &line_data);
|
||||
written += print_max(L")", packed_color, 1, false, &line_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -632,6 +631,11 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co
|
|||
{
|
||||
search_field_text.append(PAGER_SEARCH_FIELD_WIDTH - search_field_text.size(), L' ');
|
||||
}
|
||||
line_t *search_field = &rendering->screen_data.insert_line_at_index(0);
|
||||
|
||||
/* We limit the width to term_width - 1 */
|
||||
int search_field_written = print_max(SEARCH_FIELD_PROMPT, highlight_spec_normal, term_width - 1, false, search_field);
|
||||
search_field_written += print_max(search_field_text, highlight_modifier_force_underline, term_width - search_field_written - 1, false, search_field);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -743,7 +747,7 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio
|
|||
}
|
||||
|
||||
/* Ok, we had something selected already. Select something different. */
|
||||
size_t new_selected_completion_idx;
|
||||
size_t new_selected_completion_idx = selected_completion_idx;
|
||||
if (! selection_direction_is_cardinal(direction))
|
||||
{
|
||||
/* Next, previous, or deselect, all easy */
|
||||
|
|
|
@ -50,7 +50,7 @@ static wcstring profiling_cmd_name_for_redirectable_block(const parse_node_t &no
|
|||
return result;
|
||||
}
|
||||
|
||||
parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level) : tree(t), src(s), parser(p), eval_level(initial_eval_level)
|
||||
parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level) : tree(t), src(s), parser(p), eval_level(initial_eval_level), executing_node_idx(NODE_OFFSET_INVALID), cached_lineno_offset(0), cached_lineno_count(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -506,6 +506,7 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars
|
|||
parse_execution_result_t parse_execution_context_t::run_switch_statement(const parse_node_t &statement)
|
||||
{
|
||||
assert(statement.type == symbol_switch_statement);
|
||||
parse_execution_result_t ret = parse_execution_success;
|
||||
const parse_node_t *matching_case_item = NULL;
|
||||
|
||||
parse_execution_result_t result = parse_execution_success;
|
||||
|
@ -531,6 +532,7 @@ parse_execution_result_t parse_execution_context_t::run_switch_statement(const p
|
|||
{
|
||||
/* Store the node that failed to expand */
|
||||
report_error(switch_value_node, WILDCARD_ERR_MSG, switch_value.c_str());
|
||||
ret = parse_execution_errored;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1301,6 +1303,9 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t
|
|||
/* Increment the eval_level for the duration of this command */
|
||||
scoped_push<int> saved_eval_level(&eval_level, eval_level + 1);
|
||||
|
||||
/* Save the node index */
|
||||
scoped_push<node_offset_t> saved_node_offset(&executing_node_idx, this->get_offset(job_node));
|
||||
|
||||
/* Profiling support */
|
||||
long long start_time = 0, parse_time = 0, exec_time = 0;
|
||||
profile_item_t *profile_item = this->parser->create_profile_item();
|
||||
|
@ -1523,3 +1528,58 @@ parse_execution_result_t parse_execution_context_t::eval_node_at_offset(node_off
|
|||
|
||||
return status;
|
||||
}
|
||||
|
||||
int parse_execution_context_t::get_current_line_number()
|
||||
{
|
||||
/* If we're not executing anything, return -1 */
|
||||
if (this->executing_node_idx == NODE_OFFSET_INVALID)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* If for some reason we're executing a node without source, return -1 */
|
||||
const parse_node_t &node = tree.at(this->executing_node_idx);
|
||||
if (! node.has_source())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Count the number of newlines, leveraging our cache */
|
||||
const size_t offset = tree.at(this->executing_node_idx).source_start;
|
||||
assert(offset <= src.size());
|
||||
|
||||
/* Easy hack to handle 0 */
|
||||
if (offset == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* We want to return (one plus) the number of newlines at offsets less than the given offset. cached_lineno_count is the number of newlines at indexes less than cached_lineno_offset. */
|
||||
const wchar_t *str = src.c_str();
|
||||
if (offset > cached_lineno_offset)
|
||||
{
|
||||
size_t i;
|
||||
for (i = cached_lineno_offset; str[i] != L'\0' && i < offset; i++)
|
||||
{
|
||||
/* Add one for every newline we find in the range [cached_lineno_offset, offset) */
|
||||
if (str[i] == L'\n')
|
||||
{
|
||||
cached_lineno_count++;
|
||||
}
|
||||
}
|
||||
cached_lineno_offset = i; //note: i, not offset, in case offset is beyond the length of the string
|
||||
}
|
||||
else if (offset < cached_lineno_offset)
|
||||
{
|
||||
/* Subtract one for every newline we find in the range [offset, cached_lineno_offset) */
|
||||
for (size_t i = offset; i < cached_lineno_offset; i++)
|
||||
{
|
||||
if (str[i] == L'\n')
|
||||
{
|
||||
cached_lineno_count--;
|
||||
}
|
||||
}
|
||||
cached_lineno_offset = offset;
|
||||
}
|
||||
return cached_lineno_count + 1;
|
||||
}
|
||||
|
|
|
@ -40,6 +40,13 @@ private:
|
|||
|
||||
int eval_level;
|
||||
|
||||
/* The currently executing node index, used to indicate the line number */
|
||||
node_offset_t executing_node_idx;
|
||||
|
||||
/* Cached line number information */
|
||||
size_t cached_lineno_offset;
|
||||
int cached_lineno_count;
|
||||
|
||||
/* No copying allowed */
|
||||
parse_execution_context_t(const parse_execution_context_t&);
|
||||
parse_execution_context_t& operator=(const parse_execution_context_t&);
|
||||
|
@ -106,6 +113,9 @@ public:
|
|||
/* Returns the current eval level */
|
||||
int current_eval_level() const { return eval_level; }
|
||||
|
||||
/* Returns the current line number. Not const since it touches cached_lineno_offset */
|
||||
int get_current_line_number();
|
||||
|
||||
/* Start executing at the given node offset. Returns 0 if there was no error, 1 if there was an error */
|
||||
parse_execution_result_t eval_node_at_offset(node_offset_t offset, const block_t *associated_block, const io_chain_t &io);
|
||||
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
/** \file parse_productions.cpp
|
||||
*/
|
||||
|
||||
|
||||
#include "parse_productions.h"
|
||||
|
||||
using namespace parse_productions;
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file parse_tree.cpp
|
||||
*/
|
||||
|
||||
#include "parse_productions.h"
|
||||
#include "tokenizer.h"
|
||||
#include "fallback.h"
|
||||
|
@ -990,6 +987,7 @@ void parse_ll_t::accept_tokens(parse_token_t token1, parse_token_t token2)
|
|||
{
|
||||
fprintf(stderr, "Consumed token %ls\n", token1.describe().c_str());
|
||||
}
|
||||
consumed = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file parse_util.cpp
|
||||
/** \file parse_util.c
|
||||
|
||||
Various mostly unrelated utility functions related to parsing,
|
||||
loading and evaluating fish code.
|
||||
|
|
19
parser.cpp
19
parser.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file parser.cpp
|
||||
/** \file parser.c
|
||||
|
||||
The fish parser. Contains functions for parsing and evaluating code.
|
||||
|
||||
|
@ -826,6 +826,16 @@ const wchar_t *parser_t::is_function() const
|
|||
|
||||
int parser_t::get_lineno() const
|
||||
{
|
||||
if (parser_use_ast())
|
||||
{
|
||||
int lineno = -1;
|
||||
if (! execution_contexts.empty())
|
||||
{
|
||||
lineno = execution_contexts.back()->get_current_line_number();
|
||||
}
|
||||
return lineno;
|
||||
}
|
||||
|
||||
int lineno;
|
||||
|
||||
if (! current_tokenizer || ! tok_string(current_tokenizer))
|
||||
|
@ -1162,6 +1172,13 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl
|
|||
parse_execution_context_t *ctx = new parse_execution_context_t(tree, cmd, this, exec_eval_level);
|
||||
execution_contexts.push_back(ctx);
|
||||
|
||||
/* Execute the first node */
|
||||
int result = 1;
|
||||
if (! tree.empty())
|
||||
{
|
||||
result = this->eval_block_node(0, io, block_type);
|
||||
}
|
||||
|
||||
/* Clean up the execution context stack */
|
||||
assert(! execution_contexts.empty() && execution_contexts.back() == ctx);
|
||||
execution_contexts.pop_back();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file parser_keywords.cpp
|
||||
/** \file parser_keywords.c
|
||||
|
||||
Functions having to do with parser keywords, like testing if a function is a block command.
|
||||
*/
|
||||
|
|
4
path.cpp
4
path.cpp
|
@ -1,7 +1,3 @@
|
|||
/** \file path.cpp
|
||||
*/
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/** \file print_help.cpp
|
||||
|
||||
/** \file print_help.c
|
||||
Print help message for the specified command
|
||||
*/
|
||||
|
||||
|
|
5
proc.cpp
5
proc.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file proc.cpp
|
||||
/** \file proc.c
|
||||
|
||||
Utilities for keeping track of jobs, processes and subshells, as
|
||||
well as signal handling functions for tracking children. These
|
||||
|
@ -383,6 +383,8 @@ static void mark_process_status(const job_t *j, process_t *p, int status)
|
|||
}
|
||||
else
|
||||
{
|
||||
ssize_t ignore;
|
||||
|
||||
/* This should never be reached */
|
||||
p->completed = 1;
|
||||
|
||||
|
@ -396,6 +398,7 @@ static void mark_process_status(const job_t *j, process_t *p, int status)
|
|||
handler. If things aren't working properly, it's safer to
|
||||
give up.
|
||||
*/
|
||||
ignore = write(2, mess, strlen(mess));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file reader.cpp
|
||||
/** \file reader.c
|
||||
|
||||
Functions for reading data from stdin and passing to the
|
||||
parser. If stdin is a keyboard, it supplies a killring, history,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file sanity.cpp
|
||||
/** \file sanity.c
|
||||
Functions for performing sanity checks on the program state
|
||||
*/
|
||||
#include "config.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file screen.cpp High level library for handling the terminal screen
|
||||
/** \file screen.c High level library for handling the terminal screen
|
||||
|
||||
The screen library allows the interactive reader to write its
|
||||
output to screen efficiently by keeping an internal representation
|
||||
|
@ -298,6 +298,7 @@ size_t escape_code_length(const wchar_t *code)
|
|||
if (code[1] >= L'@' && code[1] <= L'_')
|
||||
{
|
||||
resulting_length = 2;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
/** \file signal.cpp
|
||||
/** \file signal.c
|
||||
|
||||
The library for various signal related issues
|
||||
|
||||
|
@ -477,7 +477,7 @@ static void handle_int(int sig, siginfo_t *info, void *context)
|
|||
}
|
||||
|
||||
/**
|
||||
sigchld handler. Does notification and calls the handler in proc.cpp
|
||||
sigchld handler. Does notification and calls the handler in proc.c
|
||||
*/
|
||||
static void handle_chld(int sig, siginfo_t *info, void *context)
|
||||
{
|
||||
|
|
|
@ -79,4 +79,9 @@ for $var1 in 1 2 3
|
|||
end
|
||||
echo
|
||||
|
||||
# Test status -n
|
||||
eval 'status -n
|
||||
status -n
|
||||
status -n'
|
||||
|
||||
false
|
||||
|
|
|
@ -10,3 +10,6 @@ Foop
|
|||
Doop
|
||||
Testing for loop
|
||||
123
|
||||
1
|
||||
2
|
||||
3
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file tokenizer.cpp
|
||||
/** \file tokenizer.c
|
||||
|
||||
A specialized tokenizer for tokenizing the fish language. In the
|
||||
future, the tokenizer should be extended to support marks,
|
||||
|
|
2
util.cpp
2
util.cpp
|
@ -1,4 +1,4 @@
|
|||
/** \file util.cpp
|
||||
/** \file util.c
|
||||
Generic utilities library.
|
||||
|
||||
Contains datastructures such as automatically growing array lists, priority queues, etc.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file wgetopt.cpp
|
||||
/** \file wgetopt.c
|
||||
A version of the getopt library for use with wide character strings.
|
||||
|
||||
This is simply the gnu getopt library, but converted for use with
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file wildcard.cpp
|
||||
/** \file wildcard.c
|
||||
|
||||
Fish needs it's own globbing implementation to support
|
||||
tab-expansion of globbed parameters. Also provides recursive
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/** \file wutil.cpp
|
||||
/** \file wutil.c
|
||||
Wide character equivalents of various standard unix
|
||||
functions.
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file xdgmime.cpp
|
||||
*/
|
||||
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmime.c: XDG Mime Spec mime resolver. Based on version 0.11 of the spec.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
/** \file xdgmimealias.cpp
|
||||
*/
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmimealias.cpp: Private file. Datastructure for storing the aliases.
|
||||
/* xdgmimealias.c: Private file. Datastructure for storing the aliases.
|
||||
*
|
||||
* More info can be found at http://www.freedesktop.org/standards/
|
||||
*
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
/** \file xdgmimeglob.cpp
|
||||
*/
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmimeglob.cpp: Private file. Datastructure for storing the globs.
|
||||
/* xdgmimeglob.c: Private file. Datastructure for storing the globs.
|
||||
*
|
||||
* More info can be found at http://www.freedesktop.org/standards/
|
||||
*
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
/** \file xdgmimeint.cpp
|
||||
*/
|
||||
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmimeint.cpp: Internal defines and functions.
|
||||
/* xdgmimeint.c: Internal defines and functions.
|
||||
*
|
||||
* More info can be found at http://www.freedesktop.org/standards/
|
||||
*
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/** \file xdgmimemagic.cpp
|
||||
*/
|
||||
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmimemagic.: Private file. Datastructure for storing magic files.
|
||||
*
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/** \file xdgmimeparent.cpp
|
||||
*/
|
||||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
/* xdgmimealias.c: Private file. Datastructure for storing the hierarchy.
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue