ridiculousfish
33aff87c10
Switch io_file_t to store an fd, not a path
...
Prior to this fix, a file redirection was turned into an io_file_t. This is
annoying because every place where we want to apply the redirection, we
might fail due to open() failing. Switch to opening the file at the point
we resolve the redirection spec. This will simplify a lot of code.
2019-12-12 17:34:40 -08:00
ridiculousfish
be685faeb8
Clean up how pipe fd avoidance works
...
fish has to ensure that the pipes it creates do not conflict with any
explicit fds named in redirections. Switch this code to using
autoclose_fd_t to make the ownership logic more explicit, and also
introduce fd_set_t to reduce the dependence on io_chain_t.
2019-12-12 14:58:18 -08:00
Johannes Altmanninger
7d5b44e828
Support FOO=bar syntax for passing variables to individual commands
...
This adds initial support for statements with prefixed variable assignments.
Statments like this are supported:
a=1 b=$a echo $b # outputs 1
Just like in other shells, the left-hand side of each assignment must
be a valid variable identifier (no quoting/escaping). Array indexing
(PATH[1]=/bin ls $PATH) is *not* yet supported, but can be added fairly
easily.
The right hand side may be any valid string token, like a command
substitution, or a brace expansion.
Since `a=* foo` is equivalent to `begin set -lx a *; foo; end`,
the assignment, like `set`, uses nullglob behavior, e.g. below command
can safely be used to check if a directory is empty.
x=/nothing/{,.}* test (count $x) -eq 0
Generic file completion is done after the equal sign, so for example
pressing tab after something like `HOME=/` completes files in the
root directory
Subcommand completion works, so something like
`GIT_DIR=repo.git and command git ` correctly calls git completions
(but the git completion does not use the variable as of now).
The variable assignment is highlighted like an argument.
Closes #6048
2019-11-25 09:20:51 +01:00
ridiculousfish
e18fd3cddb
Allow unclosed subshells in interactive mode
...
If the user has an unclosed subshell in interactive mode, break the
line instead of producing an error.
Fixes #6316
2019-11-13 18:01:47 -08:00
ridiculousfish
ec08a50769
Eliminate function_data_t
...
This struct is now mostly useless and can go.
2019-11-12 11:25:41 -08:00
ridiculousfish
6d7a66592b
Make function_add take the filename directly instead of a parser
2019-11-12 10:00:42 -08:00
ridiculousfish
896ef65f8c
Rename error_offset to error_offset_within_token
...
Hopefully clarify the role of this variable.
2019-11-08 16:56:50 -08:00
ridiculousfish
ef8b5e4fa0
Correct certain tokenizer error reporting for unclosed subshells
...
There was some confusion about the different pointers and offsets
in tokenizer_t::call_error.
Fixes #6281
2019-11-08 16:56:43 -08:00
Johannes Altmanninger
e94b9ccf3e
Do import bash history commands containing && or ||
2019-11-07 23:33:35 +01:00
ridiculousfish
52e900690b
Make history_search_type_t an enum class
2019-11-02 18:56:16 -07:00
ridiculousfish
eeac3333df
Correctly highlight input following a tokenizer error
2019-10-27 16:08:49 -07:00
ridiculousfish
afd20b8e1a
Correctly report the range of tokenizer errors
...
This enables proper syntax highlighting of tokenizer errors.
2019-10-27 16:05:37 -07:00
ridiculousfish
2a92e66902
Support for &> and &| as convenience redirections
...
This adds support for &> and &| syntax, which both redirect stdout, and
also apply a redirection of stderr to stdout.
2019-10-27 15:24:57 -07:00
LawAbidingCactus
305a657694
fix typos
2019-10-23 19:38:44 +02:00
ridiculousfish
35671dd9f0
Clean up and unify pipes and redirections
...
This cleans up how pipes and redirections are recognized by the parser,
and unifies pipes and redirections into a single type.
2019-10-15 11:26:41 -07:00
ridiculousfish
1a65e18ba8
Clean up some tokenization
...
Remove TOK_NONE
Turn token_type into an enum class
Make next() turn a maybe_t<tok_t> instead of a bool
2019-10-13 16:06:16 -07:00
ridiculousfish
82eca4bc86
Run clang-format on all files
...
The main change here is to reorder headers.
2019-10-13 15:50:48 -07:00
ridiculousfish
a19d9b2e73
Add a test for #6130
2019-09-22 14:06:38 -07:00
Johannes Altmanninger
8baea8b157
Do not add a space after completion if one is already there
...
Example: type `cd --help --help`, move the cursor inside the first `--help` and press tab.
This used to add redundant spaces.
2019-09-18 14:02:24 -05:00
ridiculousfish
535a448d0e
Remove an errant fprintf
2019-09-08 15:44:07 -07:00
ridiculousfish
b2fe2f9ff3
Correct escaping and add tests for bracket completion
...
Add some tests for new bracket completion behavior, and fix an escaping
bug where \\[ was incorrectly marked as escaping.
2019-09-08 15:43:20 -07:00
ridiculousfish
0dc5eaeb97
reader_expand_abbreviation_in_command to return maybe_t<wcstring>
2019-08-06 16:09:23 -07:00
ridiculousfish
822b53c67a
Don't color a whole string invalid because of an unclosed quote
...
When syntax highlighting a quoted string, if the string is not closed,
only show the opening quote as an error, not the whole string.
2019-07-24 12:43:47 -07:00
ridiculousfish
8ec568d21f
Add some tests to path_apply_working_directory
2019-07-15 17:56:06 -07:00
ridiculousfish
0e4fe53718
clang-format some files
2019-07-06 13:11:50 -07:00
ridiculousfish
bc0329f775
Add wcstolower
...
Converts a string to lowercase. Eliminates some loops that did this
explicitly.
2019-07-06 12:19:34 -07:00
ridiculousfish
4a2c709fb1
Eliminate shell_is_interactive
...
We used to have a global notion of "is the shell interactive" but soon we
will want to have multiple independent execution threads, only some of
which may be interactive. Start tracking this data per-parser.
2019-06-29 11:28:26 -07:00
Fabian Homborg
caedf01c00
Revert "Latch signal handlers"
...
This reverts commit 7ed1022cf4
.
Fixes #5962 .
2019-06-25 11:25:09 +02:00
ridiculousfish
be97499106
Revert "Revert "Add a test for autoload_t""
...
This reverts commit 2507162f80
.
Put back the autoload test.
2019-06-07 12:12:43 -07:00
ridiculousfish
fc99d6c7af
clang-format all files
2019-06-03 20:30:48 -07:00
ridiculousfish
890c1188ab
Instantize and rationalize locking around the input mapping set
...
Hypothetically a background thread could invoke builtin_bind, etc.
Protect the set of input bindings with a lock.
2019-06-02 22:54:01 -07:00
ridiculousfish
671df14178
Thread a parser into inputter_t
2019-06-02 16:41:13 -07:00
ridiculousfish
a48dbf23b8
Instantize the character event queue
...
Wrap this stuff up in structs so it's no longer global.
2019-06-02 16:37:05 -07:00
Fabian Homborg
61292b0c6c
fish_tests: Fix warnings
2019-05-29 21:11:08 +02:00
David Adam
c848787107
add extra test for wcsfilecmp
...
Test changes added for #5634 in 6e525cc5d9
.
2019-05-28 22:03:03 +08:00
ridiculousfish
7ed1022cf4
Latch signal handlers
...
Now that our interactive signal handlers are a strict superset of
non-interactive ones, there is no reason to "reset" signals or take action
when becoming non-interactive. Clean up how signal handlers get installed.
2019-05-26 18:04:03 -07:00
Dawid Dziurla
0b3bb0e7c1
Underline every valid entered path ( #5872 )
...
* src/highlight: Underline every valid entered path
* update CHANGELOG
* fix highlight test
2019-05-19 10:03:56 +02:00
ridiculousfish
c44dae2d73
Migrate certain runtime flags to atomics hidden behind functions
2019-05-18 18:50:28 -07:00
ridiculousfish
1719d6f136
Make $status and $pipestatus per-parser
...
Another step towards allowing multiple parsers to execute in parallel.
2019-05-12 14:00:44 -07:00
ridiculousfish
cfddd881ef
Make PWD a per-processor variable
...
Handle this variable specially.
2019-05-11 17:13:34 -07:00
ridiculousfish
8a8b2513b5
Eliminate the global jobs() function
...
All job lists are attached to a parser now.
2019-05-05 11:33:08 -07:00
Fabian Homborg
c2970f9618
Reformat all files
...
This runs build_tools/style.fish, which runs clang-format on C++, fish_indent on fish and (new) black on python.
If anything is wrong with the formatting, we should fix the tools, but automated formatting is worth it.
2019-05-05 12:09:25 +02:00
ridiculousfish
f66e010949
Turn a lot of common.h variables into getter functions
...
Improves thread safety.
2019-05-04 20:58:35 -07:00
ridiculousfish
bffacd2fbf
Thread a parser into expansion
...
Expansion may perform command substitution, which needs to know the parser
to use.
2019-05-04 19:30:00 -07:00
ridiculousfish
923a7ca0f0
Thread the parser into complete()
...
Eliminates uses of principal_parser
2019-05-04 18:17:18 -07:00
ridiculousfish
63bdc949ab
Make completion request flags an enum_set
2019-05-04 17:55:57 -07:00
ridiculousfish
ec45f31ad1
Make debug_level an atomic
...
Fixes a tsan warning
2019-05-04 15:28:44 -07:00
ridiculousfish
d8ac051f89
Move selection_direction_t to pager.h and make it a class enum
2019-04-28 14:06:03 -07:00
ridiculousfish
2507162f80
Revert "Add a test for autoload_t"
...
This reverts commit 51c62d6cc6
.
Back out the test while I attempt to fix it
2019-04-27 20:14:06 -07:00
ridiculousfish
51c62d6cc6
Add a test for autoload_t
2019-04-27 16:16:48 -07:00