Compare commits

...

1318 Commits

Author SHA1 Message Date
ridiculousfish
e752ac3035 Further tweak the language about setting PATH in the tutorial 2015-07-03 12:46:59 -07:00
ridiculousfish
8ca21767fe Improve discussion of how to set PATH in the tutorial
Also fix a few broken anchors
2015-07-03 12:35:53 -07:00
David Adam
e60db8075c Open universal variable lock file read/write and ignore errors
Closes #2149.
2015-07-03 15:31:03 +08:00
David Adam
322a611872 Bump version for 2.2.0 2015-06-28 18:11:48 +08:00
ridiculousfish
ecb2da3142 Fix wildcard expansion in directories without read permissions
When performing wildcard expansion with a literal path segment,
instead of enumerating the files in the directory, simply apply the
path segment as if we found the directory and continue on. This
enables us to expand strings that contain unreadable directory
components (common with $HOME) and also improves performance, since
we don't waste time enumerating directories unnecessarily. Adds
a test too.

Fixes #2099
2015-06-25 19:22:15 -07:00
ridiculousfish
d79a72d722 Add abbreviation tests 2015-06-14 14:14:12 -07:00
ridiculousfish
781bbe217a Tweak and add tests for abbr
1. When run with no arguments, make abbr do the equivalent
   of `abbr --show`
2. Enable "implicit add", e.g. `abbr gco git checkout`
3. Teach `abbr --show` to not use quotes for simple cases
4. Teach abbr to output -- when the abbreviation has
   leading dashes

Add some basic tests to abbr too.
2015-06-14 14:13:33 -07:00
ridiculousfish
064ad7b981 Rework how the mode is reported in fish_vi_mode
Add a new function fish_mode_prompt which (if it is defined) has its output
prepended to the left prompt. Rather than replacing the prompt wholesale, make
fish_vi_mode enable this function by setting a variable __fish_vi_mode. This
enables vi mode to interoperate nicely with custom prompts. Users who want
to change how the mode is reported can either redefine this function or
erase it entirely. Fixes #1988.
2015-06-14 11:36:20 -07:00
ridiculousfish
6fbb3c9976 fish_config to select the proper tab when run with a tab name
`fish_config abbr` should show "abbreviations" selected
in the tab list.
2015-06-14 00:12:23 -07:00
ridiculousfish
7b34aaa432 Tweak the styling of the abbreviation editor
Removes the big white block of the input fields.
2015-06-14 00:12:23 -07:00
ridiculousfish
5c6143d8e9 Use --remove instead of -e when erasing abbreviations from fish_config
Updates fish_config to use the correct argument to abbr
2015-06-14 00:12:23 -07:00
ridiculousfish
ea407476d0 Correctly un-export an env var when it is shadowed
Prior to this fix, if you exported a variable in one scope
and then unexported it in the next, it would remain exported.
Example:

    set -gx VAR 1
    function foo; set -l VAR; env; end
    foo

Here 'VAR' would be exported to 'env' because we failed to
notice that the env var is shadowed by an unexported variable.
This occurred at env var computation time, not in env_set!

Fixes #2132
2015-06-12 16:11:45 -07:00
David Adam
b6b6de3304 vi bindings: clear commandline with Ctrl-C
Closes #2077.
2015-06-05 14:01:43 +08:00
ridiculousfish
79a6961793 Add some simple documentation for fish_vi_mode 2015-06-04 13:18:17 -07:00
ridiculousfish
6c53862ff1 Suppress uvar error messages due to permissions or file not found
su does not reset XDG_RUNTIME_DIR, which means that XDG_RUNTIME_DIR
may point to directories that the user does not have permission
to access. Similarly there is no guarantee that XDG_RUNTIME_DIR
points to a directory that actually exists. Rather than try to
handle these issues, we simply ignore them, effectively disabling
realtime uvar notifications. Fixes #1955.
2015-06-01 23:03:11 -07:00
David Adam
c0cf25cf0b abbr: rename --remove to --erase
for consistency with other fish commands

Closes #2071.
2015-05-22 09:48:39 +08:00
ridiculousfish
edf6a951ee Unescape the token returned by builtin_commandline
Fixes #2075
2015-05-22 08:46:23 +08:00
David Adam
1c99ef5b6e FAQ: shorter fish_title fix
[skip ci]
2015-05-21 12:05:21 +08:00
ridiculousfish
a83323705d Make fish_config work correctly when IPv6 is disabled in the kernel
Fixes #1754
2015-05-17 19:13:50 -07:00
ridiculousfish
49b49d7ed4 Pass the character index, not the character, to parse_util_expand_variable_error
Fixes #2067
2015-05-15 17:17:30 -07:00
David Adam
14bf2ee5cb bump version for 2.21b 2015-05-05 08:37:06 +08:00
Jakukyo Friel
cec1dc2095 doc: faq: avoid overwriting config.fish.
In FAQ:

> I'm seeing weird output before each prompt when using screen. What's wrong?

The command provided is

    echo 'function fish_title;end' > ~/.config/fish/config.fish

Using `>` will overwrite current config.fish.

We should use `>>` instead.
2015-05-03 23:38:05 -07:00
Brendan Whitfield
9b5026f7e5 added cursor:pointer to master_element in web_config css 2015-05-03 17:33:25 +08:00
ridiculousfish
96dfd27725 Disable __fish_parse for 2.2 release
Fixes #1809
2015-05-02 21:35:49 -07:00
ridiculousfish
905d8b2aa5 Don't stop history search on repaint
Fixes #2044
2015-05-02 18:42:38 -07:00
ridiculousfish
3ca518255e Treat comments ending in backslashes as not continuing onto the next line
Fixes #1255
2015-05-02 18:22:20 -07:00
ridiculousfish
c59119e0b7 Correct a reference to the wrong issue. 613, not 163! 2015-05-02 17:54:32 -07:00
ridiculousfish
0748a4d8b6 Use a more appropriate type for the reader_test function 2015-05-02 17:49:38 -07:00
ridiculousfish
3722f91e38 Upgrade Xcode project format to latest 2015-05-02 17:12:34 -07:00
ridiculousfish
ba721d6cbf Teach Xcode build to create vendor_completions.d directory
Per #1485
2015-05-02 16:58:47 -07:00
David Adam
5532e5aa8a docs: document pkg-config command for vendor_completions.d 2015-05-01 16:56:21 +08:00
David Adam
9cae8bf8a6 docs: document __fish_complete_path function
Introduced with 6ece852 for #834.
2015-05-01 16:56:21 +08:00
David Adam
cb92a1d12f CHANGELOG: remove, unused
[skip ci]
2015-05-01 16:56:17 +08:00
ridiculousfish
1242e63b6a Use mode 0600 for history file
Fixes #2041
2015-04-29 17:52:50 -07:00
ridiculousfish
f30872a7b5 Recalculate exported variables when universal variable is erased
Fixes #2046
2015-04-29 17:28:49 -07:00
ridiculousfish
9c3a9a1e73 Remove a redundant implementation of append_syntax_error 2015-04-29 17:02:32 -07:00
ridiculousfish
c91f70523c Rework error messages to be shorter and to handle more special bash-isms
Example: we can point $* to argv

Fixes #1288
2015-04-29 16:53:02 -07:00
ridiculousfish
3d9c24196d Add test for error messages
Preparation for issue #1228
2015-04-25 18:47:17 -07:00
Ingo Blechschmidt
6f438f65de typo 2015-04-25 18:59:43 +02:00
ridiculousfish
879d03d0fe Reset the color after printing the CWD in classic+git prompt
Fixes #2034
2015-04-23 17:53:40 -07:00
ridiculousfish
7a1fc028e3 Only pass the command name to command-not-found
With the fix for #365, fish_command_not_found event handlers
receive the command and all of its arguments. But commands
like /usr/lib/command-not-found expect only the command name.
So when invoking an external command, just pass the command
name, not all of the arguments.
2015-04-20 02:22:54 -07:00
ridiculousfish
c3ef23b10f Support for a "pending item" in history.
Before running a command, we add the command to history, so
that if the command causes us to exit it's still captured in
history. But that command should not be considered part of
history when expanding the history within the command itself.
For example, `echo $history[1]` should be the previously
run command, not `echo $history[1]` itself.

Fixes #2028
2015-04-20 02:04:17 -07:00
Sanne Wouda
722fedc8fd rewrite input_mapping_execute for clarity
For the case
```
bind \et "commandline -i 1" "commandline -i 2"
```
the order of execution of the commands is now in-order.

Note that functions codes are prepended to the queue in reverse order, so they
will be executed in-order.  This should allow all bindings of the form
```
bind \et beginning-of-line force-repaint
```
to remain unchanged.
2015-04-19 16:56:48 -07:00
Sanne Wouda
32936b0eb9 Change lookahead_list into a queue
Using builtin `commandline -f`, one would expect to have commands executed in
the order that they were given.  This motivates the change to a queue.

Unfortunately, fish internals still need lookahead_list to act as a stack.  Add
and rename functions to support both cases and have lookahead_list as
a std::deque internally.

This code is delicate, and we should probably dog-food this in nightly for
a while before the next-minor release.

Fixes #1567
2015-04-19 16:56:48 -07:00
Roman Hargrave
3559f20c8f Pass entire argv content to fish_command_not_found recipients 2015-04-19 15:50:10 -07:00
Roman Hargrave
9dc53f7c1b Added completions for apt command 2015-04-16 10:47:36 +08:00
Konrad Borowski
9c007d1c94 Revert "document evaluation of /etc/profile.d/*.fish, introduced in 20a6b65"
This reverts commit e17f6fb2dc.
2015-04-14 19:10:58 +02:00
ridiculousfish
6faac2d2c8 Revert "Source files /etc/profile.d/*.fish at startup"
Per discussion in #1956, back this out until we have consensus.

This reverts commit 20a6b65b25.
2015-04-14 10:08:40 -07:00
David Adam
665314b240 translations: update new strings 2015-04-13 22:19:29 +08:00
Sanne Wouda
cb1e3c501d Simplify begin_header production
The TOK_END is swallowed by the subsequent job_list anyway.
2015-04-13 13:23:59 +08:00
Sanne Wouda
9e8e5af064 Add test cases for parsing 'begin' without ';' 2015-04-13 13:23:59 +08:00
Sanne Wouda
fd731fb74f Modify parser to accept 'begin' without ';'
Examples that work as expected (even completions don't get confused):

$ begin true; end;
$ begin if true; end; end
$ begin if true; echo hi; end

The last example correctly expects another 'end' to match 'begin'.

Fixes #1248.
2015-04-13 13:23:59 +08:00
David Adam
d1a56139e1 fish.cpp: check for fishd from old version and warn if reachable
Work on #1730.

With thanks to Andrew Lutomirski (github.com/amluto) for the SOCK_DGRAM
trick:
https://github.com/fish-shell/fish-shell/pull/2023#issuecomment-91866965
2015-04-12 23:58:55 +08:00
David Adam
3408b2759e .gitignore: fishd is dead 2015-04-12 23:58:55 +08:00
Sanne Wouda
fbe28fd5d8 Tombstone only when explicitly removing a function.
Do not tombstone a function when it is evicted normally from the LRU cache.
This broke changing `fish_function_path`, since that would evict all nodes,
resulting in accidental tombstones, which caused autoloaded functions to
never be reloaded.

See #213.
2015-04-08 10:46:38 -07:00
ridiculousfish
97aa1c033b Switch back to insert mode after executing a command in vi mode
Fixes #1933
2015-04-08 10:31:48 -07:00
Nathan L Smith
34296dd440 add completions for test kitchen 2015-04-07 13:49:54 +08:00
ridiculousfish
87428672d8 Fix funcsave to not delete the function it just created
In 73f344f41b, we allowed autoloaded functions to be deleted.
For some reason, funcsave immediately deletes the function it
creates. This previously did very little, since the function would
immediately be re-autoloaded, but with the fix for 73f344f41b
the function gets tombstoned. So the effect is that funcsave
makes the function disappear! This simply removes the erase call,
which dates back to fish 1.x.
2015-04-06 22:40:13 -07:00
ridiculousfish
84899fb2f8 Small tweaks to clarify some code
Adds a comment about a recursive lock, and changes an ==1 to >0
for improved clarity
2015-04-06 08:38:31 -07:00
Sanne Wouda
73f344f41b Revert 1349d12 and properly fix #213
As suggested by @ridiculousfish, when removing autoloaded functions, add them
to a tombstones set.  These functions will never be autoloaded again in the
current shell, not even when the timestamp changes.

Tested as per comment 1 of #1033.  `~/.config/fish/functions/ls.fish` contains
the function definition.  `function -e ls` removes the redefined `ls` (and
reverts back to the built-in command).  `touch .../ls.fish` does not cause the
function to be reloaded.
2015-04-06 00:10:55 -07:00
ridiculousfish
9f8cec7f9e Add a test for issue #1987 2015-04-05 23:47:04 -07:00
Sanne Wouda
318daaffb2 Ignore comments for backslash newline
Works also if tok->show_comments (for highlighting and auto completion) and
with multi-line comments:

function my_function
    echo "hello" | \
    #remove 'l'
    #and more
    tr -d 'l'
end

$ my_function
heo

Fixes #983
2015-04-05 23:03:24 -07:00
Sanne Wouda
cad1dc5293 Fix #1978:"ul: unknown escape sequence" when asking for help
It seems that `ul` can't handle the escape sequences for bold text that `nroff` generates on my system.  Fixed by either removing `| ul`, or adding `-c` to the `nroff` command.

Needs testing for old (OSX?) versions of nroff.
2015-04-04 12:03:58 -07:00
David Adam
900a8a1408 __fish_complete_python: fix regex to be POSIX-compatible
Closes #2004.
2015-03-30 15:13:04 +08:00
David Adam
384cb2d735 Revert "__fish_config_interactive: warn users that fishd is going away"
This reverts commit ad61c3f0d6.

Work on #1730.
2015-03-30 13:42:59 +08:00
David Adam
ad61c3f0d6 __fish_config_interactive: warn users that fishd is going away
Work on #1730
2015-03-26 16:24:52 +08:00
David Adam
c10aab77da docs: move discussion of fishd file to universal variable section 2015-03-26 10:31:25 +08:00
David Adam
e17f6fb2dc document evaluation of /etc/profile.d/*.fish, introduced in 20a6b65
Work on #1956.
2015-03-26 10:31:06 +08:00
ridiculousfish
e896acffd7 Use $PWD instead of (pwd) in sample prompt
This improves the case where the working directory has vanished

Fixes #1857
2015-03-24 17:03:40 -07:00
ridiculousfish
20a6b65b25 Source files /etc/profile.d/*.fish at startup
Fixes #1956
2015-03-24 16:46:25 -07:00
ridiculousfish
01026c137f Don't evict autoloaded functions from background threads
Fixes a bug where generating a lot of autoloaded functions from
syntax highlighting would result in evicting nodes on background threads,
resulting in a thread error.

Fixes #1989
2015-03-23 12:31:22 -07:00
ridiculousfish
7aac3db55c Make "readahead" text insertion clear the pager
Without this change, pasting text with the pager contents
visible would not clear the pager.

Fixes #1974
2015-03-23 12:09:16 -07:00
ridiculousfish
0ecf294d34 Use natural (digit-sequence-aware) sorting for wildcard expansion
Fixes #1993
2015-03-23 11:13:26 -07:00
David Adam
89da09636e travis: parallel make 2015-03-20 14:53:37 +08:00
David Adam
f8299a1274 travis: add gitter.im room (experimental) 2015-03-20 14:46:13 +08:00
Martin Hamrle
94e9d6a5ef Add paging into navigating pager 2015-03-20 14:41:38 +08:00
Lucretiel
733108e33b Updated exit.txt reference to source
Changed the text referencing 'source' in exit.txt from '.' to 'source'
2015-03-18 16:22:29 -04:00
David Adam
48d353610f abbr: coalesce multiple arguments to --add
Makes the behaviour of the script match the documentation.
2015-03-13 16:32:05 +08:00
David Adam
bff68f3bfc reader.cpp: during forced exit, send SIGHUP to foreground processes only
Closes #1771.
2015-03-12 14:11:06 +08:00
Geoff Nixon
b9bd0166b6 Fix return value of if/else statements to match POSIX. Hopefully should close #1443, and reverses some of #1061 / e632d39b. 2015-03-11 20:32:16 +08:00
David Adam
1116929d2f Merge branch 'Integration_2.1.2' 2015-03-11 13:49:06 +08:00
Fabian Homborg
22103e4849 systemctl: Fix devices/slices/scopes/swaps completion
A rogue single-quote meant that a non-existent function
'__fish_systemctl_$t' was called
2015-03-11 13:29:18 +08:00
Ryo ONODERA
e421c12cc4 Fix typo in comment.
* DragonFly BSD is not Dragonfly BSD.
2015-03-07 08:34:01 +01:00
Fabian Homborg
5a9b1b1b57 Revert "Adjust filters a bit" - it doesn't work for .service
Unfortunately, list-unit-files doesn't understand --state=loaded

This needs a new function to explicitly use list-units

This reverts commit 9f521b7694.
2015-03-06 23:05:24 -08:00
Fabian Homborg
d99ed89aa3 Adjust filters a bit
This includes only showing unmasked units in mask, only loaded units in
start and more types in show/list-dependencies
2015-03-06 23:05:24 -08:00
Fabian Homborg
b9dd057a04 Make enable/disable completions work again
Was single-quoted, should have been double-quoted
2015-03-06 23:05:24 -08:00
Fabian Homborg
369a09e57e Simplify code by removing duplicated descriptions
For-loops ftw!
2015-03-06 23:05:24 -08:00
Fabian Homborg
468648ff51 systemctl completions: Improve option handling 2015-03-06 23:05:24 -08:00
Fabian Homborg
8c41a053fe systemctl completions: Show options for --property=
Inspired by the official bash completion, this uses systemd --dump-configuration-items.
2015-03-06 23:05:24 -08:00
Fabian Homborg
a1b3358cb8 systemctl completions: Remove duplicated commands 2015-03-06 23:05:24 -08:00
Fabian Homborg
16e65c849c systemctl completions: Only list matching units on enable/disable 2015-03-06 23:05:24 -08:00
Fabian Homborg
33c0d93b20 systemctl completions: Add more unit types and commands
It should now support all unit types mentioned in systemd.unit(5)
2015-03-06 23:05:24 -08:00
Fabian Homborg
3d163eb910 systemctl completions: Simplify code by using __fish_seen_subcommand_from 2015-03-06 23:05:24 -08:00
Fabian Homborg
3e32715693 systemctl completions: Support user-mode 2015-03-06 23:05:24 -08:00
Fabian Homborg
388a8d09d8 systemctl completions: Support command-after-options
This fixes completions for e.g. `systemctl --quiet status`
2015-03-06 23:05:24 -08:00
ridiculousfish
b4aa2b7c2c Allow fish to properly exit from job_continue when receiving a signal
e340baf6cc introduced a bug where fish would not exit from job_continue
when receiving a signal like SIGHUP. This means that it would not in turn
deliver SIGHUP to its children, who would therefore never exit. Those
children may attempt to write to stdout, in which case they would receive
EIO; this can cause other weird issues, like telnet using 100% CPU.

Fixes #1958
2015-02-27 09:56:19 -08:00
Trenton Broughton
dd595dd110 Added some common completions
* Added completion for `git branch --merged`
* Added completion for `git branch --no-merged`
2015-02-19 11:10:04 -05:00
ridiculousfish
95687a03fb Bump OS X version from 2.1.1 to 2.1.2 2015-02-16 11:07:12 -08:00
ridiculousfish
b3aa187867 Use a symlink instead of a hard link for fishd.socket compatibility path
On OS X, work around filesystem corruption triggered by having hard
links in /tmp, by using a symlink instead.
2015-02-09 15:37:51 -08:00
Konrad Borowski
b5d9e366ad Mention that for variables are local.
This is the current behaviour, documentation can be updated if this
behaviour changes, assuming it can, because it's an incompatible
change.
2015-02-06 07:48:47 +01:00
ridiculousfish
d7ba6e4a1d Properly fire events for universal variable changes
Fixes #1929
2015-02-03 16:13:02 -08:00
David Adam
981a71555f reader.cpp: don't set title in dumb terminals
Closes #1907.
2015-02-02 15:41:29 +08:00
David Adam
597dda5a4b isatty: use command test instead of redirections
Adds a fork but can't use builtin test yet.

Closes #1870.
2015-02-01 18:18:34 +08:00
David Adam
66acd17bc0 isatty: revert to previous behaviour
This partially reverts commit 60808a4820.
2015-02-01 18:18:34 +08:00
T. Jameson Little
793784c087 Add command-not-found handler for Arch Linux
- checks for `pkgfile`, which is an optional (but official)
  package used for searching for packages given a file
2015-01-30 22:01:40 -07:00
LoveIsGrief
df6f1e8f62 Add hg branch and status to terlar's prompt 2015-01-30 23:07:40 +08:00
LoveIsGrief
facfe33218 Add function to ouput hg branch and status for a prompt
This is an adaptation of terlar's git prompt output
2015-01-30 23:07:40 +08:00
David Adam
78dfc57b1e web_config: set new prompts via JSON instead of URI-encoded
Fixes problems with encoding and decoding Unicode from URL-encoded strings,
which was impossible to get right in Python 2.
2015-01-30 22:54:13 +08:00
David Adam
d17ba69f9e web_config: respect the client's character set for JSON 2015-01-30 22:52:41 +08:00
David Adam
5c16b5598b web_config: fix python2/3 unification for parse_qs 2015-01-30 22:52:07 +08:00
David Adam
028d9e8e3b default key bindings: ignore FocusIn/FocusOut control sequences
Closes #1917.
2015-01-30 16:01:25 +08:00
David Adam
53a4814d8b web_config: respect linebreaks in prompt demos 2015-01-29 21:41:31 +08:00
David Adam
1ff9aba6b1 rsync completions: rework transformation of file list
Accounts for filenames that contain spaces.

Closes #1872.
2015-01-23 12:27:23 +08:00
Bruno Pinto
39748870b6 math requires bc package 2015-01-22 14:47:28 +08:00
ridiculousfish
b0cbad84f4 Stop leaking the result of wrealpath 2015-01-20 01:04:07 -08:00
Jelte Fennema
f920be5ea3 Make emerge completion more powerful 2015-01-19 17:39:37 +08:00
Jelte Fennema
f9384fe323 Make commands more readable 2015-01-19 17:39:25 +08:00
Bruno Pinto
789a54222d adding a dockerfile building fish on a centos machine 2015-01-19 02:13:36 -02:00
ridiculousfish
68efa5233c Fix and add tests for format_long_safe with negative numbers 2015-01-18 16:03:21 -08:00
Max Gonzih
dce487380c Fix not found handler for fedora 2015-01-18 11:52:15 +01:00
ridiculousfish
75a76c596c Clean up recent fix for #1892
Restore 906d235 and simplify how __fish_restore_status works
2015-01-17 15:36:30 -08:00
ridiculousfish
7164769d33 Introduce tests for #1892 2015-01-17 15:22:37 -08:00
Jelte Fennema
9e3f912747 Ignore error message when not on a Gentoo system 2015-01-17 11:51:36 +01:00
Konrad Borowski
e529b78365 Don't define unnamespaced internal function. 2015-01-17 11:50:23 +01:00
Daniel K
9374494d2b Fix job_or_process_extent with command substitution 2015-01-17 11:47:42 +01:00
Jorge Bucaran
2018b9b217 Fix: eval should preserve previous $status if the evaluated block does not change it
Empty functions may return 1 when eval is used due to the $status not being correctly preserved inside the function definition.
2015-01-17 11:44:55 +01:00
Peter Dave Hello
3c0902b7e4 Use svg instead of png to get better image quality 2015-01-17 11:42:54 +01:00
Ben Hamilton
b31305b9bd Unexport CMD_DURATION
Valid uses of this environment variable don't really include passing
it to subsequent child processes.

I confirmed the fix with:

  function fish_prompt
      echo "cmd duration [$CMD_DURATION] "
  end

  cmd duration [0] sleep 2
  cmd duration [2002]
2015-01-16 11:57:26 -08:00
ridiculousfish
d4eded2376 Make octal/hex escapes in printf and echo output literal bytes
Fixes #1894
2015-01-15 11:21:07 -08:00
ridiculousfish
20974edc14 Use iothread_perform variant that doesn't take a completion callback
Removes some ugly NULL casts
2015-01-14 10:05:07 -08:00
Kevin Ballard
6e2132e01f Reap jobs before calling select() in job_continue()
Prior to b0e09303a, simple jobs like `printf "%s\n" $line | read word _`
never hit the call to select() because they were reaped in the SIGCHLD
signal handler. With that commit, the signal handler no longer reaps
children, and a job like that would enter select() and hit the 10000μs
timeout before discovering that the job was already complete.

Fixes #1884.
2015-01-12 22:26:07 -08:00
ridiculousfish
34db67680d Ignore user-supplied fd redirections above 2 for builtins
Prevents e.g. specifying an fd which corresponds to the history file
as the stdin for builtin_source
2015-01-08 10:44:05 -08:00
ridiculousfish
7864d0d416 Rework file descriptor handling
Remove global array of file descriptors, in
favor of relying on CLO_EXEC exclusively.
Also correctly implement "pipe avoidance" so
that fd redirections do not conflict
with pipes.
2015-01-07 18:07:06 -08:00
ridiculousfish
d1feb9bcbf Use scoped_push to save and restore real_io
Fixes a dangling pointer
2015-01-07 16:41:16 -08:00
ridiculousfish
906d235601 Add more expository comments to eval, and remove a useless parameter 2015-01-07 14:56:41 -08:00
ridiculousfish
e045eabad6 Add tests to verify pipes do not conflict with fd redirections 2015-01-04 14:18:06 -08:00
ridiculousfish
218bd7a687 Ignore xccheckout files 2015-01-04 13:46:03 -08:00
ridiculous_fish
70a99e494d Mark libnotify FDs as CLO_EXEC
Fixes a fd leak on OS X
2015-01-04 01:21:23 -08:00
ridiculousfish
e340baf6cc Remove useless signal-checking loop in job_continue
This loop has always been nonsense.
2014-12-29 01:04:13 -08:00
ridiculousfish
182faca2e5 Stop blocking signals within job_promote
Since we no longer inspect the job list from
a signal handler, we don't need to muck with signals
when modifying the job list
2014-12-29 00:56:27 -08:00
ridiculousfish
14834ff076 Rename events and simplify signal event handling
- Rename 'events' to 's_event_handlers'
- Stop inspecting the s_event_handlers list upon receiving
a signal. Instead, maintain the set of signals that are observed
in a separate static array. This lets us avoid mucking with
STL data structures in a signal handler, and so avoid blocking signals
in event.cpp
2014-12-29 00:38:11 -08:00
Andreas Heiduk
a0127a0c7a Change fish_paginate to paginate both stdout and stderr. 2014-12-28 23:14:13 +08:00
volnt
390fe05a87 Update pythonista.fish: make virtualenv aware that prompt is set
Closes #1823, closes #1795.

Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-12-28 19:28:12 +08:00
David Adam
b9ff17f33c test: note that the square bracket form is available
As requested in https://github.com/fish-shell/fish-shell/issues/1850
2014-12-28 19:03:26 +08:00
ridiculousfish
5f2ea007a5 Close <code> before <pre> in fish_indent 2014-12-24 14:17:06 -08:00
ridiculousfish
e5a2343879 Use <pre><code> for fish_indent HTML output
As suggested in #1827
2014-12-24 13:08:16 -08:00
ridiculousfish
8d50b2509d Update completions for fish_indent 2014-12-24 13:07:28 -08:00
ridiculousfish
a76afd6dae Clarify some documentation regarding fish_indent 2014-12-24 13:05:31 -08:00
ridiculousfish
77a7dd82a9 Fix for assertion failure in fish_indent when setting a non-RGB color 2014-12-24 12:43:17 -08:00
Jonathan Arnett
04651105a8 Tmuxinator completions 2014-12-24 02:22:41 -05:00
ridiculousfish
d300bd4b62 Document new flags to fish_indent 2014-12-23 17:21:54 -08:00
ridiculousfish
a21db45cee Improve indentation of blocks inside if/while headers
Fixes #1665
2014-12-23 16:30:39 -08:00
ridiculousfish
2e948d9d6d Update fish_indent Xcode build target 2014-12-23 16:16:37 -08:00
ridiculousfish
6fa9a18a2b Correct path in fish_indent tests 2014-12-23 15:51:18 -08:00
ridiculousfish
da2e2c2e99 Implement tests for fish_indent 2014-12-23 15:46:47 -08:00
ridiculousfish
8ba0ab2172 Rewrite of fish_indent
Changes fish_indent to leverage new parse tree
Also supports colorizing output via --html and --ansi flags.
2014-12-23 15:32:01 -08:00
ridiculousfish
96589920d5 Allow running specific high-level tests by passing the name to test.fish
Example:
  tests/test.fish expansion
This will run the tests in expansion.in only
2014-12-23 12:20:44 -08:00
ridiculousfish
8c17d48c83 Include fallback.h in output.h to avoid a compile error 2014-12-23 12:02:09 -08:00
ridiculousfish
d458a8a03d Clean up the last token when receiving TOK_END 2014-12-23 11:22:54 -08:00
ridiculousfish
39fe9fcfcd Tweak comment handling. Mark a parse node with a new flag when it has comments 2014-12-23 10:58:45 -08:00
ridiculousfish
bf80b0db19 Fix to avoid generating multiple error nodes on parse error 2014-12-23 10:53:38 -08:00
ridiculousfish
ebfaa8cc95 Replace an expensive expand_one call with the cheaper unescape_string
Makes parsing a little faster
2014-12-23 10:08:41 -08:00
Max Gonzih
46cd89c2db Support nixos command-not-found handler 2014-12-22 11:16:36 +08:00
David Adam
8124b5073f osx/config.h: add some missed defines 2014-12-21 23:40:46 +08:00
David Adam
a4e81d3978 Merge a handful of old and new fixes for the build on Solaris
Note that it does not successfully compile yet due to missing flock() on this
platform.
2014-12-21 23:38:53 +08:00
David Adam
147078f43d Solaris build fixes: use _sys_errs if available 2014-12-21 23:38:09 +08:00
David Adam
90629caa61 Solaris build fixes: detect <termios.h> in configure
The header is already used appropriately in the code.
2014-12-21 23:38:03 +08:00
David Adam
9cec0ad02c Solaris build fixes: use memset instead of bzero 2014-12-21 23:38:03 +08:00
David Adam
11bece80a8 Solaris build fixes: fallback to _XOPEN_NAME_MAX if defined 2014-12-21 23:38:02 +08:00
David Adam
a10f729ef9 use configure to detect dirent.d_type 2014-12-21 23:38:02 +08:00
ridiculousfish
b9db555343 Support for dirents without d_type (e.g. Solaris) 2014-12-21 23:38:02 +08:00
David Adam
9b43e6fa8b use configure to define NOMACROS
(added in 9ec808a4c)
2014-12-21 23:38:02 +08:00
David Adam
1edb7d3aa5 Update osx/config.h with new configure headers 2014-12-21 23:37:23 +08:00
ridiculousfish
14fde56d32 Define some macros to stop Solaris curses headers from breaking the STL 2014-12-21 23:37:23 +08:00
David Adam
a8059c5962 Solaris build fixes: pick the right curses more of the time 2014-12-21 23:37:23 +08:00
Igor Savchuk
381404c4f4 tmux completion: add more attach-session aliases 2014-12-08 17:29:24 +03:00
David Adam
68029095b5 Remove del_curterm workaround on *BSD.
FreeBSD PR was https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=108117
OpenBSD PR was 5447.

Both have been fixed for years.

This reverts commit c55cbd3f2f, among
others.
2014-12-08 08:01:03 +08:00
Konrad Borowski
9a34df604d Make fish_config handle no LANG variable set.
Fixes #1849.
2014-12-05 21:39:21 +01:00
Konrad Borowski
2f96d2b19a Add cygport completions provided by Andrew Schulman
Squashed commit of the following:

commit a396c5e95a9987ea8ce6e057910131886d1b9695
Merge: bfd1951 f329530
Author: Konrad Borowski <x.fix@o2.pl>
Date:   Mon Dec 1 17:54:02 2014 +0100

    Merge branch 'master' of https://github.com/andrex-e-schulman/fish-shell into andrex-e-schulman-master

commit f32953064e
Author: Andrew Schulman <andrex-e-schulman@users.noreply.github.com>
Date:   Mon Dec 1 05:34:29 2014 -0500

    improve descriptions of pkg and diff

commit 81def0fb30
Author: Andrew Schulman <andrex-e-schulman@users.noreply.github.com>
Date:   Mon Dec 1 04:51:20 2014 -0500

    simplify cygport option descriptions

commit 4d84eb3e5c
Author: Andrew Schulman <andrex@5200-glenwood.net>
Date:   Mon Dec 1 04:32:47 2014 -0500

    add command descriptions to share/completions/cygport

commit c7ff7e4fa2
Author: Andrew Schulman <andrex@5200-glenwood.net>
Date:   Mon Dec 1 03:09:00 2014 -0500

    add share/completions/cygport.fish
2014-12-01 17:54:59 +01:00
Rack Lin
bfd1951023 Added export alias for set global variable, made for sh/bash/zsh compatibility
Signed-off-by: Rack Lin <racklin@gmail.com>
Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-12-01 15:43:57 +08:00
Vladimir Varankin
019c0fed23 Add completion for git-clean 2014-11-29 00:15:49 +03:00
王邈
bb01e5f81a Added Chinese translation.
Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-11-27 14:19:03 +08:00
ridiculousfish
8526a82947 Fix for issue where fish_indent would lose blank lines 2014-11-25 10:43:03 -08:00
Kevin Ballard
94a3203c74 Disable localizations during tests 2014-11-25 01:44:58 -08:00
Kevin Ballard
184110c2e7 Revert "tests/status.in: fix test for locale, fall back to default strings"
This reverts commit 3b3fde1c5e.
2014-11-25 00:51:39 -08:00
David Adam
3b3fde1c5e tests/status.in: fix test for locale, fall back to default strings 2014-11-25 16:00:04 +08:00
David Adam
60a2e0a2ad Update English translation 2014-11-25 15:46:13 +08:00
David Adam
c78e56c509 Update various strings for translation, avoid _ for non-translations
Use __ instead of _ as a placeholder for ignored variables in `read`
statements.
2014-11-25 15:37:30 +08:00
David Adam
190cac07a3 grep.fish: don't set GREP_COLOR
grep will fall back to the default colors.

Closes #1316.
2014-11-25 08:48:16 +08:00
David Adam
efc3846fcf grep.fish: don't use GREP_OPTIONS as it is deprecated
Closes #1825.
2014-11-25 08:47:30 +08:00
Kevin Ballard
83df5ea660 Define a common mktemp for tests
GNU and BSD `mktemp` handle options differently, and it's a useful
utility for tests. As such, define a common `mktemp` function wrapper
for the test suite.

It might actually be nice to expand this for more flags and support it
globally, but that may result in confusion for any users of BSD mktemp
that expect to be running /bin/mktemp.
2014-11-24 01:51:07 -08:00
Kevin Ballard
e13d423b68 Tweak test runner to set up environment better
Update the test runners so they set up their own environment in
test_util.fish. This simplifies the Makefile and paves the way for
adding utility functions for use in the tests themselves.
2014-11-24 01:51:07 -08:00
ridiculousfish
eafd577629 Hack the tokenizer to compress multiple adjacent newlines into one
This slightly reduces the size of parse trees, and is otherwise a
minor optimization
2014-11-24 01:23:42 -08:00
ridiculousfish
196a7c9d18 Add a helpful comment warning of a nonsense result from tok_last 2014-11-24 01:23:41 -08:00
David Adam
daa856ed47 Makefile: add pkgconfig file to uninstall target 2014-11-23 14:41:22 +08:00
ridiculousfish
04dc0aca50 Fix issue where tab completions could ignore command-specific completions
Fixes #1742
2014-11-20 11:12:19 -08:00
David Adam
918d5595bd __fish_config_interactive: send CWD via escapes in Apple Terminal
Closes #68.
2014-11-20 14:45:11 +08:00
David Adam
0abdf9eeff __fish_urlencode: rework to behave properly on BSD/OS X
Work on #68.
2014-11-20 13:53:24 +08:00
Misty De Meo
8e8549ef7a brew completion: update completion
* Remove unsupported options
 * Add new 'unpack' command
2014-11-20 08:53:53 +08:00
ridiculousfish
cfc2d7fb3f Minor commenting and cleanup in screen.cpp 2014-11-19 12:39:54 -08:00
ridiculousfish
c77f8e73c8 Stop resetting the color for the character under the cursor
Fixes #1821
2014-11-19 12:37:46 -08:00
ridiculousfish
dda6be2592 Use -1 instead of 0 for the notifyd token "missing value" sentinel
This matches NOTIFY_TOKEN_INVALID
2014-11-19 11:42:55 -08:00
ridiculousfish
93eea8de66 Filter lines starting with hash from /etc/shells and /etc/group
Fixes the useradd completion when these files
contains comment lines
2014-11-19 11:42:55 -08:00
David Adam
2ddd839f52 Fix error in yum completions
Pass -- to contains.

Closes #1811.
2014-11-17 18:16:11 +08:00
David Adam
7555772432 Makefile: check HAVE_GETTEXT in Makefile not shell
Tidy up the handling of gettext/non-gettext builds a bit
2014-11-17 17:27:25 +08:00
David Adam
33f9e071a4 Makefile: remove warning about old version of gettext
gettext introduced the Shell interpreter in 2003; I think we can assume
everyone has it.
2014-11-17 17:23:32 +08:00
David Adam
9aaf93f364 web_config: improve abbreviations support
* Fetch abbreviations by reading the variable directly.
 * Use space separators for writing new abbreviations.

Work on #731.
2014-11-16 23:20:27 +08:00
David Adam
14fa48864a abbr.fish: escape the output of abbr --show
Allows abbreviations containing embedded newlines, etc., to be displayed
and exported properly.

Work on #731.
2014-11-16 23:13:22 +08:00
David Adam
206ea15b68 abbr.fish: improve support for corner cases
Handle unusual cases ('=abc', ' =abc') better - regression from
8e8e6314due to a7bab7b.

Work on #731.
2014-11-16 23:05:58 +08:00
David Adam
a7bab7b18b abbr/web_config: support space-delimited abbreviations
Support for space-delimited abbreviations was added to the expansion
parser in fbade198; this commit extends that support to the user-facing
tools, and documents the space-separated behaviour. Equals-delimited
abbreviations are expected to be removed before the next release.

Work on #731.
2014-11-15 23:48:40 +08:00
David Adam
a6a41d159c __fish_print_packages: add support for zypper
Closes #1787.
2014-11-13 18:15:35 +08:00
David Adam
59da180b8f Makefile: install locale files to $localedir 2014-11-13 14:29:28 +08:00
David Adam
51e446bc5f update keybindings docs 2014-11-13 14:15:56 +08:00
Jared Grubb
f68f91b399 Vim bindings doc: describe modes better and explain some non-vim bindings 2014-11-13 14:15:55 +08:00
Konrad Borowski
0ea80a319e Move struct stat checks in configure
Tests for POSIX_C_SOURCE value need to be done before any actual checks
2014-11-11 12:07:43 +01:00
ridiculousfish
38caa0d988 Replace some std::string with wcstring to reduce copying 2014-11-10 00:06:43 -08:00
David Adam
7c2a420e88 add license for tmux code added in d944add 2014-11-10 16:06:02 +08:00
ridiculousfish
d944add782 Use a directory in /tmp instead of ~/.config/fish for named pipe path
The home directory may not be able to support named pipes, e.g. if it's
NFS. This puts the file in a secured directory in /tmp
2014-11-09 22:57:19 -08:00
ridiculousfish
338a1311f5 Make a string into a reference, to save a copy 2014-11-09 22:03:04 -08:00
David Adam
00e0ed64bc __fish_systemctl_*: use systemctl to generate the list of units
Closes #1804.

Note that if systemd is not running, the completion will fail.
2014-11-10 12:51:07 +08:00
David Adam
f2447c537e document behaviour of arrays that are split on import 2014-11-10 11:58:11 +08:00
ridiculousfish
220a15b8f6 Put the universal variables notifier named pipe in XDG_RUNTIME_DIR
This is where named pipes belong.
2014-11-09 17:56:38 -08:00
ridiculousfish
330e996c30 Make universal variables cache the path to the variable file 2014-11-09 16:55:02 -08:00
ridiculousfish
32c0afe5a9 Clean up vared error message output
Fixes #1323
2014-11-09 16:43:14 -08:00
ridiculousfish
e83441395e Make set_color take multiple colors, and choose the best supported one
As suggested in #1323
2014-11-09 16:42:35 -08:00
ridiculousfish
43d23ee56e Remove pre-1.22 migration support in fish_config_interactive
This removes some gnarly and probably broken code that attempts
to upgrade from fish 1.21 to fish 1.22. Fixes #1714.
2014-11-09 13:27:56 -08:00
ridiculousfish
58a0f7f091 Remove "squeezing" code in pager
The "squeezing" code attempted to force completions to fit
onto a single screen, but could render them unreadable.
Let's just get rid of it.
2014-11-09 13:08:09 -08:00
Andreas Heiduk
09bac97bb4 Align fg and bg commands: With no parameters fg prints the help.
`bg` on the other hand only prints `no job`. Now both print `no job`.
2014-11-07 19:05:09 +01:00
ridiculousfish
701a37fd00 Fix to avoid shortening the command line on tab completions.
This prevents cases like `cd /usr/e` from tab-completing to
`cd /usr/` (which is the shared prefix of the tab completions).

Things are still sort of confusing with fuzzy matching, e.g.
with files like this:

    foo1bar
    foo2bar

Then ba<tab> will replace the token with foo. That's surprising,
but not new to this fix.

Fixes #1727
2014-11-06 10:13:33 -08:00
jbbrokaw
9d7fbd2cc0 Fixes typo on line 86 2014-11-04 11:06:21 -08:00
jbbrokaw
32010d1d93 Changes tabs to 4 spaces per fish style 2014-11-04 11:06:21 -08:00
jbbrokaw
75860db511 Adds heroku toolbelt completions 2014-11-04 11:06:20 -08:00
David Adam
4d588a24e9 complete: recognise -w short option for --wraps
Closes #1793.
2014-11-04 23:33:31 +08:00
ridiculousfish
9382dc32df Remove an incorrect comment 2014-11-03 11:33:22 -08:00
ridiculousfish
6db82c162c Clean up some job status messages
Stop printing anything for jobs terminated via ^C.
Don't list the job number if it's the only job.

Fixes #1119
2014-11-03 10:56:16 -08:00
ridiculousfish
c31ad3ed07 Disallow backgrounding in conditionals and before and/or bool statements
Fixes #1136
2014-11-02 13:11:27 -08:00
ridiculousfish
c33a3862cc Disable printf %a test since it has different output on FreeBSD
Fixes #1139
2014-11-02 00:27:52 -07:00
ridiculousfish
6cc64fc9e3 BOM test should only run in UTF-8 locales 2014-11-02 00:14:16 -07:00
ridiculousfish
aafff91ac8 Fix tests on FreeBSD
FreeBSD throws errors if you pass flags like O_WRONLY to mkostemp.
Pass only O_CLOEXEC.
2014-11-01 23:57:12 -07:00
ridiculousfish
4b6639f697 Allow # within string tokens
This means that # must be the first character of the string
to start a comment, in line with other shells

Fixes #953
2014-11-01 21:06:16 -07:00
ridiculousfish
fa588db148 Fix to swallow BOMs in sourced files
Fixes #1518
2014-11-01 16:25:28 -07:00
ridiculousfish
851f0bcfb3 Remove some more dead code 2014-11-01 13:57:21 -07:00
Jared Grubb
d9d9fa512d vi bindings: add CTRL-C handler in default mode
There is no CTRL-C handler for the default mode in the vi bindings. This makes it difficult to say "never mind" and start a new command line like you can do in bash's vi mode. 

There were CTRL-C handlers for insert and visual modes that go back to default mode, but nothing happens in default mode. I copy-pasted the CTRL-C handler from the default key bindings file.
2014-10-31 22:17:17 -07:00
ridiculousfish
84372ba79d Don't suggest non-directories when tab completing cd
Fixes #1059
2014-10-31 10:44:32 -07:00
ridiculousfish
7ac593273e Remove a bunch of dead code identified by cppcheck 2014-10-31 01:15:50 -07:00
ridiculousfish
a529fc9d83 Set of fixes for issues identified by cppcheck 2014-10-30 22:40:35 -07:00
ridiculousfish
173a6a71c0 Fix C_ call to work when gettext is present 2014-10-30 21:59:23 -07:00
ridiculousfish
a177eb8c16 Fix expansion tests on OS X 2014-10-30 21:51:23 -07:00
ridiculousfish
16459099af Make C_ (gettext used in completions) return wcstring 2014-10-30 18:52:37 -07:00
ridiculousfish
fa854d7a01 Eliminate wcsv2strv 2014-10-30 18:52:37 -07:00
ridiculousfish
b3b83449cf Clean up some memory allocation in builtin_commandline 2014-10-30 18:52:37 -07:00
Alex Sulim
d62694a9ce Update completion for Bundler
All commands and options available for Bundler version 1.7.4

Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au> (with trailing
fullstops removed)
2014-10-28 11:58:31 +08:00
Kevin Ballard
6044ac7e5e Fix 3rd arg to PROCESS_EXIT event for %self
The PROCESS_EXIT event takes 3 args: event name, pid, status. However,
when fish is exiting, the PROCESS_EXIT is instead given the status of
whether the last commandline parsed successfully. Change it to use the
same value that fish itself is going to exit with.
2014-10-27 17:23:08 -07:00
Kevin Ballard
ec5f3d0cc8 Don't require .git before running git-describe
When calculating the version, we don't need to test for the presence of
.git before running `git describe`. This lets us work properly in a
detached work tree if GIT_DIR is set.
2014-10-27 15:46:22 -07:00
Natrim
f03d90e9de Add Composer completion 2014-10-26 22:04:47 +08:00
David Adam
a31b44f9b2 contains: add documentation regarding the use of --
Closes #1194.

[skip ci]
2014-10-26 19:02:03 +08:00
David Adam
a580d04dbc history: put the output through the pager in interactive mode
(Ideally, the behaviour of git could be implemented: pipe the input
through a pager iff the length is > window size and in interactive
mode).

Closes #1076.
2014-10-26 17:19:29 +08:00
Pawel Zubrycki
c84cdcd00c Added hg repo status to robbyrussell example prompt 2014-10-26 16:00:12 +08:00
David Adam
5638764bad prompt_pwd: Use tilde expansion to get real full home path
Closes #1133.
2014-10-26 14:20:49 +08:00
David Adam
ab7af98ded expand: expand tilde to canonical paths
Work on #1133.
2014-10-26 08:50:28 +08:00
ridiculousfish
b0e09303a6 Reintroduce "Stop reaping children from SIGCHLD handler"
This re-introduces 3fe1069219
with some associated fixes to address #1768.
2014-10-25 16:51:25 -07:00
David Adam
a242a64833 Move LICENSE to COPYING and update text.
Work on #1073.

fish is not exclusively distributed under the GPL version 2; the
canonical reference is doc_src/license.hdr, so use that as the full
description.

[skip ci]
2014-10-24 17:40:35 +08:00
ridiculousfish
315ff1e712 Revert "Stop reaping children from SIGCHLD signal handler"
This reverts commit 3fe1069219.

In light of #1768
2014-10-21 11:33:22 -07:00
ridiculousfish
21a751d153 Revert "Remove some previously buggy but dead code that I mistakenly resurrected"
This reverts commit 090f027de1.
2014-10-21 11:33:12 -07:00
ridiculousfish
090f027de1 Remove some previously buggy but dead code that I mistakenly resurrected 2014-10-20 21:47:29 -07:00
Roman Inflianskas
cfa41686d2 Add setfacl completions 2014-10-21 08:27:32 +08:00
ridiculousfish
3fe1069219 Stop reaping children from SIGCHLD signal handler
Prior to this fix, a child process may be reaped in one of two ways:
1. By a call to waitpid() within job_continue
2. By a call to waitpid() within the SIGCHLD signal handler

Only the second call was with the WNOHANG option. Thus if the signal
handler fired first, and then the waitpid call fired, we could get a
deadlock because we'd end up waiting on a long-running process. I have
not been able to reproduce this on fish 1.x, though it seems like it
ought to reproduce there too.

This fix migrates the waitpid() call out of the signal handler; the
second class of calls moves to job_reap. This eliminates the possibility
of a race, because we check for job completion before calling waitpid,
and there is no longer the possibility of the job being marked as
complete asynchronously. It also results in a massive conceptual
simplification, since the signal handler is now very simple and easy to
reason about (no more walking jobs lists, etc).

This partially fixes a bug reported in #1273
2014-10-20 15:50:54 -07:00
ridiculousfish
98091faeaf Add an assertion to reflect unreachable code 2014-10-19 18:00:49 -07:00
ridiculousfish
15e095233b Allow funced to retry on error
Fixes #1371
2014-10-17 11:50:09 -07:00
David Adam
a64c372a28 web_config: add support for adding and editing abbreviations
Possible future enhancements include explanatory text and an image for
the 'save' action.

Work on #731.
2014-10-17 10:28:26 +08:00
David Adam
1f91a2a6f5 web_config: map nonexistent post requests to 404 2014-10-17 10:28:26 +08:00
David Adam
4aa38db56f ls: find and use various dircolors initialisation files, if they exist
Closes #1758.
2014-10-17 10:23:05 +08:00
ridiculousfish
9e32b330aa Unescape strings in keyword detection.
This allows keywords to be quoted. However, they may not contain
variable or process expansions, etc. Fixes #1398
2014-10-15 12:49:02 -07:00
ridiculousfish
049bd227ed Remove EXPAND_SKIP_PROCESS, which did not actually work 2014-10-15 12:43:06 -07:00
ridiculousfish
ff7108877b Use binary search to determine what tokens are keywords 2014-10-15 12:04:23 -07:00
ridiculousfish
1927ebbc5d Improve error reporting for unclosed blocks 2014-10-14 00:41:39 -07:00
Kevin Ballard
5db9548f40 Run make depend 2014-10-13 19:29:07 -07:00
Kevin Ballard
cab115c8b9 Don't stop job execution on wildcard errors
Wildcard errors are only reported interactively, and they're also not
really errors. Commands with multiple wildcards would in fact continue
executing if at least one wildcard matched, which is quite surprising.
But they would report an error if there is only one wildcard in the
arguments list and the wildcard has no match, even if there are other
remaining arguments.

Given this inconsistency, and given that sh does not stop execution if a
wildcard fails to match, it seems better to allow execution to continue.
This is better from a scripting perspective anyway, as it means
constructs like `set -l paths foo/*.txt` will actually create the
variable (with an empty value) instead of skipping the `set`
altogether and perhaps causing subsequent code to read or modify a
global or universal variable.
2014-10-13 18:51:51 -07:00
Kevin Ballard
4568359e27 Remove some obsolete job flags
These flags were used by the old parser, but not by the new one.
2014-10-13 18:33:55 -07:00
Kevin Ballard
07e4170418 Suppress wildcard errors in functions
Wildcard errors are only supposed to reported when encountered during
interactive use. The old parser also suppressed them if `is_block` was
true. This was lost in the new parser. However, this also suppresses
errors generated from `begin; code_here; end` and other block
constructs.

Instead, check the parser block stack when we hit an error, and suppress
the error if there are any function calls / events / source invocations.
These all indicate that the code being executed came from somewhere
other than the commandline.
2014-10-13 17:49:26 -07:00
Kevin Ballard
0372cdbe7e Standardize unmatched wildcard errors
Unmatched wildcard errors during parsing are normally only reported when
run interactively. The switch command was unconditionally reporting them
anyway (and not setting the status to 124). Fix it so switch goes
through the same code path as everything else.
2014-10-13 17:27:56 -07:00
ridiculousfish
5d1ddc9c58 Report certain errors from parser_t::eval() that were previously ignored 2014-10-12 20:09:45 -07:00
ridiculousfish
c0b8e81b02 Change how arrays and environment variables interact.
Prior to this change, inherited environment variables
would be split on colons, becoming an array. This change
eliminates that behavior. Now environment variables are
always split on the record separator character (ASCII 0x1e),
with the exception of a short whitelist of PATH, MANPATH,
CDPATH. Likewise, exported variables are also exported
delimited by rs, with the exception of the above whitelist.

Fixes #1374, also see #1656
2014-10-12 15:01:44 -07:00
Konrad Borowski
c3bacc78c7 Mark unknown versions as unknown. 2014-10-12 15:01:48 +02:00
David Adam
4140e678f4 web_config: further python2/3 unification 2014-10-12 16:04:40 +08:00
David Adam
cc0fcdc18d web_config: use only Python 3-style (Unicode) string literals
Improves Python 2/3 compatibility.
(It is the distant future, the year TWO THOUSAND.)
2014-10-12 15:48:14 +08:00
ridiculousfish
fbade198b9 Support space separators for abbreviations as part of #731 2014-10-11 16:50:16 -07:00
Diego Zamboni
d982f2a575 Vagrant completion updates
Improve vagrant completions for some commands to avoid spurious
completions, and add completions for some missing Vagrant commands.

Fixes #1748.
2014-10-10 15:06:00 -07:00
David Xia
becdc8b4fc Add GPL2 LICENSE file
Fixes #1073.
2014-10-10 14:25:47 -07:00
Kevin Ballard
76c6985f82 A little extra tweaking so builtin_print_help looks better
The terminal width magic that __fish_print_help learned doesn't help
when builtin_print_help runs it in a subshell. Instead, add an
undocumented --tty-width flag to __fish_print_help that's used to pass
the terminal width.
2014-10-10 00:11:23 -07:00
Kevin Ballard
ac8c5910eb Rewrite __fish_print_help to produce better results
As a result of this rewrite, the output now:

* Expands to fit the terminal width, like `man` does
* Preprocesses the manpage with `tbl` just in case, since `man` does
  this, even though I doubt any fish manpages use `tbl` formatting.
* Handle bold/underline with the `ul` command as it was designed for
  instead of trying to fake it with `sed`.
* Compresses blank lines as `man` does with the default `less -is`
  pager.
2014-10-09 23:48:10 -07:00
Kevin Ballard
cc7f1755aa web_config: Interpret fish output as utf-8
Use the unicode replacement character in place of non-utf-8 sequences.
2014-10-09 20:21:26 -07:00
Kevin Ballard
7493c9a040 fish_config: Log the path for errors 2014-10-09 18:33:59 -07:00
Kevin Ballard
9fc8729b96 Support -h/--help with eval
`eval` prints help if given a single argument of -h or --help.

Fixes #1379.
2014-10-09 18:07:57 -07:00
Kevin Ballard
80859b8483 Revert "Remove help completion for eval, which doesn't work"
This reverts commit d2f23e1df4.
2014-10-09 17:59:14 -07:00
David Adam
71c55e1a4a web_config: send correct MIME type (and actually send it) 2014-10-09 18:45:17 +08:00
ridiculousfish
d2f23e1df4 Remove help completion for eval, which doesn't work
Fixes #1379
2014-10-08 11:50:04 -07:00
ridiculousfish
c70769c656 Raise debug level to 2 on annoying Changing language to English message
Fixes #1386
2014-10-08 11:46:03 -07:00
Kevin Ballard
a13e067b85 Fix test breakage from 14724401f
We can't use $PATHS to test the :-splitting because the global config
file adds extra paths based on /etc/paths and /etc/paths.d.

Ideally fish would have a way to suppress behavior like that, but for
the time being it doesn't.
2014-10-07 19:37:13 -07:00
Kevin Ballard
8e8e63144b Rewrite abbr function
The usage is still the same, but it's a lot more robust, and also no
longer assumes $fish_user_abbreviations must be a universal variable.

This also fixes the unexpected error output when calling `abbr -a` with
no existing abbreviations.

Calling `abbr -a` with an abbreviation that already exists now silently
overwrites the abbreviation, just like `function` and `bind` do, instead
of complaining.
2014-10-07 19:14:44 -07:00
David Adam
14724401ff env.cpp: correctly check variable_can_be_array
Closes #1746.
2014-10-08 09:53:29 +08:00
Kevin Ballard
72f5ab3186 Fix typo in abbr documentation
[skip ci]
2014-10-07 16:48:22 -07:00
David Adam
3f0210dc96 web_config: fix output if no abbreviations defined 2014-10-07 12:21:02 +08:00
Kevin Ballard
3c8b344a41 Rebuild fish.pc as appropriate
Re-running ./configure will cause fish.pc to rebuild, in case any of the
paths changed. It looks like this actually won't rebuild the rest of
fish, but figuring out how to handle that is out of scope for this
commit.

More importantly, this will rebuild fish.pc when the version string
changes.
2014-10-06 19:08:26 -07:00
David Adam
46241e383f license.hdr: reduce duplication and clarify some comments
[skip ci]
2014-10-06 16:30:00 +08:00
David Adam
ea79f6b03f license.hdr: remove licensing information for XSel, no longer shipped
[skip ci]
2014-10-06 16:30:00 +08:00
ridiculousfish
649c3f262d Don't complain if no errors occurred due to cancellation
Fixes #1166
2014-10-06 00:47:55 -07:00
David Adam
f85ec782a0 set: warn on setting a universal variable when a global is active
Closes #806.
2014-10-06 15:18:03 +08:00
ridiculousfish
9df0bcea99 Clean up string handling in parse_util_detect_errors_in_argument 2014-10-05 15:40:46 -07:00
David Adam
7764a1a6f8 web_config: add support for viewing abbreviations
Add a new tab which lists the current abbreviations defined, by wrapping
the `abbr` command.

Work on #731.
2014-10-05 12:23:31 +08:00
David Adam
980bf6e2f4 web_config: set width to dynamic 80% of window
As we add more tabs, 800px looks increasingly cramped, and our config
should take advantage of the screen space available.
2014-10-05 12:23:31 +08:00
David Adam
501c3d5518 abbr.fish: add abbr, a command to manipulate abbreviations
Work on #731.
2014-10-05 12:23:31 +08:00
David Adam
6a0931aeae web_config: update AngularJS to 1.0.8 2014-10-05 12:23:31 +08:00
ridiculousfish
d7b3821c0a Use ferror instead of checking errno to detect errors in read_file
glibc sets errno even though the file read did not have an error
Fixes #1731
2014-10-04 14:28:26 -07:00
Konrad Borowski
1665f84d60 Fix Perl module completions.
This fixes the issue with nonexistant directories (some Linux
distributions put these for local modules), and also fixes the
issue of dot meaning any character instead of simply dot.
2014-10-04 11:22:56 +02:00
Roman Inflianskas
fabee7e246 add yast2 completion 2014-10-04 00:41:10 +04:00
Jon Gjengset
0ffa434926 Prevent STDERR leak from abook detection in mutt completion
Fixes #1737
2014-10-03 14:39:42 -04:00
Kevin Ballard
a7727765dc Clean up prompt_pwd with the new function -V flag
Also fixes `cd /private` displaying as no path on OS X.
2014-10-02 18:41:39 -07:00
Kevin Ballard
33a76e1f8e Update psub for the new --inherit-variable flag
Also do some minor formatting cleanup, make psub return 1 when executed
outside of a command substitution, and make it respect $TMPDIR.
2014-10-02 18:41:39 -07:00
Kevin Ballard
cfc06203e7 Add new functions flag -V/--inherit-variable
--inherit-variable takes a variable name and snapshots its current
value. When the function is executed, it will have a local variable with
this value already defined. Printing the function source will include
synthesized `set -l` lines for the values.

This is primarily useful for functions that are created on the fly, such
as in `psub`.
2014-10-02 18:41:39 -07:00
Kevin Ballard
6d7a7b00d7 Use ENV_USER with vars set via function -a
ENV_USER is intended to be used when setting any variable whose name is
controlled by the user. The names given to `function -a` certainly
qualifies. This wasn't an issue in practice because the only restriction
ENV_USER imposes is also imposed on ENV_LOCAL, but the rules may change
in the future.
2014-10-02 18:41:39 -07:00
Kevin Ballard
3f11d90744 # This is a combination of 2 commits.
# The first commit's message is:

Simplify default fish_prompt

No need for the set_color caching now that it's a builtin.

Also simplify the 3 classic prompts in fish_config's sample_prompts set.
2014-10-02 18:41:01 -07:00
Kevin Ballard
ae7b6156ac Rewrite fishscript testrunner for better output
Update the fishscript testrunner to use the same output style as the
interactive testrunner.
2014-10-02 12:33:42 -07:00
Kevin Ballard
4ba95ad1c3 Minor tweaks to initial keybinding load
Remove comment that AFAICT is not true anymore.

Ensure someone setting __fish_active_key_bindings as a universal
variable doesn't screw up the initial keybinding load.
2014-10-02 12:14:22 -07:00
Kevin Ballard
bae2b2cc47 Fix examples in bind documentation 2014-10-01 18:20:09 -07:00
Kevin Ballard
47c357a354 Tweak lexicon_filter.in for GNU sed 2014-10-01 18:19:38 -07:00
Kevin Ballard
b592da41f6 Fix doc example for echo 2014-10-01 15:30:36 -07:00
Jan-Thorsten Peter
646d9ab431 Added fish_preexec and fish_postexec events
Fixes #1549.
2014-10-01 15:09:35 -07:00
Kevin Ballard
43e451d4d8 Find fishd file even when $HOME is unset
env.cpp sets up $HOME based on the current user, if it's not inherited
from the environment. fishd_get_config should be using the same
calculated value of $HOME. To that end, move universal variable
initialization to after $HOME is set up, and read the value from the
fish environment instead of using getenv().

Fixes #1725.
2014-10-01 12:35:15 -07:00
Kevin Ballard
1be5e68e99 Export $HOME if we have to calculate it
If $HOME is unset in the environment, fish calculates it with
getpwnam(). However, it wasn't being exported. Just like the $USER
calculation, $HOME should probably be exported, because everyone will
assume that it's an environment variable (as opposed to an unexported
global variable).
2014-10-01 12:27:32 -07:00
David Adam
ab5b22982f fish.pc: add pkgconfig file for fish
Assists other packages in finding the path to install completions: call
`pkg-config --variable=completionsdir fish` or so (like
bash-completion).

As discussed in #1485.
2014-10-01 22:15:24 +08:00
David Adam
5157ac30fa Create and use $DATADIR/vendor_completions.d/ for upstream completions
Closes #1485.
2014-10-01 21:28:01 +08:00
Kevin Ballard
3616dd5889 Base status -b off the parser execution stack
Instead of globally marking the state as "in block" when evaluating
blocks/functions, update the "in block" status when pushing/popping
blocks on the parser stack.

Fixes #1729.

On a side note, `status -b` is actually pretty useless, because it
always returns 0 inside of a function (even without this patch).
2014-09-30 20:58:45 -07:00
Kevin Ballard
489fb7ec3f Expunge INTERNAL_BLOCK from the codebase
It's a relic of the old parser, and isn't used anymore.
2014-09-30 17:20:46 -07:00
Kevin Ballard
51527612d3 Don't leave is_block in bad state after bad redirection
Fixes #1728.
2014-09-30 17:06:56 -07:00
ridiculousfish
c181de1d7f Teach the highlighter about multiple adjacent square bracket expansions
Fixes #1627
2014-09-30 11:15:22 -07:00
Kevin Ballard
d67800bbce Make false/true into builtins
Making `true` into a builtin is a significant optimization to `while
true` loops. As long as `true` is a builtin, we may as well make `false`
builtin as well (despite the fact that it's not typically executed in a
loop).
2014-09-29 13:39:35 -07:00
ridiculousfish
27dd37ebb4 Fix to indent comments in blocks properly (#1710)
This makes two changes to parse trees:

1. Unmaterialized nodes no longer have an invalid source location
For example, with the code `while false;end` there are no tokens
associated with the while loop's job_list, and therefore it is
unmaterialized. Previously it would have had a SOURCE_OFFSET_INVALID.
But now it has a zero source length, but an offset equal to the end of
the while loop (i.e. the semicolon), and a zero length. Correspondingly,
the has_source function now checks the length instead of the offset.

2. Special (comment and error) nodes have always been "disconnected,"
meaning they are not the child of any other node. However, they now have
their parent offsets set to whatever the top of the node stack was when
the node was encountered. This gives us a sense of which node the
comment is "in", e.g. if we are constructing a job list then the
comment's parent will be the job list. This lets us determine the
comment's indent.
2014-09-29 11:30:21 -07:00
David Adam
a186f04f15 Manpage completions: store in $XDG_DATA_HOME
Closes #1343, works towards #1257.
2014-09-29 19:39:36 +08:00
Vincent Huang
15ca3b426f Added some completions for opam
All opam subcommands and descriptions are covered, along with
all the flags that are common to all commands. However, only
`opam config` has complete subsubcommand coverage.
2014-09-29 14:34:07 +08:00
David Adam
1c9aec4899 bind: add completions for -m and -M
See https://github.com/fish-shell/fish-shell/issues/1663
2014-09-29 14:22:37 +08:00
David Adam
f0d8d90ed1 __fish_print_hostnames: use awk to process ssh_config files
Uses awk rather than sed to account for multiple formatting options.

Closes #1260.
2014-09-29 14:08:09 +08:00
David Adam
6ece8523b1 __fish_complete_path: add new completion, mimics builtin path completion
Completions can now be written which disable file completion and then
selectively re-enable it using this function.

Closes #834.
2014-09-29 14:05:18 +08:00
Konrad Borowski
84af3dcd18 Fix YAML indentation in history. 2014-09-28 15:03:55 +02:00
Konrad Borowski
26051ea198 Add Meta+H as keybinding for man page.
Apparently, in zsh, Meta+H can be used to display the manpage for
the current command. This commit adds this zsh feature to fish shell.

The F1 keybinding is left, although it's now secondary according to
fish help, as some terminal emulators don't let the user press F1 key.
2014-09-28 11:12:25 +02:00
ridiculousfish
b00cbae4b5 Fix for issue where comments are lost in function definitions
Fixes #1710
2014-09-27 17:32:54 -07:00
ridiculousfish
4f4734fc9b Fix some busted escape sequences in docs, and slightly reformat a few examples 2014-09-27 16:56:13 -07:00
David Adam
3ac28f2b01 Revert "math.fish: support floating-point maths"
This reverts commit 7cad0069e8.

https://github.com/fish-shell/fish-shell/issues/1723
http://superuser.com/questions/31445/gnu-bc-modulo-with-scale-other-than-0

This is why we can't have nice things.
2014-09-27 23:27:05 +08:00
David Adam
2f71c15b93 Makefile: warn about SELinux; avoid a bashism
Closes #63.
2014-09-27 19:11:35 +08:00
David Adam
7cad0069e8 math.fish: support floating-point maths
Closes #1643.

Thanks to Mickaël RAYBAUD-ROIG (https://github.com/m-r-r) for the idea
of printf.
2014-09-27 18:38:44 +08:00
David Adam
a0e5cdd178 Merge branch 'Integration_2.1.1' 2014-09-26 22:18:31 +08:00
David Adam
ba11a0eb9b Merge branch 'Integration_2.1.1' 2014-09-26 22:03:25 +08:00
ridiculousfish
b511550917 Revert "Prepend ./ to "flag-like file" wildcard expansions and completions"
This reverts commit 316d7004a3.

Reverts fix for 1519 in light of #1713

Conflicts:
	fish_tests.cpp
2014-09-25 22:18:36 -07:00
Kevin Ballard
7935b86cb2 Report expand errors better in fish tests
Print the expected and actual results if an error occurs.
2014-09-25 19:45:54 -07:00
Kevin Ballard
fb8eb22e56 Refactor expand tests slightly to handle errors better
If we get an error relating to our manipulation of the temporary
directory or cwd, we don't want to run the rest of the tests that assume
it worked.
2014-09-25 18:51:03 -07:00
Kevin Ballard
6925cd5d88 Escape the error string in process expansion errors
This prevents `echo %*` from printing a private-use character in the
error string.

Fixes #1720.
2014-09-25 18:24:10 -07:00
Kevin Ballard
35595dbffd Make escape() return a wcstring
This avoids the potential for leaking the resulting string.
2014-09-25 18:20:03 -07:00
Kevin Ballard
cd4fa518b8 Remove my_wcswidth() in favor of fish_wcswidth()
my_wcswidth() was just a wrapper around fish_wcswidth() already.
Instead, add two convenience overrides of fish_wcswidth() to common.h
that make it a drop-in replacement for my_wcswidth().
2014-09-25 18:04:11 -07:00
ridiculousfish
316d7004a3 Prepend ./ to "flag-like file" wildcard expansions and completions
If a wildcard or completion expands to a file that begins with
one or more dashes, prepend a ./ to it so that it doesn't get
parsed as an option.

Fixes #1519
2014-09-24 22:06:43 -07:00
ridiculousfish
1096b1acd5 Merge pull request #1708 from lledey/master
Fix emacs completion on OS X
2014-09-24 11:53:56 -07:00
Konrad Borowski
5766c7c53a Add empty virtual destructor for lru_node_t.
history_lru_node_t has implicit destructor defined. However, because
it's being deleted as lru_node_t, it's not being actually called, as
lru_node_t doesn't have a virtual destructor.
2014-09-24 16:37:32 +02:00
Konrad Borowski
bbce0909fe Remove dead code in history builtin. 2014-09-24 16:18:29 +02:00
lledey
73158d6255 Fix emacs completion on OS X
Avoid calling seq with 0 as argument since its behaviour is wrong on OS X.
2014-09-24 13:05:22 +01:00
ridiculousfish
0986b6d991 Ignore SIGPIPE in fishd. Fixes #1084 2014-09-24 17:51:07 +08:00
Kevin Ballard
c4a453fb22 Try to fix the Travis test failures
It seems expect prioritizes the first pattern in the list, instead of
the pattern that matches earliest in the buffer. That seems pretty
stupid, but let's try moving the prompt pattern to the end and see if
that fixes the Travis failures.
2014-09-23 23:20:02 -07:00
Kevin Ballard
1563501868 Fix missing "1 test failed" line
Also tweak colored output to reset before the newline instead of after,
so travis behaves better (for some reason reset causes travis to display
the line in black).
2014-09-23 22:50:28 -07:00
Kevin Ballard
5f82f721d2 Rejigger test suite
Split test_interactive off from test_fishscript and add a new target
test_high_level that tests both.

Add some Makefile magic so the tests can be run serially without using
sub-make, which gets rid of a little noise from the make output.

Rewrite interactive tests to look better.
2014-09-23 22:39:23 -07:00
Konrad Borowski
8d03baa4e0 Make fish config work if one of colors is undefined.
This moves the sorting to be done before sorting remaining colors.
2014-09-23 13:48:00 +02:00
Mark Griffiths
a9b7e4582f Clean up font declarations
re: fish-shell/fish-shell@2726712e01

As this is rendering ok in Firefox, this version should pickup the best
fonts for most browser/os variants based on 'font-stretch' support.

`.fish_left_bar` should be condensed, the main body font shouldn't.
2014-09-23 12:14:20 +01:00
Konrad Borowski
2726712e01 Restore DejaVu Sans Condensed font.
With font-strentch: condensed, the rendering is acceptable.
2014-09-23 12:28:08 +02:00
Mark Griffiths
8d3d51a020 lexicon_filter fix for escaped options
Fixes #1703. Also fixes short and long options markup in synopsis when
directly following a '(' or '[' character.
2014-09-23 00:24:05 -07:00
Kevin Ballard
5afd42c097 Suppress italics in keyboard shortcuts 2014-09-23 00:21:18 -07:00
Kevin Ballard
5b33e60752 Support bind SEQ to print a binding for SEQ 2014-09-22 21:30:44 -07:00
Kevin Ballard
80078491bd Fix build failure
std::vector::erase() didn't take const_iterator until C++11 >_<
2014-09-22 21:25:51 -07:00
Kevin Ballard
0a3f220572 Rework mode handling of bind
Binds with the same sequence in multiple modes was not working right.
Fix up the implementation to propagate modes everywhere as necessary.
This means that `bind` will properly list distinct binds with the same
sequence, and `bind -e` will take mode into account properly as well.
Note that `bind -e seq` now assumes the bind is in the default bind
mode, whereas before it would erase the first binding with that sequence
regardless of mode.

`bind -e -a` still erases all binds in all modes, though `bind -M mode
-e -a` still only erases all binds in the selected mode.
2014-09-22 21:04:06 -07:00
Kevin Ballard
5eee7d17f6 Fix bind -e without -k
In adding `-k` support to `bind -e` I broke the ability to use `bind -e`
without specifyign `-k`. Oops.
2014-09-22 20:56:45 -07:00
Kevin Ballard
4718636ae2 Update bind documentation
Document all the `bind` flags, including modes.

Fixes #1663.
2014-09-22 20:08:38 -07:00
Kevin Ballard
2cd7f1443c Support -k with bind -e
Also return an exit code of 1 if `bind -k` can't match the key name.
2014-09-22 19:21:08 -07:00
Kevin Ballard
7a9e2d733a Stop overriding <em> in user documentation
<em> used to represent something else, but as far as I can tell, all
uses of <em> in the documentation today actually represent text that's
supposed to be visibly different. Notably, the documentation on
supported escapes uses <em> to indicate the letters that are a
placeholder for e.g. a hex digit, as opposed to being a literal
character.
2014-09-22 14:47:01 -07:00
Kevin Ballard
4ed4b265a5 Show -M and -m flags in bind list 2014-09-22 12:37:11 -07:00
ridiculousfish
e689a38663 Remove a redundant ivar set 2014-09-22 10:24:10 -07:00
ridiculousfish
e5aa06991e Remove INTERNAL_BUFFER, which was only used by fish_pager 2014-09-22 10:16:16 -07:00
Kevin Ballard
cb40507b7b Don't suppress output for printf --help
Fixes #746.
2014-09-21 23:49:14 -07:00
ridiculousfish
7d7a636f24 Allow running executables with $ in their name.
Fixes #1686
2014-09-21 23:35:19 -07:00
ridiculousfish
2450d00693 Add wcstringutil to the OS X build for tests target 2014-09-21 23:35:19 -07:00
Kevin Ballard
a4059d3e60 Support wide characters in printf %c 2014-09-21 23:22:43 -07:00
Kevin Ballard
fe9cf673a2 Add --right-prompt flag to read
Add a flag to read to allow for setting the right prompt command in
addition to the existing support for setting the prompt command.

Fixes #1698.
2014-09-21 21:10:07 -07:00
Kevin Ballard
b480c8ce79 Allow U+F8FF to be typed
U+F8FF is the last character in the private use area, but it's also the
codepoint used for the Apple symbol (), which is typeable on US
keyboards in OS X, and so should actually work.
2014-09-21 21:03:44 -07:00
Kevin Ballard
94e535507c R_MAX should be R_CANCEL now 2014-09-21 20:54:44 -07:00
Kevin Ballard
a027566295 No need for mbstate_t to be static 2014-09-21 20:47:03 -07:00
Kevin Ballard
e1f623f548 Only print fish_greeting for interactive shells
Shell scripts that use `read` should not trigger fish_greeting.

Fixes #1401.
2014-09-21 20:35:33 -07:00
ridiculousfish
4573a4d69c Add wcstringutil to the OS X build 2014-09-21 20:24:56 -07:00
Kevin Ballard
a012aedb31 Fix incorrect error on read with 1-character input
When `read` is given a single character of input (including the
newline), it was bailing as if it had been given no input. This is
incorrect.
2014-09-21 20:00:26 -07:00
Kevin Ballard
a9c8b75599 Tweak git completion for aliases/stashes
Use the new `read -z` flag to complete git aliases better. This approach
won't break if an alias contains a newline.

Also fix stash completion, which was broken on BSD sed.
2014-09-21 19:54:42 -07:00
Kevin Ballard
c64f38f0bf Add extra logging for interactive test failures 2014-09-21 19:42:39 -07:00
Kevin Ballard
8f8c4cdd17 Implement new read --null flag
The `--null` flag to `read` makes it split incoming lines on NUL instead
of newlines. This is intended for processing the output of a command
that uses NUL separators (such as `find -print0`).

Fixes #1694.
2014-09-21 19:27:26 -07:00
Konrad Borowski
f889ad0fda Don't use DejaVu Sans Condensed for documentation rendering.
This font, at least under Kubuntu 14.04 and Firefox I use is rather
ugly. Anti-aliasing is wrong, and the spaces between letters are
rather random. It makes reading the documentation headings and table
of contents harder than it needs to be.

Those issues don't happen with DejaVu Sans.
2014-09-21 14:35:32 +02:00
Konrad Borowski
166a2f91bd Use double dashes for contains in fossil completions.
This fixes the issue with strange behaviour of fish shell when first
option of a command is an option.
2014-09-21 14:32:37 +02:00
Kevin Ballard
a069aec11d Squelch spurious set PATH errors in test 2014-09-20 00:35:51 -07:00
Kevin Ballard
8a3cf144f2 Don't include child directories of $PATH in completions
Directories are completed like commands, because of implicit cd.
However, directories found inside $PATH entries should not be completed,
as implicit cd doesn't work there. Similarly, directories should not be
completed after the `command` builtin.

Fixes #1695.
2014-09-20 00:31:33 -07:00
Kevin Ballard
a381ac2691 Complete custom git commands in $PATH
Git treats executables in $PATH that start with "git-" as custom
subcommands. Add completion support for them.

Fixes #1680.
2014-09-19 19:19:59 -07:00
Kevin Ballard
e2be71cbe4 Better git alias completion
Config entries that contained the word "alias" but were not in fact
aliases no longer are treated as aliases.
2014-09-19 19:19:59 -07:00
ridiculousfish
b8181f9eb8 Further support for term24bit. Teach output.cpp what to do with it. 2014-09-19 18:45:04 -07:00
ridiculousfish
555ff00a30 Initial work to support for term-24bit ("true color") 2014-09-19 18:45:04 -07:00
ridiculousfish
6083c6fc72 Incorporate attribute links for color themes in web_config 2014-09-19 18:44:50 -07:00
Kevin Ballard
940f264ee6 Decrement SHLVL when running exec
`exec` removes fish from the shell "stack", so SHLVL needs to be
decremented to match. This means `exec fish` will result in the same
SHLVL in the new fish instance.

Also tweak the SHLVL logic to interpret an environment SHLVL of "3foo"
as garbage instead of as the value "3".

Fixes #1693.
2014-09-19 17:38:54 -07:00
Kevin Ballard
761be8ab7f Fix intermittent crash in iothread.cpp
The wrong lock was being taken around the result queue, leading to the
occasional crash when processing interactive input. This didn't seem to
really affect normal day-to-day usage, but it did sometimes cause the
interactive tests to crash.

Fixes #1692.
2014-09-19 17:01:47 -07:00
Kevin Ballard
51c2005ea2 Tweak interactive debug output 2014-09-19 16:22:37 -07:00
Kevin Ballard
510ff6a689 Dump interactive logs on travis test failure
As far as I know we can't access the build artifacts from Travis, so we
can't check the interactive logs after a test failure. Add an
environment variable that causes the test runner to dump the logs
itself, and set that variable for Travis.
2014-09-19 14:52:02 -07:00
ridiculousfish
7229d7a326 Make redirections and pipes expand abbreviations too 2014-09-19 14:05:33 -07:00
ridiculousfish
1a7b33e8fb Expand abbreviations on semicolon per #731 2014-09-19 13:59:53 -07:00
Mark Griffiths
2d3f7babe3 Updated license in lexicon_fiter.in 2014-09-19 18:24:24 +08:00
Kevin Ballard
0a32d96b27 Reset fish_bind_mode when changing fish_key_bindings
Also avoid resetting bindings if fish_key_bindings is "modified" without
actually changing.

Fixes #1638.
2014-09-18 15:46:17 -07:00
David Adam
174f5ba99a Makefile/configure: detect and use sed from configure 2014-09-18 20:29:49 +08:00
David Adam
708e21f929 fish_indent: minor documention updated
[skip ci]
2014-09-17 10:18:27 +08:00
David Adam
eb40baacfc update completions for builtin commands 2014-09-17 10:17:48 +08:00
Michael Stillwell
133ba6e01b Ignore "host", "hostname", and hostname wildcards
See the PATTERNS section of ssh_config(5) for wildcards supported by ssh.
2014-09-16 17:20:59 +02:00
qjcg
7f4908b0db Fix webconfig URL generation for python3
Closes #1677.

Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-09-15 16:41:15 +08:00
qjcg
9bfb4f1e11 Fix webconfig URL generation for python3
Closes #1677.

Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-09-15 16:40:28 +08:00
Mark Griffiths
ea435d35ad After proofreading, fixes a few minor typos. 2014-09-12 16:45:47 +02:00
David Adam
5b709eb5df README.md: document minimum Doxygen version
[skip ci]
2014-09-12 21:35:20 +08:00
Konrad Borowski
5c25be51ea Merge pull request #1662 from MarkGriffiths/documentation-update
Documentation update: Fixes issue #1557
2014-09-12 13:36:26 +02:00
Kevin Ballard
f6da9d4d5d Add missing newline after bind -k foo error message 2014-09-08 23:37:34 -07:00
Kevin Ballard
f22864b813 Ensure type still works if $IFS is unset 2014-09-08 23:35:29 -07:00
Kevin Ballard
22fd8e65ad Disable fish_title on interactive tests
This was apparently what was interfering with the tests working on
Linux.

Tweak .travis.yml to install expect so the tests run on Linux.
2014-09-08 00:16:42 -07:00
Kevin Ballard
190712d4b0 Add a test harness for interactive behavior
Add a test harness that uses `expect` to drive Fish to test interactive
behavior.

Include some tests for `read`.
2014-09-07 23:56:59 -07:00
Kevin Ballard
efb1467e4e Cleanup fish tests a bit
Split `make test` into two targets `make test_low_level` and `make
test_fishscript`, primarily so fishscript tests can be rechecked quickly
after edits.

Reformat the test.fish file and update some of the code to be a little
more straightforward (e.g. `if not cmd` instead of `if cmd; else`).
2014-09-07 23:50:44 -07:00
Mark Griffiths
6b75a4593b Merge remote-tracking branch 'upstream/master' into documentation-update
Conflicts (resolved):
	doc_src/design.hdr - \c changed to backticks
2014-09-08 07:05:53 +01:00
Mark Griffiths
a04d5fd065 Makefile changes 2014-09-08 06:54:03 +01:00
Noah Frederick
8643a5e266 Clean up typos and style in design doc
This includes:

- Fixing some typos and misspellings
- Being consistent with pronouns (she/he)
- Hyphenating "built-in" and "command-line" where appropriate
2014-09-07 16:08:10 -07:00
Mark Griffiths
47f97bbdd5 Fixed a couple of typos 2014-09-07 17:43:58 +01:00
Mark Griffiths
2e034e767f Update menus for consistency
Widened 'Commands' menu + fish logo
fish logo added to FAQ menu
'Commands' menu content aligned with Docs menu
'FAQ' menu content aligned and made 1st order as all entires are long
and wrap.
2014-09-07 17:35:19 +01:00
Mark Griffiths
aed92b9a2c Merge branch 'master' into documentation-update 2014-09-07 16:37:31 +01:00
ridiculousfish
482e615fe0 Bump osx/config.h version number to 2.1.1 2014-09-07 10:51:11 +08:00
David Adam
cb46ed3701 make_tarball: build from the current checkout, ignore Travis 2014-09-07 09:37:43 +08:00
David Adam
9c78295a9a avoid symlink attacks in __fish_print_packages
* use $XDG_CACHE_HOME for __fish_print_packages completion caches

Fix for CVE-2014-3219.

Closes #1440.
2014-09-06 23:48:38 +08:00
Kevin Ballard
15cf06438e Suppress PATH errors in sudo tab-completion
Setting a non-existant path component to PATH logs an error to stderr.
This is not appropriate for non-interactive temporary modifications,
like the one done by the `sudo` completion helper function.
2014-09-04 13:22:06 -07:00
Iuri Rezende Souza
93b296d899 translations: Add portuguese translation 2014-09-04 23:00:22 +08:00
Iuri Rezende Souza
6e133c90e8 pager: translate additional strings 2014-09-04 23:00:22 +08:00
Mark Griffiths
f1bd2b823d Strip working files 2014-09-04 13:13:57 +01:00
Mark Griffiths
ac92f54ca6 Updated Testing Info. Ready for PR.
Major documentation cleanup and update.
- Fixes Issue #1557
- Moves entire documentation to Markdown format. Much simpler.
- Fully supports Doxygen 1.8.7+
- All documentation targets updated: user_doc, share/man, doc and
doc/refman.pdf.
- Tested across Ubuntu, CentOS and Mac OS.

See doc_src/FORMATTING.md for in depth rationale and style guide.
2014-09-04 12:50:43 +01:00
Mark Griffiths
1b4c85eb69 Fixed Doxygen required version to 1.8.7
Doxygen 1.8.6 and lower do not have the \\htmlonly[block] directive
which fixes a multitude of problems in the rendering of the docs. In
Doxygen 1.8.7 the list of understood HTML entities was greatly
increased. I tested earlier versions and many little issues returned.
2014-09-04 12:07:07 +01:00
Mark Griffiths
fb792c60cd Fix missed conflict 2014-09-04 12:01:08 +01:00
Mark Griffiths
38e153f568 Remove CLANG options, for portability 2014-09-04 11:58:01 +01:00
Mark Griffiths
6821f5ef4a Portable Makefile fix 2014-09-04 11:34:43 +01:00
Mark Griffiths
ab433cfe65 Portable range fix 2014-09-04 11:32:22 +01:00
Mark Griffiths
6a57a50968 Fix comment collision in lexicon 2014-09-04 10:54:18 +01:00
Mark Griffiths
cb9ef98bed Fix Doxygen unresolved link error 2014-09-04 10:32:13 +01:00
Mark Griffiths
89f0b9abc3 Added Doxygen notes 2014-09-04 10:23:38 +01:00
Mark Griffiths
0e5ddfd9f5 Merge branch 'master' into documentation-update
Conflicts (fixed):
	doc_src/design.hdr
2014-09-04 10:00:52 +01:00
Mark Griffiths
0a249c84ce Added notes to Formatting doc 2014-09-04 09:48:30 +01:00
ridiculousfish
fd70ae0b61 Kill fishd after installing fish for OS X, to pick up fishd changes 2014-09-04 00:30:14 -07:00
Mark Griffiths
76aeae5db6 Synopsis tweaks 2014-09-04 08:10:42 +01:00
Mark Griffiths
1facdd30fb Formatting additions 2014-09-04 07:55:21 +01:00
Kevin Ballard
4b7dc525b8 Fix the fix for commandline -i in binds 2014-09-03 23:05:48 -07:00
Joseph Tannhuber
4acea72700 New -n option for read builtin
Usage: read -n nchars
Reads maximum of nchars characters. If nchars <= 0, there's no limit.
2014-09-03 22:48:37 -07:00
Mark Griffiths
cf688f6ba2 List fixes 2014-09-03 20:31:57 +01:00
Mark Griffiths
5f3b0d9f1e Merge branch 'master' into documentation-update
Conflicts:
	doc_src/design.hdr
2014-09-03 20:31:43 +01:00
Mark Griffiths
05848038db Index long line fixes 2014-09-03 19:39:22 +01:00
Mark Griffiths
664e2e5686 Rebase conflict resolution 2014-09-03 15:14:11 +01:00
Mark Griffiths
adbcecb456 Rebase documentation changes 2014-09-03 15:10:53 +01:00
Mark Griffiths
3df9e20ca7 Formatting updates 2014-09-03 14:43:27 +01:00
Mark Griffiths
3f005c928a Supporting files for development 2014-09-03 14:43:27 +01:00
Mark Griffiths
b3e28ac41a Addition of 'ascii fish' logo
+ small fixes
2014-09-03 14:43:27 +01:00
Mark Griffiths
c39fe3433b Various additions and fixes 2014-09-03 14:43:27 +01:00
Mark Griffiths
668fa66d78 Fish documentation formatting guidelines 2014-09-03 14:43:27 +01:00
Mark Griffiths
98ebb21489 Consistency fixes 2014-09-03 14:43:27 +01:00
Mark Griffiths
137abd0cfa Make line length, wrapping and spacing consistent 2014-09-03 14:43:26 +01:00
Mark Griffiths
d7308fecbe gitignore changes 2014-09-03 14:43:26 +01:00
Mark Griffiths
73fb9915fd Fixed a few more edge cases 2014-09-03 14:43:26 +01:00
Mark Griffiths
855a119654 Fix trailing backslash after complex options 2014-09-03 14:43:26 +01:00
Mark Griffiths
cf7a6a6a65 Fix ampersand redirector 2014-09-03 14:43:26 +01:00
Mark Griffiths
509d152e54 Tutorial auto colouring, Man page and Make fixes
Completely fixes #1557 and the underlying Doxygen changes that caused
it. Should make fish docs simpler and more robust, more consistent and
generally prettier.

todo:
- trap unmarked text as arguments in context
- test & fix sed portability - see in particular. (so far tested on BSD
(Mac) and GNU sed).
- test Makefile changes
- last round of aesthetic changes and getting that ascii fish in there…
2014-09-03 14:43:26 +01:00
Mark Griffiths
35e6fb3788 Updated build_doc…sh to run cleanly in Xcode build
If the lexicon input filter isn't specified (as is the case in the
current Xcode project, the script quietly continues without it.
2014-09-03 14:43:26 +01:00
Mark Griffiths
9b79931265 Update configure.ac and README for Doxygen 1.8 2014-09-03 14:43:26 +01:00
Mark Griffiths
14a7118499 Revert 60b9f8d..e4d6eaf
This rolls back to commit 60b9f8db18.
2014-09-03 14:43:26 +01:00
Mark Griffiths
afdabd97ff Revert Xcode project
This reverts accidentally included files in commit
60b9f8db18.
2014-09-03 14:43:25 +01:00
Mark Griffiths
07f8fc7697 Update autoconf and README for Doxygen 1.8 2014-09-03 14:43:25 +01:00
Mark Griffiths
def7666609 Fix missed escaped '--' inside /fish block 2014-09-03 14:43:25 +01:00
Mark Griffiths
c900f23662 Add lexicon filter to manpages.
Fixed manpage 'NAME'. Under Doxygen 1.8, the output format has
changed, so the old sed script was leaving man pages with two titles.
2014-09-03 14:43:25 +01:00
Mark Griffiths
7b093ee4b3 Lexicon filter: fix 'if' and 'for' special cases 2014-09-03 14:43:25 +01:00
Mark Griffiths
9f75cef5e5 Style fix for sub-line comments 2014-09-03 14:43:25 +01:00
Mark Griffiths
a410c31bf8 Fixes lexicon filter pipes '|" 2014-09-03 14:43:25 +01:00
Mark Griffiths
1cd50ba572 Merged in latest changes to docs and formatting tweaks
Addresses issue #1557 as well as fixing many typos, HTML errors and
inconsistencies. Also introduces automatic syntax colouring and enables
new documentation to be written in Markdown. TODO fix Tutorial.
2014-09-03 14:43:25 +01:00
Mark Griffiths
1052eeee8c Simplify styling 2014-09-03 14:43:25 +01:00
Mark Griffiths
e22f0dda32 Removed dupes from gitignore 2014-09-03 14:43:24 +01:00
Mark Griffiths
766a6b8309 Added some clutter
Subllime and a few temporary files.
2014-09-03 14:43:24 +01:00
Mark Griffiths
d282bc4625 Documentation update
Rework for Doxygen >1.8. Moved large parts of the documentation to a
simplified format, making use of Markdown enhancements and fixing bad
long options.
2014-09-03 14:43:24 +01:00
Chris Wolfe
677cee44ad failiure/failure
Fix misspelling of failure in the fish shell design doc
2014-09-03 14:48:21 +02:00
Mark Griffiths
60e7726832 Merge branch 'master' into documentation-update 2014-09-03 13:14:25 +01:00
Mark Griffiths
385b00a468 Formatting updates 2014-09-03 13:06:49 +01:00
Kevin Ballard
1c4223889b Fix test output for complete -e tests
GNU sort behaves stupidly when LC_ALL is not C. This caused the test
output to be sorted wrong.
2014-09-02 15:52:56 -07:00
Kevin Ballard
90a4fd34d2 Add tests for the various complete -e changes 2014-09-02 15:30:58 -07:00
Kevin Ballard
2820c7a9cd Erase all completions with complete -c foo -e
When passing `-e` to `complete -c foo` without any other options, all
options for the command should be erased.

Fixes #380.
2014-09-02 15:30:58 -07:00
Kevin Ballard
edd4f3d5ad Don't erase old-style options with complete -l foo -e
When erasing long option completions, distinguish between gnu-style and
old-style options, just like we do when adding and printing completions.
2014-09-02 15:30:58 -07:00
Kevin Ballard
aa7fe3b132 Don't erase all long opts with complete -e
When using `complete -c foo -l bar -e`, all long options for the command
were being erased because it was also comparing the short option, which
was 0.
2014-09-02 15:30:58 -07:00
Kevin Ballard
1d9886d0f7 Don't segfault when erasing short option completions
When using `complete -s x -e`, the long option is unspecified, which
makes it NULL. Comparing this to a `wcstring` segfaults.

Fixes #1182.
2014-09-02 15:30:51 -07:00
Mark Griffiths
6068e85ef2 Merge branch 'master' into documentation-update 2014-08-30 12:38:57 +01:00
Mark Griffiths
ced471d4ce Supporting files for development 2014-08-30 12:21:46 +01:00
Mark Griffiths
2445ac4a53 Addition of 'ascii fish' logo
+ small fixes
2014-08-30 11:03:02 +01:00
Konrad Borowski
1d0279eac5 Fix F1 binding to work with multiple tokens. 2014-08-30 11:18:56 +02:00
ridiculousfish
f8b21fe199 Merge pull request #1655 from xakon/master
Fix small typo in documentation
2014-08-29 23:21:34 -07:00
Christos Kontas
0f330d7226 Fix small typo in documentation 2014-08-30 08:03:24 +02:00
Nikolai Aleksandrovich Pavlov
cb29350954 Fix fish_vi_mode.fish 2014-08-29 13:15:13 -07:00
Kevin Ballard
7fce9e2411 Trim trailing newline on cmdsubst when IFS=''
When $IFS is empty, command substitution no longer splits on newlines.
However we still want to trim off a single trailing newline, as most
commands will emit a trailing newline and it makes it harder to work
with their output.
2014-08-29 12:48:45 -07:00
Kevin Ballard
cc52a59e1a Rework how screen size is tracked
The screen size is fetched after a SIGWINCH is delivered. The current
implementation has two issues:

* It calls ioctl() from the SIGWINCH signal handler, despite ioctl() not
  being a function that is known to be safe to call.
* It's not thread-safe.

Signals can be delivered on arbitrary threads, so we don't know if it's
actually safe to be modifying the cached winsize in response to a
signal. It's also plausible that the winsize may be requested from a
background thread.

To solve the first issue, we twiddle a volatile boolean flag in the
signal handler and defer the ioctl() call until we actually request the
screen size.

To solve the second issue, we introduce a pthread rwlock around the
cached winsize. A rwlock is used because it can be expected that there
are likely to be far more window size reads than window size writes. If
we were using C++11 we could probably get away with atomics, but since
we don't have that (or boost), a rwlock should suffice.

Fixes #1613.
2014-08-29 12:46:03 -07:00
Kevin Ballard
24ac7d2698 Fix commandline behavior in bind functions
When a key is bound to a fish function, if that function invokes
`commandline`, it gets a stale copy of the commandline. This is because
any keys passed to `self-insert` (the default) don't actually get added
to the commandline until a special character is processed, such as the
R_NULL that gets returned after running a binding for a fish command.

To fix this, don't allow fish commands to be run for bindings if we're
processing more than one key. When a key wants to invoke a fish command,
instead we push the invocation sequence back onto the input, followed by
an R_NULL, and return. This causes the input loop to break out and
update the commandline. When it starts up again, it will re-process the
keys and invoke the fish command.

This is primarily an issue with pasting text that includes bound keys in
it. Typed text is slow enough that fish will update the commandline
between each character.

---

I don't know of any way to write a test for this, but the issue can be
reproduced as follows:

    > bind _ 'commandline -i _'

This binds _ to a command that inserts _. Typing the following works:

    > echo wat_is_it

But if you copy that line and paste it instead of typing it, the end
result looks like

    > _echo wat_isit

With this fix in place, the pasted output correctly matches the typed
output.
2014-08-29 12:29:48 -07:00
Kevin Ballard
130619d6b0 Fix $SHLVL
Due to being read-only, SHLVL wasn't being incremented properly for
recursive invocations of fish.
2014-08-29 12:22:35 -07:00
Konrad Borowski
71ab40e536 Add Fossil command completions. 2014-08-29 14:19:55 +02:00
Philipp Klose
7638a7d531 Fix typo in German translation 2014-08-29 11:23:08 +02:00
Kevin Ballard
b92a09d5e7 Fix the assertion failure in expand_variables()
expand_variables() is slightly confused about how to handle last_idx. On
input, it expects it to be the index to start processing at, but when
called recursively it always passes the current index. This means that
it may sometimes pass an index 1 past the end of the input string.
Notably, that happens when typing something like

> echo "$foo

(where "foo" is any string that is not a prefix of some existing
variable name)

Fix this by explicitly defining last_idx as being the last processed
index, meaning the next index to process is actually last_idx-1. This
means we should call it with next.size() instead of next.size()-1.
2014-08-28 13:29:43 -07:00
Mark Griffiths
3d29cc8636 Various additions and fixes 2014-08-27 00:30:08 +01:00
Mark Griffiths
d6c5a1e0c4 Merge branch 'master' into documentation-update
Conflicts (FIXED):
	doc_src/command.txt
	doc_src/index.hdr.in
	doc_src/read.txt
	doc_src/type.txt
2014-08-26 20:05:46 +01:00
Mark Griffiths
9bcd4a6811 Merge remote-tracking branch 'upstream/master' 2014-08-26 19:23:50 +01:00
Mark Griffiths
e90b1651e4 Fish documentation formatting guidelines 2014-08-26 19:19:48 +01:00
Mark Griffiths
66ccae4bfe Consistency fixes 2014-08-26 19:19:24 +01:00
Kevin Ballard
02a07164f3 Make commandline -P actually work
`commandline --paging-mode` worked but the short flags list accidentally
omitted the documented `-P`.
2014-08-24 14:47:05 -07:00
ridiculousfish
9419191aa6 Clean up variable expansion, and properly handle embedded NULs 2014-08-24 14:39:56 -07:00
ridiculousfish
f71b10df8c Don't suggest after | & or in comments
Fixes #1631
2014-08-24 14:39:41 -07:00
ridiculousfish
0b7735d279 Merge pull request #1630 from kballard/expand_variables_in_quoted_strings
Fix various expansions issues with variables
2014-08-23 16:13:25 -07:00
Konrad Borowski
1f3a93a3af Fix the compilation under gcc 4.9.0.
gcc interpretes C99's compound literals more strictly by invalid the
compound literal on implicit to pointer cast (because of automatic
storage duration, 6.5.2.5.6 in C99 standard draft).

This fixes the issue by not using compound literals at all.
2014-08-22 21:52:41 +02:00
ridiculousfish
f9f773cc28 Comment on why we run 'false' in web_config.py 2014-08-22 12:04:23 -07:00
Kevin Ballard
d9bf53c6e5 Show a non-zero status in the fish_config prompt
When selecting a prompt with fish_config, render the prompt with a
non-zero status so the user knows what it looks like.
2014-08-22 12:00:16 -07:00
Kevin Ballard
f549ada16c Set up fish_{function,complete}_path properly
In the base config.fish, fish_function_path and fish_complete_path have
$__fish_datadir/{functions,completions} added to them if not already
present. For some reason they were replacing the final path component
instead of being added on to the end.
2014-08-22 11:54:58 -07:00
ridiculousfish
d8b955294a Add a test for syntax highlighting pipes 2014-08-22 11:53:20 -07:00
Kevin Ballard
8aad53556d Highlight pipe characters correctly
According to `fish_config`'s colors page, the pipe operator `|` is
supposed to be colored the same as a statement terminator.
2014-08-22 11:45:05 -07:00
Kevin Ballard
61ce9db4ba Make the alias built-in function work better
The new --wraps functionality was breaking aliases of the form
`alias foo='bar baz'`. That is, aliases where the body is multiple
words. Extract the first word of the body and use that instead.

Use better errors for aliases with no name or no body.
2014-08-22 11:40:59 -07:00
ridiculousfish
2da435712a Merge branch 'master' of github.com:fish-shell/fish-shell 2014-08-22 11:39:41 -07:00
Andy Lutomirski
9079ec459c webconfig: fixes for token security
* Use 16-byte tokens
 * Use os.urandom (random.getrandbits shouldn't be used for security)
 * Convert to hex correctly
2014-08-22 15:44:43 +08:00
Andy Lutomirski
aaddccfdb1 webconfig: Use a constant-time token comparison
This prevents a linear-time attack to recover the auth token.
2014-08-22 15:39:13 +08:00
ridiculousfish
033373f078 Merge branch 'make_type_better' of github.com:kballard/fish-shell into kballard-make_type_better 2014-08-21 21:36:39 -07:00
Kevin Ballard
d63db59ade Clean up the IFS handling in command substitution
Remove the useless ASCII test of the first byte of IFS. We don't split
on the first character, we only use a non-empty IFS as a signal to split
on newlines.
2014-08-21 20:57:23 -07:00
Kevin Ballard
20899f2df9 doc: Document how IFS affects command substitution
IFS is used for more than just the read builtin. Setting it to the empty
string also disables line-splitting in command substitution, and it's
done this for the past 7 years. Some day we may have a better way to do
this, but for now, document the current solution.
2014-08-21 20:57:23 -07:00
Kevin Ballard
b9948ca297 doc: Fix docs on $HOME/$USER
The docs claimed that the $HOME and $USER variables could only be
changed by the root user. This is untrue. They can be changed by
non-root users as well.
2014-08-21 20:57:23 -07:00
Kevin Ballard
f33e6a053e doc: Fix links in "Further help and development"
Hyperlink the mailing list to the proper info page.

Tweak the GitHub link to use https.
2014-08-21 19:15:58 -07:00
Kevin Ballard
9f725bee1f set: Print an error when setting umask to a bad value
Repurpose the ENV_INVALID return value for env_set(), which wasn't
currently used by anything. When a bad value is passed for the 'umask'
key, return ENV_INVALID to signal this and print a good error message
from the `set` builtin.

This makes `set umask foo` properly produce an error.
2014-08-21 19:06:21 -07:00
Andy Lutomirski
3e2d68a059 webconfig: fixes for token security
* Use 16-byte tokens
 * Use os.urandom (random.getrandbits shouldn't be used for security)
 * Convert to hex correctly
2014-08-22 01:43:30 +08:00
Kevin Ballard
2974025010 Fix error span for invalid slice indexes
The span now properly points at the token that was invalid, rather than
the start of the slice.

Also fix the span for `()[1]` and `()[d]`, which were previously
reporting no source location at all.
2014-08-21 01:10:07 -07:00
Kevin Ballard
9a90e041f3 Color "$foo[1" as an error
We can't color the whole argument as an error, since the tokenizer is
responsible for that and doesn't care abou this case, but we can color
the `$foo[` bit as an error.
2014-08-20 22:55:24 -07:00
Kevin Ballard
b0be15d4f7 Fix highlighting of "foo\"bar"
The backslash-escape wasn't being properly caught by the highlighter.

Also remove the highlighting of `"\'"`, as `\'` is not a valid escape in
double-quotes, and add highlighting for a backslash-escaped newline.
2014-08-20 22:34:18 -07:00
Kevin Ballard
a24998abac Highlight "$foo[1]" properly
Preserve the highlighting applied to the slice brackets when coloring
variables inside of double-quoted strings.
2014-08-20 22:28:42 -07:00
Kevin Ballard
cc49042294 Parse slices even for empty variables
When a variable is parsed as being empty, parse out the slice and
validate the indexes anyway, behaving for slicing purposes as if the
variable had a single empty value.

Besides providing errors when expected, this also fixes the following:

    set -l foo
    echo "$foo[1]"

This used to print "[1]", now it properly prints nothing.
2014-08-20 22:09:32 -07:00
Kevin Ballard
3981b644d6 Fix double expansions ($$foo)
Double expansions of variables had the following issues:

* `"$$foo"` threw an error no matter what the value of `$foo` was.
* `set -l foo ''; echo $$foo` threw an error because of the expansion of
  `$foo` to `''`.

With this change, double expansion always works properly. When
double-expanding a multi-valued variable, in a double-quoted string the
first word of the inner expansion is used for the outer expansion, and
outside of a quoted string every word is used for the double-expansion
in each of the arguments.

    > set -l foo bar baz
    > set -l bar one two
    > set -l baz three four
    > echo "$$foo"
    one two baz
    > echo $$foo
    one two three four
2014-08-20 21:45:07 -07:00
Mark Griffiths
4651919bd8 Make line length, wrapping and spacing consistent 2014-08-19 13:41:23 +01:00
Mark Griffiths
fed4bb5c07 Merge branch 'master' into documentation-update
Conflicts (FIXED):
	.gitignore
	doc_src/complete.txt
	doc_src/function.txt
2014-08-19 11:42:21 +01:00
Mark Griffiths
ec903ce625 gitignore changes 2014-08-19 11:04:19 +01:00
Mark Griffiths
3ea956a0b4 Fixed a few more edge cases 2014-08-19 10:58:22 +01:00
ridiculousfish
d0c85471b4 Make escape_string transform wildcard characters
The characters ANY_CHAR, ANY_STRING, and ANY_STRING_RECURSIVE are
currently transformed by unescape, but not by escape. Let's try escaping
them. Fixes #1614.
2014-08-16 19:25:36 -07:00
Mark Griffiths
3cc62c1fd2 Fix trailing backslash after complex options 2014-08-16 10:36:34 +01:00
Mark Griffiths
079e369e91 Fix ampersand redirector 2014-08-16 10:18:41 +01:00
ridiculousfish
06400b83b1 Support for command wrapping ("aliases")
Add the --wraps option to 'complete' and 'function'. This allows a
command to (recursively) inherit the completions of a wrapped command.
Fixes #393.

When evaluating a completion, we inspect the entire "wrap chain" for a
command, i.e. we follow the sequence of wrapping until we either hit a
loop (which we silently ignore) or the end of the chain. We then
evaluate completions as if the wrapping command were substituted with
the wrapped command. Currently this only works for commands, i.e.
'complete --command gco --wraps git\ checkout' won't work (that would
seem to encroaching on abbreviations anyways). It might be useful to
show an error message for that case.

The commandline builtin reflects the commandline with the wrapped
command substituted in, so e.g. git completions (which inspect the
command line) will just work. This sort of command line munging is
also performed by 'complete -C' so it's not totally without precedent.

'alias will also now mark its generated function as wrapping the
'target.
2014-08-15 18:14:36 -07:00
ridiculousfish
fe68d30be9 Use sgrep instead of grep in ssh completion 2014-08-13 01:06:15 -07:00
ridiculousfish
a3a11c2e0c Strip users with leading underscores from ssh completions 2014-08-12 14:46:59 -07:00
ridiculousfish
3f526698ab Make __fish_print_users work on OS X via dscl 2014-08-12 14:42:49 -07:00
Andy Lutomirski
78e2b7cc08 webconfig: Use a constant-time token comparison
This prevents a linear-time attack to recover the auth token.
2014-08-11 18:04:03 -07:00
ridiculousfish
6ce74febc7 Accepting an autosuggestion should clear the pager 2014-08-11 10:17:41 -07:00
ridiculousfish
ede3d422a0 Don't show "and 1 more rows" in pager if that requires a row 2014-08-11 09:55:07 -07:00
Mark Griffiths
629a39b45b Tutorial auto colouring, Man page and Make fixes
Completely fixes #1557 and the underlying Doxygen changes that caused
it. Should make fish docs simpler and more robust, more consistent and
generally prettier.

todo:
- trap unmarked text as arguments in context
- test & fix sed portability - see in particular. (so far tested on BSD
(Mac) and GNU sed).
- test Makefile changes
- last round of aesthetic changes and getting that ascii fish in there…
2014-08-08 03:44:37 +01:00
David Adam
397249a8d5 Authenticate connections to web_config service
- Require all requests to use a session path.
 - Use a redirect file to avoid exposing the URL on the command line, as
   it contains the session path.

Fix for CVE-2014-2914.
Closes #1438.
2014-08-07 16:14:42 +08:00
David Adam
b44b624ca5 Documented Alt-Right to accept a single word of an autosuggestion
See https://github.com/fish-shell/fish-shell/issues/1262
2014-08-06 22:00:13 +08:00
Mark Griffiths
6513c7eab8 Updated build_doc…sh to run cleanly in Xcode build
If the lexicon input filter isn't specified (as is the case in the
current Xcode project, the script quietly continues without it.
2014-08-05 19:28:03 +01:00
Mark Griffiths
276d90a45d Update configure.ac and README for Doxygen 1.8 2014-08-05 18:46:14 +01:00
Mark Griffiths
c94b15a951 Revert 60b9f8d..e4d6eaf
This rolls back to commit 60b9f8db18.
2014-08-05 18:43:33 +01:00
Mark Griffiths
e4d6eaf17a Revert Xcode project
This reverts accidentally included files in commit
60b9f8db18.
2014-08-05 18:28:11 +01:00
Mark Griffiths
60b9f8db18 Update autoconf and README for Doxygen 1.8 2014-08-05 18:09:15 +01:00
Mark Griffiths
cff928e2dc Merge branch 'master' into documentation-update
Conflicts:
	doc_src/index.hdr.in -- UPDATED
	doc_src/license.hdr -- UPDATED
2014-08-05 13:50:21 +01:00
Mark Griffiths
6aa701b3ee Fix missed escaped '--' inside /fish block 2014-08-05 13:07:46 +01:00
ridiculousfish
cb480dddf6 Don't try to colorize errors when running in Xcode 2014-08-04 13:55:53 -07:00
ridiculousfish
33c714ca03 Add fish_tests target to Xcode build
Allows running the tests in Xcode
2014-08-04 13:32:23 -07:00
Gio d'Amelio
bcda3f1baa Set $CMD_DURATION to milliseconds. Fixes #1585 2014-08-04 13:36:39 +08:00
David Adam
4ae2753025 Authenticate connections to web_config service
- Require all requests to use a session path.
 - Use a redirect file to avoid exposing the '/start' URL on the
   command line, as it contains the cookie value.

Fix for CVE-2014-2914.
Closes #1438.
2014-08-04 13:34:26 +08:00
David Adam
b5cd21c337 Further fixes to universal variable server socket management
- Change fishd_path to std::string
- Warn, rather than exiting with an error, if the universal variable
  server path is not available, and provide more useful advice.
- Export the new __fishd_runtime_dir variable.
2014-08-04 13:26:14 +08:00
David Adam
8844f0c142 Clarify I/O redirection documentation
Fix the examples and try and improve the clarity of the section.

Closes #1409.
2014-08-03 18:54:10 +08:00
David Adam
4cb4fc3ef8 Fix for CVE-2014-2905 - fishd restart required.
- Use a secure path for sockets (some code used under license from
   tmux).
 - Provide the secure path in the environment as $__fish_runtime_dir.
 - Link the new path to the old path to ease migration from earlier
   versions.

Closes #1359.

After installing fish built from or after this commit, you MUST
terminate all running fishd processes (`killall fishd`, `pkill fishd`
or similar). Distributors are encouraged to do this from within their
packaging scripts. fishd will restart automatically, and no data should
be lost.
2014-08-03 17:00:14 +08:00
David Adam
6cabd42ed2 Remove getpeerid/getpeerucred and fallbacks 2014-08-03 15:40:44 +08:00
ridiculousfish
0daee33ad6 Document new fish_title behavior per #334 2014-08-03 00:00:26 -07:00
ridiculousfish
b97a94ccc8 Clean up reader_write_title to work with wcstring 2014-08-02 21:01:40 -07:00
Mark Griffiths
5cc3dcdbd8 Add lexicon filter to manpages.
Fixed manpage 'NAME'. Under Doxygen 1.8, the output format has
changed, so the old sed script was leaving man pages with two titles.
2014-08-03 02:25:47 +01:00
Mark Griffiths
7e3382340e Lexicon filter: fix 'if' and 'for' special cases 2014-08-03 02:22:23 +01:00
jianjun
87abcecca6 add command line string as $argv[1] for fish_title 2014-08-02 12:57:38 -07:00
Mark Griffiths
8ca88f14f7 Style fix for sub-line comments 2014-08-02 17:11:00 +01:00
Mark Griffiths
b4a4a7c611 Fixes lexicon filter pipes '|" 2014-08-02 17:10:28 +01:00
Kevin Stone
556680cf5e Update grunt.fish
Fixed command error when no local Gruntfile results in a command error.

Fixes #1592.
2014-08-02 00:04:26 -07:00
Mark Griffiths
f4077bd41f Merged in latest changes to docs and formatting tweaks
Addresses issue #1557 as well as fixing many typos, HTML errors and
inconsistencies. Also introduces automatic syntax colouring and enables
new documentation to be written in Markdown. TODO fix Tutorial.
2014-08-02 04:51:43 +01:00
Mark Griffiths
cb5c560688 Simplify styling 2014-08-01 13:25:41 +01:00
Mark Griffiths
8ac0fdfea7 Merge branch 'master' into documentation-update
Conflicts:
	doc_src/history.txt
	doc_src/test.txt
2014-08-01 05:16:02 +01:00
Mark Griffiths
6dfd71670a Removed dupes from gitignore 2014-08-01 04:21:04 +01:00
Mark Griffiths
4d4cc34aff Added some clutter
Subllime and a few temporary files.
2014-08-01 04:11:28 +01:00
Mark Griffiths
c070a2aa3e Documentation update
Rework for Doxygen >1.8. Moved large parts of the documentation to a
simplified format, making use of Markdown enhancements and fixing bad
long options.
2014-08-01 03:37:32 +01:00
David Adam
af14cf8f8b Revert "Check effective credentials of socket peers"
This reverts commit 8412c867a5.

Just checking the credentials of the peer turns out to be insufficient.
See https://github.com/fish-shell/fish-shell/issues/1436.
2014-07-31 16:57:42 +08:00
ridiculousfish
35ba97cbdf Fix up OSC / iTerm2 escape code parsing as part of #1565 2014-07-30 11:35:39 -07:00
George Nachman
9f59cf1468 Parse OSC codes in escape_code_length(). They begin with <esc> ] and are terminated with ST (<esc> backslash) or BEL (ASCII 7). 2014-07-30 11:35:39 -07:00
Konrad Borowski
6c80a3461c Add support for toor account.
Currently fish doesn't recognize toor as special. However, it's likely
that on BSD systems, fish shell will be used on toor, not on root (toor
is an intentionally existing account to use more advanced shell on, like
shell).
2014-07-30 11:55:47 +02:00
phette23
5591afff6e add completions for Node.js & NPM 2014-07-29 18:35:08 -07:00
ridiculousfish
8144725739 Fix bad example in docs for test -n $MANPATH
Fixes #1574
2014-07-29 14:44:51 -07:00
ridiculousfish
52ae5f885e Improve history robustness against corrupt files
Fixes #1581
2014-07-29 14:42:03 -07:00
ridiculousfish
b6658c5497 Render sample prompts faster in fish_config by using a thread pool 2014-07-29 12:12:32 -07:00
ridiculousfish
aad5163b49 Make prompt selection more like color selection in fish_config. Remove
the "show prompt source" button.
2014-07-29 11:00:39 -07:00
David Xia
6d18bf5cd4 Fix umask function regex
Some grep implementations complain of empty subexpression

fixes #1313
2014-07-29 01:43:18 -04:00
David Xia
adabc2d7a0 Fix fish_config error with python3
Closes #1253.
2014-07-28 22:02:55 +08:00
ridiculousfish
d07ea3b66a Teach fish to compute the length of more escape sequences.
Fixes #1243
2014-07-26 14:07:17 -07:00
ridiculousfish
2bb08a4ca0 Make abbreviations work correctly with type-ahead
Fixes #1434
2014-07-25 12:23:42 -07:00
ridiculousfish
30ae473d85 Clean up default environment variables.
This stops unconditionally setting values for HOME and USER,
if we find those values in the environment. It also saves about 16KB
on OS X, which getpwuid allocates.
2014-07-25 10:49:13 -07:00
ridiculousfish
e9f870e25a Add support for history --merge to incorporate history changes from
other sessions.

Fixes #825
2014-07-25 10:49:12 -07:00
Siteshwar Vashisht
317660c2fe Avoid using OptionParser to parse bindings in webconfig.py
OptionParser eats commaandline arguments passed to bind actions, so avoid using it.
2014-07-25 08:39:31 +05:30
ridiculousfish
5e60efefbf Allow parse_util_detect_errors to treat incomplete strings as errors
Fixes bug where sourcing a file with an unclosed quote would not have a
backtrace
2014-07-24 14:41:15 -07:00
ridiculousfish
f6a89d13c2 Merge branch 'master' of github.com:fish-shell/fish-shell 2014-07-23 22:27:37 -07:00
Siteshwar Vashisht
3e01dd955f Updated code to parse bindings in webconfig.py 2014-07-23 01:53:15 +05:30
adisbladis
27fa0ea9d7 "webconfig.py: Don't allow NoneType as buffer, fallback to bytes.
Fixes TypeErrors when using bindings tab"
2014-07-22 12:31:57 +02:00
Michishige Kaito
2de914d8c3 Select the 4th line of output, instead of the second to last line 2014-07-16 18:22:27 +01:00
Michishige Kaito
616fa85458 Add grunt completion 2014-07-16 16:53:18 +01:00
ridiculousfish
20ad496c00 Merge pull request #1559 from davidxia/add-vi-mode-docs-fixes
Fix minor syntax and capitalization mistakes in vi mode docs
2014-07-15 19:05:03 -07:00
David Xia
fa88c42cf1 Fix minor syntax and capitalization mistakes in vi mode docs 2014-07-15 21:59:08 -04:00
David Xia
e84a762171 Add docs for vi mode
fixes #1536
2014-07-15 21:29:02 -04:00
Kevin Ballard
16e50c258a type: Restore combined flags behavior
Fix the parsing of `type` flags to handle combined short flags as
appropriate, e.g. `type -qf ls`.
2014-07-14 11:27:11 -07:00
Kevin Ballard
cce4265cef Fix make test to use local functions
When running `make test` we want to use the local function definitions,
not the ones installed on the system.

The system config.fish will still insert the system definitions at the
end, but at least ours will take precedence.
2014-07-14 00:46:38 -07:00
Kevin Ballard
973dd6ffbd read: Support arrays, character splitting
Enhance the `read` builtin to support creating an array with the --array
flag. With --array, only a single variable name is allowed and the
entire input is tokenized and placed into that variable as an array.

Also add custom behavior if IFS is empty or unset. In that event, split
the input on every character, instead of the previous behavior of doing
no splitting at all.
2014-07-14 00:46:38 -07:00
Kevin Ballard
72e8489d50 command: Rename -p/--path flag to -s/--search 2014-07-13 19:11:29 -07:00
Kevin Ballard
cfa13ed84c Update tests for new type behavior
One of the tests was using `>/dev/null` to suppress the `type` output.
That needs to be `^/dev/null` now, but instead just go ahead and use the
new `-q` flag.
2014-07-13 19:11:29 -07:00
Kevin Ballard
29b3b6b31e type: Stop claiming grep is a function
Use `functions -q` instead of searching the `functiosn -na` list for the
provided word. This may result in an automatically-loaded function being
sourced, but that happens anyway with the default output.

This change means the results of `test -q foo` can be relied upon to
indicate whether `foo` can actually be invoked. Previosly, if `foo` was
the name of an automatically-loaded function file but did not actually
define a function `foo`, and there was no execuable `foo`, then `type -q
foo` would lie and say `foo` can be invoked when it can't.
2014-07-13 19:11:29 -07:00
Kevin Ballard
533496e43a Adopt the new type -q flag in the other functions 2014-07-13 19:11:29 -07:00
Kevin Ballard
6f7a7459c1 test: Add a new --quiet flag to suppress output
The --quiet flag is useful when only the exit status matters.

Fix the documentation for the -t flag to no longer claim that `type` can
print "keyword", as it never does that.

Stop printing a blank line for functions/builtins when the -p flag has
been passed. It's just not useful.
2014-07-13 19:11:29 -07:00
Kevin Ballard
6b062b07b4 type: Separate the notion of multi and paths
Track whether -a and -f have been supplied separately. That way both
`type -a -f command` and `type -f -a command` behaves correctly, as does
`type -a -f foo` where there are multiple executables named `foo` in the
$PATH.
2014-07-13 19:11:29 -07:00
Kevin Ballard
bfd3a47380 Fix type function to work better
Stop using getopt to parse flags. It's far more expensive than
necessary, and results in long flags not being parsed on OS X. This also
allows args starting with - after the options list to be properly
interpreted as a value to test.

Print the error message to stderr as is appropriate.

Use the new `command -p` functionality when the -a flag has not been
provided (`command` does not have any equivalent to the -a flag),
instead of using `which`. This is faster and also avoids any possible
disagreement between `which` and what fish thinks is valid.

Stop testing every path to see if it's executable, that test has already
been done by `which` or `command -p`.

The end result is `type -P ls` is roughly 250% faster, according to
profiling, on my OS X machine.
2014-07-13 19:11:29 -07:00
Kevin Ballard
0933e5cab4 Fix typo in documentation for type builtin 2014-07-13 19:11:29 -07:00
Kevin Ballard
cc565fc16c Teach command builtin a -p/--path flag
Give the `command` builtin a single flag, -p/--path, that causes it to
print the full path that would be executed for the given command.
2014-07-13 19:11:29 -07:00
Kevin Ballard
62d86b3d18 Fix documentation on variable scopes for read
The `read` docs incorrectly asserted that -g was the default for
variables. In actuality it behaves the same way that `set` does.
2014-07-14 09:12:00 +08:00
xzfc
4bbbd2dde6 Fix segfault in status builtin 2014-07-14 09:07:35 +08:00
David Adam
b884117a9e Makefile: just build key_reader with the same objs as fish 2014-07-14 09:06:40 +08:00
ridiculousfish
7def139020 Turn the 'mode' parameter of environment variables into an enum 2014-07-13 17:30:48 -07:00
ridiculousfish
b667eee351 Merge branch 'fix_set_scopes' of github.com:kballard/fish-shell into kballard-fix_set_scopes 2014-07-13 14:12:51 -07:00
ridiculousfish
891f55b2b3 Fix for crash in kill-whole-line
Fixes #1548
2014-07-13 14:06:35 -07:00
Kevin Ballard
7b12fd26f3 Change how we separate toplevel and global scopes
Instead of introducing a new local scope at the point of `set`, merely
push a new local scope at the end of env_init(). This means we have a
single toplevel local scope across the lifetime of the fish process,
which means that

    set -l foo bar
    echo $foo

behaves as expected, without modifying the global environment.
2014-07-13 13:21:06 -07:00
Kevin Ballard
387ec5c06a set: Don't create empty var when erasing index
When using `set -e foo[1]` to erase an index, if the variable doesn't
already exist, return 1 instead of creating it as an empty variable.
2014-07-12 15:43:32 -07:00
Kevin Ballard
dcc043df3b Add an optional mode to env_get_string()
The mode restricts the scope in which the variable is searched for.

Use this new restricted scope functionality in the `set` builtin. This
fixes `set -g` to not show local shadowing variable values, and also
allows for scoped erasing of slices.
2014-07-12 15:35:34 -07:00
Kevin Ballard
2457997cd9 set: Print an error when setting a special var in the wrong scope
When attempting to set a readonly or electric variable in the local or
universal scopes, print an appropriate error. Similarly, print an error
when setting an electric variable as exported. In most cases this is
simply a nicer error instead of the 'read-only' one, but for the 'umask'
variable it prevents `set -l umask 0023` from silently changing the
global value.
2014-07-12 14:07:55 -07:00
Kevin Ballard
d9bed68fe9 Mark COLUMNS/LINES as electric vars
They're dynamically calculated, so they qualify. This also removes them
from the list of exported global variables, because they're actually not
exported.
2014-07-12 14:07:55 -07:00
Kevin Ballard
2eb65b3625 set: Don't treat toplevel scope the same as global
When using the `set` command with the -l flag, if we're at the top
level, create a temporary local scope. This makes query/assignment
behavior be consistent with the value-printing behavior.

This works by marking the current block as needing to pop the
environment if a local scope was pushed. I assume this is safe to do. I
also assume the current block is the right one to modify, rather than
trying to walk up the stack to the root.
2014-07-12 14:07:55 -07:00
Kevin Ballard
76fdfe6890 Rewrite env_exists() for better scope handling
env_exists() wasn't properly handling multiple scopes in some cases,
notably with readonly/electric variables. Rewrite it to operate in a
more straightforward fashion.
2014-07-12 14:07:55 -07:00
ridiculousfish
495adee269 Don't sanity_lose if INTERNAL_BLOCK_NODEs have a null argv
Fixes #1545
2014-07-12 11:01:00 -07:00
Kevin Ballard
383aaa236e Don't allow readonly/electric values to come in through the env
When initializing fish, ignore any inherited environment variables that
match any of the readonly or electric variable names.

This prevents really weird behavior when e.g. fish is launched with
COLUMNS already set to something. In that case, testing $COLUMNS within
fish behaves normally, but any subprocesses get the value that fish
itself had inherited.
2014-07-12 00:53:23 -07:00
Kevin Ballard
8c89e6bce5 Fix typo and tweak set docs
Move the docs for the `-n` flag to `set` out of the list of scopes.
2014-07-12 00:21:04 -07:00
ridiculousfish
98297e5234 Teach while loops to not hang forever with no-execute
Fixes #1543
2014-07-11 11:28:10 -07:00
ridiculousfish
3915faf382 bind should not show -k for bindings that are escape sequences, not keys 2014-07-07 10:45:26 -07:00
ridiculousfish
d5fa4b2ccb Remove errant debug line 2014-07-07 02:01:43 -07:00
ridiculousfish
3ff104ba30 Rename lock_t to mutex_lock_t to fix Solaris compilation
Fixes #1510
2014-07-07 00:38:37 -07:00
Daniel J. Hofmann
706286c289 Fixes use-after-free issue.
Calling writer() might fail in which case launch_buff gets freed.
This patch prevents the subsequent use of memory after it was freed.
2014-07-06 20:54:19 -07:00
ridiculousfish
18c1b12741 Switch variable name in tests from foo to something less likely to be
used accidentally
2014-07-06 20:41:21 -07:00
ridiculousfish
5cda1e55e0 Must load universal variables earlier, and issue a barrier after erasing
one.

Fixes #1526
2014-07-06 18:12:18 -07:00
ridiculousfish
195cd130f8 Fix sense of test in parse_execution to issue a barrier if an external
command has run
2014-07-06 18:12:18 -07:00
ridiculousfish
b19f45e15d Add test for issue 1526 2014-07-06 18:12:18 -07:00
Maxim Gonchar
3acd0dfe48 Add dropbox completion 2014-07-06 20:40:53 +08:00
ridiculousfish
74cedbf1c5 Hopeful fix for Cygwin build (#1530) 2014-07-05 10:22:20 -07:00
Siteshwar Vashisht
7d47ec4c46 Properly handle invalid arguments in builtins
Fixes #1522
2014-07-02 17:04:58 +05:30
callesg
14cdd24f78 Added better build description closes #70
The stuff nedded to build on Ubuntu
2014-07-01 16:08:37 +02:00
David Adam
1cfd055f82 env.cpp: allow all users to change $USER and $HOME
Closes 1425 (https://github.com/fish-shell/fish-shell/issues/1425)
2014-06-28 19:16:29 +08:00
Sascha
ed5e585684 Also add forward/backward movement in insert mode 2014-06-27 22:55:27 +08:00
Sascha
32948b8dc6 Provide more useful insert mode mappings 2014-06-27 22:55:20 +08:00
Cameron Norman
ad5ad3d1ad Fix bug for systemd being installed but not PID 1 2014-06-20 11:08:35 +08:00
ridiculousfish
3bc2dda00d Merge branch 'death_of_fishd'
Incorporates more removal and cleanup of fishd remnants.
2014-06-18 11:19:28 -07:00
ridiculousfish
ee8e9c0291 Remove env_universal.h and env_universal.cpp from project 2014-06-18 10:14:35 -07:00
David Adam
f4bc1ef4a2 docs: clarify fish_greeting function and variable in FAQ
Tidy fish_greeting section in main documentation.

Closes #1506.
2014-06-18 17:29:59 +08:00
ridiculousfish
3513ce3ac0 Universal variable callbacks should only be announced for changed
values, not every value. Also support erase notifications.
2014-06-16 12:27:28 -07:00
ridiculousfish
6277a2e4a4 Migrate global functions out of env_universal. Have env operate directly
on an env_universal_t.
2014-06-15 17:30:50 -07:00
ridiculousfish
84faa60c4e Fix Linux build of env_universal_common 2014-06-13 15:35:37 -07:00
ridiculousfish
735195e8ea Teach env_universal_remove to directly report whether the variable was
successfully removed.
2014-06-13 15:15:11 -07:00
Konrad Borowski
0f15ab8d05 Allow fast failure on Travis. 2014-06-11 20:44:41 +02:00
ridiculousfish
17c2d76c5e Removed connection_t and associated functions 2014-06-09 16:41:10 -07:00
ridiculousfish
11c1562512 Remove connection_t usage from write_to_fd 2014-06-09 12:57:44 -07:00
ridiculousfish
ef646f0f78 Removal of more fishd artifacts and headers 2014-06-09 12:07:40 -07:00
Siteshwar Vashisht
7b3132d39d Fixed code to parse bindings for webconfig 2014-06-08 16:05:00 +05:30
ridiculousfish
8345fc2b9e Fix indentation 2014-06-07 23:27:06 -07:00
Arjun AK
58f4182880 Fixes issue:1484
Make jobs builtin return 1 if there are no jobs running in the background
2014-06-08 11:25:37 +05:30
ridiculousfish
ecf56606dc Remove large parts of fishd interaction, including
env_universal_server
2014-06-06 10:34:42 -07:00
ridiculousfish
be3e64e5ea Remove fishd.cpp source, docs, and target from Makefile and Xcode
project
2014-06-05 11:49:05 -07:00
mehultikekar
741342ba1d Fix Makefile.in for building key_reader 2014-06-01 15:58:08 -04:00
Konrad Borowski
d97e31b4ab git prompt shouldn't export variables. 2014-06-01 09:39:28 +02:00
ridiculousfish
ce4081af93 Fix some warnings in Linux build 2014-05-31 13:46:28 -07:00
ridiculousfish
32f5edc9c5 Do not continue execution if argument expansion fails. Fixes #1488 2014-05-31 12:41:27 -07:00
Konrad Borowski
b481128a93 Fix small misspelling in comment in expand.cpp 2014-05-31 09:08:46 +02:00
ridiculousfish
ab62001b74 Implement correct error message for failed process expansion. 2014-05-30 13:50:13 -07:00
ridiculousfish
2dfd57bb8c Hopeful fix for hangs in iothread tests in travis-ci 2014-05-29 13:44:31 -07:00
ridiculousfish
20d7a142c5 Enable fishd-less mode by default.
Shell instances now synchronize universal variables using the
filesystem. fishd should no longer be launched by default.
2014-05-29 13:05:47 -07:00
ridiculousfish
9ae06c541f Remove inotify-based universal notifier
The inotify notifier is fragile, fails on travis, and fails to compile
on certain Linux kernels. It doesn't appear to work as well as the named
pipe mechanism. Best to just get rid of it.
2014-05-29 09:57:56 -07:00
ridiculousfish
655293ece9 input_readch must return R_EOF instead of WEOF. Fixes #1452 2014-05-25 15:22:44 -07:00
Konrad Borowski
a983318501 Silence other fallbacks
This removes Clang warnings
2014-05-25 12:47:36 +02:00
ridiculousfish
8769c06350 Fix some annoying warnings in fish_tests with gcc 4.8 2014-05-24 16:15:45 -07:00
Konrad Borowski
5066710e60 Use current version documentation links in README 2014-05-24 14:07:18 +02:00
ridiculousfish
451c97f35a Merges changes to support running fish without fishd.
In the new mode (not yet enabled), universal variables are set by reading and writing the fishd file directly, with some file locking for synchronization. This enables forwards and backwards compatibility. However there is no compatibility with simultaneous edits. Changes may be lost if fishd and the new mechanisms both attempt writes.

fishd is still enabled by default for now; it will be disabled in a future commit. You can opt into the new mechanism (disabling fishd) by setting the environment variable fish_use_fishd to 0 before starting fish. This cannot itself be a universal variable, because of bootstrapping: the value is needed to determine how we read universal variables in the first place.

Universal variable change notifications (i.e. reacting immediately to live edits) are tricky. Checking for changes is simple and relatively inexpensive (just a stat()), but relying solely on that would require frequent wakeups, and show up in fs_usage. So how do we get change notifications into an fd that we can monitor via select()? We support a few strategies, expressed as universal_notifier_t::notifier_strategy_t. By default we use notifyd on OS X and a named pipe on Linux / everywhere else. This is also configurable at runtime via the fish_universal_notifier variable.
2014-05-21 11:02:17 -07:00
ridiculousfish
8a577a9d4d Remove an errant system("ls") 2014-05-21 10:55:00 -07:00
ridiculousfish
950150469a Disable inotify tests pending investigation into why it fails on
travis-ci
2014-05-21 10:50:57 -07:00
ridiculousfish
3cbace98a7 'echo -' should output a dash instead of treating it as options
Fixes #1459
2014-05-16 15:19:07 +08:00
ridiculousfish
e214df8980 Try using IN_DELETE_SELF with inotify 2014-05-16 13:37:23 +08:00
ridiculousfish
e3cccdf571 Add check for kernel version to try to determine why travis-ci is
failing with inotify
2014-05-16 13:09:10 +08:00
ridiculousfish
a0bf841be2 Check for non-negative watch object in inotify_add_watch 2014-05-16 12:54:52 +08:00
ridiculousfish
73cbb0c65f Add a check to ensure the file really is deleted in inotify test 2014-05-16 12:35:07 +08:00
ridiculousfish
2f89ddbead Add test for inotify support to try to track down travis-ci is failing 2014-05-16 12:16:10 +08:00
ridiculousfish
a526693915 Refine test for enabling strategy_inotify in fish_tests 2014-05-15 17:25:13 +08:00
ridiculousfish
31f2a3a7d7 Fix a warning about missing enum in fish_tests.cpp 2014-05-15 14:44:17 +08:00
ridiculousfish
147403f958 Use mkostemp in universal variables when available 2014-05-15 14:37:44 +08:00
ridiculousfish
38c52cf9b5 Formatting fixes 2014-05-15 14:31:57 +08:00
ridiculousfish
64c1c75c42 Improve universal variable error messages 2014-05-15 14:27:06 +08:00
ridiculousfish
2b11d1060c Make initialize_synchronizes_via_fishd default to false. Add some
logging support to universal variables.
2014-05-15 10:49:06 +08:00
ridiculousfish
a73b903df9 Null notifier to support fishd synchronization, so we can select the
synchronization mechanism at runtime
2014-05-14 15:03:44 +08:00
ridiculousfish
30cfb3e795 Correct a comment and clean up code that listens for universal notifier
changes
2014-05-14 14:16:53 +08:00
ridiculousfish
a0e6d4375a Merge branch 'master' into death_of_fishd 2014-05-14 14:09:32 +08:00
ridiculousfish
c7aca5cc35 Hopefully better fix for prompt under Windows. Things that may store
NOT_A_WCHAR must be wint_t, not wchar_t
2014-05-14 13:30:41 +08:00
David Adam
3225d7e169 avoid symlink attacks in __fish_print_packages and spawning fishd
* use $XDG_CACHE_HOME for __fish_print_packages completion caches
 * when starting fishd, redirect fishd output to /dev/null, not a
   predictable path

Fix for CVE-2014-3219.

Closes #1440.
2014-05-12 09:30:05 +08:00
Konrad Borowski
6596d91c82 Fix prompt under Windows.
The fix is obviously a hack caused by that NOT_A_WCHAR
doesn't fit in wchar_t. Better fix would be nice.
2014-05-10 17:13:08 +02:00
ridiculousfish
d554b7da08 Merge branch 'master' into death_of_fishd 2014-05-09 16:07:11 -07:00
Philipp Schroer
cd7f1a15f8 Automatically add include paths for ncurses on Cygwin 2014-05-09 14:43:23 -07:00
ridiculousfish
fa68c2619f Use parm_left_cursor and parm_right_cursor for bulk cursor motions.
Fixes #1448
2014-05-09 14:37:23 -07:00
ridiculousfish
e97bec10ea Remove needs_polling from universal_notifier_t. Add some expository
comments.
2014-05-07 14:22:05 -07:00
ridiculousfish
7763718b60 Further cleanup and rationalization of named pipe universal notifier. 2014-05-06 14:10:55 -07:00
Konrad Borowski
7f2c4cbf8a Move the empty function test to tests. 2014-05-06 12:31:44 +02:00
Konrad Borowski
91ebe12fc2 Add test for empty function name. 2014-05-06 12:18:09 +02:00
Konrad Borowski
13e1e7e1e9 Fix NULL dereference when function name is not specified
It was possible to type `function ""; end`, and this caused fish to
crash because of NULL pointer.
2014-05-06 12:07:16 +02:00
ridiculousfish
8a263952ad Fix named pipe universal notifier. No more threads. Tests now pass. 2014-05-05 23:33:05 -07:00
ridiculousfish
f27232bd0a Initial work on strategy_named_pipe universal notifier. 2014-05-04 15:06:40 -07:00
Konrad Borowski
16534ec644 Improve test_wchar2utf8().
Currently it contains strange code like using `do` loop in order to
avoid `goto`s (they aren't evil, honestly), the pointless `if (mem)`
conditional which doesn't even work (had semicolon for some reason).

You may think this code had a bug where the code didn't check for
the pointer to be null before calling `free`, but this is not the case,
as according to C and C++ standard, `free` should allow `NULL` pointers,
and ignore them.
2014-05-04 15:48:50 +02:00
ridiculousfish
7e44bcfd8a Make inotify-based universal variable notifier tests pass 2014-05-03 19:57:20 -07:00
ridiculousfish
8cbd66b0f9 Merge branch 'death_of_fishd' of https://github.com/fish-shell/fish-shell into death_of_fishd 2014-05-03 19:36:22 -07:00
ridiculousfish
47a81c2b39 Re-establish inotify watch when file is deleted 2014-05-03 16:31:11 -07:00
ridiculousfish
56bf209f84 Merge branch 'master' into death_of_fishd
Conflicts:
	configure.ac
2014-05-03 15:33:48 -07:00
ridiculousfish
333fb1bf97 Use mkostemp instead of mktemp where available 2014-05-03 15:27:58 -07:00
Josh Kuhn
cbef88a593 Fix python completion to work for pypy
Pypy outputs 2 lines with the -V option, as well as adding a whole lot of stuff that confuses the very general sed regex that was used before.
2014-05-03 15:06:57 -07:00
SanskritFritz
b13179d4f4 Functions instead of static variables for conditions. 2014-05-03 12:30:41 -07:00
SanskritFritz
cf89d9bfb0 Fixed an unintended result of some copy paste. 2014-05-03 12:30:41 -07:00
SanskritFritz
f49848c8a4 Removed unnecessary comments. 2014-05-03 12:30:41 -07:00
SanskritFritz
0101b39f6c Completions added/updated. 2014-05-03 12:30:41 -07:00
Maurizio De Santis
4285baa6e1 Prompt sample: Debian chroot environment
When you chroot in Debian, bash shows the chroot environment in the prompt:

```bash

...

if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

...
```

This is the effect:

```
(chroot_env) user@host:~#
```

It is useful when chrooting, since usually the hostname remains the same and thus you can't distinguish where you are.
2014-05-03 12:28:38 -07:00
ridiculousfish
e530af1ff7 Use adjusted_pos when determining the token for tab completing
redirecitons, per #1296
2014-05-03 00:15:13 -07:00
ridiculousfish
60e94a4ec8 fishd to link against fish_version.o in Xcode build 2014-05-02 23:36:47 -07:00
ridiculousfish
c66a574fa0 Simple test for completing redirections 2014-05-02 23:25:54 -07:00
Konrad Borowski
ef3259035d Use precompiled parse files. 2014-05-02 10:31:04 +02:00
Konrad Borowski
4226f4412b fishd requires fish_version.o. 2014-05-02 10:30:01 +02:00
Konrad Borowski
368983d8da Fix header name in fishd.cpp. 2014-05-02 10:26:22 +02:00
ridiculousfish
16b982958b Correctly complete redirections. Fixes #1296 2014-05-02 01:22:39 -07:00
ridiculousfish
0c4819131c Add fish_version to Xcode project 2014-05-02 00:22:19 -07:00
ridiculousfish
186b0f62eb Early implementation of inotify-based universal variable notifier for
Linux
2014-05-01 16:44:37 -07:00
Konrad Borowski
77bc4c5725 Properly check for miliseconds during screen update
This removes undefined behavior in the previous code by properly
checking for miliseconds (actually typing proper names, not abusing
pointer arithmetics).
2014-05-01 11:00:13 +02:00
Konrad Borowski
dd47da92f5 Fix handle leak in get_description() 2014-05-01 10:14:12 +02:00
Konrad Borowski
f8e35de18d Shorten compilation times
Now fish shell stores version is a small file called by other files.
This means that a slight change which modifies one file won't cause
many of files to recompile.

The compilation unit is intentionally small, this is by design. The
smaller it is, the faster it will recompile, and it will be compiled
a lot.
2014-05-01 09:46:27 +02:00
Konrad Borowski
a7facfb760 Fix memory leak when displaying bind list.
This also removes duplication from the code.
2014-05-01 09:23:23 +02:00
ridiculousfish
f5e62f28bc Save a memory allocation in append_formatv 2014-04-30 16:29:52 -07:00
ridiculousfish
60c8012e9e Implement notifyd-based notification strategy for universal variables
(OS X specific)
2014-04-30 15:50:03 -07:00
ridiculousfish
08d6e515c7 Merge remote-tracking branch 'origin/death_of_fishd' into death_of_fishd 2014-04-30 12:03:07 -07:00
ridiculousfish
fac2f27dd3 Implement deletion of universal variables. Add tests for them. 2014-04-30 10:17:36 -07:00
Konrad Borowski
ed37427f9e White is not identical to normal
This makes white work properly in white terminals when used for
`fish_color_*` variables. It's probably silly thing this small
mistake breaks, to be honest, but it's still a bug.
2014-04-30 15:44:51 +02:00
ridiculousfish
7a5a277c29 Implement universal variable deletion. Adopt shared memory uvar notification. 2014-04-29 17:03:00 -07:00
ridiculousfish
38da76804e Implement shared memory strategy for universal variable notifications 2014-04-29 14:14:50 -07:00
ridiculousfish
a949f0b0c3 Move universal variable callbacks out from under the lock, to avoid a
possible deadlock on reentrancy
2014-04-29 11:28:00 -07:00
ridiculousfish
ffc23046a2 Include a missing header for uint64_t 2014-04-29 10:09:38 -07:00
Alan Thompson
07944cfd20 Change terminology in docs from 'environment variables' -> 'shell variables' 2014-04-29 07:27:56 +02:00
ridiculousfish
91aadab3dd Enhance file_id_t to have richer information, to guard against inode
recycling on Linux filesystems
2014-04-28 15:14:33 -07:00
ridiculousfish
c3425bc55f Include a header to permit building on Linux 2014-04-27 23:52:09 -07:00
David Adam
55bc4168bf use mktemp(1) to generate temporary file names
Fix for CVE-2014-2906.

Closes a race condition in funced which would allow execution of
arbitrary code; closes a race condition in psub which would allow
alternation of the data stream.

Note that `psub -f` does not work (#1040); a fix should be committed
separately for ease of maintenance.

Closes #1437
2014-04-28 10:42:00 +08:00
David Adam
ba1b5e34a7 Check effective credentials of socket peers
Fix for CVE-2014-2905.

Code for getpeereid() on non-BSD systems imported from the PostgreSQL
project under a BSD-style license.

Closes #1436
2014-04-28 10:41:27 +08:00
ridiculousfish
753c42a3d5 Merge branch 'master' into death_of_fishd 2014-04-27 18:53:35 -07:00
ridiculousfish
97c2ec8dcf Fix a duplicated variable, and defeat some warnings in fish_tests 2014-04-27 18:44:21 -07:00
ridiculousfish
4948508277 Squelch some more warnings on Linux 2014-04-27 18:27:34 -07:00
ridiculousfish
fb89c762fc Silence unused return value warning in FATAL_EXIT 2014-04-27 17:28:57 -07:00
ridiculousfish
58ebdd4a7e Attempt to silence some warnings 2014-04-27 17:23:19 -07:00
ridiculousfish
d7f22a0c27 Correctly invoke callbacks with fishd-less universal variables. All
tests now pass.
2014-04-27 16:53:07 -07:00
ridiculousfish
3b4794ae94 Implement atomic loading/saving of fishd file within fish, eventually
permitting removal of fishd. Universal variables test passes, others
fail.
2014-04-27 13:35:32 -07:00
David Adam
c0989dce2d use mktemp(1) to generate temporary file names
Fix for CVE-2014-2906.

Closes a race condition in funced which would allow execution of
arbitrary code; closes a race condition in psub which would allow
alternation of the data stream.

Note that `psub -f` does not work (#1040); a fix should be committed
separately for ease of maintenance.
2014-04-27 12:26:21 +08:00
David Adam
8412c867a5 Check effective credentials of socket peers
Fix for CVE-2014-2905.

Code for getpeereid() on non-BSD systems imported from the PostgreSQL
project under a BSD-style license.
2014-04-27 12:26:17 +08:00
Anders Bergh
10642a34f1 fish_config: Listen on both IPv6 and IPv4.
A subclass of TCPServer was created to deny any non-local connections and to
listen using an IPv6 socket.
2014-04-27 11:32:26 +08:00
ridiculousfish
6a94b51cba Beginning steps towards teaching the universal variable system to read
the fishd file directly, instead of fetching it through fishd
2014-04-26 11:41:34 -07:00
Konrad Borowski
36ef521c0e Fix filehandle leak in proc_get_jiffies 2014-04-26 17:36:20 +02:00
ridiculousfish
bf14668b2a Migrate machine and hostname identification from fishd.cpp to
env_universal_common.cpp, so that fish can use it
2014-04-25 17:45:22 -07:00
ridiculousfish
a475dd15e6 Migrate universal variables to env_var_t structure. Encapsulate
universal variable storage into a class for better testability.
2014-04-25 16:09:26 -07:00
Konrad Borowski
bb0b82a110 Remove useless return. 2014-04-22 18:54:26 +02:00
David Flores
2bbb59964f functions on top 2014-04-19 14:50:15 -07:00
David Flores
4fd32eb48e added docker completion file 2014-04-19 14:50:15 -07:00
Maxim Gonchar
2872a98b2b Set fish_vi_key_bindings to start in insert mode by default
Add optional argument for fish_vi_key_bindings to set desired initial
mode:
> fish_vi_key_bindings default
2014-04-19 14:48:15 -07:00
ridiculousfish
023af5585f Remove a debugging statement (oops) 2014-04-18 01:13:28 -07:00
ridiculousfish
3d85000f13 Reduce the iterations in the iothread test to something more reasonable.
Remove an unnecessary lock.
2014-04-17 16:39:41 -07:00
ridiculousfish
3d1a204c83 Simplify threading implementation. Removed iothread array. Threads now
run detached (no more pthread_join), and will not exit until they see
that all requests have been dequeued.
2014-04-17 16:07:50 -07:00
ridiculousfish
1ce30deec3 Remove the close_old field from io_fd_t, which is never actually
respected - a bug dating back to fish 1.x! The fd that would be closed
is actually closed in io_cleanup_fds().
2014-04-16 15:31:28 -07:00
ridiculousfish
8ed08872b9 Remove the now-unused parser_t::job_create 2014-04-14 12:40:17 -07:00
ridiculousfish
7a75e7341b Eliminate the parser_use_ast switch, which does nothing, and
exec_no_exec, which also does nothing in the new parser
2014-04-14 11:12:40 -07:00
ridiculousfish
ec6dee8bd1 Minor cleanup of redirection functions 2014-04-11 09:50:12 -07:00
Fabian Ruff
f2a507c4a7 fix gem --version/--help tab completions 2014-04-06 12:58:22 -07:00
Steven Allen
17ab7bde44 Bind 0 to beginning-of-line in vi mode. 2014-04-06 12:49:52 -07:00
Steven Allen
fcc363333c Move cursor back on insert mode exit.
Make this consistent with vi.
2014-04-06 12:46:14 -07:00
ridiculousfish
7ef9e4d8e7 Remove an unnecessary parse pass in highlight.cpp (oops) 2014-04-05 16:09:02 -07:00
Konrad Borowski
3180910fd1 Use source instead of . in autoload.cpp. 2014-04-04 15:59:41 +02:00
ridiculousfish
b01d09d704 Set the job property of block_t before expanding arguments associated
with the job, fixing psub. Fixes #1394
2014-04-02 00:32:08 -07:00
Daniel Matz
2f6551b3b1 Properly detect when MQ is enabled for Mercurial completion. 2014-03-31 10:08:10 -07:00
Daniel Matz
50ae14cf7b Properly complete Mercurial bookmarks when only one bookmark exists.
The if statement checking the output of hg bookmarks uses two conditions
joined by the or keyword.  However, only the first part was being used.
Wrapping the two statements with begin and end properly combines them.
2014-03-31 10:08:10 -07:00
Daniel Matz
79b7cd69bb Add fallback for label completion in older versions of Mercurial. 2014-03-31 10:08:10 -07:00
Daniel Matz
cf237a0e4f Replace use of xargs with command substitution in Mercurial completion. 2014-03-31 10:08:10 -07:00
Daniel Matz
c0d147c5c4 Add the __fish prefix to all Mercurial completion functions. 2014-03-31 10:08:10 -07:00
Daniel Matz
bd707b4a96 Remove unnecessary use of uniq in Mercurial completion.
Fish already takes care of duplicate completions.
2014-03-31 10:08:10 -07:00
Daniel Matz
daaed863da Use the current commandline token for Mercurial filename completion.
The token variable was being used, but I must have accidentally deleted its
definition while I was working on the original version of the file.
2014-03-31 10:08:10 -07:00
Daniel Matz
2bdfac2036 Use local scope for variables in Mercurial completion functions. 2014-03-31 10:08:10 -07:00
Daniel Matz
d74a23e583 Improve Mercurial command completion.
Rewrote the completion file by hand.  Added completion of files, bookmarks,
revision labels, etc.
2014-03-31 10:08:09 -07:00
Anders Bergh
44b35f7735 fish_config: Listen on both IPv6 and IPv4.
A subclass of TCPServer was created to deny any non-local connections and to
listen using an IPv6 socket.
2014-03-31 10:06:46 -07:00
ridiculousfish
0d3169ef70 Run restyle.sh to enforce style rules. 2014-03-31 10:01:39 -07:00
Kevin Ballard
fe3b439e31 Fix non-verbose, non-informative __fish_git_prompt
At some point the non-verbose, non-informative variant of the prompt
(e.g. the variant that looks like the bash prompt) was modified to try
and show the behind/ahead counts the same way the informative prompt
does. Besides being wrong, it also didn't work because behind/ahead
weren't defined.
2014-03-31 09:59:41 -07:00
Lukas Stabe
6c987d6708 add pacsrv completion 2014-03-31 09:54:28 -07:00
ridiculousfish
28fd1a4c5d Merge branch 'master' of github.com:fish-shell/fish-shell 2014-03-30 21:58:32 -07:00
ridiculousfish
bd895aa76c Changes to bind_mode implementation based on code review and merge
errors
2014-03-30 16:58:46 -07:00
David Adam
1177daecde configure: turn off automatic searches through non-standard directories
configure will no longer check for the existence of extra include, lib
and bin directories in /usr/pkg /sw /opt /opt/local /usr/local.

The check was not done in a particularly sensible manner and there are
now no mandatory dependencies that not shipped in the main system trees
on virtually every system in existence.

If building with Fink, follow these directions as suggested by the fink
project:
  http://www.finkproject.org/faq/usage-general.php#compile-myself

Closes #1185, and closes #1186.
2014-03-30 13:11:41 +08:00
David Adam
42813eeb84 configure/Makefile: remove unused $LIBS and $LDFLAGS complications 2014-03-30 13:11:41 +08:00
ridiculousfish
d4fafeb6d6 Merge branch 'master' into 1218_rebase
Conflicts:
	builtin.cpp
	builtin_commandline.cpp
	highlight.cpp
	input.cpp
	input.h
	reader.cpp
	screen.cpp
	screen.h
2014-03-29 14:19:45 -07:00
Knut Ahlers
1270384ede Fixed appearance of ssh hostnames with [] in them
refs https://github.com/fish-shell/fish-shell/issues/1355
2014-03-29 11:46:45 +01:00
ridiculousfish
aa1b065dd1 Allow appending path hints to history items after they have been added,
allowing us to avoid the delay before items appear in history. Should
fix #984
2014-03-28 23:22:03 -07:00
ridiculousfish
7248b2213d Fix switch statement syntax highlighting so that the arguemnt to switch
is colored as a parameter, not a command. Promote this from a tok_string
to a symbol_argument in the grammar too.
2014-03-28 17:09:08 -07:00
ridiculousfish
74b28f0a86 Fix for crash with malformed switch statement. Fixes #1376 2014-03-28 16:56:44 -07:00
ridiculousfish
005edf71a8 Fix initially backgrounded jobs. Fixes #1373 2014-03-28 14:39:47 -07:00
ridiculousfish
c1f64ba017 Make set_color fail silently if there is no argument (reintroducing
469743c). Fixes #1335
2014-03-27 13:46:33 -07:00
ridiculousfish
42166be22e Make the argument list parsing in complete -a robust against weird
tokens like &. Improve the error message when such tokens are found.
2014-03-27 11:34:18 -07:00
ridiculousfish
62b3ed17ba Teach parser_t how to parse an argument list that contains newlines, for
complete -a support. Fixes #1369
2014-03-27 11:17:05 -07:00
ridiculousfish
31bf50b2d4 Equip syntax highlighting with a variant that does no disk I/O. Invoke
it after expanding an abbreviation, so that the expanded abbreviation
appears with (some) syntax highlighting.
2014-03-26 18:49:09 -07:00
ridiculousfish
0325c1ba65 Teach parse_util_detect_errors to report invalid builtins, as found in
issue #1252
2014-03-26 18:20:38 -07:00
ridiculousfish
f2a437bd3b Merge branch 'master' into parser_cleanup
Conflicts:
	parse_constants.h
	parse_tree.h
2014-03-26 13:59:14 -07:00
ridiculousfish
7a7fb423b3 Remove some unused function declarations 2014-03-26 10:00:32 -07:00
ridiculousfish
d533c1b1c8 Second attempt to fix the build. config.h.in changes need to go in
configure.ac.
2014-03-25 20:23:58 -07:00
ridiculousfish
2db013a5fa Hopeful fix for the build 2014-03-25 20:13:33 -07:00
ridiculousfish
9fece3fdf1 Space and time optimizations for parse_node_t. Reduced size from 48
bytes to 20 bytes.
2014-03-25 20:06:34 -07:00
ridiculousfish
b520a03c57 Prefer swap() member function to std::swap. We were hitting the
inefficient generic std::swap for some derived types.
2014-03-25 12:44:21 -07:00
ridiculousfish
a4cafaad2e Turn on the new "ast" parser by default for execution.
This change replaces fish's execution model, and obviates much of
parser_t. Instead of parsing fish code into a sequence of
commands-arguments, this reifies syntactic constructs into a grammar,
builds a parse tree, and executes that. This provides a big
simplification and (sometimes) performance boost. fish while loops
become C++ while loops, etc.

There are some known regressions in error reporting, which ought to be
fixed in the soon-to-be-merged parser_cleanup branch. There's also
legitimate changes in edge cases. For example, `command builtin ...` now
executes a command called "builtin" instead of doing something else
weird. The most significant change is that syntactic elements must be
unexpected: for example, single quoting 'command' will now cause it to
not be recognized. This should be fixed soon.

Please open issues for any regressions you find!
2014-03-25 00:34:22 -07:00
ridiculousfish
0d64bbed46 Stop linking iconv, now that we have our own utf8 conversion routines 2014-03-23 13:29:57 -07:00
ridiculousfish
9718e70260 Naive reimplementation of utf2wcs and wcs2utf in
env_universal_common.cpp. These use the new utf8 functions exposed in
utf8.h. This will allow us to drop the iconv dependency.
2014-03-23 13:06:24 -07:00
Siteshwar Vashisht
a67dd9fbdd Included missing stdint.h header in utf8.cpp 2014-03-23 15:09:43 +05:30
ridiculousfish
aabed8279e Incorporate a modified UTF8 <-> wchar_t implementation from Alexey
Vatchenko (http://www.bsdua.org/libbsdua.html) in preparation for
eliminating our dependency on iconv
2014-03-22 23:46:58 -07:00
ridiculousfish
06eb271bda Changes full_escape to not generate \x escapes for non-ASCII characters.
Partially reverts 51de269 . Fixes #1225
2014-03-22 14:46:23 -07:00
ridiculousfish
12025e3050 Remove unused err_buff variable from parser_t 2014-03-22 01:04:49 -07:00
ridiculousfish
ad6367018b Excise use of parser_t's error() functionality. Thread a
parse_error_list_t through all of the expand functions, enabling them to
report errors more directly. Improve aspects of error reporting for
expansion failures.
2014-03-21 17:13:33 -07:00
ridiculousfish
c71b168402 Remove current_tokenizer and current_tokenizer_pos from old parser 2014-03-20 21:32:03 -07:00
ridiculousfish
4deb46290d Remove additional dead code from old parser 2014-03-20 21:32:03 -07:00
ridiculousfish
e5ef45e4c0 Rewrite parser_t::test_args and parser_t::eval_args to use new parser 2014-03-20 21:32:02 -07:00
ridiculousfish
e780637cf4 Add some tests for parse_util_detect_errors_in_argument 2014-03-20 21:32:02 -07:00
ridiculousfish
d659e55646 Correct the last keyword enum to reflect the actual last keyword 2014-03-20 21:32:02 -07:00
ridiculousfish
1c58b6d83e Rewrite parser_t::eval_args to use new AST parser 2014-03-20 21:32:02 -07:00
ridiculousfish
1305c02579 Rewrite parser_t::current_line() to respect new parser 2014-03-20 21:32:02 -07:00
ridiculousfish
2c19ca0dbf Fix for issue where pager contents may stay around if you executed a
command with pager contents visible
2014-03-20 21:32:02 -07:00
ridiculousfish
3cfdc6d126 Fix line number reporting in new parser 2014-03-20 21:32:02 -07:00
ridiculousfish
8ec73b2dd4 Removing some variables from parser_t that are no longer used in the new
execution model
2014-03-20 21:32:02 -07:00
jer-gentoo
5f11854286 Check for libtinfo after libncurses
See Gentoo bug 459768 (https://bugs.gentoo.org/show_bug.cgi?id=459768)

Closes #1322 (https://github.com/fish-shell/fish-shell/pull/1322).
2014-03-19 11:29:22 +08:00
ridiculousfish
14f4e0e271 Fix for issue where pager contents may stay around if you executed a
command with pager contents visible
2014-03-16 16:49:31 -07:00
ridiculousfish
5c54ef7b0d Merge branch 'master' into parser_cleanup 2014-03-15 20:24:25 -07:00
ridiculousfish
73c2846d64 Remove support for input IO_BUFFERs, which were only used by fish_pager 2014-03-15 19:49:55 -07:00
ridiculousfish
acd2038407 Remove old pager remnants, including documentation and references in the
build system
2014-03-15 14:24:05 -07:00
ridiculousfish
2442ae60db Remove old fish_pager source and implementation 2014-03-15 14:00:18 -07:00
ridiculousfish
6c096191ba Remove support for invoking old pager 2014-03-15 13:46:15 -07:00
ridiculousfish
20f9dd9a6b Fix for extra newline that gets appended if a command is not found in
the new parser
2014-03-15 13:07:19 -07:00
David Adam
44e94b8cfa ignore (generated) messages.pot 2014-03-13 21:56:56 +08:00
David Adam
8c21cf7761 translations: update new strings, convert all to UTF-8 2014-03-13 21:56:04 +08:00
David Adam
d2851cf5c5 translations: correct strings for fish_greeting default message 2014-03-13 21:16:35 +08:00
David Adam
b0716253a2 Makefile: assume UTF-8 in our codebase for translation generation 2014-03-13 21:16:35 +08:00
David Adam
eaf023b4d8 Makefile: separate messages.pot error lines 2014-03-13 21:16:35 +08:00
ridiculousfish
e47ad09130 Make contains take the string by const reference again, for performance reasons 2014-03-11 12:43:52 +08:00
David Adam
689d0082d8 README.md: document build and runtime dependencies even better. 2014-03-10 10:09:52 +08:00
ridiculousfish
390a49072d Reorganize keyword recognition in the parser to use a single table 2014-03-10 07:38:14 +08:00
Daniel J. Hofmann
7dc0b6f40b Fixed various Undefined Behavior occurrences.
Conditionally uninitialized:
 - builtin_commandline.cpp:577
 - expand.cpp:869
 - parse_util.cpp:1036

Initialization of POD structs:
 - event.cpp:61
 - autoload.cpp:22

References used with va_start:
 - common.cpp:608:18

Found with clang-3.4's awesome -Wconditional-uninitialized,
-Wmissing-field-initializers and -Wvarargs.
2014-03-07 18:28:16 +01:00
ridiculousfish
79d14521db Support for error detection in arguments in new parser. Restores error
reporting for bad arguments (e.g. with bad variable names)
2014-03-04 02:54:08 -08:00
ridiculousfish
8d6b0c8d76 Allow the caller to specify the goal node when parsing a string via the
new parser. This enables parsing either a job list or an argument list.
2014-03-04 02:54:08 -08:00
Konrad Borowski
1486774249 Force at least one line of output for set_color.
This should fix #1323.
2014-03-03 22:17:55 +01:00
ridiculousfish
1fa9167f25 Allow the caller to specify the goal node when parsing a string via the
new parser. This enables parsing either a job list or an argument list.
2014-03-02 16:03:05 -08:00
ridiculousfish
cc12225142 Clean up various block types and state as part of new parser 2014-03-02 13:46:30 -08:00
ridiculousfish
6b3a37c597 Remove obviated builtins and additional cleanup of old parser 2014-03-02 13:11:17 -08:00
ridiculousfish
b187125b63 Merge branch 'master' into parser_cleanup 2014-03-01 20:33:26 -08:00
ridiculousfish
d232a0f951 Implement status -n (line number) with new parser 2014-03-01 16:04:13 -08:00
ridiculousfish
84ea96f383 Begin removing remnants of old parser 2014-02-28 20:01:04 -08:00
ridiculousfish
be33d3f2a4 Revert "Merge pull request #1317 from pullreq/cpp"
This reverts commit 74135c0600, reversing
changes made to 6d749789ce.

See discussion in #1317
2014-02-28 02:16:48 -08:00
ridiculousfish
0e991c596f Enable new parser by default (!). Fixes #557.
This entirely replaces fish's execution model. Bugs are likely. See commit 290aae80 for what this is about.
2014-02-27 21:06:39 -08:00
ridiculousfish
858b6aa257 Correct some mistakes in the fish grammar comment 2014-02-27 20:34:42 -08:00
Konrad Borowski
74135c0600 Merge pull request #1317 from pullreq/cpp
Fixup filenames in comments; remove dead code found with scan-build.
2014-02-27 17:18:18 +01:00
Geoff Nixon
18dd6f58e3 Fixes .c -> .cpp in comments. For doxygen. 2014-02-27 06:23:40 -08:00
Geoff Nixon
ddcd2b0810 Dead stores 2014-02-27 06:23:40 -08:00
Konrad Borowski
6d749789ce Use 127.0.0.1 for fish config.
Before this change, fish config used 0 as its address. However, this
isn't a good idea from security point of view, as web service can be
accessed from everywhere, and do anything on the account it was ran on.

This also deals with firewalls which block the access to 0 even from
the host machine itself. It possibly might fix #673, but I'm not sure.
2014-02-27 14:47:08 +01:00
ridiculousfish
3224062b32 Optimize some fast paths in autoload loading. Use an iterator to avoid
doing multiple set lookups, and cache the tokenized path to avoid
multiple memory allocations.
2014-02-24 13:06:54 -08:00
ridiculousfish
688ea28bed Optimize the tokenize_variable_array hot spot to do less string copying 2014-02-24 09:54:30 -08:00
ridiculousfish
5e7c01c251 Rework color editing in fish_config. Bury customization mode a bit:
initially the user only sees the various themes, and has to activate
customization mode to change colors. Tweak the appearance as well.
2014-02-24 01:56:02 -08:00
ridiculousfish
de2eea05b4 Turn on the new pager by default, as described in #291 2014-02-22 22:24:23 -08:00
ridiculousfish
1de819e3de Fix for busted tab completions in for loop arguments, switch statements,
and other syntactic constructs. Fixes #1309
2014-02-21 19:55:55 -08:00
ridiculousfish
bc43409624 Expand the variable name as an ordinary parameter in for loops. Added
test for it too.
2014-02-21 18:20:51 -08:00
ridiculousfish
a57077aba3 Correctly color "end" command, and variable name in for loop. 2014-02-21 18:01:40 -08:00
ridiculousfish
8eaabacf44 Allow double-tapping tab to fully disclose pager, per #291 2014-02-20 13:30:26 -08:00
ridiculousfish
adf5b036d6 Fix to stop reporting config.fish execution as coming from "standard
input" within backtraces
2014-02-20 10:57:13 -08:00
ridiculousfish
3ab954644f Make fish install a command_not_found handler in non-interactive uses.
Previously, fish's command_not_found handler would be installed in
__fish_config_interactive. Errors that occured early in startup (e.g. in
config.fish) or in non-interactive mode would therefore not be reported.
With this change, fish now exposes its default cnf handler as
__fish_default_command_not_found_handler . config.fish then installs a
cnfh that invokes the default. When fish goes interactive, the initial
cnfh is overwritten with a fancier one, that may in turn fall back to
invoking the default.
2014-02-20 10:26:57 -08:00
ridiculousfish
64953e26fc Clean up Xcode project and remove unnecessary ARCHS settings 2014-02-17 15:02:13 -08:00
ridiculousfish
2e1024d275 Tweak error reporting in new parser to use fewer lines 2014-02-17 14:52:08 -08:00
ridiculousfish
2253c57628 Remove the reader_selected_completion_changed callback. Fix a hang when
the pager gets empty, as reported in 291
2014-02-16 19:59:00 -08:00
ridiculousfish
9c7d1dbb6f Make the pager search field allow searching on the prefix 2014-02-16 19:59:00 -08:00
Mandeep Sandhu
ef9f2ab31f Add completions for git stash sub-commands
Closes #1102.

Signed-off-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
2014-02-16 21:58:21 +08:00
Eric Mrak
64ca6c066c Caching for pacman packages. 2014-02-16 18:09:55 +08:00
Eric Mrak
d1cf5ab286 adding completion for aura. adding pacman integration for __fish_print_packages 2014-02-16 18:09:55 +08:00
waterhouse
b1545c5ce2 'seq' should return 1, not exit 1, on bad arglist 2014-02-16 01:17:12 -08:00
ridiculousfish
de8bae3f0f Ignore SIGPIPE in fishd. Fixes #1084 2014-02-14 16:38:44 -08:00
ridiculousfish
1fbf633817 Reimplement exec parsing. Instead of special-casing exec as a command,
promote it to a decoration (like 'command' or 'builtin'). This makes tab
completion and syntax highlighting treat exec's first argument as a
command and is otherwise a nice simplification. Fixes #1300
2014-02-13 10:10:49 -08:00
ridiculousfish
f733dc5eae Fix the build by including <algorithm> header 2014-02-12 21:08:22 -08:00
ridiculousfish
503bbd85b5 Test and fix issue where, if binding X is a prefix of binding Y, and X
is specified before Y, then Y will never be invoked because X will
always get there first. Now instead we order bindings in descending
order by length, so that we always test the binding before any others that
prefixes it. Fixes #1283.
2014-02-12 12:52:31 -08:00
ridiculousfish
29ddb68da4 Tests and fix to allow return to work correctly within if statements. Closes #1297. 2014-02-12 01:39:06 -08:00
David Adam
dd49399e45 .travis.yml: reduce verbosity of IRC notifications 2014-02-11 09:47:29 +08:00
David Adam
3678f134d9 document Alt-F as well for accepting part of autosuggestion
Closes #1290.
2014-02-10 17:28:47 +08:00
ridiculousfish
bbd784a2e8 Clean up old syntax highlighting code now that the new parser seems to work 2014-02-09 21:21:59 -08:00
ridiculousfish
77dbaf3aef Fix for Python out-of-range exception when accessing Bindings tab 2014-02-09 20:19:04 -08:00
ridiculousfish
9b9ee338c1 Fix for miscoloring quote following variable name 2014-02-09 15:33:34 -08:00
ridiculousfish
5ea7f52df2 Don't complete variables when single quoted. Fixes #1023 2014-02-09 15:27:04 -08:00
ridiculousfish
414530c9c2 Partially rework profiling. Fix profiling crash with new parser. Fixes
1295
2014-02-09 14:04:43 -08:00
ridiculousfish
e632d39b1f Make if statements always return success at the end, matching other
shells. Fixes #1061.
2014-02-07 17:57:53 -08:00
David Adam
09054a09fa README.md: document build and runtime dependencies better. 2014-02-06 17:51:18 +08:00
David Adam
01ec55366d README.md: update build status image
(oops!)
2014-02-06 17:09:31 +08:00
ridiculousfish
e2388344b2 Use type int instead of type short 2014-02-05 19:28:27 -08:00
ridiculousfish
fd10844c2b Unbreak C++11 due to narrowing; use non-conflicting declaration FISH_COLORS instead of COLORS; remove deprecated register type. 2014-02-05 19:23:13 -08:00
ridiculousfish
35f2302352 Pass --always to git describe to ensure we always get a version
number. Hopefully fixes travis-ci. See #1287
2014-02-05 16:20:09 -08:00
David Adam
e908b731ab .travis.yml: add https://travis-ci.org/ automatic builds 2014-02-05 11:25:59 -08:00
glennj
b475325b5e math.fish: exit if no output (e.g. from syntax error)
Closes #1175
2014-02-05 17:26:34 +08:00
ridiculousfish
7e769252e7 Make builtin_complete output escaped completions. Fixes #1127 2014-02-04 11:55:56 -08:00
ridiculousfish
699d78bcfe Make the test harness output file diffs on failure 2014-02-04 11:28:29 -08:00
ridiculousfish
7d345018af Redirect stderr of initial call to __fish_reload_key_bindings. Fixes ##1155 2014-02-03 16:46:01 -08:00
ridiculousfish
bac3b39227 Highlight the entire variable name, not just the dollar sign. Fixes #1201 2014-02-03 14:16:00 -08:00
David Adam
c168e6f870 Documented Alt-Right to accept a single word of an autosuggestion
See https://github.com/fish-shell/fish-shell/issues/1262
2014-02-02 21:45:03 +08:00
David Adam
27b6fe682d Squashed commit of the following:
commit d81ae2665f
Author: Max Gonzih <gonzih@gmail.com>
Date:   Sun Feb 2 16:22:18 2014 +0300

    Check for command-not-found command on suse

commit 004b794c82
Author: Max Gonzih <gonzih@gmail.com>
Date:   Sun Feb 2 14:04:41 2014 +0300

    Fix cnf handler for Suse and Fedora

    fixes #1208
2014-02-02 21:42:24 +08:00
Siteshwar Vashisht
a1b43b7a09 Fix for opening bindings tab as initial tab
'fish_config bindings' command should open bindings tab as initially active tab
2014-01-30 23:53:49 +05:30
ridiculousfish
bfc78186f5 Correctly initialize search_field_shown to avoid phantom search field
after the prompt
2014-01-30 07:59:45 -08:00
ridiculousfish
20130d89dc Support for escaped colons in makefile targets in __fish_print_make_targets, as part of #1259 2014-01-29 15:42:52 -08:00
David Adam
8490aac025 sshfs completions: use all directories as mount points
Closes #1268.
2014-01-29 13:33:27 +08:00
David Adam
8fbffe250a __fish_print_packages: correct syntax for yum, improve yum/rpm pipelines
Closes #1269 (output to cache file).

Reworks the editing pipeline for both yum and rpm completions down to a
single sed command.
2014-01-29 12:47:56 +08:00
Geoff Nixon
60808a4820 Enhance/fix isatty using command test.
Presently, `isatty` only works on a handful of keywords. Here it
  is rewritten to be able to take any path, device or fd number as
  an argument, and eliminates errors printed to stdout.
  Per discussion in #1228, using `builtin test -c` within a pipe to
  test special file descriptors is not viable, so this implementation
  specifcially uses `command test`. Additionally, a note has been
  added to the documentation of `test` regarding this potential
  aberration from the expected output of the test utility under the
  'Standards' section.
2014-01-28 11:14:54 -08:00
ridiculousfish
d5cb16aa1f NULL -> false 2014-01-28 08:19:24 -08:00
ridiculousfish
afd6ca314c Make COMPLETE_AND_SEARCH always show the search field. Also end paging upon
modifying the command line contents.
2014-01-28 07:30:05 -08:00
ridiculousfish
441522f97b Make return not execute the selected completion in the pager, instead
just accept it
2014-01-27 22:01:38 -08:00
ridiculousfish
369229ea71 Make escape clear the current completion 2014-01-27 02:28:19 -08:00
ridiculousfish
15a63805d9 Make arrow keys navigate completions instead of manipulate completion
search field
2014-01-27 02:22:34 -08:00
ridiculousfish
7d8766980b Support escape or up-arrow to cancel the completion search field. 2014-01-27 02:17:31 -08:00
ridiculousfish
5be3606236 Increased support for completion search field. Use btab (shift-tab) to
complete-and-search.
2014-01-27 00:56:13 -08:00
ridiculousfish
ce4c145f1c Eliminate dangerous command_length() function. Use editable_line_t in a
few places we missed.
2014-01-26 14:55:41 -08:00
ridiculousfish
b9372944f5 Refactor reader to work on selectable 'editable_line_t' so that most
commands can operate on pager search field
2014-01-26 14:47:15 -08:00
ridiculousfish
f58dff62c7 Beginnings of work for search field feature of new pager 2014-01-26 00:41:30 -08:00
ridiculousfish
6d13b8bbc0 Teach down-or-search how to use down-arrow to begin pager navigation 2014-01-25 15:32:13 -08:00
ridiculousfish
2139334c36 Fix for issue where wc on OS X would produce leading spaces, causing
down-or-search to fail to match the case statement and therefore do the wrong thing.
2014-01-25 15:22:28 -08:00
ridiculousfish
67bb12e569 Attempt to fix the Linux build by including stdint.h 2014-01-24 18:53:12 -08:00
ridiculousfish
2d43517914 Run 'make depend' to update header dependencies 2014-01-24 18:37:04 -08:00
ridiculousfish
df60c00d16 Experimental new "inline pager" implementation, reminiscent of zsh. Pager contents now appear below the prompt and disappear when no longer needed. They can also be navigated with arrow keys or tab.
New pager is disabled by default for now. It can be enabled by setting the fish_new_pager variable to 1.

Work and discussed is tracked in https://github.com/fish-shell/fish-shell/issues/1264
2014-01-24 18:12:46 -08:00
ridiculousfish
0fbddb0df1 Add fish_new_pager variable to enable new pager on request, disabled by default. 2014-01-24 18:10:42 -08:00
ridiculousfish
4c5c1fc9ef Suppress the pager progress message if the listing fits onscreen 2014-01-24 18:10:42 -08:00
ridiculousfish
4ffd2380c3 Remove yet more unnecessary fish_pager.cpp specific code from the new pager 2014-01-24 18:10:42 -08:00
ridiculousfish
5849cd3a2e Remove some unnecessary fish_pager.cpp specific code from the new pager 2014-01-24 18:10:41 -08:00
ridiculousfish
0a1960865e Support for "merged completions" (multiple completions on the same line)
in new pager. Support for using up-arrow to end pager navigation.
2014-01-24 18:10:41 -08:00
ridiculousfish
830ab99e6e Merge branch 'master' into pager 2014-01-24 18:10:41 -08:00
ridiculousfish
2e4b7b3d19 Fix pager to correctly join completions with the same description.
Closes #1263
2014-01-24 10:47:49 -08:00
David Adam
8cb051d44d use annotated tags only for version checking
Note: if you have previously cloned the repository, the tags for
previous versions have been edited. Use `git fetch --tags` to
synchronise your local copy.
2014-01-24 20:51:06 +08:00
ridiculousfish
535445a555 Replace assertions with new do_test macro in fish_tests.cpp 2014-01-23 18:19:52 -08:00
ridiculousfish
f6afddd94b Fix for tab-completing arguments. Closes #1261 2014-01-23 18:07:21 -08:00
Julian Aron Prenner
844b01cb6b Add 'and' input function; fixes a bug with t,T
'and' will prevent later input functions from being executed if the
previous one did not succeed (e.g. a jump to a char not on the command
line)
2014-01-23 10:23:04 +01:00
ridiculousfish
0f2ee308de Use ellipsis in pager progress message 2014-01-22 17:50:03 -08:00
ridiculousfish
7d3f808e4c Various tweaks and improvements to new pager, including disclosure
feature
2014-01-22 17:45:27 -08:00
Julian Aron Prenner
45465e0c45 Merge branch 'bind_mode' of github.com:furunkel/fish-shell into bind_mode 2014-01-22 10:01:53 +01:00
Julian Aron Prenner
4a9be7bf11 Experimental support for f,F,t,T vi commands.
Input functions can now have arguments
2014-01-22 10:00:44 +01:00
Julian Aron Prenner
c8e0d18d18 Change mode colors in prompt 2014-01-22 09:00:57 +01:00
ridiculousfish
ee9a4082b6 Allow down arrow to enter pager. Clean up repainting within
reader_readline
2014-01-21 16:25:55 -08:00
ridiculousfish
e6c70bf392 Merge branch 'master' into pager 2014-01-21 16:09:03 -08:00
ridiculousfish
9edf9ad2ac Correct the correspondence between name_arr and the input codes. 2014-01-21 16:08:35 -08:00
ridiculousfish
f714d80c93 Support for scrolling through the pager 2014-01-21 14:35:18 -08:00
ridiculousfish
605c306bef Correctly clear pager contents on ctrl-C 2014-01-20 13:05:18 -08:00
furunkel
5e2cda183a Merge pull request #8 from maxfl/bind_mode
Add tmux support
2014-01-20 09:52:12 -08:00
Maxim Gonchar
f284f00935 Add tmux support 2014-01-20 21:28:54 +04:00
Maxim Gonchar
777e4fe49e Merge branch 'bind_mode' of https://github.com/furunkel/fish-shell into bind_mode 2014-01-20 21:28:36 +04:00
furunkel
8daf0223dc Merge pull request #7 from maxfl/bind_mode
More clear way of setting cursor shape
2014-01-20 05:25:33 -08:00
Maxim Gonchar
f77fb0b948 Merge branch 'bind_mode' of https://github.com/furunkel/fish-shell into bind_mode 2014-01-20 17:13:51 +04:00
Maxim Gonchar
71992158bf Retab again
default_keybindings are left with tabs as it was in the beginning
2014-01-20 17:12:32 +04:00
Julian Aron Prenner
fd8ab78372 Update $fish_bind_mode only if necessary 2014-01-20 14:03:48 +01:00
Maxim Gonchar
1514ab8ec5 Retab 2014-01-20 17:03:46 +04:00
Maxim Gonchar
3591900070 More clear way of setting cursor shape 2014-01-20 16:47:13 +04:00
Julian Aron Prenner
44c6fa68cf Make Ctrl-x autocomplete suggestions; cosmetics 2014-01-20 13:07:32 +01:00
furunkel
7df4a966ea Merge pull request #6 from maxfl/bind_mode
Add cursor shape handler
2014-01-20 01:07:56 -08:00
ridiculousfish
998ce1fe89 Support for correctly resizing pager contents. 2014-01-19 23:52:35 -08:00
Maxim Gonchar
1279888567 Add cursor shape handler 2014-01-20 10:19:41 +04:00
ridiculousfish
d9d65577f4 Improved navigation of pager list. Added tests for it too. 2014-01-19 16:41:40 -08:00
Julian Aron Prenner
f2f6055109 Merge branch 'bind_mode' of github.com:furunkel/fish-shell into bind_mode 2014-01-19 17:56:43 +01:00
furunkel
db0506c1df Merge pull request #5 from Gonzih/bind_mode
Add x and X bindings in visual mode, fix e and E in visual mode.
2014-01-19 06:36:34 -08:00
Max Gonzih
114f803a88 Fix e and E in visual vi mode 2014-01-19 17:07:23 +03:00
Max Gonzih
69778efb6b Add x binding to delete whole line in visual mode 2014-01-19 17:04:02 +03:00
Max Gonzih
e7df20f69b Add x binding to delete selection in visual vi mode 2014-01-19 16:50:56 +03:00
Julian Aron Prenner
1157d330a6 Merge remote-tracking branch 'upstream/master' into bind_mode 2014-01-19 11:01:24 +01:00
Julian Aron Prenner
cd64a777c3 Set $fish_bind_mode to default on fish startup; set $fish_key_bindings
when sourcing fish_vi_mode.fish
2014-01-19 10:27:39 +01:00
ridiculousfish
808bc42f2a Further work on keyboard navigating the completion list 2014-01-18 12:42:53 -08:00
Julian Aron Prenner
3728fc7dba Add kill-selection function and visual binds for 'y' and 'd' 2014-01-18 10:18:29 +01:00
ridiculousfish
9920047b34 Merge branch 'master' into pager 2014-01-17 14:21:08 -08:00
ridiculousfish
b758c0c335 Relax the requirement that we find a working 'doc' directory in order
for fish to be relocatable. Instead we only look for data and
configuration path
2014-01-17 14:19:00 -08:00
ridiculousfish
32054b6f32 Implement and document new -P / --paging-mode flags to commandline, to support new
pager
2014-01-17 12:53:01 -08:00
ridiculousfish
c6e5201e15 Initial support for navigating completions that appear under the
commandline using arrow keys
2014-01-17 12:04:03 -08:00
Julian Aron Prenner
88eae68987 Fix a bug, commandline -s works now as expected. Add "*y binding in
visual mode
2014-01-17 20:32:24 +01:00
furunkel
8b89bd7a1f Merge pull request #4 from maxfl/bind_mode
Minor bind fixes
2014-01-17 08:06:49 -08:00
Maxim Gonchar
fc68b9d7cd Minor bind fixes
Comment out 'o' binding
Add '['/']' bindings to navigate current token history
Fix 'P' to paste indeed
Add "*P/"*p to insert current selection clipboard using xsel
2014-01-17 10:40:32 +04:00
ridiculousfish
64b1b5ca38 Merge branch 'master' into pager 2014-01-15 23:43:00 -08:00
ridiculousfish
8e77aca854 Fix for recent issue where random text might appear underlined. 2014-01-15 23:33:34 -08:00
ridiculousfish
0627ae82fb Clean up pager on exit from interactive read 2014-01-15 18:21:38 -08:00
Julian Aron Prenner
0cd125b55c Merge branch 'bind_mode' of github.com:furunkel/fish-shell into bind_mode 2014-01-15 22:41:50 +01:00
Julian Aron Prenner
444cb894be Set selection color to purple 2014-01-15 22:41:10 +01:00
Maxim Gonchar
8138b2080b Even dirtier *aw/*iw 2014-01-16 01:25:44 +08:00
furunkel
d0c3cc6016 Merge pull request #3 from maxfl/bind_mode
Add dirty bindings for *iw, *aw
2014-01-15 09:01:46 -08:00
Maxim Gonchar
737b204b2c Add dirty bindings for *iw, *aw
Put E, W bindings in agreement with vim
2014-01-16 00:55:51 +08:00
David Adam
bd313b0b3d configure/Makefile: remove unused variables and unneeded declarations 2014-01-15 23:50:42 +08:00
David Adam
568de7e818 fish_tests.cpp: set return value if tests fail 2014-01-15 23:50:42 +08:00
David Adam
3106cffb65 Makefile/tests: use return values to communicate errors 2014-01-15 23:50:42 +08:00
Julian Aron Prenner
21e9615243 Remove unused #defines 2014-01-15 15:59:13 +01:00
Julian Aron Prenner
9e27ba5109 Pull from upstream 2014-01-15 15:44:27 +01:00
Konrad Borowski
7874cdf52a Replace size_t with unsigned long.
size_t is not compatible type for `%lu`.
2014-01-15 15:36:50 +01:00
Julian Aron Prenner
213e907044 Merge remote-tracking branch 'upstream/master' into bind_mode
Conflicts:
	builtin.cpp
	reader.cpp
	share/functions/fish_default_key_bindings.fish
2014-01-15 15:27:06 +01:00
Julian Aron Prenner
c8d5131a42 Add experimental support for selection and visual mode 2014-01-15 15:07:22 +01:00
Julian Aron Prenner
fc21bb6eda Replace builtin 'bind_mode' with variable $fish_bind_mode 2014-01-15 12:04:52 +01:00
Julian Aron Prenner
3a9173858b Merge branch 'bind_mode' of github.com:furunkel/fish-shell into bind_mode 2014-01-15 11:40:00 +01:00
Julian Aron Prenner
dede320630 Rename 'new-mode' to 'sets-mode', prepare for selection support. 2014-01-15 11:39:19 +01:00
furunkel
c25e2e611d Merge pull request #2 from maxfl/bind_mode
Add optional arguments to fish_default_key_bindings
2014-01-15 02:29:37 -08:00
ridiculousfish
54689f6087 Merge branch 'master' into pager
Conflicts:
	highlight.h
2014-01-15 02:05:46 -08:00
ridiculousfish
370b47d23f Make RESOLVE(statement) correctly handle any keyword. Fixes #1242. 2014-01-15 01:53:40 -08:00
ridiculousfish
53814983ff Update style and formatting to conform to fish style guide. 2014-01-15 01:40:40 -08:00
ridiculousfish
5953170f14 Update pager colors to use new non-bitmask architecture. 2014-01-15 01:36:09 -08:00
ridiculousfish
40897cd7da Merge branch 'master' into pager
Conflicts:
	screen.h
2014-01-15 01:23:30 -08:00
ridiculousfish
e2fe873049 Change highlight colors from a bitmask into a combination enum / bitmask
so that we can support more than 16 color specifications.
2014-01-15 01:01:25 -08:00
ridiculousfish
9f3a16a4ae Merge branch 'master' into pager 2014-01-15 00:10:19 -08:00
ridiculousfish
9da3d890e4 Fix for indentation test failures 2014-01-15 00:07:25 -08:00
Maxim Gonchar
9684cbf850 Add optional options to fish_default_key_bindings
These options will be passed to the bind command.
Now it's possible to call
  fish_default_key_bindings -M insert
to set all original bindings to the insert mode
2014-01-15 15:26:38 +08:00
ridiculousfish
295c8f48a6 Teach screen how to render completion page. Correct spacing in
completion page contents.
2014-01-14 15:39:53 -08:00
furunkel
7be8147b80 Merge pull request #1 from maxfl/bind_mode
Update vi bindings
2014-01-14 15:38:19 -08:00
ridiculousfish
c22d94bba6 Fix for extra space when tab completing directories. Fixes #1241 2014-01-14 14:28:06 -08:00
Maxim Gonchar
b0e94c15e6 Update vi bindings:
The following normal mode bindings are added:
    o, I, A, gg, G, g^, g$, x, X, backspace, d*, D, s, S, c*, C, ~, gu,
    gU, J, K, y*, Y, p, P

I was not able to add binding for 'O'

dd now deletes the whole line as vim, while D deletes the line to the
end. c, s, y act the same way
2014-01-15 00:21:13 +08:00
Julian Aron Prenner
874d3aca45 Make Ctrl+C exit insert mode, add some more backspace binds. 2014-01-14 15:24:26 +01:00
ridiculousfish
4a20febe96 Merge branch 'master' into pager 2014-01-14 02:39:14 -08:00
ridiculousfish
28c7094f5b Fix for issue where 'function' would not define a function if the
arguments came before its name. Fixes #1240
2014-01-14 02:29:53 -08:00
ridiculousfish
ff5e2746da Fix for issue in new parser where no error would be reported if the very
first token is an error. Fixes #1239.
2014-01-14 00:38:55 -08:00
ridiculousfish
dc8014562b Fix for issue where unterminated quotes would attempt to be executed,
instead of continuing edit onto the next line.
2014-01-14 00:02:18 -08:00
Konrad Borowski
b9394b9599 Rename __fish_complete_usb function. 2014-01-14 08:28:15 +01:00
ridiculousfish
899dafb33f Migrating new pager implementation into a class. Further work on
constructing a screen_data_t from it.
2014-01-13 16:41:22 -08:00
ridiculousfish
104cf87b89 Merge branch 'master' into pager 2014-01-13 14:38:13 -08:00
ridiculousfish
290aae80e1 Merge of "ast" branch, providing fish with a unified parser, used for execution, syntax coloring, completions, abbreviations, etc. This also bestows fish with a formalized grammar, which is 'documented' in a comment in parse_tree.h.
The parser here is a LL(2) parser, which is handwritten (to avoid complicating the build process and to maintain good control over error reporting, thread safety, etc). Later it's worth exploring using parser generators (lemon, etc) or other tools to simplify things.

This commit enables the new parser for syntax highlighting, completions, and abbreviations. Syntax highlighting retains the old implementation (disabled), which will be removed shortly. There is also support for a new execution model, based on the new parser, but it is disabled by default (can be enabled by setting the fish_new_parser variable to 1).

There's also lots of new tests, and some machinery for selecting which tests to run.

After living on this commit for a while, we'll enable the new execution model by default, and then begin to tear down the machinery of the old one (the block types, builtin_end, the parser_t junk, etc.). After that we can pursue even more exotic execution models, like multithreaded ones.

(The branch name is really a misnomer - the tree here is a parse tree, or concrete syntax tree, not an abstract one.)

Fixes #557
2014-01-13 13:57:35 -08:00
ridiculousfish
212eeaa77c Correctly report errors for 'and' and 'or' in pipelines with new parser 2014-01-13 13:19:58 -08:00
ridiculousfish
eb28c710ba Improve the 'This command can not be used in a pipeline' message to
actually name the command
2014-01-13 12:51:09 -08:00
leafonsword
129d2f803a 新文件: share/completions/lsusb.fish
新文件:    share/functions/__fish_complete_usb.fish
2014-01-13 20:24:20 +01:00
Max Gonzih
71f6986dd6 Fix __fish_print_packages for rpm 2014-01-13 22:36:02 +08:00
ridiculousfish
6fc1d7dc77 Further cleanup and improvements to error messages 2014-01-13 03:57:59 -08:00
ridiculousfish
d9056081e7 Added tests for piping an fd other than stdout 2014-01-13 02:49:41 -08:00
ridiculousfish
95f87cdd56 Support for special && and || error messages in new parser 2014-01-13 02:24:11 -08:00
ridiculousfish
746cc4c10b Rename highlight_shell_magic to highlight_shell_new_parser 2014-01-13 00:31:25 -08:00
ridiculousfish
51c18e3f9a Turn off new parser for execution by default in preparation for merge
with trunk
2014-01-13 00:05:43 -08:00
ridiculousfish
25b25e3e49 Include missing algorithm header in parse_execution.cpp 2014-01-12 23:52:33 -08:00
ridiculousfish
096f850433 Eliminate class parse_t 2014-01-12 22:39:12 -08:00
ridiculousfish
ec469782c8 Improvements to error messages with new parser. In particular, "naked
builtins" now print their help (e.g. just 'while')
2014-01-12 15:10:59 -08:00
ridiculousfish
40e223c12d Additional miscellaneous fixes based on cppcheck static analysis 2014-01-12 13:53:59 -08:00
ridiculousfish
b2c78dbd57 Fix for issue where we compute a default USER variable, but never set
its value.
2014-01-12 13:42:26 -08:00
ridiculousfish
89069fdaa4 Miscellaneous minor fixes based on cppcheck static analyzer 2014-01-12 13:33:35 -08:00
Alexander I.Grafov
75b02e1d27 Fixes issue #1234. Fish now parses system wide ssh configuration file in addition to user config. 2014-01-12 14:59:46 +05:30
ridiculousfish
1130e4782d Remove some unused defines 2014-01-12 00:11:29 -08:00
Konrad Borowski
2927514e68 Partially fix #1224.
It would be nice if this would work without this hack,
but until then, this has to work. Requires you to reinstall
the prompt using fish configuration system.
2014-01-10 21:33:50 +01:00
ridiculousfish
0e9d159bc2 Improvements to error reporting. In particular, we now append a newline
in reader_shell_test, so that there's always a statement terminator.
Otherwise commands like 'echo |' would not be considered an error (just
incomplete).
2014-01-08 18:20:55 -08:00
ridiculousfish
d69f408b14 Rename builtin parse to __fish_parse 2014-01-08 15:13:08 -08:00
ridiculousfish
e8d6c96c1e Merge branch 'master' into ast 2014-01-08 15:07:56 -08:00
ridiculousfish
041120aab4 Clean up and reduce memory allocations in string escaping 2014-01-08 15:06:40 -08:00
Сергей Романов
d20f45b949 fix two minor typos in tutorial 2014-01-08 20:09:32 +03:00
David Adam
02bd933c58 Add Alt+. as a default binding for history-token-search-backward
Closes #89.
2014-01-08 15:15:15 +08:00
ridiculousfish
b34721b3f4 Miscellaneous optimizations to reduce string copying 2014-01-07 14:57:58 -08:00
ridiculousfish
cb6be2a50d Support for "simple block" optimization, where we can run blocks
directly if there are no arguments or redirections to the block itself
2014-01-07 10:45:36 -08:00
ridiculousfish
45852f0497 Add a convenience method next_node_in_node_list which can be used for
iterating over lists in a parse tree
2014-01-05 15:23:42 -08:00
Siteshwar Vashisht
8160c85e44 Updated makefile to install javascript files and partials 2014-01-04 10:32:33 +05:30
ridiculousfish
426f58aa61 Merge branch 'master' into ast 2014-01-03 18:12:29 -08:00
ridiculousfish
e0bfa1e422 Merge branch 'fish_config_angular' 2014-01-03 17:54:54 -08:00
ridiculousfish
bf75731bbe Fix for wrong syntax highlighting in the face of tokenizer errors, e.g.
"echo 'hi"
2014-01-03 17:42:25 -08:00
ridiculousfish
c8eec109b2 Support in parse_dump_tree for "forests", which occur when there's a
parse error
2014-01-03 16:54:34 -08:00
ridiculousfish
b8079953d8 Fix for cross-test interference where cancellation from one test would
lead to failure in expansion test
2014-01-03 15:27:39 -08:00
ridiculousfish
993148552e Support for Ctrl-C cancellation in new parser. Added tests for it too. 2014-01-02 16:19:33 -08:00
ridiculousfish
1863be7be4 Fix some warnings 2014-01-01 15:49:41 -08:00
ridiculousfish
358145c4bd Merge branch 'master' into ast 2014-01-01 15:32:50 -08:00
ridiculousfish
fb882f0b69 Support for stack overflow and infinite recursion detection in new
parser
2014-01-01 15:29:56 -08:00
ridiculousfish
27cba56761 Further improvements to error reporting with new parser 2014-01-01 00:04:02 -08:00
ridiculousfish
e2da73bf4f Fix for issue where 'while |' would be incorrectly interpreted as a
"naked statement" causing a wonky error message
2013-12-31 16:38:15 -08:00
ridiculousfish
4402f73bf7 Improve error reporting for tokens ending with newlines 2013-12-31 16:37:15 -08:00
Julian Aron Prenner
dc90cd6bc4 Better input handling; add support multiple binding commands 2014-01-01 00:11:32 +01:00
ridiculousfish
7356a0f6c8 Clean up and rationalize error handling in parse_execution.cpp 2013-12-31 14:37:37 -08:00
Julian Aron Prenner
f408bc4808 Add sourceable script file to enable vi mode 2013-12-31 16:17:03 +01:00
Julian Aron Prenner
a302f37447 Fix bug 2013-12-31 16:16:28 +01:00
Julian Aron Prenner
f501e30353 Add sample prompt for vi mode 2013-12-31 14:56:12 +01:00
Julian Aron Prenner
2587649ca2 Allow restricting earsing and listing of bindings to specific mode;
implement force repaint and multi-char bindings;
2013-12-31 14:53:29 +01:00
Julian Aron Prenner
d1faac58dd Implement bind modes 2013-12-31 01:52:41 +01:00
David Adam
1efb120248 __fish_complete_svn: remove GNU extension options
Continuation of https://github.com/fish-shell/fish-shell/pull/1195/.
Removes use of --delimiter and --fields with cut(1) as these are GNU
extensions.

Note that a number of completions use these options, but as they are
only for GNU/Linux-specific tools have remained unmodified.
2013-12-30 12:32:24 +08:00
Mandeep Sandhu
8078d29fda Fix completion bug for special fish characters.
Issue #1108: If there are special characters like '{' in the
completion suggestions, then we fail to parse it successfully
as we are passing an unescaped version of the character to
parser_t::eval_args(...).

This causes us to retun w/o completion suggestions.

This bug was discovered while implementing 'git stash' completion
as the suggestion contained strings like 'stash@\{0\}'.

Th fix is to properly escape the string before parsing it.
2013-12-30 12:20:44 +08:00
ridiculousfish
a9787b769f Support for implicit cd, no-exec, and the exit builtin. All tests now
pass (!). Error reporting still unsteady.
2013-12-29 16:23:26 -08:00
ridiculousfish
a42711e31c Support for break/continue with new parser execution 2013-12-28 22:52:06 -08:00
ridiculousfish
c632307eaa Make eval_node_at_offset return an error indication instead of the exit
status of the last command
2013-12-28 16:33:26 -08:00
ridiculousfish
0f9de11a67 Fix issues related to redirections and block level IO with new parser 2013-12-28 16:18:38 -08:00
maxried
541db5fbbe Update adb.fish
Added semi-documented but often used adb subcommand.
2013-12-28 12:24:58 +01:00
ridiculousfish
715823a666 Bringup of function definitions, switch statements with new parser 2013-12-27 03:58:42 -08:00
ridiculousfish
6ce4b344e4 Hook up for statements, if statements, and function definition in new
parser
2013-12-27 01:38:43 -08:00
ridiculousfish
a6ca809a4e Fix for issue where last job_list in tree would have a -1 production_idx
because we never actually sent the terminal token type
2013-12-26 14:52:15 -08:00
ridiculousfish
c1a13ae8bc Fix a few errors identified by testing new parser 2013-12-26 13:36:43 -08:00
ridiculousfish
6536ffe178 Facilities for turning on new AST-based parser. 2013-12-26 13:24:10 -08:00
ridiculousfish
562946d055 Cleanup thrashing around in parser_t. New parser execution lives in
parse_execution.cpp
2013-12-26 12:55:10 -08:00
ridiculousfish
924b8cbe24 New ideas about how to use new parser for execution. Beginnings of
implementation.
2013-12-26 12:24:00 -08:00
Derek Li
93f7c14ea6 Math: disable bc multi-line output. 2013-12-26 18:32:36 +01:00
ridiculousfish
5b1a532652 Factor execution aspects from parser_t to parse_execution_context_t .
Still searching for best way to use new parser for execution.
2013-12-24 13:17:24 -08:00
Andreas Eger
a3a918e900 adding elixir, iex, mix completions 2013-12-24 12:43:38 +08:00
ridiculousfish
b6af3e51ab Very early work in adopting new parser for actual execution of commands.
Not turned on yet.
2013-12-23 14:53:56 -08:00
Arjun A.K
3707dcbf33 configure.ac: Fix typo
'direcotry' => 'directory'
2013-12-22 18:28:24 +05:30
ridiculousfish
ebc8bd6ff5 Update the backtrace call to pass a block index instead of a block,
fixing the build
2013-12-20 17:47:07 -08:00
ridiculousfish
ed70195c7e Merge branch 'master' into ast
Conflicts:
	function.cpp
	parser.cpp
	parser.h
2013-12-20 17:44:37 -08:00
ridiculousfish
e38217683c Refactor block_t storage in parser_t from a linked list to a vector 2013-12-20 17:41:21 -08:00
ridiculousfish
739e529416 Initial flailing around trying to adopt new parser for actual execution 2013-12-20 14:37:40 -08:00
Javier Gonel
12be83562d Non standard cut options
Some cut versions don't have `--delimiter` or `--fields` but use the standard options `-d` and `-f`
2013-12-18 18:02:19 +02:00
Mandeep Sandhu
8bcb5e4ed7 Ignore auto-generated file command_list_toc.txt
Added this file to the ignore list (Issue #1192).
2013-12-18 16:59:37 +05:30
Konrad Borowski
5c96bca1ca Revert "Ensure that UTF-8 works if LANG contains it."
This was a really stupid change that I should have tested more
before pushing. It broke any non-interactive usage, such as SSH,
fish config, or parsing the script output, as config.fish is
loaded for everything.

There are no issues with different terminal emulators, so this
change will be pushed in the future, but only running in interactive
mode. I apologize for any issues caused by this commit.

This reverts commit d61adfbc53.
2013-12-17 20:47:14 +01:00
ridiculousfish
384987cd5b Remove detect_errors2 2013-12-16 22:32:08 -08:00
ridiculousfish
af21dfd294 Make the tests compile again 2013-12-16 17:18:32 -08:00
ridiculousfish
3e9153d955 Clean up some error messages. Don't show the line in the error message
if it's the first line and we're interactive, since then it's obvious
2013-12-16 16:52:23 -08:00
ridiculousfish
0e421ea31d Various cleanup and tweaking of backtrace messages 2013-12-16 15:33:20 -08:00
ridiculousfish
471f7f06f7 Fix for a busted assertion 2013-12-15 16:44:05 -08:00
ridiculousfish
ddb37a47da Stop using realpath() in builtin_source, so as to preserve relative path
reporting in backtraces
2013-12-15 16:43:22 -08:00
ridiculousfish
5b24aac266 Initial work on backtrace support with new parser 2013-12-15 16:05:37 -08:00
Konrad Borowski
d61adfbc53 Ensure that UTF-8 works if LANG contains it.
Some people like to have their terminals claim UTF-8 support when
their terminals actually are set to another encoding. As nobody
appears to understand this, I have made a change to automatically
fix the encoding problems if possible. This uses ISO 2022 sequences
in order to dynamically change the encoding.

Fixes #692. Fixes #895. Fixes possible future issues about this.
2013-12-15 11:08:15 +01:00
Konrad Borowski
602f040940 Update Free Software Foundation address.
Fixes #1184.
2013-12-13 21:51:52 +01:00
ridiculousfish
5cf59de676 Finish rewriting detect_errors to use new parser. All tests now pass (!) 2013-12-12 18:18:07 -08:00
ridiculousfish
e25d49b80b Make builtin_parse output to stdout 2013-12-12 18:17:30 -08:00
ridiculousfish
d5d9b9284a Initial work towards rewriting detect_errors to use new parser.
Low-level tests currently pass; high level tests fail.
2013-12-11 18:34:28 -08:00
Thomas Cort
0ec97c5d1e doc_src/eval.txt: fix typo.
'folloing' => 'following'
2013-12-10 19:09:32 +01:00
Jay Weisskopf
9bbda857c3 Prepend user paths even if they already exist in system path
Fixes #1099
2013-12-10 12:52:04 -05:00
ridiculousfish
383b6aabf5 Improve error reporting in new parser. Tests now pass. 2013-12-08 22:29:02 -08:00
ridiculousfish
7a3f5afee7 Initial work towars improved error reporting. Tests currently fail. 2013-12-08 21:54:06 -08:00
ridiculousfish
5769fa6aed Fix for off-by-one error in tokenizer error message reporting 2013-12-08 18:16:55 -08:00
ridiculousfish
925fe65dd8 Remove the indentation part of parser_t::test(). Rename it to
detect_errors().
2013-12-08 16:25:07 -08:00
ridiculousfish
67b1f14a6f Better support for parse errors in indenting 2013-12-08 14:13:23 -08:00
ridiculousfish
dd0cc5ed9f Rewriting indenting functionality to use new parser 2013-12-08 13:41:12 -08:00
ridiculousfish
a23441109d Merge branch 'master' into ast
Conflicts:
	complete.cpp
	fish_tests.cpp
	highlight.cpp
2013-12-07 12:54:43 -08:00
ridiculousfish
ef4465efdb More work on builtin pager 2013-12-07 12:43:40 -08:00
Siteshwar Vashisht
646180518a Minor fixes in the colors tab
* Show color scheme title in preview box
* Show information about setting terminal background color on Apply
button mouse hover
* Added text_color_for_color method in colors controller scope
2013-12-07 13:12:43 +05:30
Siteshwar Vashisht
659541f4a5 Merge branch 'master' into fish_config_angular 2013-12-07 09:50:59 +05:30
Tom Sutcliffe
0e7acaa3c4 Added completion for Android adb command. 2013-12-05 10:43:44 +00:00
David Adam
f0946baeaa __fish_git_prompt: initialise colors early
Otherwise __fish_git_prompt_informative_status tries to expand an unset
variable.

Closes #1157.
2013-12-02 20:09:15 +08:00
ridiculousfish
76ecf897ce First round of changes to migrate pager inside fish, in preparation for
presenting completions underneath.
2013-12-01 15:11:25 -08:00
David Adam
7db755dd68 Makefile.in: remove cruft 2013-12-01 18:09:50 +08:00
David Adam
2efc0bad1c add correct version number to manpage output 2013-12-01 12:37:29 +08:00
David Adam
3978de2cde autoconf build: clean up Makefile, remove fish.spec
Removes some unused variables and out-of-date references.
Wraps some tests in quotes to avoid expansion errors.
Removes the fish.spec generated file as it is out of date and is
arguably better maintained by downstream packagers.
See http://github.com/zanchey/fish-build/ for a better RPM spec file.
2013-12-01 12:37:29 +08:00
ridiculousfish
263f919beb Replace autosuggestions "completions to load" mechanism with moderately
less hackish and far simpler "perform on main thread" mechanism
2013-11-29 23:44:26 -08:00
ridiculousfish
4aaa9e7d9f Allow autosuggestions to do job expansion. Fixes
https://github.com/fish-shell/fish-shell/issues/1152
2013-11-29 13:34:03 -08:00
Konrad Borowski
e1608362d0 Fix s/$remote// mistake.
$remote could have contained /.
2013-11-29 15:26:33 +01:00
ridiculousfish
9f986d8a86 Implemented iothread_perform_on_main() to support background threads
scheduling work on main thread
2013-11-27 16:04:30 -08:00
Konrad Borowski
e0b78f7f2a Disallow Unicode conversion specifications.
This stops fish from accessing the `bool ok[UCHAR_MAX + 1]` table
beyond allocated space potentially accessing memory that doesn't
belong to fish, and crashing.
2013-11-27 21:16:34 +01:00
Konrad Borowski
1eb09f3eb2 Fix compilation failures under Intel C compiler.
It appears that Intel C compiler doesn't recognize unsigned wchar_t,
however it doesn't appear to be important (the conversion function is
unused, and in other cases it doesn't appear to be needed).
2013-11-27 21:10:28 +01:00
Shane Xu
0e7790df8c add port information 2013-11-27 23:39:52 +08:00
Konrad Borowski
591abd340b Fix bold in informative git prompt.
Currently this fix is useless, as web config cannot apply variables,
but in future, it could be more useful.
2013-11-27 11:41:13 +01:00
Jelte Fennema
44d13869ad Add eselect, rc-update and rc-service completions. (These are utilities used by Gentoo Linux)
Disable php completion for the 4th part of the command, since php-eselect is differently designed and causes errors

Closes #1131.
2013-11-27 18:36:05 +08:00
Konrad Borowski
9862eb930d Use sed instead of sh for Informative Git Prompt.
Informative Git Prompt assumes that sh is bash compatible, but that's
not the case for FreeBSD. Fixes #1140.
2013-11-27 11:35:01 +01:00
David Adam
0c4dab54f1 __fish_complete_man: Use awk to parse output of apropos
Closes #960.

Uses pattern matching rather than OS detection. Works with BSD awk, GNU
awk and Solaris' nawk.
2013-11-27 17:58:43 +08:00
ridiculousfish
84483b4aac Fix for process expansion off the main thread in syntax highlighting
(#1143)
2013-11-26 23:56:47 -08:00
ridiculousfish
9f5547327e Fix for compile error identified in
https://github.com/fish-shell/fish-shell/issues/1142
2013-11-26 23:18:12 -08:00
ridiculousfish
b04fc5a39e Add missing const cast for setup_term
https://github.com/fish-shell/fish-shell/issues/1142
2013-11-26 10:56:43 -08:00
ridiculousfish
5121417725 Fix for annoying error message when converting out of range escape
https://github.com/fish-shell/fish-shell/issues/1107
2013-11-26 10:52:32 -08:00
David Adam
2c39d5b6c0 fall back to ANSI terminal type if setupterm fails
Closes: https://github.com/fish-shell/fish-shell/issues/1060

'ansi' should always be present (tested on Solaris, Linux, FreeBSD,
Darwin).

Also overrides TERM so that other programs behave consistently e.g.
fish_pager.

The error message makes no specific mention of terminfo or termcap as
these vary across operating systems.

(r+ @ridiculousfish with thanks)
2013-11-26 21:56:49 +08:00
David Adam
8d1667e9e8 more detailed debugging when terminal type cannot be found
Ref: #1060
2013-11-26 21:56:49 +08:00
ridiculousfish
5b3397359f Fix support for backslash-newline in double quotes in unescape functions. Makes tests pass
again.
2013-11-26 01:39:16 -08:00
d10n
ded64758d5 Fix wide character wrapping.
The intention of the block removed appears to be to indent wrapped lines to the column the line started at. What actually happens is that all wrapped lines wrap to column 0.
After adding the sticky short prompt feature, the block removed caused a bug with wrapping wide characters in addition to not appearing to change anything else.
Wide characters would change between wrapping to column 0 and the column the command started at, depending on what column the wide character was at before wrapping.

I am keeping the existing behavior rather than restoring the block's original intention. If the original intention should be restored, it should be on a different branch.
2013-11-26 00:51:02 -08:00
d10n
2813dcc6cc On short prompts, commands wider than the terminal do not reposition to start on their own lines. 2013-11-26 00:51:02 -08:00
Misty De Meo
0a54558ee2 Update brew completion with new options 2013-11-26 00:45:13 -08:00
d10n
168d25e780 Do not open CLI browsers when using fish_config.
From the Python webbrowser documentation:
"If text-mode browsers are used, the calling process will block until the user exits the browser."

Running fish_config on an ssh server with no GUI browser will open a CLI browser which blocks and stops the server from handling requests.
Using multiprocess to run the server in the background lets CLI browsers access the page, but the page is unusable.

For now, disable CLI browsers and recommend opening the page in a graphical browser.
In the future, maybe write a CLI utility to change prompts and delete history items.
2013-11-26 00:41:09 -08:00
ridiculousfish
63a15e232b Fix indentation in __fish_complete_cd 2013-11-26 00:07:18 -08:00
Jörg Thalheim
cb86b8f8fc cd completion: handle not accessible directories 2013-11-26 00:04:31 -08:00
ridiculousfish
f2211ff3ad Update some tests 2013-11-26 00:01:23 -08:00
Konrad Borowski
312977d5a6 Fix %lu for size_t in fish_tests.cpp 2013-11-25 16:15:36 +01:00
Konrad Borowski
3eac5f9ab7 Fix io_buffer_t::print to take unsigned long argument. 2013-11-25 16:10:14 +01:00
Konrad Borowski
fcb3f36065 Ensure the loop in offset_of_next_item_fish_2_0 is executed.
This ensures that timestamp will be initialized.
2013-11-25 16:07:17 +01:00
Konrad Borowski
ac7a461070 Cast size_t to unsigned long.
printf expects unsigned long (%lu) argument, however, size_t doesn't
have to be declared as such. As %zu is C99 (but not C++), it shouldn't
be used directly. Instead, I have to cast value to the correct type.
2013-11-25 15:56:08 +01:00
ridiculousfish
2a1fd421bd Correctly detect unbalanced 'end' in syntax highlighting 2013-11-25 00:48:01 -08:00
ridiculousfish
920adb8296 Merge branch 'master' into ast 2013-11-24 23:45:59 -08:00
ridiculousfish
8ceb4b83a4 Remove old unescape() function 2013-11-24 23:29:25 -08:00
ridiculousfish
34540babdb Merge branch 'master' into ast
Conflicts:
	complete.cpp
	fish_tests.cpp
2013-11-24 23:21:00 -08:00
ridiculousfish
9f6223311e Large cleanup and refactoring of unescape() function. 2013-11-24 22:58:39 -08:00
Konrad Borowski
90b78326d3 Cast timestamp before using it for formatted string.
time_t doesn't necessarily have to be a long number. In fact, manpage
for types.h mentions it can be a double value.
2013-11-19 18:36:20 +01:00
Siteshwar Vashisht
8fc26c1e58 Use fish from $__fish_bin_dir while calling fish_update_completions at startup 2013-11-17 16:24:00 +05:30
Siteshwar Vashisht
6eb7530f75 Do not show files in modprobe completions 2013-11-17 01:21:28 +05:30
Thierry Goettelmann
76ab22f74c Fix modprobe completion for newer modprobe versions 2013-11-16 20:13:41 +01:00
bot47
cfbb511d26 Fixes misleading "connect: Connection failed" message on start up
When launching the first instance of fish and fishd is not launched already, this should not be considered an error as long as it can be launched. So ignore the first failure of connect(), as the calling function get_socket() will try again. May need a bit of cleanup.
2013-11-14 09:46:55 +01:00
David Adam
14b6d32fe6 add bindings for PuTTY's I-can't-believe-it's-xterm keyboard
(see #170)
2013-11-13 11:20:59 +08:00
Siteshwar Vashisht
0de26732bf Don't show warning while generating man page completions on startup 2013-11-12 22:14:14 +05:30
Siteshwar Vashisht
0f02997bcc Autogenerate manpage completions in background if they do not exist 2013-11-12 22:14:14 +05:30
Siteshwar Vashisht
2271526d2f Do not highlight selected prompt 2013-11-09 23:33:56 +05:30
Siteshwar Vashisht
ea2e1f016f Set current prompt as selected prompt after prompt change 2013-11-09 20:43:19 +05:30
Siteshwar Vashisht
c4aa223698 Changed UI of prompt tab
Show function definition and use button under prompt demo when prompt
demo is selected
2013-11-09 19:30:41 +05:30
Siteshwar Vashisht
63233655f4 Updated fish_config prompt tab 2013-11-09 18:26:44 +05:30
David Adam
63d93a2f9a document new F1 binding 2013-11-09 20:12:53 +08:00
Konrad Borowski
ba2fcd9dae Use basename for man argument
This protects from providing paths to man, like `./a.out`.
2013-11-09 19:50:38 +08:00
Konrad Borowski
c0ad54fe02 Allow reading manpages by using F1. 2013-11-09 19:50:38 +08:00
Marc Joliet
fe3bca3a88 Prefer standard library lzma module if available
Prefer the standard library lzma module if available.  This change prevents
using the backports-lzma when it is installed for a version of Python that
already has the lzma module in its standard library.
2013-11-09 19:46:42 +08:00
David Adam
8621399d78 configure/Makefile: respect $LIBS, remove some egregarious lies
- expunge LIBS_COMMON, it doesn't get used anywhere
 - don't reset LIBS to empty
 - move the gettext test as every binary depends on it
 - only include one set of libraries
2013-11-09 19:43:32 +08:00
ridiculousfish
5d84e86d89 Merge branch 'master' into ast 2013-11-06 13:14:52 -08:00
David Adam
6640167410 improve diagnostics for socket connections to fishd 2013-11-05 16:15:34 +08:00
ridiculousfish
6d542b8bb0 Integrated new German translation provided by Benjamin Weis 2013-11-03 10:07:42 -08:00
Konrad Borowski
e86d31e7a5 s/Procces/Process/. Fixes #1082. 2013-10-31 21:57:15 +01:00
Konrad Borowski
c5c59d4acb Implement file autocompletion for git add and git checkout.
Fixes bpinto/oh-my-fish#59.
2013-10-31 21:24:58 +01:00
Antoine Gourlay
4dc40b83e4 Fix broken links in tutorial 2013-10-31 16:37:11 +01:00
devlin zed
f186812f18 clobber the prompt when it exceeds the screen width, not when it equals it
Closes #1069
2013-10-29 21:48:42 +08:00
Asger Hautop Drewsen
4a6592597a Make type -a print all executables in PATH 2013-10-29 13:32:14 +08:00
David Adam
afb9401fc7 update URL for nightly builds 2013-10-29 13:20:51 +08:00
Geoff Nixon
3c65cd41a5 Link with $CXXFLAGS; disable GCC-specific autoconf check (squash fixes). 2013-10-29 10:39:12 +08:00
David Adam
8376a44f65 set docdir in Xcode build
fixes part of #1070
2013-10-29 09:30:42 +08:00
David Adam
9a36435016 use docdir from configure in setting __fish_help_dir
Closes #1065
2013-10-29 00:01:21 +08:00
David Adam
edc4614e63 add completions for source and document the move away from '.'
Closes: #310
2013-10-28 23:33:24 +08:00
ridiculousfish
964c7e6f3b Merge branch 'master' into ast
Conflicts:
	complete.cpp
2013-10-27 13:37:14 -07:00
Siteshwar Vashisht
9e424ed921 Show actual binding if user clicks a binding item 2013-10-27 18:51:50 +05:30
ridiculousfish
cf766b55cc Fix formatting 2013-10-26 15:27:39 -07:00
ridiculousfish
03c65d7a96 Clean up interactive session test 2013-10-26 15:24:49 -07:00
ridiculousfish
e05743d0ba Fix for errant SIGHUPs due to child fish shells messing with the term.
Fixes https://github.com/fish-shell/fish-shell/issues/1002
2013-10-26 15:22:20 -07:00
Konrad Borowski
e204ced1ae Disallow package names with dots.
They cannot be used as arguments (Perl thinks it's version check, but
version checks are pointless for oneliners), and Debian puts path
containing version depending directories (like 5.14.2) in Perl path.
2013-10-25 19:36:10 +02:00
Siteshwar Vashisht
be55d2c57f Updated handling escape character in binding parser 2013-10-25 00:05:26 +05:30
Siteshwar Vashisht
119dd06ea8 Add a one second delay between query input and filtering history 2013-10-22 23:45:32 +05:30
Siteshwar Vashisht
aed26f8c1e Added code for parsing end key 2013-10-22 23:08:30 +05:30
Siteshwar Vashisht
6482fd52fb Moved some color related methods from index.html to colorutils.js 2013-10-22 23:00:38 +05:30
Siteshwar Vashisht
44b091a7c6 Enabled filtering by binding keys 2013-10-22 00:24:15 +05:30
Siteshwar Vashisht
8279a0d477 Display bindings, history and variables in multiple lines on click 2013-10-21 23:42:16 +05:30
Siteshwar Vashisht
7709af7a62 Removed extra spaces while showing function definition 2013-10-21 23:40:43 +05:30
Brian Gernhardt
59dd6678c3 git_prompt: Allow all set_color arguments
There is no need to explicitly check for two arguments and set --bold.
Instead the user can simply "set __fish_git_prompt_color_flags --bold
red".

The current check violates the expectation set by the documentation
that you can use any set_color argument as the current code interprets
"--bold red" as "--bold --bold" instead.

Plus, by passing the full contents of the variable directly, the user
can do more adventurous things like set the background as well.
2013-10-21 12:36:42 -04:00
Brian Gernhardt
137463dc6d git_prompt: Add upstream_prefix when verbose
git.git's git-prompt may not contain a configurable prefix, but it
does display a space before the upstream information when displaying
verbose information.  Rather than using a space always or never,
default to a space whenever verbose is in showupstream.
2013-10-21 12:34:14 -04:00
Brian Gernhardt
b652920500 git_prompt: optionally show upstream branch name
Adds a "name" option to __fish_git_prompt_showupstream that shows an
abbreviated branch name when the upstream type is verbose.

Based on git.git 1f6806c: git-prompt.sh: optionally show upstream
branch name
2013-10-21 12:08:43 -04:00
Siteshwar Vashisht
80a48be324 Changed scheme for loading key bindings 2013-10-20 15:03:47 +05:30
Siteshwar Vashisht
bc9e2266be Added current scheme in list of color schemes 2013-10-20 14:28:40 +05:30
Konrad Borowski
fd25a6425c Fix two memory leaks. 2013-10-19 22:10:26 +02:00
Siteshwar Vashisht
ff4d0ce1e1 Moved angular.js to js directory 2013-10-19 23:56:23 +05:30
Siteshwar Vashisht
5d8c776250 Moved all functions related to colors to a separate file 2013-10-19 23:54:51 +05:30
Siteshwar Vashisht
3d2315d596 Use single expression instead of a function call to show selected tab 2013-10-19 22:47:18 +05:30
Siteshwar Vashisht
892cc7da31 Added a global error handler 2013-10-19 22:36:18 +05:30
Siteshwar Vashisht
eb9e712f91 Reorganized javascript code across app, filters and controllers
Moved all javascript files under js folder
Removed jquery.js from repository
2013-10-19 12:02:00 +05:30
Konrad Borowski
2a6eb83fb4 Merge pull request #1015 from marcecj/add_bz2_lzma_xz_support
Support bzip2 and lzma/xz compressed man pages
2013-10-18 05:09:00 -07:00
Konrad Borowski
ef99a11001 Remove unused values in builtin_set. 2013-10-17 19:01:20 +02:00
Konrad Borowski
2520019fb8 Remove useless duplicate comparisons. 2013-10-17 19:01:04 +02:00
Siteshwar Vashisht
877a14c0b8 Added a filter for filtering bindings 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
0ad6e6f459 Updated binding tab to show descriptive key names 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
885c23b453 Show readable description of bindings 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
7cb8f6e9fc Added missing bindings partial 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
04f518082c Initial implementation of bindings tab 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
26926551cf Minor clean up of index.html 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
2069094f55 Removed unrequired code from colors controller 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
976a0a6264 Removed older css file 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
8edcf25ba3 Changed name of colors partials file and javascript file 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
e4029d00b6 Enabled support for applying color settings in new colors tab 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
044ff5e055 Updated new colors tab to enable background colors and selecting colors from options 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
0de8c28cf4 Updated history tab to show progress on loading items 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
a1bca962a7 Updated variables tab 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
f1a13c4ee5 Updated functions tab 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
5f6ec391e3 Initial work to add support for new colors tab 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
bf656577d9 Added support for setting colors 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
171bcb1ccf Cleaned up index.html 2013-10-17 19:47:04 +05:30
Siteshwar Vashisht
5e53c1cde8 Added support filter variables and history items 2013-10-17 19:47:03 +05:30
Siteshwar Vashisht
72431456ff Fixed code to delete history item 2013-10-17 19:47:03 +05:30
Siteshwar Vashisht
b8deb49007 Fixed code for changing prompt 2013-10-17 19:47:03 +05:30
Siteshwar Vashisht
6b34f19396 Stop using indexes while selecting colors configs 2013-10-17 19:47:03 +05:30
Siteshwar Vashisht
c018bfdb4d Initial work to add support for angularjs 2013-10-17 19:47:03 +05:30
Marc Joliet
f4f36e356f Document the optional dependency to backports.lzma. 2013-10-17 12:12:13 +02:00
Marc Joliet
6de9a92582 Change the way xz/lzma man pages are detected
This avoids the use of the global and puts the diagnostic message in a
self-contained location.
2013-10-17 12:12:04 +02:00
ridiculousfish
630b0515ad Merge branch 'master' into ast
Conflicts:
	parse_util.cpp
2013-10-16 01:48:21 -07:00
ridiculousfish
b06e798373 Revert "Remove undefined behavior from parse_error()."
Per my understanding this is not undefined behavior. No ABI depends on the called function reading
variadic arguments, nor does any standard require it. So if this is crashing something else must be going
on.

This reverts commit 22d22f6aa8.
2013-10-16 01:25:47 -07:00
ridiculousfish
3b25795ee5 Merge branch 'Integration_2.1.0' 2013-10-16 01:15:14 -07:00
ridiculousfish
ef18d6f70c Revert a series of accidentally rebased commits 2013-10-16 01:14:46 -07:00
ridiculousfish
838e784c5f Fix for buffer overflows identified by libgmalloc 2013-10-16 01:04:24 -07:00
ridiculousfish
1feec5a96c Fix to enable momentum scrolling on iOS in new documentation 2013-10-16 01:04:23 -07:00
ridiculousfish
7d95768a92 Update OS X make_pkg script to also produce fish.app 2013-10-16 01:04:23 -07:00
ridiculousfish
9cb95274a6 Bump version to 2.1.0 2013-10-16 01:04:23 -07:00
Konrad Borowski
22d22f6aa8 Remove undefined behavior from parse_error().
Having function that takes arbitrary number of arguments without
actually reading them is undefined behavior, as it could cause stack
to be in the corrupted state. Now arguments after token are parsed,
even if they aren't needed.

See also: http://asciinema.org/a/5904
2013-10-14 11:45:29 +02:00
Konrad Borowski
e8ba3c2f4d Fix compilation errors under Clang. 2013-10-14 09:12:45 +02:00
ridiculousfish
ce857b0770 Syntax highlighting for file redirections 2013-10-13 16:58:40 -07:00
ridiculousfish
ce7c681462 Fix for bogus completions for function names 2013-10-13 16:46:02 -07:00
ridiculousfish
41e562ebc2 Clean up redirection parsing in the tokenizer. 2013-10-13 13:28:01 -07:00
ridiculousfish
ddf98661e4 Adopt new parser in tab completions 2013-10-12 18:17:03 -07:00
Konrad Borowski
1349d129c5 Fix #213. You can now remove autoloaded functions.
Oddly enough, the code is here, but is internal function.
2013-10-12 21:55:23 +02:00
ridiculousfish
cbd8a27a6d Beef up completion tests 2013-10-12 12:04:31 -07:00
ridiculousfish
b60db79866 Modify fish_tests to support specifying the tests to run via arguments 2013-10-12 11:32:34 -07:00
ridiculousfish
ddec870d25 Rework decision process for whether to interpret keywords as structural
or as commands (for LL parser). Will allow 'builtin --' to parse as a
plain statement, instead of a decorated statement '--'
2013-10-12 02:46:49 -07:00
ridiculousfish
77e358a001 Support for parsing e.g. 'command --' as a plain statement, instead of
executing the command '--'.
2013-10-12 01:47:31 -07:00
ridiculousfish
5490f54d00 Make parse_t::parse a static method so we don't have to create lots of
useless parse_t objects
2013-10-12 01:17:55 -07:00
ridiculousfish
58447c147f Make the new parser LL(2). Support for correct handling of e.g. 'command
--help'
2013-10-09 20:37:07 -07:00
Konrad Borowski
97e731e05c Escape characters in function names. Fixes #1031. 2013-10-09 16:39:24 +02:00
ridiculousfish
e763345f25 Reduce child_count in node structure to 8 bits 2013-10-09 03:45:58 -07:00
ridiculousfish
7b86b2e05a Adoption of new parser in abbreviations 2013-10-09 02:03:50 -07:00
ridiculousfish
a51bd03a5c Remove parse_exec stuff 2013-10-08 18:48:01 -07:00
ridiculousfish
54d7c29221 Syntax highlighting for command substitutions 2013-10-08 18:41:35 -07:00
ridiculousfish
997e3e16dd Merge branch 'master' into ast_no_templates 2013-10-08 15:06:27 -07:00
ridiculousfish
c6eef16664 Autosuggestion adoption of new parser 2013-10-08 15:05:30 -07:00
ridiculousfish
4f718e83b3 Syntax highlighting now correctly handles cd 2013-10-07 03:56:09 -07:00
ridiculousfish
20ccda69f4 Command highlighting works 2013-10-07 01:04:37 -07:00
ridiculousfish
14741518a7 Command highlighting now works 2013-10-06 16:23:45 -07:00
ridiculousfish
dd91779442 Merge branch 'master' into ast_no_templates
Conflicts:
	configure.ac
	exec.cpp
2013-10-06 13:08:57 -07:00
Konrad Borowski
553eb6ed40 Document appending / feature. 2013-10-06 14:17:33 +02:00
Marc Joliet
1c8c9a10b5 Only print an error when an lzma/xz manpage occurs
Only print an error when an lzma/xz compressed man page occurs. Also, use
add_diagnostic instead of print.
2013-09-25 18:16:47 +02:00
Marc Joliet
fc7c489ab6 Skip lzma/xz manpages if lzma module not available
Skip man pages compressed with lzma/xz if the lzma module is not available; also
print a corresponding diagnostic message.
2013-09-25 15:41:48 +02:00
Marc Joliet
4856567a2a Only try "lzma" module on ImportError 2013-09-25 15:41:14 +02:00
Marc Joliet
7d0722bc18 Change an "if" to more appropriate "elif"
I overlooked an "if" that should have been an "elif". Oops.
2013-09-25 01:35:32 +02:00
Marc Joliet
4340368277 Support bzip2 and lzma/xz compressed man pages
Add support for bzip2 and lzma/xz compressed man pages.  Support for bzip2 is
part of the Python standard library (at least for 2.7 and >=3.2), while lzma/xz
is only in Python >=3.3; however, there is a backports module for Python 2.7 and
3.2.
2013-09-24 15:49:59 +02:00
ridiculousfish
e58b73179f More work on new parser 2013-08-11 00:35:00 -07:00
ridiculousfish
8e07e55c1f More work on new parser 2013-08-08 15:06:46 -07:00
ridiculousfish
6a6593335d Teach fish_tests about new parsing files in Makefile 2013-08-08 15:06:32 -07:00
ridiculousfish
876b9d49b4 Added fish_tests target to fish.xcodeproj 2013-08-08 14:44:52 -07:00
ridiculousfish
680ac41bb1 Clean up some error handling 2013-07-28 15:44:09 -07:00
ridiculousfish
b133137a1f Removed templates (yay) 2013-07-28 15:19:38 -07:00
ridiculousfish
9dc91925e7 Fewer templates 2013-07-26 23:59:12 -07:00
ridiculousfish
4f8d4f378c AST no templates 2013-07-25 15:24:22 -07:00
ridiculousfish
3e3eefc2dc Improvements to new parser. All functions and completions now parse. 2013-07-22 18:26:15 -07:00
ridiculousfish
77b6b0a9b2 Move production logic into templates 2013-07-21 15:22:11 -07:00
ridiculousfish
551d2dfebd Merge branch 'master' into ast_templates
Conflicts:
	fish_tests.cpp
2013-07-21 14:04:06 -07:00
ridiculousfish
93f27666db More work 2013-07-10 23:45:09 -07:00
ridiculousfish
66d5436789 Fix for extra token_end 2013-07-04 14:05:42 -07:00
ridiculousfish
70b83a3bbb Implement support for switch 2013-06-30 15:38:31 -07:00
ridiculousfish
eba5b0e4c5 If statements parse 2013-06-27 15:12:27 -07:00
ridiculousfish
66af0c1a53 More work on the AST. block statements worked out a bit more. 2013-06-24 12:33:40 -07:00
ridiculousfish
70c6ca76cb Merge branch 'master' into ast 2013-06-23 11:51:40 -07:00
ridiculousfish
d840643cb3 More work on new parser 2013-06-23 02:09:46 -07:00
ridiculousfish
b771e97ac6 More work on simulating execution of parse trees. Pipes are totally screwed up. 2013-06-18 23:35:04 -07:00
ridiculousfish
bdd8ef5a52 Merge branch 'master' into ast 2013-06-17 00:43:12 -07:00
ridiculousfish
2ffc2a288c Merge branch 'master' into ast 2013-06-16 03:23:31 -07:00
ridiculousfish
4ca46b7883 Beginning support for new parser error messages 2013-06-15 15:21:35 -07:00
ridiculousfish
827a9d640c Added parse builtin for testing. Lots of work on simulated execution. 2013-06-15 14:32:38 -07:00
ridiculousfish
e2a506e54a More work on new parser 2013-06-11 09:37:51 -07:00
ridiculousfish
048f08080d Rename expression.h to parse_tree.h and parse_exec.h 2013-06-09 14:21:24 -07:00
ridiculousfish
0a02e0db4b Merge branch 'master' into parsed 2013-06-09 13:52:18 -07:00
ridiculousfish
f3e5262dc0 Parser limps into existence 2013-06-08 19:20:26 -07:00
ridiculousfish
99494afd08 Parser work. Not sure whether to have a different class for each node or not. 2013-06-06 21:49:40 -07:00
ridiculousfish
d54346b205 Stuff 2013-06-01 22:14:47 -07:00
ridiculousfish
54f683fc6b Initial work on parser bringup (squash) 2013-05-26 12:12:16 -07:00
476 changed files with 112858 additions and 45413 deletions

1
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore
/build_tools/make_svn_completions.fish export-ignore
/build_tools/description-pak export-ignore
/build_tools/make_hg_completions.fish export-ignore

12
.gitignore vendored
View File

@@ -1,11 +1,14 @@
*.o
*~
*.exe
*.xccheckout
.DS_Store
Makefile
autom4te.cache/
build/
command_list.txt
command_list_toc.txt
confdefs.h
config.h
config.h.in
@@ -18,11 +21,9 @@ doc_src/commands.hdr
doc_src/index.hdr
po/*.gmo
fish
fish.spec
fish_indent
fish_pager
fish_tests
fishd
fish.pc
mimedb
seq
set_color
@@ -35,3 +36,8 @@ tests/*tmp.*
tests/foo.txt
FISH-BUILD-VERSION-FILE
version
messages.pot
lexicon.txt
lexicon_filter
lexicon.log

27
.travis.yml Normal file
View File

@@ -0,0 +1,27 @@
language: cpp
compiler:
- gcc
- clang
before_install:
- sudo apt-get update
install:
- sudo apt-get install --no-install-recommends bc doxygen expect gettext libncurses5-dev
script:
- autoreconf
- ./configure
- make -j2
- sudo make install
- make test SHOW_INTERACTIVE_LOG=1
notifications:
irc:
channels:
- "irc.oftc.net#fish"
template:
- "%{repository}#%{build_number} (%{commit} on %{branch} by %{author}): %{message} Details at %{build_url}"
use_notice: true
skip_join: true
webhooks:
urls:
- https://webhooks.gitter.im/e/61821cec3015bf0f8bb1
matrix:
fast_finish: true

View File

@@ -1,3 +0,0 @@
24-01-2012 Jan Kanis
* Added a changelog file
* removed unescaping if the 'commandline' builtin is called without the -o (tokenise) flag

19
COPYING Normal file
View File

@@ -0,0 +1,19 @@
Fish is a smart and user-friendly command line shell.
Copyright (C) 2005-2009 Axel Liljencrantz
fish is free software.
Most of fish is licensed under the GNU General Public License version 2, and
you can redistribute it and/or modify it under the terms of the GNU GPL as
published by the Free Software Foundation.
fish also includes software licensed under the GNU Lesser General Public
License version 2, the OpenBSD license and the ISC license.
Full licensing information is contained in doc_src/license.hdr.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.

19
Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM centos:latest
# Build dependency
RUN yum update -y &&\
yum install -y autoconf automake bc clang gcc-c++ make ncurses-devel &&\
yum clean all
# Test dependency
RUN yum install -y expect vim-common
ADD . /src
WORKDIR /src
# Build fish
RUN autoreconf &&\
./configure &&\
make &&\
make install

2418
Doxyfile

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,3 @@
# Copyright (C) 2005-2006 Axel Liljencrantz
#
# This program is free software; you can redistribute it and/or modify
@@ -12,7 +11,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
#
@@ -21,14 +20,7 @@
#
# Makefile for the fish shell. Can build fish and associated
# applications, install them, recalculate dependencies and also create
# binary distributions in tar.bz2, tar.gz and rpm formats.
#
#
# The fish buildprocess is quite complex. Do not stare directly into
# the Makefile. Doing so may cause nausea, dizziness and
# hallucinations.
# applications, install them, and recalculate dependencies.
#
# Used by docdir
@@ -40,6 +32,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
CXX := @CXX@
INSTALL:=@INSTALL@
SED := @SED@
#
@@ -55,20 +48,17 @@ mandir = @mandir@
sysconfdir = @sysconfdir@
docdir = @docdir@
localedir = @localedir@
optbindirs = @optbindirs@
#
# Various flags
#
MACROS = -DLOCALEDIR=\"$(localedir)\" -DPREFIX=L\"$(prefix)\" -DDATADIR=L\"$(datadir)\" -DSYSCONFDIR=L\"$(sysconfdir)\" -DBINDIR=L\"$(bindir)\"
MACROS = -DLOCALEDIR=\"$(localedir)\" -DPREFIX=L\"$(prefix)\" -DDATADIR=L\"$(datadir)\" -DSYSCONFDIR=L\"$(sysconfdir)\" -DBINDIR=L\"$(bindir)\" -DDOCDIR=L\"$(docdir)\"
CXXFLAGS = @CXXFLAGS@ $(MACROS) $(EXTRA_CXXFLAGS)
LDFLAGS = @LIBS@ @LDFLAGS@
LDFLAGS_FISH = ${LDFLAGS} @LIBS_FISH@ @LDFLAGS_FISH@
LDFLAGS_FISH_INDENT = ${LDFLAGS} @LIBS_FISH_INDENT@
LDFLAGS_FISH_PAGER = ${LDFLAGS} @LIBS_FISH_PAGER@
LDFLAGS_FISHD = ${LDFLAGS} @LIBS_FISHD@
LDFLAGS_MIMEDB = ${LDFLAGS} @LIBS_MIMEDB@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
LDFLAGS_FISH = ${LDFLAGS} @LDFLAGS_FISH@
#
# Set to 1 if we have gettext
@@ -97,13 +87,13 @@ COMMON_FILES := util.cpp fallback.cpp
FISH_OBJS := function.o builtin.o complete.o env.o exec.o expand.o \
highlight.o history.o kill.o parser.o proc.o reader.o sanity.o \
tokenizer.o wildcard.o wgetopt.o wutil.o input.o output.o intern.o \
env_universal.o env_universal_common.o input_common.o event.o \
env_universal_common.o input_common.o event.o \
signal.o io.o parse_util.o common.o screen.o path.o autoload.o \
parser_keywords.o iothread.o color.o postfork.o \
builtin_test.o
builtin_test.o parse_tree.o parse_productions.o parse_execution.o \
pager.o utf8.o fish_version.o wcstringutil.o
FISH_INDENT_OBJS := fish_indent.o print_help.o common.o \
parser_keywords.o wutil.o tokenizer.o
FISH_INDENT_OBJS := fish_indent.o print_help.o $(FISH_OBJS)
#
# Additional files used by builtin.o
@@ -114,15 +104,6 @@ BUILTIN_FILES := builtin_set.cpp builtin_commandline.cpp \
builtin_set_color.cpp builtin_printf.cpp
#
# All objects that the system needs to build fish_pager
#
FISH_PAGER_OBJS := fish_pager.o output.o wutil.o \
input_common.o env_universal.o env_universal_common.o common.o \
print_help.o iothread.o color.o
#
# All objects that the system needs to build fish_tests
#
@@ -130,21 +111,13 @@ FISH_PAGER_OBJS := fish_pager.o output.o wutil.o \
FISH_TESTS_OBJS := $(FISH_OBJS) fish_tests.o
#
# All objects that the system needs to build fishd
#
FISHD_OBJS := fishd.o env_universal_common.o wutil.o print_help.o \
common.o
#
# All objects needed to build mimedb
#
MIME_OBJS := mimedb.o print_help.o xdgmimealias.o xdgmime.o \
xdgmimeglob.o xdgmimeint.o xdgmimemagic.o xdgmimeparent.o wutil.o \
common.o
common.o fish_version.o
#
@@ -168,11 +141,6 @@ HDR_FILES := $(HDR_FILES_SRC:.hdr.in=.hdr)
# Use a pattern rule so that Make knows to only issue one invocation
# per http://www.gnu.org/software/make/manual/make.html#Pattern-Intro
# Internalized scripts are currently disabled.
# For now, we just generate empty arrays.
# To generate them again, you would run this:
# ./internalize_scripts.py share/functions/*.fish share/completions/*.fish
#
# Files containing documentation for external commands.
@@ -180,6 +148,11 @@ HDR_FILES := $(HDR_FILES_SRC:.hdr.in=.hdr)
HELP_SRC := $(wildcard doc_src/*.txt)
#
# HTML includes needed for HTML help
#
HTML_SRC := doc_src/user_doc.header.html doc_src/user_doc.footer.html doc_src/user_doc.css
#
# Files in the test directory
@@ -187,53 +160,11 @@ HELP_SRC := $(wildcard doc_src/*.txt)
TEST_IN := $(wildcard tests/test*.in)
#
# Files that should be added to the tar archives
#
#
# Files in ./doc_src/
#
DOC_SRC_DIR_FILES := $(HDR_FILES_SRC) $(HELP_SRC)
#
# Files in ./
#
MAIN_DIR_FILES_UNSORTED := Doxyfile Doxyfile.user Doxyfile.help \
Makefile.in configure configure.ac config.h.in install-sh \
key_reader.cpp $(MIME_OBJS:.o=.h) \
$(MIME_OBJS:.o=.cpp) $(FISH_OBJS:.o=.h) $(BUILTIN_FILES) \
$(COMMON_FILES) $(COMMON_FILES:.cpp=.h) $(FISH_OBJS:.o=.cpp) \
fish.spec.in INSTALL README user_doc.head.html \
ChangeLog config.sub config.guess fish_tests.cpp fish.cpp fish_pager.cpp \
fishd.cpp make_vcs_completions.fish $(FISH_INDENT_OBJS:.o=.cpp)
#
# The sorting is not meaningful in itself, but it has the side effect
# of removing duplicates, which means there will be fewer warnings
# during building.
#
MAIN_DIR_FILES := $(sort $(MAIN_DIR_FILES_UNSORTED))
#
# Files in ./tests/
#
TESTS_DIR_FILES := $(TEST_IN) $(TEST_IN:.in=.out) $(TEST_IN:.in=.err) \
$(TEST_IN:.in=.status) tests/test.fish tests/gen_output.fish
#
# Files in ./share/completions/
#
COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish)
COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish) share/completions/..fish
#
@@ -247,7 +178,7 @@ FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish)
# Programs to install
#
PROGRAMS := fish mimedb fish_pager fishd fish_indent
PROGRAMS := fish mimedb fish_indent
#
# Manual pages to install
@@ -262,7 +193,11 @@ MANUALS := $(addsuffix .1, $(addprefix share/man/man1/, \
#
TRANSLATIONS_SRC := $(wildcard po/*.po)
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)
ifdef HAVE_GETTEXT
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)
else
TRANSLATIONS :=
endif
#
# If Doxygen is not available, don't attempt to build the documentation
@@ -280,7 +215,7 @@ endif
# Make everything needed for installing fish
#
all: $(PROGRAMS) $(user_doc) $(share_man) $(TRANSLATIONS)
all: $(PROGRAMS) $(user_doc) $(share_man) $(TRANSLATIONS) fish.pc
@echo fish has now been built.
@echo Use \'$(MAKE) install\' to install fish.
.PHONY: all
@@ -294,7 +229,7 @@ FISH-BUILD-VERSION-FILE: FORCE
-include FISH-BUILD-VERSION-FILE
CPPFLAGS += -DFISH_BUILD_VERSION=\"$(FISH_BUILD_VERSION)\"
.PHONY: FORCE
env.o fish.o fish_indent.o fish_pager.o fishd.o mimedb.o: FISH-BUILD-VERSION-FILE
fish_version.o: FISH-BUILD-VERSION-FILE
#
@@ -326,18 +261,19 @@ prof: all
# Depend on the sources (*.hdr.in) and manually make the
# intermediate *.hdr and doc.h files if needed
# The sed command deletes everything including and after the first -, for simpler version numbers
# Cleans up the user_doc/html directory once Doxygen is done.
user_doc: $(HDR_FILES_SRC) Doxyfile.user user_doc.head.html $(HELP_SRC) doc.h $(HDR_FILES)
(cat Doxyfile.user ; echo PROJECT_NUMBER=$(FISH_BUILD_VERSION) | sed "s/-.*//") | doxygen - && touch user_doc
user_doc: $(HDR_FILES_SRC) Doxyfile.user $(HTML_SRC) $(HELP_SRC) doc.h $(HDR_FILES) lexicon_filter
(cat Doxyfile.user; echo INPUT_FILTER=./lexicon_filter; \
echo PROJECT_NUMBER=$(FISH_BUILD_VERSION) | $(SED) "s/-.*//") | doxygen - && touch user_doc; \
cd user_doc/html && rm -f bc_s.png bdwn.png closed.png ftv2*.png nav*.png open.png sync_*.png tab*.* doxygen.* dynsections.js jquery.js pages.html
#
# Source code documentation. Also includes user documentation.
#
doc: *.h *.cpp doc.h Doxyfile
(cat Doxyfile ; echo PROJECT_NUMBER=$(FISH_BUILD_VERSION)) | doxygen - ;
doc: *.h *.cpp doc.h Doxyfile lexicon_filter
(cat Doxyfile; echo INPUT_FILTER=./lexicon_filter; echo PROJECT_NUMBER=$(FISH_BUILD_VERSION)) | doxygen - ;
#
@@ -345,10 +281,9 @@ doc: *.h *.cpp doc.h Doxyfile
#
doc/refman.pdf: doc
cd doc/latex;
make;
cd doc/latex && \
make && \
mv refman.pdf ..;
cd ../..;
rm -r doc/latex;
@@ -356,10 +291,36 @@ doc/refman.pdf: doc
# This target runs both the low level code tests and the high level script tests.
#
test: $(PROGRAMS) fish_tests
./fish_tests; cd tests; ../fish <test.fish;
test: test_low_level test_high_level
.PHONY: test
# We want the various tests to run serially so their output doesn't mix
# We can do that by adding ordering dependencies based on what goals are being used.
test_goals := test_low_level test_fishscript test_interactive
# The following variables define targets that depend on the tests. If any more targets
# are added that depend, directly or indirectly, on tests, they need to be recorded here.
test_test_deps = test_low_level $(test_high_level_test_deps)
test_high_level_test_deps = test_fishscript test_interactive
active_test_goals = $(filter $(test_goals),$(foreach a,$(or $(MAKECMDGOALS),$(.DEFAULT_GOAL)),$(a) $($(a)_test_deps)))
filter_up_to = $(eval b:=1)$(foreach a,$(2),$(and $(b),$(if $(subst $(1),,$(a)),$(a),$(eval b:=))))
test_low_level: fish_tests $(call filter_up_to,test_low_level,$(active_test_goals))
./fish_tests
.PHONY: test_low_level
test_high_level: test_fishscript test_interactive
.PHONY: test_high_level
test_fishscript: $(PROGRAMS) $(call filter_up_to,test_fishscript,$(active_test_goals))
cd tests && ../fish test.fish
.PHONY: test_fishscript
test_interactive: $(PROGRAMS) $(call filter_up_to,test_interactive,$(active_test_goals))
cd tests && ../fish interactive.fish
.PHONY: test_interactive
#
# commands.hdr collects documentation on all commands, functions and
@@ -392,7 +353,7 @@ toc.txt: $(HDR_FILES:index.hdr=index.hdr.in)
for i in $(HDR_FILES:index.hdr=index.hdr.in); do\
NAME=`basename $$i .hdr`; \
NAME=`basename $$NAME .hdr.in`; \
sed <$$i >>toc.tmp -n \
$(SED) <$$i >>toc.tmp -n \
-e 's,.*\\page *\([^ ]*\) *\(.*\)$$,- <a href="'$$NAME'.html" id="toc-'$$NAME'">\2</a>,p' \
-e 's,.*\\section *\([^ ]*\) *\([^-]*\)\(.*\)$$, - <a href="'$$NAME'.html#\1">\2</a>,p'; \
done
@@ -401,11 +362,66 @@ toc.txt: $(HDR_FILES:index.hdr=index.hdr.in)
doc_src/index.hdr: toc.txt doc_src/index.hdr.in
cat $@.in | awk '{if ($$0 ~ /@toc@/){ system("cat toc.txt");} else{ print $$0;}}' >$@
#
# To enable the lexicon filter, we first need to be aware of what fish
# considers to be a command, function, or external binary. We use
# command_list_toc.txt for the base commands. Scan the share/functions
# directory for other functions, some of which are mentioned in the docs, and
# use /share/completions to find a good selection of binaries. Additionally,
# colour defaults from __fish_config_interactive to set the docs colours when
# used in a 'cli' style context.
#
lexicon.txt: doc_src/commands.hdr $(FUNCTIONS_DIR_FILES) $(COMPLETIONS_DIR_FILES) share/functions/__fish_config_interactive.fish
-rm lexicon.tmp lexicon_catalog.tmp lexicon_catalog.txt $@
# Scan sources for commands/functions/binaries/colours. If GNU sed was portable, this could be much smarter.
$(SED) <command_list_toc.txt >>lexicon.tmp -n \
-e "s|^.*>\([a-z][a-z_]*\)</a>|'\1'|w lexicon_catalog.tmp" \
-e "s|'\(.*\)'|bltn \1|p"; mv lexicon_catalog.tmp lexicon_catalog.txt; \
printf "%s\n" $(COMPLETIONS_DIR_FILES) | $(SED) -n \
-e "s|[^ ]*/\([a-z][a-z_-]*\).fish|'\1'|p" | fgrep -vx -f lexicon_catalog.txt | $(SED) >>lexicon.tmp -n \
-e 'w lexicon_catalog.tmp' \
-e "s|'\(.*\)'|cmnd \1|p"; cat lexicon_catalog.tmp >> lexicon_catalog.txt; \
printf "%s\n" $(FUNCTIONS_DIR_FILES) | $(SED) -n \
-e "s|[^ ]*/\([a-z][a-z_-]*\).fish|'\1'|p" | fgrep -vx -f lexicon_catalog.txt | $(SED) >>lexicon.tmp -n \
-e 'w lexicon_catalog.tmp' \
-e "s|'\(.*\)'|func \1|p"; \
$(SED) <share/functions/__fish_config_interactive.fish >>lexicon.tmp -n \
-e '/set_default/s/.*\(fish_[a-z][a-z_]*\).*$$/clrv \1/p'; \
$(SED) <lexicon_filter.in >>lexicon.tmp -n \
-e '/^#.!#/s/^#.!# \(.... [a-z][a-z_]*\)/\1/p'; \
mv lexicon.tmp lexicon.txt; rm -f lexicon_catalog.tmp lexicon_catalog.txt;
#
# Compile Doxygen Input Filter from the lexicon. This is an executable sed
# script as Doxygen opens it via popen()(3) Input (doc.h) is piped through and
# matching words inside /fish../endfish blocks are marked up, contextually,
# with custom Doxygen commands in the form of @word_type{content}. These are
# trapped by ALIASES in the various Doxyfiles, allowing the content to be
# transformed depending on output type (HTML, man page, developer docs). In
# HTML, a style context can be applied through the /fish{style} block and
# providing suitable CSS in user_doc.css.in
#
lexicon_filter: lexicon.txt lexicon_filter.in
-rm $@.tmp $@
# Set the shebang as sed can reside in multiple places.
$(SED) <$@.in >$@.tmp -e 's|@sed@|'$(SED)'|'
# Scan through the lexicon, transforming each line to something useful to Doxygen.
if echo x | $(SED) "/[[:<:]]x/d" 2>/dev/null; then \
WORDBL='[[:<:]]'; WORDBR='[[:>:]]'; \
else \
WORDBL='\\<'; WORDBR='\\>'; \
fi; \
$(SED) <lexicon.txt >>$@.tmp -n \
-e "s|^\([a-z][a-z][a-z][a-z]\) \([a-z_-]*\)$$|s,$$WORDBL\2$$WORDBR,@\1{\2},g|p" \
-e '$$G;s/.*\n/b tidy/p'; \
mv $@.tmp $@; if test -x $@; then true; else chmod a+x $@; fi
#
# doc.h is a compilation of the various snipptes of text used both for
# the user documentation and for internal help functions into a single
# file that can be parsed dy Doxygen to generate the user
# file that can be parsed by Doxygen to generate the user
# documentation.
#
@@ -424,15 +440,16 @@ doc.h: $(HDR_FILES)
cat $*.txt >>$@;
echo "*/" >>$@
%: %.in
sed <$@.in >$@ \
# Depend on Makefile because I don't see a better way of rebuilding
# if any of the paths change.
%: %.in Makefile FISH-BUILD-VERSION-FILE
$(SED) <$< >$@ \
-e "s,@sysconfdir\@,$(sysconfdir),g" \
-e "s,@datadir\@,$(datadir),g" \
-e "s,@docdir\@,$(docdir),g" \
-e "s|@configure_input\@|$@, generated from $@.in by the Makefile. DO NOT MANUALLY EDIT THIS FILE!|g" \
-e "s,@prefix\@,$(prefix),g" \
-e "s,@optbindirs\@,$(optbindirs),g"
#-e "s,@\@,$(),"
-e "s,@fish_build_version\@,$(FISH_BUILD_VERSION),g" \
#
@@ -440,38 +457,26 @@ doc.h: $(HDR_FILES)
#
%.gmo:
if test "$(HAVE_GETTEXT)" = 1; then \
msgfmt -o $*.gmo $*.po; \
fi
msgfmt -o $@ $*.po
#
# Update existing po file or copy messages.pot
#
%.po:messages.pot
if test $(HAVE_GETTEXT) = 1;then \
if test -f $*.po; then \
msgmerge -U --backup=existing $*.po messages.pot;\
else \
cp messages.pot $*.po;\
fi; \
if test -f $*.po; then \
msgmerge -U --backup=existing $*.po messages.pot;\
else \
cp messages.pot $*.po;\
fi
#
# Create a template translation object
#
messages.pot: *.cpp *.h share/completions/*.fish share/functions/*.fish
if test $(HAVE_GETTEXT) = 1;then \
xgettext -k_ -kN_ *.cpp *.h -o messages.pot; \
if xgettext -j -k_ -kN_ -k--description -LShell share/completions/*.fish share/functions/*.fish -o messages.pot; then true; else \
echo "Your xgettext version is too old to build the messages.pot file"\
rm messages.pot\
false;\
fi; \
fi
xgettext -k_ -kN_ *.cpp *.h -o messages.pot
xgettext -j -k_ -kN_ -k--description -LShell --from-code=UTF-8 share/completions/*.fish share/functions/*.fish -o messages.pot
builtin.o: $(BUILTIN_FILES)
@@ -505,10 +510,11 @@ common.o: $(COMMON_FILES)
# There ought to be something simpler.
#
share/man: $(HELP_SRC)
share/man: $(HELP_SRC) lexicon_filter
-mkdir share/man
touch share/man
-rm -Rf share/man/man1
PROJECT_NUMBER=`echo $(FISH_BUILD_VERSION)| $(SED) "s/-.*//"` INPUT_FILTER=./lexicon_filter \
./build_tools/build_documentation.sh Doxyfile.help ./doc_src ./share
#
@@ -603,13 +609,18 @@ install-force: all install-translations
$(INSTALL) -m 755 -d $(DESTDIR)$(sysconfdir)/fish
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/completions
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/vendor_completions.d
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/functions
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/man/man1
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/js
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/partials
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/sample_prompts
$(INSTALL) -m 644 etc/config.fish $(DESTDIR)$(sysconfdir)/fish/
$(INSTALL) -m 644 share/config.fish $(DESTDIR)$(datadir)/fish/
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/pkgconfig
$(INSTALL) -m 644 fish.pc $(DESTDIR)$(datadir)/pkgconfig
for i in $(COMPLETIONS_DIR_FILES:%='%'); do \
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/completions/; \
true; \
@@ -630,6 +641,14 @@ install-force: all install-translations
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/; \
true; \
done;
for i in share/tools/web_config/js/*; do\
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/js/; \
true; \
done;
for i in share/tools/web_config/partials/*; do\
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/partials/; \
true; \
done;
for i in share/tools/web_config/sample_prompts/*.fish; do\
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/sample_prompts/; \
true; \
@@ -653,12 +672,17 @@ install-force: all install-translations
@echo fish is now installed on your system.
@echo To run fish, type \'fish\' in your terminal.
@echo
@if type chsh &> /dev/null; then \
@if type chsh >/dev/null 2>&1; then \
echo To use fish as your login shell:; \
grep -q -- "$(DESTDIR)$(bindir)/fish" /etc/shells || echo \* add the line \'$(DESTDIR)$(bindir)/fish\' to the file \'/etc/shells\'.; \
echo \* use the command \'chsh -s $(DESTDIR)$(bindir)/fish\'.; \
echo; \
fi;
@if type chcon >/dev/null 2>&1; then \
echo If you have SELinux enabled, you may need to manually update the security policy:; \
echo \* use the command \'chcon -t shell_exec_t $(DESTDIR)$(bindir)/fish\'.; \
echo; \
fi;
@echo To set your colors, run \'fish_config\'
@echo To scan your man pages for completions, run \'fish_update_completions\'
@echo To autocomplete command suggestions press Ctrl + F or right arrow key.
@@ -682,6 +706,9 @@ uninstall: uninstall-translations
-if test -d $(DESTDIR)$(docdir); then \
rm -rf $(DESTDIR)$(docdir);\
fi
-if test -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc; then \
rm -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc;\
fi
-for i in $(MANUALS); do \
rm -rf $(DESTDIR)$(mandir)/man1/`basename $$i`*; \
done;
@@ -715,21 +742,17 @@ uninstall-legacy: uninstall
.PHONY: uninstall-legacy
install-translations: $(TRANSLATIONS)
if test $(HAVE_GETTEXT) = 1; then \
for i in $(TRANSLATIONS); do \
$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES; \
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES/fish.mo; \
echo $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES/fish.mo;\
done; \
fi;
ifdef HAVE_GETTEXT
for i in $(TRANSLATIONS); do \
$(INSTALL) -m 755 -d $(DESTDIR)$(localedir)/`basename $$i .gmo`/LC_MESSAGES; \
$(INSTALL) -m 644 $$i $(DESTDIR)$(localedir)/`basename $$i .gmo`/LC_MESSAGES/fish.mo; \
echo $(DESTDIR)$(localedir)/`basename $$i .gmo`/LC_MESSAGES/fish.mo;\
done
endif
.PHONY: install-translations
uninstall-translations:
if test $(HAVE_GETTEXT) = 1; then \
for i in $(TRANSLATIONS_SRC); do \
rm -f $(DESTDIR)$(datadir)/locale/*/LC_MESSAGES/fish.mo; \
done; \
fi
rm -f $(DESTDIR)$(localedir)/*/LC_MESSAGES/fish.mo
.PHONY: uninstall-translations
@@ -742,23 +765,7 @@ uninstall-translations:
#
fish: $(FISH_OBJS) fish.o
$(CXX) $(FISH_OBJS) fish.o $(LDFLAGS_FISH) -o $@
#
# Build the fish_pager program.
#
fish_pager: $(FISH_PAGER_OBJS)
$(CXX) $(FISH_PAGER_OBJS) $(LDFLAGS_FISH_PAGER) -o $@
#
# Build the fishd program.
#
fishd: $(FISHD_OBJS)
$(CXX) $(FISHD_OBJS) $(LDFLAGS_FISHD) -o $@
$(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_OBJS) fish.o $(LIBS) -o $@
#
@@ -766,17 +773,15 @@ fishd: $(FISHD_OBJS)
#
fish_tests: $(FISH_TESTS_OBJS)
$(CXX) $(FISH_TESTS_OBJS) $(LDFLAGS_FISH) -o $@
$(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_TESTS_OBJS) $(LIBS) -o $@
#
# Build the mimedb program.
#
# mimedb does not need any libraries, so we don't use LDFLAGS here.
#
mimedb: $(MIME_OBJS)
$(CXX) $(MIME_OBJS) $(LDFLAGS_MIMEDB) -o $@
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(MIME_OBJS) $(LIBS) -o $@
#
@@ -784,15 +789,15 @@ mimedb: $(MIME_OBJS)
#
fish_indent: $(FISH_INDENT_OBJS)
$(CXX) $(FISH_INDENT_OBJS) $(LDFLAGS_FISH_INDENT) -o $@
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(FISH_INDENT_OBJS) $(LIBS) -o $@
#
# Neat little program to show output from terminal
#
key_reader: key_reader.o input_common.o common.o env_universal.o env_universal_common.o wutil.o iothread.o
$(CXX) key_reader.o input_common.o common.o env_universal.o env_universal_common.o wutil.o iothread.o $(LDFLAGS_FISH) -o $@
key_reader: $(FISH_OBJS) key_reader.o
$(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $^ $(LIBS) -o $@
#
@@ -803,13 +808,6 @@ depend:
./config.status
.PHONY: depend
#
# Build the RPM spec file.
#
fish.spec: fish.spec.in
./config.status
#
# Cleanup targets
#
@@ -819,7 +817,6 @@ fish.spec: fish.spec.in
#
distclean: clean
rm -f fish.spec
rm -f config.status config.log config.h Makefile
.PHONY: distclean
@@ -835,147 +832,186 @@ distclean: clean
clean:
rm -f *.o doc.h doc.tmp doc_src/*.doxygen doc_src/*.cpp doc_src/*.o doc_src/commands.hdr
rm -f $(GENERATED_INTERN_SCRIPT_FILES)
rm -f tests/tmp.err tests/tmp.out tests/tmp.status tests/foo.txt
rm -f $(PROGRAMS) fish_tests key_reader
rm -f command_list.txt command_list_toc.txt toc.txt
rm -f doc_src/index.hdr doc_src/commands.hdr
rm -f lexicon_filter lexicon.txt lexicon.log
rm -f FISH-BUILD-VERSION-FILE
if test "$(HAVE_DOXYGEN)" = 1; then \
rm -rf doc user_doc share/man; \
fi
rm -f $(TRANSLATIONS)
rm -f po/*.gmo
.PHONY: clean
# DO NOT DELETE THIS LINE -- make depend depends on it.
autoload.o: config.h autoload.h common.h util.h lru.h wutil.h signal.h env.h
autoload.o: exec.h proc.h io.h
autoload.o: exec.h proc.h io.h parse_tree.h tokenizer.h parse_constants.h
builtin.o: config.h signal.h fallback.h util.h wutil.h common.h builtin.h
builtin.o: io.h function.h event.h complete.h proc.h parser.h reader.h env.h
builtin.o: wgetopt.h sanity.h tokenizer.h wildcard.h expand.h input_common.h
builtin.o: input.h intern.h exec.h highlight.h screen.h color.h parse_util.h
builtin.o: autoload.h lru.h parser_keywords.h path.h history.h
builtin.o: builtin_set.cpp builtin_commandline.cpp builtin_complete.cpp
builtin.o: builtin_ulimit.cpp builtin_jobs.cpp builtin_printf.cpp
builtin.o: io.h function.h event.h env.h complete.h proc.h parse_tree.h
builtin.o: tokenizer.h parse_constants.h parser.h reader.h highlight.h
builtin.o: color.h wgetopt.h sanity.h wildcard.h expand.h input_common.h
builtin.o: input.h intern.h exec.h parse_util.h autoload.h lru.h
builtin.o: parser_keywords.h path.h history.h wcstringutil.h builtin_set.cpp
builtin.o: builtin_commandline.cpp builtin_complete.cpp builtin_ulimit.cpp
builtin.o: builtin_jobs.cpp builtin_set_color.cpp output.h screen.h
builtin.o: builtin_printf.cpp
builtin_commandline.o: config.h signal.h fallback.h util.h wutil.h common.h
builtin_commandline.o: builtin.h io.h wgetopt.h reader.h complete.h proc.h
builtin_commandline.o: parser.h event.h function.h tokenizer.h input_common.h
builtin_commandline.o: input.h parse_util.h autoload.h lru.h
builtin_commandline.o: builtin.h io.h wgetopt.h reader.h complete.h
builtin_commandline.o: highlight.h env.h color.h proc.h parse_tree.h
builtin_commandline.o: tokenizer.h parse_constants.h parser.h event.h
builtin_commandline.o: function.h input_common.h input.h parse_util.h
builtin_commandline.o: autoload.h lru.h
builtin_complete.o: config.h signal.h fallback.h util.h wutil.h common.h
builtin_complete.o: builtin.h io.h complete.h wgetopt.h parser.h proc.h
builtin_complete.o: event.h function.h reader.h
builtin_complete.o: parse_tree.h tokenizer.h parse_constants.h event.h
builtin_complete.o: function.h env.h reader.h highlight.h color.h
builtin_jobs.o: config.h fallback.h signal.h util.h wutil.h common.h
builtin_jobs.o: builtin.h io.h proc.h parser.h event.h function.h wgetopt.h
builtin_jobs.o: builtin.h io.h proc.h parse_tree.h tokenizer.h
builtin_jobs.o: parse_constants.h parser.h event.h function.h env.h wgetopt.h
builtin_printf.o: common.h util.h
builtin_set.o: config.h signal.h fallback.h util.h wutil.h common.h builtin.h
builtin_set.o: io.h env.h expand.h wgetopt.h proc.h parser.h event.h
builtin_set.o: function.h
builtin_set.o: io.h env.h expand.h parse_constants.h wgetopt.h proc.h
builtin_set.o: parse_tree.h tokenizer.h parser.h event.h function.h
builtin_set_color.o: config.h builtin.h util.h io.h common.h color.h output.h
builtin_set_color.o: screen.h highlight.h env.h
builtin_test.o: config.h common.h util.h builtin.h io.h wutil.h proc.h
builtin_test.o: signal.h
builtin_test.o: signal.h parse_tree.h tokenizer.h parse_constants.h
builtin_ulimit.o: config.h fallback.h signal.h util.h builtin.h io.h common.h
builtin_ulimit.o: wgetopt.h
builtin_printf.o: wgetopt.h
color.o: color.h config.h common.h util.h fallback.h signal.h
common.o: config.h fallback.h signal.h util.h wutil.h common.h expand.h
common.o: proc.h io.h wildcard.h parser.h event.h function.h complete.h
common.o: util.cpp fallback.cpp
common.o: parse_constants.h proc.h io.h parse_tree.h tokenizer.h wildcard.h
common.o: complete.h parser.h event.h function.h env.h util.cpp fallback.cpp
complete.o: config.h signal.h fallback.h util.h tokenizer.h common.h
complete.o: wildcard.h expand.h proc.h io.h parser.h event.h function.h
complete.o: complete.h builtin.h env.h exec.h reader.h history.h wutil.h
complete.o: intern.h parse_util.h autoload.h lru.h parser_keywords.h path.h
env.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h env.h
env.o: sanity.h expand.h history.h reader.h complete.h parser.h event.h
env.o: function.h env_universal.h env_universal_common.h input.h
env.o: input_common.h path.h
env_universal.o: config.h signal.h fallback.h util.h common.h wutil.h
env_universal.o: env_universal_common.h env_universal.h
env_universal_common.o: config.h signal.h fallback.h util.h common.h wutil.h
env_universal_common.o: env_universal_common.h
complete.o: wildcard.h expand.h parse_constants.h complete.h proc.h io.h
complete.o: parse_tree.h parser.h event.h function.h env.h builtin.h exec.h
complete.o: reader.h highlight.h color.h history.h wutil.h intern.h
complete.o: parse_util.h autoload.h lru.h parser_keywords.h path.h iothread.h
env.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h
env.o: parse_tree.h tokenizer.h parse_constants.h env.h sanity.h expand.h
env.o: history.h reader.h complete.h highlight.h color.h parser.h event.h
env.o: function.h env_universal_common.h input.h input_common.h path.h
env.o: fish_version.h
env_universal_common.o: config.h env_universal_common.h wutil.h common.h
env_universal_common.o: util.h env.h fallback.h signal.h utf8.h path.h
env_universal_common.o: iothread.h
event.o: config.h signal.h fallback.h util.h wutil.h common.h function.h
event.o: event.h proc.h io.h parser.h
event.o: event.h env.h input_common.h proc.h io.h parse_tree.h tokenizer.h
event.o: parse_constants.h parser.h
exec.o: config.h signal.h fallback.h util.h iothread.h postfork.h common.h
exec.o: proc.h io.h wutil.h exec.h parser.h event.h function.h builtin.h
exec.o: env.h wildcard.h expand.h sanity.h parse_util.h autoload.h lru.h
exec.o: proc.h io.h parse_tree.h tokenizer.h parse_constants.h wutil.h exec.h
exec.o: parser.h event.h function.h env.h builtin.h wildcard.h expand.h
exec.o: complete.h sanity.h parse_util.h autoload.h lru.h
expand.o: config.h signal.h fallback.h util.h common.h wutil.h env.h proc.h
expand.o: io.h parser.h event.h function.h expand.h wildcard.h exec.h
expand.o: tokenizer.h complete.h parse_util.h autoload.h lru.h
expand.o: io.h parse_tree.h tokenizer.h parse_constants.h parser.h event.h
expand.o: function.h expand.h wildcard.h complete.h exec.h iothread.h
expand.o: parse_util.h autoload.h lru.h
fallback.o: config.h fallback.h signal.h util.h
fish.o: config.h signal.h fallback.h util.h common.h reader.h io.h complete.h
fish.o: builtin.h function.h event.h wutil.h env.h sanity.h proc.h parser.h
fish.o: expand.h intern.h exec.h output.h screen.h color.h history.h path.h
fish.o: highlight.h env.h color.h builtin.h function.h event.h wutil.h
fish.o: sanity.h proc.h parse_tree.h tokenizer.h parse_constants.h parser.h
fish.o: expand.h intern.h exec.h output.h screen.h history.h path.h input.h
fish.o: input_common.h fish_version.h
fish_indent.o: config.h fallback.h signal.h util.h common.h wutil.h
fish_indent.o: tokenizer.h print_help.h parser_keywords.h
fish_pager.o: config.h signal.h fallback.h util.h wutil.h common.h complete.h
fish_pager.o: output.h screen.h color.h input_common.h env_universal.h
fish_pager.o: env_universal_common.h print_help.h
fish_indent.o: tokenizer.h print_help.h parser_keywords.h fish_version.h
fish_tests.o: config.h signal.h fallback.h util.h common.h proc.h io.h
fish_tests.o: reader.h complete.h builtin.h function.h event.h autoload.h
fish_tests.o: lru.h wutil.h env.h expand.h parser.h tokenizer.h output.h
fish_tests.o: screen.h color.h exec.h path.h history.h highlight.h iothread.h
fish_tests.o: postfork.h
fishd.o: config.h signal.h fallback.h util.h common.h wutil.h
fishd.o: env_universal_common.h path.h env.h print_help.h
fish_tests.o: parse_tree.h tokenizer.h parse_constants.h reader.h complete.h
fish_tests.o: highlight.h env.h color.h builtin.h function.h event.h
fish_tests.o: autoload.h lru.h wutil.h expand.h parser.h output.h screen.h
fish_tests.o: exec.h path.h history.h iothread.h postfork.h parse_util.h
fish_tests.o: pager.h input.h input_common.h utf8.h env_universal_common.h
fish_tests.o: wcstringutil.h
fish_version.o: fish_version.h
function.o: config.h signal.h wutil.h common.h util.h fallback.h function.h
function.o: event.h proc.h io.h parser.h intern.h reader.h complete.h
function.o: parse_util.h autoload.h lru.h parser_keywords.h env.h expand.h
function.o: event.h env.h proc.h io.h parse_tree.h tokenizer.h
function.o: parse_constants.h parser.h intern.h reader.h complete.h
function.o: highlight.h color.h parse_util.h autoload.h lru.h
function.o: parser_keywords.h expand.h
highlight.o: config.h signal.h fallback.h util.h wutil.h common.h highlight.h
highlight.o: env.h screen.h color.h tokenizer.h proc.h io.h parser.h event.h
highlight.o: function.h parse_util.h autoload.h lru.h parser_keywords.h
highlight.o: builtin.h expand.h sanity.h complete.h output.h wildcard.h
highlight.o: path.h history.h
highlight.o: env.h color.h tokenizer.h proc.h io.h parse_tree.h
highlight.o: parse_constants.h parser.h event.h function.h parse_util.h
highlight.o: autoload.h lru.h parser_keywords.h builtin.h expand.h sanity.h
highlight.o: complete.h output.h screen.h wildcard.h path.h history.h
history.o: config.h fallback.h signal.h util.h sanity.h tokenizer.h common.h
history.o: wutil.h history.h intern.h path.h env.h autoload.h lru.h
history.o: iothread.h
history.o: reader.h io.h complete.h highlight.h env.h color.h parse_tree.h
history.o: parse_constants.h wutil.h history.h intern.h path.h autoload.h
history.o: lru.h iothread.h
input.o: config.h signal.h fallback.h util.h wutil.h common.h reader.h io.h
input.o: complete.h proc.h sanity.h input_common.h input.h parser.h event.h
input.o: function.h env.h expand.h output.h screen.h color.h intern.h
input.o: complete.h highlight.h env.h color.h proc.h parse_tree.h tokenizer.h
input.o: parse_constants.h sanity.h input_common.h input.h parser.h event.h
input.o: function.h expand.h output.h screen.h intern.h
input_common.o: config.h fallback.h signal.h util.h common.h wutil.h
input_common.o: input_common.h env_universal.h env_universal_common.h
input_common.o: iothread.h
input_common.o: input_common.h env_universal_common.h env.h iothread.h
intern.o: config.h fallback.h signal.h util.h wutil.h common.h intern.h
io.o: config.h fallback.h signal.h util.h wutil.h common.h exec.h proc.h io.h
io.o: parse_tree.h tokenizer.h parse_constants.h
iothread.o: config.h iothread.h common.h util.h signal.h
key_reader.o: config.h common.h util.h fallback.h signal.h input_common.h
kill.o: config.h signal.h fallback.h util.h wutil.h common.h kill.h proc.h
kill.o: io.h sanity.h env.h exec.h path.h
kill.o: io.h parse_tree.h tokenizer.h parse_constants.h sanity.h env.h exec.h
kill.o: path.h
mimedb.o: config.h xdgmime.h fallback.h signal.h util.h print_help.h
mimedb.o: fish_version.h
output.o: config.h signal.h fallback.h util.h wutil.h common.h expand.h
output.o: output.h screen.h color.h highlight.h env.h
output.o: parse_constants.h output.h screen.h highlight.h env.h color.h
pager.o: config.h pager.h complete.h util.h common.h screen.h highlight.h
pager.o: env.h color.h reader.h io.h input_common.h wutil.h
parse_execution.o: parse_execution.h config.h util.h parse_tree.h common.h
parse_execution.o: tokenizer.h parse_constants.h proc.h signal.h io.h
parse_execution.o: parse_util.h autoload.h lru.h complete.h wildcard.h
parse_execution.o: expand.h builtin.h parser.h event.h function.h env.h
parse_execution.o: reader.h highlight.h color.h wutil.h exec.h path.h
parse_productions.o: parse_productions.h parse_tree.h config.h util.h
parse_productions.o: common.h tokenizer.h parse_constants.h
parse_tree.o: parse_productions.h parse_tree.h config.h util.h common.h
parse_tree.o: tokenizer.h parse_constants.h fallback.h signal.h wutil.h
parse_tree.o: proc.h io.h
parse_util.o: config.h fallback.h signal.h util.h wutil.h common.h
parse_util.o: tokenizer.h parse_util.h autoload.h lru.h expand.h intern.h
parse_util.o: exec.h proc.h io.h env.h wildcard.h
parse_util.o: tokenizer.h parse_util.h autoload.h lru.h parse_tree.h
parse_util.o: parse_constants.h expand.h intern.h exec.h proc.h io.h env.h
parse_util.o: wildcard.h complete.h parser.h event.h function.h builtin.h
parser.o: config.h signal.h fallback.h util.h common.h wutil.h proc.h io.h
parser.o: parser.h event.h function.h parser_keywords.h tokenizer.h exec.h
parser.o: wildcard.h expand.h builtin.h env.h reader.h complete.h sanity.h
parser.o: env_universal.h env_universal_common.h intern.h parse_util.h
parser.o: autoload.h lru.h path.h
parser.o: parse_tree.h tokenizer.h parse_constants.h parser.h event.h
parser.o: function.h env.h parser_keywords.h exec.h wildcard.h expand.h
parser.o: complete.h builtin.h reader.h highlight.h color.h sanity.h intern.h
parser.o: parse_util.h autoload.h lru.h path.h parse_execution.h
parser_keywords.o: config.h fallback.h signal.h common.h util.h
parser_keywords.o: parser_keywords.h
path.o: config.h fallback.h signal.h util.h common.h env.h wutil.h path.h
path.o: expand.h
postfork.o: signal.h postfork.h config.h common.h util.h proc.h io.h wutil.h
postfork.o: iothread.h exec.h
path.o: expand.h parse_constants.h
postfork.o: signal.h postfork.h config.h common.h util.h proc.h io.h
postfork.o: parse_tree.h tokenizer.h parse_constants.h wutil.h iothread.h
postfork.o: exec.h
print_help.o: print_help.h
proc.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h
proc.o: reader.h complete.h sanity.h env.h parser.h event.h function.h
proc.o: output.h screen.h color.h
proc.o: parse_tree.h tokenizer.h parse_constants.h reader.h complete.h
proc.o: highlight.h env.h color.h sanity.h parser.h event.h function.h
proc.o: output.h screen.h
reader.o: config.h signal.h fallback.h util.h wutil.h common.h highlight.h
reader.o: env.h screen.h color.h reader.h io.h complete.h proc.h parser.h
reader.o: event.h function.h history.h sanity.h exec.h expand.h tokenizer.h
reader.o: kill.h input_common.h input.h output.h iothread.h intern.h path.h
reader.o: parse_util.h autoload.h lru.h
reader.o: env.h color.h reader.h io.h complete.h proc.h parse_tree.h
reader.o: tokenizer.h parse_constants.h parser.h event.h function.h history.h
reader.o: sanity.h exec.h expand.h kill.h input_common.h input.h output.h
reader.o: screen.h iothread.h intern.h path.h parse_util.h autoload.h lru.h
reader.o: parser_keywords.h pager.h
sanity.o: config.h signal.h fallback.h util.h common.h sanity.h proc.h io.h
sanity.o: history.h wutil.h reader.h complete.h kill.h
sanity.o: parse_tree.h tokenizer.h parse_constants.h history.h wutil.h
sanity.o: reader.h complete.h highlight.h env.h color.h kill.h
screen.o: config.h fallback.h signal.h common.h util.h wutil.h output.h
screen.o: screen.h color.h highlight.h env.h
screen.o: screen.h highlight.h env.h color.h pager.h complete.h reader.h io.h
signal.o: config.h signal.h common.h util.h fallback.h wutil.h event.h
signal.o: reader.h io.h complete.h proc.h
signal.o: reader.h io.h complete.h highlight.h env.h color.h proc.h
signal.o: parse_tree.h tokenizer.h parse_constants.h
tokenizer.o: config.h fallback.h signal.h util.h wutil.h common.h tokenizer.h
utf8.o: utf8.h
util.o: config.h fallback.h signal.h util.h common.h wutil.h
wcstringutil.o: config.h wcstringutil.h common.h util.h
wgetopt.o: config.h wgetopt.h wutil.h common.h util.h fallback.h signal.h
wildcard.o: config.h fallback.h signal.h util.h wutil.h common.h complete.h
wildcard.o: wildcard.h expand.h reader.h io.h exec.h proc.h
wildcard.o: wildcard.h expand.h parse_constants.h reader.h io.h highlight.h
wildcard.o: env.h color.h exec.h proc.h parse_tree.h tokenizer.h
wutil.o: config.h fallback.h signal.h util.h common.h wutil.h
xdgmime.o: xdgmime.h xdgmimeint.h xdgmimeglob.h xdgmimemagic.h xdgmimealias.h
xdgmime.o: xdgmimeparent.h

View File

@@ -1,15 +1,15 @@
[fish](http://fishshell.com/) - the friendly interactive shell
[fish](http://fishshell.com/) - the friendly interactive shell [![Build Status](https://travis-ci.org/fish-shell/fish-shell.svg?branch=master)](https://travis-ci.org/fish-shell/fish-shell)
================================================
fish is a smart and user-friendly command line shell for OS X, Linux, and the rest of the family. fish includes features like syntax highlighting, autosuggest-as-you-type, and fancy tab completions that just work, with no configuration required.
For more on fish's design philosophy, see the [design document](http://fishshell.com/docs/2.0/design.html).
For more on fish's design philosophy, see the [design document](http://fishshell.com/docs/current/design.html).
## Quick Start
fish generally works like other shells, like bash or zsh. A few important differences can be found at <http://fishshell.com/tutorial.html> by searching for magic phrase 'unlike other shells'.
fish generally works like other shells, like bash or zsh. A few important differences can be found at <http://fishshell.com/docs/current/tutorial.html> by searching for the magic phrase 'unlike other shells'.
Detailed user documentation is available by running `help` within fish, and also at <http://fishshell.com/docs/2.0/index.html>
Detailed user documentation is available by running `help` within fish, and also at <http://fishshell.com/docs/current/index.html>
## Building
@@ -17,8 +17,12 @@ fish is written in a sane subset of C++98, with a few components from C++TR1. It
fish can be built using autotools or Xcode. autoconf 2.60 or later is required.
fish depends on a curses implementation, such as ncurses. The headers and libraries are required for building.
fish requires gettext for translation support.
Building the documentation requires Doxygen 1.8.7 or newer.
### Autotools Build
autoconf
@@ -42,15 +46,27 @@ If fish reports that it could not find curses, try installing a curses developme
On Debian or Ubuntu you want:
sudo apt-get install libncurses5-dev
sudo apt-get install build-essential ncurses-dev libncurses5-dev gettext
on RedHat, CentOS, or Amazon EC2:
On RedHat, CentOS, or Amazon EC2:
sudo yum install ncurses-devel
## Runtime Dependencies
fish requires a curses implementation, such as ncurses, to run.
fish requires a number of utilities to operate, which should be present on any Unix, GNU/Linux or OS X system. These include (but are not limited to) hostname, grep, awk, sed, which, and getopt. fish also requires the bc program.
Translation support requires the gettext program.
Some optional features of fish, such as the manual page completion parser and the web configuration tool, require Python.
In order to generate completions from man pages compressed with either lzma or xz, you may need to install an extra Python package. Python versions prior to 2.6 are not supported. For Python versions 2.6 to 3.2 you need to install the module `backports.lzma`. How to install it depends on your system and how you installed Python. Most Linux distributions should include it as a package named `backports-lzma` (or similar). From version 3.3 onwards, Python already includes the required module.
## Packages for Linux
Nightly builds for several Linux distros can be downloaded from <http://download.opensuse.org/repositories/home:/siteshwar/>
Instructions on how to find builds for several Linux distros are at <https://github.com/fish-shell/fish-shell/wiki/Nightly-builds>
## Switching to fish

View File

@@ -19,7 +19,7 @@ static const int kAutoloadStalenessInterval = 15;
file_access_attempt_t access_file(const wcstring &path, int mode)
{
//printf("Touch %ls\n", path.c_str());
file_access_attempt_t result = {0};
file_access_attempt_t result = {};
struct stat statbuf;
if (wstat(path, &statbuf))
{
@@ -48,9 +48,7 @@ autoload_t::autoload_t(const wcstring &env_var_name_var, const builtin_script_t
lock(),
env_var_name(env_var_name_var),
builtin_scripts(scripts),
builtin_script_count(script_count),
last_path(),
is_loading_set()
builtin_script_count(script_count)
{
pthread_mutex_init(&lock, NULL);
}
@@ -66,7 +64,7 @@ void autoload_t::node_was_evicted(autoload_function_t *node)
ASSERT_IS_MAIN_THREAD();
// Tell ourselves that the command was removed if it was loaded
if (! node->is_loaded)
if (node->is_loaded)
this->command_removed(node->key);
delete node;
}
@@ -94,33 +92,34 @@ int autoload_t::load(const wcstring &cmd, bool reload)
if (path_var != this->last_path)
{
this->last_path = path_var;
this->last_path_tokenized.clear();
tokenize_variable_array(this->last_path, this->last_path_tokenized);
scoped_lock locker(lock);
this->evict_all_nodes();
}
/* Mark that we're loading this. Hang onto the iterator for fast erasing later. Note that std::set has guarantees about not invalidating iterators, so this is safe to do across the callouts below. */
typedef std::set<wcstring>::iterator set_iterator_t;
std::pair<set_iterator_t, bool> insert_result = is_loading_set.insert(cmd);
set_iterator_t where = insert_result.first;
bool inserted = insert_result.second;
/** Warn and fail on infinite recursion. It's OK to do this because this function is only called on the main thread. */
if (this->is_loading(cmd))
if (! inserted)
{
/* We failed to insert */
debug(0,
_(L"Could not autoload item '%ls', it is already being autoloaded. "
L"This is a circular dependency in the autoloading scripts, please remove it."),
cmd.c_str());
return 1;
}
/* Mark that we're loading this */
is_loading_set.insert(cmd);
/* Get the list of paths from which we will try to load */
std::vector<wcstring> path_list;
tokenize_variable_array(path_var, path_list);
/* Try loading it */
res = this->locate_file_and_maybe_load_it(cmd, true, reload, path_list);
res = this->locate_file_and_maybe_load_it(cmd, true, reload, this->last_path_tokenized);
/* Clean up */
bool erased = !! is_loading_set.erase(cmd);
assert(erased);
is_loading_set.erase(where);
return res;
}
@@ -195,7 +194,6 @@ autoload_function_t *autoload_t::get_autoloaded_function_with_creation(const wcs
bool autoload_t::locate_file_and_maybe_load_it(const wcstring &cmd, bool really_load, bool reload, const wcstring_list_t &path_list)
{
/* Note that we are NOT locked in this function! */
size_t i;
bool reloaded = 0;
/* Try using a cached function. If we really want the function to be loaded, require that it be really loaded. If we're not reloading, allow stale functions. */
@@ -234,6 +232,7 @@ bool autoload_t::locate_file_and_maybe_load_it(const wcstring &cmd, bool really_
/* If we can use this function, return whether we were able to access it */
if (use_cached)
{
assert(func != NULL);
return func->is_internalized || func->access.accessible;
}
}
@@ -276,7 +275,7 @@ bool autoload_t::locate_file_and_maybe_load_it(const wcstring &cmd, bool really_
if (! has_script_source)
{
/* Iterate over path searching for suitable completion files */
for (i=0; i<path_list.size(); i++)
for (size_t i=0; i<path_list.size(); i++)
{
wcstring next = path_list.at(i);
wcstring path = next + L"/" + cmd + L".fish";
@@ -298,7 +297,7 @@ bool autoload_t::locate_file_and_maybe_load_it(const wcstring &cmd, bool really_
/* Generate the script source */
wcstring esc = escape_string(path, 1);
script_source = L". " + esc;
script_source = L"source " + esc;
has_script_source = true;
/* Remove any loaded command because we are going to reload it. Note that this will deadlock if command_removed calls back into us. */

View File

@@ -65,17 +65,15 @@ class autoload_t : private lru_cache_t<autoload_function_t>
/** The path from which we most recently autoloaded */
wcstring last_path;
/** That path, tokenized (split on separators) */
wcstring_list_t last_path_tokenized;
/**
A table containing all the files that are currently being
loaded. This is here to help prevent recursion.
*/
std::set<wcstring> is_loading_set;
bool is_loading(const wcstring &name) const
{
return is_loading_set.find(name) != is_loading_set.end();
}
void remove_all_functions(void)
{
this->evict_all_nodes();

View File

@@ -37,10 +37,12 @@ resolve_path()
# Expand relative paths
DOXYFILE=`resolve_path "$DOXYFILE"`
INPUTDIR=`resolve_path "$INPUTDIR"`
INPUTFILTER=`resolve_path "$INPUT_FILTER"`
OUTPUTDIR=`resolve_path "$OUTPUTDIR"`
echo " doxygen file: $DOXYFILE"
echo " input directory: $INPUTDIR"
echo " input filter: $INPUTFILTER"
echo " output directory: $OUTPUTDIR"
echo " skipping: $CONDEMNED_PAGES"
@@ -66,6 +68,12 @@ if test -z "$DOXYGENPATH"; then
exit 0
fi
# Check we have the lexicon filter
if test -z "$INPUT_FILTER"; then
echo >&2 "Lexicon filter is not available. Continuing without."
INPUTFILTER=''
fi
# Determine where our output should go
if ! mkdir -p "${OUTPUTDIR}" ; then
echo "Could not create output directory '${OUTPUTDIR}'"
@@ -86,7 +94,8 @@ done
# Input is kept as . because we cd to the input directory beforehand
# This prevents doxygen from generating "documentation" for intermediate directories
DOXYPARAMS=$(cat <<EOF
PROJECT_NUMBER=2.0.0
PROJECT_NUMBER=$PROJECT_NUMBER
INPUT_FILTER=$INPUTFILTER
INPUT=.
OUTPUT_DIRECTORY=$OUTPUTDIR
QUIET=YES
@@ -100,7 +109,7 @@ find "${OUTPUTDIR}" -name "*.1" -delete
# Run doxygen
cd "$TMPLOC"
(cat "${DOXYFILE}" ; echo "$DOXYPARAMS";) | "$DOXYGENPATH" -
(cat "${DOXYFILE}" ; echo "$DOXYPARAMS";) | "$DOXYGENPATH" -
# Remember errors
RESULT=$?
@@ -110,15 +119,16 @@ if test "$RESULT" = 0 ; then
# Postprocess the files
for i in "$INPUTDIR"/*.txt; do
# It would be nice to use -i here for edit in place, but that is not portable
# It would be nice to use -i here for edit in place, but that is not portable
CMD_NAME=`basename "$i" .txt`;
sed -e "s/\(.\)\\.SH/\1/" -e "s/$CMD_NAME *\\\\- *\"\(.*\)\"/\1/" "${CMD_NAME}.1" > "${CMD_NAME}.1.tmp"
sed < ${CMD_NAME}.1 > ${CMD_NAME}.1.tmp \
-e "/.SH \"$CMD_NAME/d" \
-e "s/^$CMD_NAME * \\\- \([^ ]*\) /\\\fB\1\\\fP -/"
mv "${CMD_NAME}.1.tmp" "${CMD_NAME}.1"
done
# Erase condemned pages
rm -f $CONDEMNED_PAGES
fi
# Destroy TMPLOC

View File

@@ -5,17 +5,14 @@
# Modified for fish by David Adam <zanchey@ucc.gu.uwa.edu.au>
FBVF=FISH-BUILD-VERSION-FILE
DEF_VER=2.0.GIT
DEF_VER=unknown
# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -f version
then
VN=$(cat version) || VN="$DEF_VER"
elif test -d .git -o -f .git && type git >/dev/null
then
VN=$(git describe --tags --dirty 2>/dev/null)
else
elif ! VN=$(git describe --always --dirty 2>/dev/null); then
VN="$DEF_VER"
fi

View File

@@ -20,7 +20,7 @@ wd="$PWD"
prefix="fish"
# Get the version from git-describe
VERSION=`git describe --tags --dirty 2>/dev/null`
VERSION=`git describe --dirty 2>/dev/null`
prefix="$prefix-$VERSION"
# The path where we will output the tar file
@@ -30,7 +30,7 @@ path=~/fish_built/$prefix.tar
rm -f "$path" "$path".gz
# git starts the archive
git archive --format=tar --prefix="$prefix"/ master > "$path"
git archive --format=tar --prefix="$prefix"/ HEAD > "$path"
# tarball out the documentation, generate a configure script and version file
# Don't use autoreconf since it invokes commands that may not be installed, like aclocal

File diff suppressed because it is too large Load Diff

View File

@@ -164,19 +164,35 @@ void builtin_pop_io(parser_t &parser);
wcstring builtin_get_desc(const wcstring &b);
/**
Slightly kludgy function used with 'complete -C' in order to make
the commandline builtin operate on the string to complete instead
of operating on whatever is to be completed.
/** Support for setting and removing transient command lines.
This is used by 'complete -C' in order to make
the commandline builtin operate on the string to complete instead
of operating on whatever is to be completed. It's also used by
completion wrappers, to allow a command to appear as the command
being wrapped for the purposes of completion.
Instantiating an instance of builtin_commandline_scoped_transient_t
pushes the command as the new transient commandline. The destructor removes it.
It will assert if construction/destruction does not happen in a stack-like (LIFO) order.
*/
const wchar_t *builtin_complete_get_temporary_buffer();
class builtin_commandline_scoped_transient_t
{
size_t token;
public:
builtin_commandline_scoped_transient_t(const wcstring &cmd);
~builtin_commandline_scoped_transient_t();
};
/**
Run the __fish_print_help function to obtain the help information
for the specified command.
*/
wcstring builtin_help_get(parser_t &parser, const wchar_t *cmd);
/** Defines a function, like builtin_function. Returns 0 on success. args should NOT contain 'function' as the first argument. */
int define_function(parser_t &parser, const wcstring_list_t &args, const wcstring &contents, int definition_line_offset, wcstring *out_err);
#endif

View File

@@ -79,6 +79,51 @@ static size_t get_cursor_pos()
return current_cursor_pos;
}
static pthread_mutex_t transient_commandline_lock = PTHREAD_MUTEX_INITIALIZER;
static wcstring_list_t *get_transient_stack()
{
ASSERT_IS_MAIN_THREAD();
ASSERT_IS_LOCKED(transient_commandline_lock);
// A pointer is a little more efficient than an object as a static because we can elide the thread-safe initialization
static wcstring_list_t *result = NULL;
if (! result)
{
result = new wcstring_list_t();
}
return result;
}
static bool get_top_transient(wcstring *out_result)
{
ASSERT_IS_MAIN_THREAD();
bool result = false;
scoped_lock locker(transient_commandline_lock);
const wcstring_list_t *stack = get_transient_stack();
if (! stack->empty())
{
out_result->assign(stack->back());
result = true;
}
return result;
}
builtin_commandline_scoped_transient_t::builtin_commandline_scoped_transient_t(const wcstring &cmd)
{
ASSERT_IS_MAIN_THREAD();
scoped_lock locker(transient_commandline_lock);
wcstring_list_t *stack = get_transient_stack();
stack->push_back(cmd);
this->token = stack->size();
}
builtin_commandline_scoped_transient_t::~builtin_commandline_scoped_transient_t()
{
ASSERT_IS_MAIN_THREAD();
scoped_lock locker(transient_commandline_lock);
wcstring_list_t *stack = get_transient_stack();
assert(this->token == stack->size());
stack->pop_back();
}
/**
Replace/append/insert the selection with/at/after the specified string.
@@ -143,17 +188,13 @@ static void write_part(const wchar_t *begin,
int cut_at_cursor,
int tokenize)
{
wcstring out;
wchar_t *buff;
size_t pos;
pos = get_cursor_pos()-(begin-get_buffer());
size_t pos = get_cursor_pos()-(begin-get_buffer());
if (tokenize)
{
buff = wcsndup(begin, end-begin);
wchar_t *buff = wcsndup(begin, end-begin);
// fwprintf( stderr, L"Subshell: %ls, end char %lc\n", buff, *end );
out.clear();
wcstring out;
tokenizer_t tok(buff, TOK_ACCEPT_UNFINISHED);
for (; tok_has_next(&tok); tok_next(&tok))
{
@@ -165,11 +206,13 @@ static void write_part(const wchar_t *begin,
{
case TOK_STRING:
{
out.append(escape_string(tok_last(&tok), UNESCAPE_INCOMPLETE));
wcstring tmp = tok_last(&tok);
unescape_string_in_place(&tmp, UNESCAPE_INCOMPLETE);
out.append(tmp);
out.push_back(L'\n');
break;
}
default:
{
break;
@@ -189,8 +232,9 @@ static void write_part(const wchar_t *begin,
}
// debug( 0, L"woot2 %ls -> %ls", buff, esc );
stdout_buffer.append(begin, end - begin);
wcstring tmp = wcstring(begin, end - begin);
unescape_string_in_place(&tmp, UNESCAPE_INCOMPLETE);
stdout_buffer.append(tmp);
stdout_buffer.append(L"\n");
}
@@ -211,18 +255,24 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
int append_mode=0;
int function_mode = 0;
int selection_mode = 0;
int tokenize = 0;
int cursor_mode = 0;
int line_mode = 0;
int search_mode = 0;
const wchar_t *begin, *end;
current_buffer = (wchar_t *)builtin_complete_get_temporary_buffer();
if (current_buffer)
int paging_mode = 0;
const wchar_t *begin = NULL, *end = NULL;
scoped_push<const wchar_t *> saved_current_buffer(&current_buffer);
scoped_push<size_t> saved_current_cursor_pos(&current_cursor_pos);
wcstring transient_commandline;
if (get_top_transient(&transient_commandline))
{
current_cursor_pos = wcslen(current_buffer);
current_buffer = transient_commandline.c_str();
current_cursor_pos = transient_commandline.size();
}
else
{
@@ -255,77 +305,31 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
static const struct woption
long_options[] =
{
{
L"append", no_argument, 0, 'a'
}
,
{
L"insert", no_argument, 0, 'i'
}
,
{
L"replace", no_argument, 0, 'r'
}
,
{
L"current-job", no_argument, 0, 'j'
}
,
{
L"current-process", no_argument, 0, 'p'
}
,
{
L"current-token", no_argument, 0, 't'
}
,
{
L"current-buffer", no_argument, 0, 'b'
}
,
{
L"cut-at-cursor", no_argument, 0, 'c'
}
,
{
L"function", no_argument, 0, 'f'
}
,
{
L"tokenize", no_argument, 0, 'o'
}
,
{
L"help", no_argument, 0, 'h'
}
,
{
L"input", required_argument, 0, 'I'
}
,
{
L"cursor", no_argument, 0, 'C'
}
,
{
L"line", no_argument, 0, 'L'
}
,
{
L"search-mode", no_argument, 0, 'S'
}
,
{
0, 0, 0, 0
}
}
;
{ L"append", no_argument, 0, 'a' },
{ L"insert", no_argument, 0, 'i' },
{ L"replace", no_argument, 0, 'r' },
{ L"current-job", no_argument, 0, 'j' },
{ L"current-process", no_argument, 0, 'p' },
{ L"current-token", no_argument, 0, 't' },
{ L"current-buffer", no_argument, 0, 'b' },
{ L"cut-at-cursor", no_argument, 0, 'c' },
{ L"function", no_argument, 0, 'f' },
{ L"tokenize", no_argument, 0, 'o' },
{ L"help", no_argument, 0, 'h' },
{ L"input", required_argument, 0, 'I' },
{ L"cursor", no_argument, 0, 'C' },
{ L"line", no_argument, 0, 'L' },
{ L"search-mode", no_argument, 0, 'S' },
{ L"selection", no_argument, 0, 's' },
{ L"paging-mode", no_argument, 0, 'P' },
{ 0, 0, 0, 0 }
};
int opt_index = 0;
int opt = wgetopt_long(argc,
argv,
L"abijpctwforhI:CLS",
L"abijpctwforhI:CLSsP",
long_options,
&opt_index);
if (opt == -1)
@@ -402,6 +406,14 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
search_mode = 1;
break;
case 's':
selection_mode = 1;
break;
case 'P':
paging_mode = 1;
break;
case 'h':
builtin_print_help(parser, argv[0], stdout_buffer);
return 0;
@@ -419,7 +431,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
/*
Check for invalid switch combinations
*/
if (buffer_part || cut_at_cursor || append_mode || tokenize || cursor_mode || line_mode || search_mode)
if (buffer_part || cut_at_cursor || append_mode || tokenize || cursor_mode || line_mode || search_mode || paging_mode)
{
append_format(stderr_buffer,
BUILTIN_ERR_COMBO,
@@ -446,10 +458,10 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
{
/*
input_unreadch inserts the specified keypress or
readline function at the top of the stack of unused
readline function at the back of the queue of unused
keypresses
*/
input_unreadch(c);
input_queue_ch(c);
}
else
{
@@ -465,10 +477,21 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
return 0;
}
if (selection_mode)
{
size_t start, len;
const wchar_t *buffer = reader_get_buffer();
if (reader_get_selection(&start, &len))
{
stdout_buffer.append(buffer + start, len);
}
return 0;
}
/*
Check for invalid switch combinations
*/
if ((search_mode || line_mode || cursor_mode) && (argc-woptind > 1))
if ((search_mode || line_mode || cursor_mode || paging_mode) && (argc-woptind > 1))
{
append_format(stderr_buffer,
@@ -479,7 +502,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
return 1;
}
if ((buffer_part || tokenize || cut_at_cursor) && (cursor_mode || line_mode || search_mode))
if ((buffer_part || tokenize || cut_at_cursor) && (cursor_mode || line_mode || search_mode || paging_mode))
{
append_format(stderr_buffer,
BUILTIN_ERR_COMBO,
@@ -568,7 +591,12 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv)
if (search_mode)
{
return !reader_search_mode();
return ! reader_search_mode();
}
if (paging_mode)
{
return ! reader_has_pager_contents();
}

View File

@@ -24,12 +24,6 @@ Functions used for implementing the complete builtin.
#include "parser.h"
#include "reader.h"
/**
Internal storage for the builtin_complete_get_temporary_buffer() function.
*/
static const wchar_t *temporary_buffer;
/*
builtin_complete_* are a set of rather silly looping functions that
make sure that all the proper combinations of complete_add or
@@ -179,14 +173,16 @@ static void builtin_complete_add(const wcstring_list_t &cmd,
static void builtin_complete_remove3(const wchar_t *cmd,
int cmd_type,
wchar_t short_opt,
const wcstring_list_t &long_opt)
const wcstring_list_t &long_opt,
int long_mode)
{
for (size_t i=0; i<long_opt.size(); i++)
{
complete_remove(cmd,
cmd_type,
short_opt,
long_opt.at(i).c_str());
long_opt.at(i).c_str(),
long_mode);
}
}
@@ -209,6 +205,7 @@ static void builtin_complete_remove2(const wchar_t *cmd,
complete_remove(cmd,
cmd_type,
*s,
0,
0);
}
@@ -217,24 +214,36 @@ static void builtin_complete_remove2(const wchar_t *cmd,
builtin_complete_remove3(cmd,
cmd_type,
*s,
gnu_opt);
gnu_opt,
0);
builtin_complete_remove3(cmd,
cmd_type,
*s,
old_opt);
old_opt,
1);
}
}
}
else if (gnu_opt.empty() && old_opt.empty())
{
complete_remove(cmd,
cmd_type,
0,
0,
0);
}
else
{
builtin_complete_remove3(cmd,
cmd_type,
0,
gnu_opt);
gnu_opt,
0);
builtin_complete_remove3(cmd,
cmd_type,
0,
old_opt);
old_opt,
1);
}
@@ -270,13 +279,6 @@ static void builtin_complete_remove(const wcstring_list_t &cmd,
}
const wchar_t *builtin_complete_get_temporary_buffer()
{
ASSERT_IS_MAIN_THREAD();
return temporary_buffer;
}
/**
The complete builtin. Used for specifying programmable
tab-completions. Calls the functions in complete.c for any heavy
@@ -290,7 +292,6 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
int result_mode=SHARED;
int remove = 0;
int authoritative = -1;
int flags = COMPLETE_AUTO_SPACE;
wcstring short_opt;
wcstring_list_t gnu_opt, old_opt;
@@ -301,6 +302,7 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
wcstring_list_t cmd;
wcstring_list_t path;
wcstring_list_t wrap_targets;
static int recursion_level=0;
@@ -313,81 +315,31 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
static const struct woption
long_options[] =
{
{
L"exclusive", no_argument, 0, 'x'
}
,
{
L"no-files", no_argument, 0, 'f'
}
,
{
L"require-parameter", no_argument, 0, 'r'
}
,
{
L"path", required_argument, 0, 'p'
}
,
{
L"command", required_argument, 0, 'c'
}
,
{
L"short-option", required_argument, 0, 's'
}
,
{
L"long-option", required_argument, 0, 'l'
}
,
{
L"old-option", required_argument, 0, 'o'
}
,
{
L"description", required_argument, 0, 'd'
}
,
{
L"arguments", required_argument, 0, 'a'
}
,
{
L"erase", no_argument, 0, 'e'
}
,
{
L"unauthoritative", no_argument, 0, 'u'
}
,
{
L"authoritative", no_argument, 0, 'A'
}
,
{
L"condition", required_argument, 0, 'n'
}
,
{
L"do-complete", optional_argument, 0, 'C'
}
,
{
L"help", no_argument, 0, 'h'
}
,
{
0, 0, 0, 0
}
}
;
{ L"exclusive", no_argument, 0, 'x' },
{ L"no-files", no_argument, 0, 'f' },
{ L"require-parameter", no_argument, 0, 'r' },
{ L"path", required_argument, 0, 'p' },
{ L"command", required_argument, 0, 'c' },
{ L"short-option", required_argument, 0, 's' },
{ L"long-option", required_argument, 0, 'l' },
{ L"old-option", required_argument, 0, 'o' },
{ L"description", required_argument, 0, 'd' },
{ L"arguments", required_argument, 0, 'a' },
{ L"erase", no_argument, 0, 'e' },
{ L"unauthoritative", no_argument, 0, 'u' },
{ L"authoritative", no_argument, 0, 'A' },
{ L"condition", required_argument, 0, 'n' },
{ L"wraps", required_argument, 0, 'w' },
{ L"do-complete", optional_argument, 0, 'C' },
{ L"help", no_argument, 0, 'h' },
{ 0, 0, 0, 0 }
};
int opt_index = 0;
int opt = wgetopt_long(argc,
argv,
L"a:c:p:s:l:o:d:frxeuAn:C::h",
L"a:c:p:s:l:o:d:frxeuAn:C::w:h",
long_options,
&opt_index);
if (opt == -1)
@@ -423,8 +375,8 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
case 'p':
case 'c':
{
wcstring tmp = woptarg;
if (unescape_string(tmp, 1))
wcstring tmp;
if (unescape_string(woptarg, &tmp, UNESCAPE_SPECIAL))
{
if (opt=='p')
path.push_back(tmp);
@@ -474,6 +426,10 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
case 'n':
condition = woptarg;
break;
case 'w':
wrap_targets.push_back(woptarg);
break;
case 'C':
do_complete = true;
@@ -497,15 +453,19 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
{
if (condition && wcslen(condition))
{
if (parser.test(condition))
const wcstring condition_string = condition;
parse_error_list_t errors;
if (parse_util_detect_errors(condition_string, &errors, false /* do not accept incomplete */))
{
append_format(stderr_buffer,
L"%ls: Condition '%ls' contained a syntax error\n",
L"%ls: Condition '%ls' contained a syntax error",
argv[0],
condition);
parser.test(condition, NULL, &stderr_buffer, argv[0]);
for (size_t i=0; i < errors.size(); i++)
{
append_format(stderr_buffer, L"\n%s: ", argv[0]);
stderr_buffer.append(errors.at(i).describe(condition_string));
}
res = true;
}
}
@@ -515,15 +475,22 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
{
if (comp && wcslen(comp))
{
if (parser.test_args(comp, 0, 0))
wcstring prefix;
if (argv[0])
{
prefix.append(argv[0]);
prefix.append(L": ");
}
wcstring err_text;
if (parser.detect_errors_in_argument_list(comp, &err_text, prefix.c_str()))
{
append_format(stderr_buffer,
L"%ls: Completion '%ls' contained a syntax error\n",
argv[0],
comp);
parser.test_args(comp, &stderr_buffer, argv[0]);
stderr_buffer.append(err_text);
stderr_buffer.push_back(L'\n');
res = true;
}
}
@@ -536,9 +503,9 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
const wchar_t *token;
parse_util_token_extent(do_complete_param.c_str(), do_complete_param.size(), &token, 0, 0, 0);
const wchar_t *prev_temporary_buffer = temporary_buffer;
temporary_buffer = do_complete_param.c_str();
/* Create a scoped transient command line, so that bulitin_commandline will see our argument, not the reader buffer */
builtin_commandline_scoped_transient_t temp_buffer(do_complete_param);
if (recursion_level < 1)
{
@@ -551,33 +518,32 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
{
const completion_t &next = comp.at(i);
const wchar_t *prepend;
/* Make a fake commandline, and then apply the completion to it. */
const wcstring faux_cmdline = token;
size_t tmp_cursor = faux_cmdline.size();
wcstring faux_cmdline_with_completion = completion_apply_to_command_line(next.completion, next.flags, faux_cmdline, &tmp_cursor, false);
if (next.flags & COMPLETE_REPLACES_TOKEN)
/* completion_apply_to_command_line will append a space unless COMPLETE_NO_SPACE is set. We don't want to set COMPLETE_NO_SPACE because that won't close quotes. What we want is to close the quote, but not append the space. So we just look for the space and clear it. */
if (!(next.flags & COMPLETE_NO_SPACE) && string_suffixes_string(L" ", faux_cmdline_with_completion))
{
prepend = L"";
}
else
{
prepend = token;
faux_cmdline_with_completion.resize(faux_cmdline_with_completion.size() - 1);
}
/* The input data is meant to be something like you would have on the command line, e.g. includes backslashes. The output should be raw, i.e. unescaped. So we need to unescape the command line. See #1127 */
unescape_string_in_place(&faux_cmdline_with_completion, UNESCAPE_DEFAULT);
stdout_buffer.append(faux_cmdline_with_completion);
if (!(next.description).empty())
/* Append any description */
if (! next.description.empty())
{
append_format(stdout_buffer, L"%ls%ls\t%ls\n", prepend, next.completion.c_str(), next.description.c_str());
}
else
{
append_format(stdout_buffer, L"%ls%ls\n", prepend, next.completion.c_str());
stdout_buffer.push_back(L'\t');
stdout_buffer.append(next.description);
}
stdout_buffer.push_back(L'\n');
}
recursion_level--;
}
temporary_buffer = prev_temporary_buffer;
}
else if (woptind != argc)
{
@@ -596,6 +562,8 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
}
else
{
int flags = COMPLETE_AUTO_SPACE;
if (remove)
{
builtin_complete_remove(cmd,
@@ -603,6 +571,7 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
short_opt.c_str(),
gnu_opt,
old_opt);
}
else
{
@@ -618,7 +587,18 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
desc,
flags);
}
// Handle wrap targets (probably empty)
// We only wrap commands, not paths
for (size_t w=0; w < wrap_targets.size(); w++)
{
const wcstring &wrap_target = wrap_targets.at(w);
for (size_t i=0; i < cmd.size(); i++)
{
(remove ? complete_remove_wrapper : complete_add_wrapper)(cmd.at(i), wrap_target);
}
}
}
}

View File

@@ -123,7 +123,7 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/*
Print table header before first job
*/
stdout_buffer.append(_(L"Procces\n"));
stdout_buffer.append(_(L"Process\n"));
}
for (p=j->first_process; p; p=p->next)
@@ -164,7 +164,6 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
int found=0;
int mode=JOBS_DEFAULT;
int print_last = 0;
const job_t *j;
argc = builtin_count_args(argv);
woptind=0;
@@ -305,7 +304,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
return 1;
}
j = job_get_from_pid(pid);
const job_t *j = job_get_from_pid(pid);
if (j && !job_is_completed(j))
{
@@ -344,6 +343,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
append_format(stdout_buffer,
_(L"%ls: There are no jobs\n"),
argv[0]);
return 1;
}
return 0;

View File

@@ -195,11 +195,6 @@ double C_STRTOD(wchar_t const *nptr, wchar_t **endptr)
return r;
}
static inline unsigned wchar_t to_uwchar_t(wchar_t ch)
{
return ch;
}
void builtin_printf_state_t::fatal_error(const wchar_t *fmt, ...)
{
// Don't error twice
@@ -292,7 +287,7 @@ static T string_to_scalar_type(const wchar_t *s, builtin_printf_state_t *state)
T val;
if (*s == L'\"' || *s == L'\'')
{
unsigned wchar_t ch = *++s;
wchar_t ch = *++s;
val = ch;
}
else
@@ -362,16 +357,17 @@ long builtin_printf_state_t::print_esc(const wchar_t *escstart, bool octal_0)
esc_value = esc_value * 16 + hex_to_bin(*p);
if (esc_length == 0)
this->fatal_error(_(L"missing hexadecimal number in escape"));
this->append_output(esc_value);
this->append_output(ENCODE_DIRECT_BASE + esc_value % 256);
}
else if (is_octal_digit(*p))
{
/* Parse \0ooo (if octal_0 && *p == L'0') or \ooo (otherwise).
Allow \ooo if octal_0 && *p != L'0'; this is an undocumented
extension to POSIX that is compatible with Bash 2.05b. */
/* Wrap mod 256, which matches historic behavior */
for (esc_length = 0, p += octal_0 && *p == L'0'; esc_length < 3 && is_octal_digit(*p); ++esc_length, ++p)
esc_value = esc_value * 8 + octal_to_bin(*p);
this->append_output(esc_value);
this->append_output(ENCODE_DIRECT_BASE + esc_value % 256);
}
else if (*p && wcschr(L"\"\\abcefnrtv", *p))
{
@@ -472,6 +468,7 @@ void builtin_printf_state_t::print_direc(const wchar_t *start, size_t length, wc
fmt.append(L"L");
break;
case L's':
case L'c':
fmt.append(L"l");
break;
default:
@@ -632,7 +629,7 @@ int builtin_printf_state_t::print_formatted(const wchar_t *format, int argc, wch
}
break;
}
modify_allowed_format_specifiers(ok, "aAcdeEfFgGiosuxX", true);
for (;; f++, direc_length++)
@@ -736,8 +733,8 @@ no_more_flag_characters:
++f;
{
unsigned wchar_t conversion = *f;
if (! ok[conversion])
wchar_t conversion = *f;
if (conversion > 0xFF || ! ok[conversion])
{
this->fatal_error(_(L"%.*ls: invalid conversion specification"), (int)(f + 1 - direc_start), direc_start);
return 0;

View File

@@ -69,7 +69,7 @@ static int my_env_set(const wchar_t *key, const wcstring_list_t &val, int scope)
/* Don't bother validating (or complaining about) values that are already present */
wcstring_list_t existing_values;
const env_var_t existing_variable = env_get_string(key);
const env_var_t existing_variable = env_get_string(key, scope);
if (! existing_variable.missing_or_empty())
tokenize_variable_array(existing_variable, existing_values);
@@ -157,9 +157,16 @@ static int my_env_set(const wchar_t *key, const wcstring_list_t &val, int scope)
break;
}
case ENV_SCOPE:
{
append_format(stderr_buffer, _(L"%ls: Tried to set the special variable '%ls' with the wrong scope\n"), L"set", key);
retcode=1;
break;
}
case ENV_INVALID:
{
append_format(stderr_buffer, _(L"%ls: Unknown error"), L"set");
append_format(stderr_buffer, _(L"%ls: Tried to set the special variable '%ls' to an invalid value\n"), L"set", key);
retcode=1;
break;
}
@@ -353,7 +360,7 @@ static void print_variables(int include_values, int esc, bool shorten_ok, int sc
if (include_values)
{
env_var_t value = env_get_string(key);
env_var_t value = env_get_string(key, scope);
if (!value.missing())
{
int shorten = 0;
@@ -428,7 +435,7 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
int slice=0;
int i;
wchar_t *bad_char;
const wchar_t *bad_char = NULL;
/* Parse options to obtain the requested operation and the modifiers */
@@ -519,7 +526,7 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
}
/* We can't both list and erase varaibles */
/* We can't both list and erase variables */
if (erase && list)
{
append_format(stderr_buffer,
@@ -588,7 +595,7 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
wcstring_list_t result;
size_t j;
env_var_t dest_str = env_get_string(dest);
env_var_t dest_str = env_get_string(dest, scope);
if (! dest_str.missing())
tokenize_variable_array(dest_str, result);
@@ -678,14 +685,6 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
return 1;
}
if (slice && erase && (scope != ENV_USER))
{
free(dest);
append_format(stderr_buffer, _(L"%ls: Can not specify scope when erasing array slice\n"), argv[0]);
builtin_print_help(parser, argv[0], stderr_buffer);
return 1;
}
/*
set assignment can work in two modes, either using slices or
using the whole array. We detect which mode is used here.
@@ -697,40 +696,47 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
/*
Slice mode
*/
size_t idx_count, val_count;
wcstring_list_t values;
std::vector<long> indexes;
wcstring_list_t result;
const env_var_t dest_str = env_get_string(dest);
const env_var_t dest_str = env_get_string(dest, scope);
if (! dest_str.missing())
tokenize_variable_array(dest_str, result);
for (; woptind<argc; woptind++)
{
if (!parse_index(indexes, argv[woptind], dest, result.size()))
{
builtin_print_help(parser, argv[0], stderr_buffer);
retcode = 1;
break;
}
tokenize_variable_array(dest_str, result);
}
else if (erase)
{
retcode = 1;
}
val_count = argc-woptind-1;
idx_count = indexes.size();
if (!erase)
if (!retcode)
{
for (; woptind<argc; woptind++)
{
if (val_count < idx_count)
if (!parse_index(indexes, argv[woptind], dest, result.size()))
{
append_format(stderr_buffer, _(BUILTIN_SET_ARG_COUNT), argv[0]);
builtin_print_help(parser, argv[0], stderr_buffer);
retcode=1;
retcode = 1;
break;
}
if (val_count == idx_count)
size_t idx_count = indexes.size();
size_t val_count = argc-woptind-1;
if (!erase)
{
woptind++;
break;
if (val_count < idx_count)
{
append_format(stderr_buffer, _(BUILTIN_SET_ARG_COUNT), argv[0]);
builtin_print_help(parser, argv[0], stderr_buffer);
retcode=1;
break;
}
if (val_count == idx_count)
{
woptind++;
break;
}
}
}
}
@@ -801,6 +807,16 @@ static int builtin_set(parser_t &parser, wchar_t **argv)
}
}
/* Check if we are setting variables above the effective scope.
See https://github.com/fish-shell/fish-shell/issues/806
*/
env_var_t global_dest = env_get_string(dest, ENV_GLOBAL);
if (universal && ! global_dest.missing())
{
append_format(stderr_buffer, _(L"%ls: Warning: universal scope selected, but a global variable '%ls' exists.\n"), L"set", dest);
}
free(dest);
if (retcode == STATUS_BUILTIN_OK && preserve_incoming_failure_exit_status)

View File

@@ -11,6 +11,8 @@ Functions used for implementing the set_color builtin.
#if HAVE_NCURSES_H
#include <ncurses.h>
#elif HAVE_NCURSES_CURSES_H
#include <ncurses/curses.h>
#else
#include <curses.h>
#endif
@@ -81,6 +83,12 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
int argc = builtin_count_args(argv);
/* Some code passes variables to set_color that don't exist, like $fish_user_whatever. As a hack, quietly return failure. */
if (argc <= 1)
{
return EXIT_FAILURE;
}
const wchar_t *bgcolor = NULL;
bool bold = false, underline=false;
int errret;
@@ -126,37 +134,31 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
}
}
/* Remaining argument is foreground color */
const wchar_t *fgcolor = NULL;
if (woptind < argc)
/* Remaining arguments are foreground color */
std::vector<rgb_color_t> fgcolors;
for (; woptind < argc; woptind++)
{
if (woptind + 1 == argc)
rgb_color_t fg = rgb_color_t(argv[woptind]);
if (fg.is_none() || fg.is_ignore())
{
fgcolor = argv[woptind];
}
else
{
append_format(stderr_buffer,
_(L"%ls: Too many arguments\n"),
argv[0]);
append_format(stderr_buffer, _(L"%ls: Unknown color '%ls'\n"), argv[0], argv[woptind]);
return STATUS_BUILTIN_ERROR;
}
fgcolors.push_back(fg);
}
if (fgcolor == NULL && bgcolor == NULL && !bold && !underline)
if (fgcolors.empty() && bgcolor == NULL && !bold && !underline)
{
append_format(stderr_buffer,
_(L"%ls: Expected an argument\n"),
argv[0]);
return STATUS_BUILTIN_ERROR;
}
const rgb_color_t fg = rgb_color_t(fgcolor ? fgcolor : L"");
if (fgcolor && (fg.is_none() || fg.is_ignore()))
{
append_format(stderr_buffer, _(L"%ls: Unknown color '%ls'\n"), argv[0], fgcolor);
return STATUS_BUILTIN_ERROR;
}
// #1323: We may have multiple foreground colors. Choose the best one.
// If we had no foreground coor, we'll get none(); if we have at least one we expect not-none
const rgb_color_t fg = best_color(fgcolors, output_get_color_support());
assert(fgcolors.empty() || !(fg.is_none() || fg.is_ignore()));
const rgb_color_t bg = rgb_color_t(bgcolor ? bgcolor : L"");
if (bgcolor && (bg.is_none() || bg.is_ignore()))
@@ -181,7 +183,6 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
return STATUS_BUILTIN_ERROR;
}
/* Save old output function so we can restore it */
int (* const saved_writer_func)(char) = output_get_writer();
@@ -205,21 +206,21 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
{
if (bg.is_normal())
{
write_background_color(0);
write_color(rgb_color_t::black(), false /* not is_fg */);
writembs(tparm(exit_attribute_mode));
}
}
if (fgcolor != NULL)
if (! fg.is_none())
{
if (fg.is_normal() || fg.is_reset())
{
write_foreground_color(0);
write_color(rgb_color_t::black(), true /* is_fg */);
writembs(tparm(exit_attribute_mode));
}
else
{
write_foreground_color(index_for_color(fg));
write_color(fg, true /* is_fg */);
}
}
@@ -227,7 +228,7 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
{
if (! bg.is_normal() && ! bg.is_reset())
{
write_background_color(index_for_color(bg));
write_color(bg, false /* not is_fg */);
}
}
@@ -235,9 +236,8 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv)
output_set_writer(saved_writer_func);
/* Output the collected string */
std::string local_output;
std::swap(builtin_set_color_output, local_output);
stdout_buffer.append(str2wcstring(local_output));
stdout_buffer.append(str2wcstring(builtin_set_color_output));
builtin_set_color_output.clear();
return STATUS_BUILTIN_OK;
}

View File

@@ -646,13 +646,11 @@ 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;
}
@@ -667,14 +665,12 @@ 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;
}
}
return result;
}

View File

@@ -160,7 +160,7 @@ static void print_all(int hard)
for (i=0; resource_arr[i].desc; i++)
{
w=maxi(w, my_wcswidth(resource_arr[i].desc));
w=maxi(w, fish_wcswidth(resource_arr[i].desc));
}
for (i=0; resource_arr[i].desc; i++)

View File

@@ -6,7 +6,7 @@
bool rgb_color_t::try_parse_special(const wcstring &special)
{
bzero(&data, sizeof data);
memset(&data, 0, sizeof data);
const wchar_t *name = special.c_str();
if (! wcscasecmp(name, L"normal"))
{
@@ -102,7 +102,7 @@ static unsigned char convert_color(const unsigned char rgb[3], const uint32_t *c
bool rgb_color_t::try_parse_rgb(const wcstring &name)
{
bzero(&data, sizeof data);
memset(&data, 0, sizeof data);
/* We support the following style of rgb formats (case insensitive):
#FA3
#F3A035
@@ -125,7 +125,7 @@ bool rgb_color_t::try_parse_rgb(const wcstring &name)
{
int val = parse_hex_digit(name.at(digit_idx++));
if (val < 0) break;
data.rgb[i] = val*16+val;
data.color.rgb[i] = val*16+val;
}
success = (i == 3);
}
@@ -137,7 +137,7 @@ bool rgb_color_t::try_parse_rgb(const wcstring &name)
int hi = parse_hex_digit(name.at(digit_idx++));
int lo = parse_hex_digit(name.at(digit_idx++));
if (lo < 0 || hi < 0) break;
data.rgb[i] = hi*16+lo;
data.color.rgb[i] = hi*16+lo;
}
success = (i == 3);
}
@@ -184,7 +184,7 @@ wcstring_list_t rgb_color_t::named_color_names(void)
bool rgb_color_t::try_parse_named(const wcstring &str)
{
bzero(&data, sizeof data);
memset(&data, 0, sizeof data);
size_t max = sizeof named_colors / sizeof *named_colors;
for (size_t idx=0; idx < max; idx++)
{
@@ -298,7 +298,13 @@ static unsigned char term256_color_for_rgb(const unsigned char rgb[3])
unsigned char rgb_color_t::to_term256_index() const
{
assert(type == type_rgb);
return term256_color_for_rgb(data.rgb);
return term256_color_for_rgb(data.color.rgb);
}
color24_t rgb_color_t::to_color24() const
{
assert(type == type_rgb);
return data.color;
}
unsigned char rgb_color_t::to_name_index() const
@@ -310,7 +316,7 @@ unsigned char rgb_color_t::to_name_index() const
}
else if (type == type_rgb)
{
return term8_color_for_rgb(data.rgb);
return term8_color_for_rgb(data.color.rgb);
}
else
{
@@ -327,7 +333,7 @@ void rgb_color_t::parse(const wcstring &str)
if (! success) success = try_parse_rgb(str);
if (! success)
{
bzero(this->data.rgb, sizeof this->data.rgb);
memset(&this->data, 0, sizeof this->data);
this->type = type_none;
}
}
@@ -351,7 +357,7 @@ wcstring rgb_color_t::description() const
case type_named:
return format_string(L"named(%d: %ls)", (int)data.name_idx, name_for_color_idx(data.name_idx));
case type_rgb:
return format_string(L"rgb(0x%02x%02x%02x)", data.rgb[0], data.rgb[1], data.rgb[2]);
return format_string(L"rgb(0x%02x%02x%02x)", data.color.rgb[0], data.color.rgb[1], data.color.rgb[2]);
case type_reset:
return L"reset";
case type_normal:

12
color.h
View File

@@ -8,6 +8,11 @@
#include "config.h"
#include "common.h"
/* 24 bit color */
struct color24_t
{
unsigned char rgb[3];
};
/* A type that represents a color. We work hard to keep it at a size of 4 bytes. */
class rgb_color_t
@@ -36,7 +41,7 @@ class rgb_color_t
union
{
unsigned char name_idx; //0-10
unsigned char rgb[3];
color24_t color;
} data;
/** Try parsing a special color name like "normal" */
@@ -129,9 +134,12 @@ class rgb_color_t
/** Returns the name index for the given color. Requires that the color be named or RGB. */
unsigned char to_name_index() const;
/** Returns the term256 index for the given color. Requires that the color be named or RGB. */
/** Returns the term256 index for the given color. Requires that the color be RGB. */
unsigned char to_term256_index() const;
/** Returns the 24 bit color for the given color. Requires that the color be RGB. */
color24_t to_color24() const;
/** Returns whether the color is bold */
bool is_bold() const
{

1404
common.cpp

File diff suppressed because it is too large Load Diff

191
common.h
View File

@@ -59,15 +59,22 @@ typedef std::vector<wcstring> wcstring_list_t;
*/
#define BYTE_MAX 0xffu
/**
Escape special fish syntax characters like the semicolon
*/
#define UNESCAPE_SPECIAL 1
/** BOM value */
#define UTF8_BOM_WCHAR 0xFEFFu
/**
Allow incomplete escape sequences
*/
#define UNESCAPE_INCOMPLETE 2
/* Flags for unescape_string functions */
enum
{
/* Default behavior */
UNESCAPE_DEFAULT = 0,
/* Escape special fish syntax characters like the semicolon */
UNESCAPE_SPECIAL = 1 << 0,
/* Allow incomplete escape sequences */
UNESCAPE_INCOMPLETE = 1 << 1
};
typedef unsigned int unescape_flags_t;
/* Flags for the escape() and escape_string() functions */
enum
@@ -83,10 +90,47 @@ enum
};
typedef unsigned int escape_flags_t;
/* Directions */
enum selection_direction_t
{
/* visual directions */
direction_north,
direction_east,
direction_south,
direction_west,
direction_page_north,
direction_page_south,
/* logical directions */
direction_next,
direction_prev,
/* special value that means deselect */
direction_deselect
};
inline bool selection_direction_is_cardinal(selection_direction_t dir)
{
switch (dir)
{
case direction_north:
case direction_page_north:
case direction_east:
case direction_page_south:
case direction_south:
case direction_west:
return true;
default:
return false;
}
}
/**
Helper macro for errors
*/
#define VOMIT_ON_FAILURE(a) do { if (0 != (a)) { int err = errno; fprintf(stderr, "%s failed on line %d in file %s: %d (%s)\n", #a, __LINE__, __FILE__, err, strerror(err)); abort(); }} while (0)
#define VOMIT_ON_FAILURE(a) do { if (0 != (a)) { VOMIT_ABORT(errno, #a); } } while (0)
#define VOMIT_ON_FAILURE_NO_ERRNO(a) do { int err = (a); if (0 != err) { VOMIT_ABORT(err, #a); } } while (0)
#define VOMIT_ABORT(err, str) do { int code = (err); fprintf(stderr, "%s failed on line %d in file %s: %d (%s)\n", str, __LINE__, __FILE__, code, strerror(code)); abort(); } while(0)
/** Exits without invoking destructors (via _exit), useful for code after fork. */
void exit_without_destructors(int code) __attribute__((noreturn));
@@ -114,7 +158,7 @@ extern int debug_level;
/**
Profiling flag. True if commands should be profiled.
*/
extern char *profile;
extern bool g_profiling_active;
/**
Name of the current program. Should be set at startup. Used by the
@@ -122,6 +166,10 @@ extern char *profile;
*/
extern const wchar_t *program_name;
/* Variants of read() and write() that ignores return values, defeating a warning */
void read_ignore(int fd, void *buff, size_t count);
void write_ignore(int fd, const void *buff, size_t count);
/**
This macro is used to check that an input argument is not null. It
is a bit lika a non-fatal form of assert. Instead of exit-ing on
@@ -145,10 +193,10 @@ extern const wchar_t *program_name;
*/
#define FATAL_EXIT() \
{ \
char exit_read_buff; \
show_stackframe(); \
read( 0, &exit_read_buff, 1 ); \
exit_without_destructors( 1 ); \
char exit_read_buff; \
show_stackframe(); \
read_ignore( 0, &exit_read_buff, 1 ); \
exit_without_destructors( 1 ); \
} \
@@ -193,7 +241,7 @@ extern const wchar_t *program_name;
/**
Check if the specified string element is a part of the specified string list
*/
#define contains( str,... ) contains_internal( str, __VA_ARGS__, NULL )
#define contains( str, ... ) contains_internal( str, 0, __VA_ARGS__, NULL )
/**
Print a stack trace to stderr
@@ -344,8 +392,8 @@ void format_size_safe(char buff[128], unsigned long long sz);
void debug_safe(int level, const char *msg, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL, const char *param5 = NULL, const char *param6 = NULL, const char *param7 = NULL, const char *param8 = NULL, const char *param9 = NULL, const char *param10 = NULL, const char *param11 = NULL, const char *param12 = NULL);
/** Writes out a long safely */
void format_long_safe(char buff[128], long val);
void format_long_safe(wchar_t buff[128], long val);
void format_long_safe(char buff[64], long val);
void format_long_safe(wchar_t buff[64], long val);
template<typename T>
@@ -498,6 +546,22 @@ class narrow_string_rep_t
bool is_forked_child();
class mutex_lock_t
{
public:
pthread_mutex_t mutex;
mutex_lock_t()
{
VOMIT_ON_FAILURE_NO_ERRNO(pthread_mutex_init(&mutex, NULL));
}
~mutex_lock_t()
{
VOMIT_ON_FAILURE_NO_ERRNO(pthread_mutex_destroy(&mutex));
}
};
/* Basic scoped lock class */
class scoped_lock
{
@@ -512,9 +576,52 @@ class scoped_lock
void lock(void);
void unlock(void);
scoped_lock(pthread_mutex_t &mutex);
scoped_lock(mutex_lock_t &lock);
~scoped_lock();
};
class rwlock_t
{
public:
pthread_rwlock_t rwlock;
rwlock_t()
{
VOMIT_ON_FAILURE_NO_ERRNO(pthread_rwlock_init(&rwlock, NULL));
}
~rwlock_t()
{
VOMIT_ON_FAILURE_NO_ERRNO(pthread_rwlock_destroy(&rwlock));
}
};
/*
Scoped lock class for rwlocks
*/
class scoped_rwlock
{
pthread_rwlock_t *rwlock_obj;
bool locked;
bool locked_shared;
/* No copying */
scoped_rwlock &operator=(const scoped_lock &);
scoped_rwlock(const scoped_lock &);
public:
void lock(void);
void unlock(void);
void lock_shared(void);
void unlock_shared(void);
/*
upgrade shared lock to exclusive.
equivalent to `lock.unlock_shared(); lock.lock();`
*/
void upgrade(void);
scoped_rwlock(pthread_rwlock_t &rwlock, bool shared = false);
scoped_rwlock(rwlock_t &rwlock, bool shared = false);
~scoped_rwlock();
};
/**
A scoped manager to save the current value of some variable, and optionally
@@ -582,19 +689,13 @@ wcstring vformat_string(const wchar_t *format, va_list va_orig);
void append_format(wcstring &str, const wchar_t *format, ...);
void append_formatv(wcstring &str, const wchar_t *format, va_list ap);
/**
Returns a newly allocated wide character string array equivalent of
the specified multibyte character string array
*/
char **wcsv2strv(const wchar_t * const *in);
/**
Test if the given string is a valid variable name.
\return null if this is a valid name, and a pointer to the first invalid character otherwise
*/
wchar_t *wcsvarname(const wchar_t *str);
const wchar_t *wcsvarname(const wchar_t *str);
/**
@@ -608,16 +709,18 @@ const wchar_t *wcsfuncname(const wchar_t *str);
/**
Test if the given string is valid in a variable name
\return 1 if this is a valid name, 0 otherwise
\return true if this is a valid name, false otherwise
*/
int wcsvarchr(wchar_t chr);
bool wcsvarchr(wchar_t chr);
/**
A wcswidth workalike. Fish uses this since the regular wcswidth seems flaky.
Convenience variants on fish_wcwswidth().
See fallback.h for the normal definitions.
*/
int my_wcswidth(const wchar_t *c);
int fish_wcswidth(const wchar_t *str);
int fish_wcswidth(const wcstring& str);
/**
This functions returns the end of the quoted substring beginning at
@@ -653,8 +756,8 @@ wcstring wsetlocale(int category, const wchar_t *locale);
\return zero if needle is not found, of if needle is null, non-zero otherwise
*/
__sentinel bool contains_internal(const wchar_t *needle, ...);
__sentinel bool contains_internal(const wcstring &needle, ...);
__sentinel bool contains_internal(const wchar_t *needle, int vararg_handle, ...);
__sentinel bool contains_internal(const wcstring &needle, int vararg_handle, ...);
/**
Call read while blocking the SIGCHLD signal. Should only be called
@@ -697,16 +800,19 @@ ssize_t read_loop(int fd, void *buff, size_t count);
void debug(int level, const char *msg, ...);
void debug(int level, const wchar_t *msg, ...);
/** Writes a string to stderr, followed by a newline */
void print_stderr(const wcstring &str);
/**
Replace special characters with backslash escape sequences. Newline is
replaced with \n, etc.
\param in The string to be escaped
\param escape_all Whether all characters wich hold special meaning in fish (Pipe, semicolon, etc,) should be escaped, or only unprintable characters
\return The escaped string, or 0 if there is not enough memory
\param flags Flags to control the escaping
\return The escaped string
*/
wchar_t *escape(const wchar_t *in, escape_flags_t flags);
wcstring escape(const wchar_t *in, escape_flags_t flags);
wcstring escape_string(const wcstring &in, escape_flags_t flags);
/**
@@ -715,16 +821,14 @@ wcstring escape_string(const wcstring &in, escape_flags_t flags);
character and a few more into constants which are defined in a
private use area of Unicode. This assumes wchar_t is a unicode
character set.
The result must be free()d. The original string is not modified. If
an invalid sequence is specified, 0 is returned.
*/
wchar_t *unescape(const wchar_t * in,
int escape_special);
bool unescape_string(wcstring &str,
int escape_special);
/** Unescapes a string in-place. A true result indicates the string was unescaped, a false result indicates the string was unmodified. */
bool unescape_string_in_place(wcstring *str, unescape_flags_t escape_special);
/** Unescapes a string, returning the unescaped value by reference. On failure, the output is set to an empty string. */
bool unescape_string(const wchar_t *input, wcstring *output, unescape_flags_t escape_special);
bool unescape_string(const wcstring &input, wcstring *output, unescape_flags_t escape_special);
/**
@@ -809,6 +913,9 @@ void assert_is_not_forked_child(const char *who);
#define ASSERT_IS_NOT_FORKED_CHILD_TRAMPOLINE(x) assert_is_not_forked_child(x)
#define ASSERT_IS_NOT_FORKED_CHILD() ASSERT_IS_NOT_FORKED_CHILD_TRAMPOLINE(__FUNCTION__)
/** Macro to help suppress potentially unused variable warnings */
#define USE(var) (void)(var)
extern "C" {
__attribute__((noinline)) void debug_thread_error(void);
}

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@
#include <wchar.h>
#include <stdint.h>
#include "util.h"
#include "common.h"
@@ -31,7 +32,7 @@
#define NO_COMMON 2
/**
* Only use the argument list specifies with completion after
* option. This is the same as (NO_FILES & NO_COMMON)
* option. This is the same as (NO_FILES | NO_COMMON)
*/
#define EXCLUSIVE 3
@@ -54,13 +55,6 @@
*/
#define COMPLETE_SEP_STR L"\004"
/**
* Separator between completion items in fish_pager. This is used for
* completion grouping, e.g. when putting completions with the same
* descriptions on the same line.
*/
#define COMPLETE_ITEM_SEP L'\uf500'
/**
* Character that separates the completion and description on
* programmable completions
@@ -121,15 +115,17 @@ class completion_t
The COMPLETE_NO_CASE can be used to signal that this completion
is case insensitive.
*/
int flags;
complete_flags_t flags;
/* Construction. Note: defining these so that they are not inlined reduces the executable size. */
completion_t(const wcstring &comp, const wcstring &desc = L"", string_fuzzy_match_t match = string_fuzzy_match_t(fuzzy_match_exact), int flags_val = 0);
completion_t(const wcstring &comp, const wcstring &desc = wcstring(), string_fuzzy_match_t match = string_fuzzy_match_t(fuzzy_match_exact), complete_flags_t flags_val = 0);
completion_t(const completion_t &);
completion_t &operator=(const completion_t &);
/* Compare two completions. No operating overlaoding to make this always explicit (there's potentially multiple ways to compare completions). */
static bool is_alphabetically_less_than(const completion_t &a, const completion_t &b);
/* "Naturally less than" means in a natural ordering, where digits are treated as numbers. For example, foo10 is naturally greater than foo2 (but alphabetically less than it) */
static bool is_naturally_less_than(const completion_t &a, const completion_t &b);
static bool is_alphabetically_equal_to(const completion_t &a, const completion_t &b);
};
@@ -142,9 +138,6 @@ enum
};
typedef uint32_t completion_request_flags_t;
/** Given a list of completions, returns a list of their completion fields */
wcstring_list_t completions_to_wcstring_list(const std::vector<completion_t> &completions);
/**
Add a completion.
@@ -213,17 +206,15 @@ void complete_set_authoritative(const wchar_t *cmd, bool cmd_type, bool authorit
void complete_remove(const wchar_t *cmd,
bool cmd_is_path,
wchar_t short_opt,
const wchar_t *long_opt);
const wchar_t *long_opt,
int long_mode);
/** Find all completions of the command cmd, insert them into out. If to_load is
* not NULL, append all commands that we would autoload, but did not (presumably
* because this is not the main thread)
/** Find all completions of the command cmd, insert them into out.
*/
void complete(const wcstring &cmd,
std::vector<completion_t> &comp,
completion_request_flags_t flags,
wcstring_list_t *to_load = NULL);
completion_request_flags_t flags);
/**
Print a list of all current completions into the string.
@@ -271,9 +262,17 @@ void complete_load(const wcstring &cmd, bool reload);
\param flags completion flags
*/
void append_completion(std::vector<completion_t> &completions, const wcstring &comp, const wcstring &desc = L"", int flags = 0, string_fuzzy_match_t match = string_fuzzy_match_t(fuzzy_match_exact));
void append_completion(std::vector<completion_t> &completions, const wcstring &comp, const wcstring &desc = wcstring(), int flags = 0, string_fuzzy_match_t match = string_fuzzy_match_t(fuzzy_match_exact));
/* Function used for testing */
void complete_set_variable_names(const wcstring_list_t *names);
/* Support for "wrap targets." A wrap target is a command that completes liek another command. The target chain is the sequence of wraps (A wraps B wraps C...). Any loops in the chain are silently ignored. */
bool complete_add_wrapper(const wcstring &command, const wcstring &wrap_target);
bool complete_remove_wrapper(const wcstring &command, const wcstring &wrap_target);
wcstring_list_t complete_get_wrap_chain(const wcstring &command);
/* Wonky interface: returns all wraps. Even-values are the commands, odd values are the targets. */
wcstring_list_t complete_get_wrap_pairs();
#endif

View File

@@ -21,18 +21,9 @@ conf_arg=$@
# List of output variables produced by this configure script
#
AC_SUBST(docdir)
AC_SUBST(HAVE_GETTEXT)
AC_SUBST(HAVE_DOXYGEN)
AC_SUBST(LDFLAGS_FISH)
AC_SUBST(LIBS_FISH)
AC_SUBST(LIBS_FISH_INDENT)
AC_SUBST(LIBS_FISH_PAGER)
AC_SUBST(LIBS_FISHD)
AC_SUBST(LIBS_MIMEDB)
AC_SUBST(localedir)
AC_SUBST(optbindirs)
AC_SUBST(prefix)
#
@@ -99,49 +90,11 @@ fi
AC_PROG_CXX([g++ c++])
AC_PROG_INSTALL
AC_PROG_SED
AC_LANG(C++)
echo "CXXFLAGS: $CXXFLAGS"
#
# Detect directories which may contain additional headers, libraries
# and commands. This needs to be done early - before Autoconf starts
# to mess with CXXFLAGS and all the other environemnt variables.
#
# This mostly helps OS X users, since fink usually installs out of
# tree and doesn't update CXXFLAGS.
#
# It also helps FreeBSD which puts libiconv in /usr/local/lib
for i in /usr/pkg /sw /opt /opt/local /usr/local; do
AC_MSG_CHECKING([for $i/include include directory])
if test -d $i/include; then
AC_MSG_RESULT(yes)
CXXFLAGS="$CXXFLAGS -I$i/include/"
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING([for $i/lib library directory])
if test -d $i/lib; then
AC_MSG_RESULT(yes)
LDFLAGS="$LDFLAGS -L$i/lib/"
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING([for $i/bin command directory])
if test -d $i/bin; then
AC_MSG_RESULT(yes)
optbindirs="$optbindirs $i/bin"
else
AC_MSG_RESULT(no)
fi
done
#
# Tell autoconf to create config.h header
#
@@ -156,9 +109,11 @@ AC_CONFIG_HEADERS(config.h)
AH_BOTTOM([#if __GNUC__ >= 3
#define __warn_unused __attribute__ ((warn_unused_result))
#define __sentinel __attribute__ ((sentinel))
#define __packed __attribute__ ((packed))
#else
#define __warn_unused
#define __sentinel
#define __packed
#endif])
@@ -192,7 +147,7 @@ AS_IF([test x$local_gettext != xno],
# Build/clean the documentation only if Doxygen is available
#
doxygen_minimum=1.5
doxygen_minimum=1.8.7
AC_ARG_WITH(
doxygen,
@@ -238,58 +193,37 @@ AS_IF([test "$use_doxygen" != "no"],
CXXFLAGS="$CXXFLAGS -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64"
# fish does not use exceptions
# Disabling exceptions saves about 20% (!) of the compiled code size
CXXFLAGS="$CXXFLAGS -fno-exceptions"
#
# If we are using gcc, set some flags that increase the odds of the
# compiler producing a working binary...
# -Wall is there to keep me on my toes
# But signed comparison warnings are way too aggressive
#
if test "$GCC" = yes; then
CXXFLAGS="$CXXFLAGS -Wall -Wno-sign-compare"
#
# -fno-optimize-sibling-calls seems to work around a bug where
# sending a SIGWINCH to fish on NetBSD 3.0 causes fish to exit when
# compiled with GCC 3.3.3. This is probably either a compiler bug
# or a libc bug, but adding this flag seems to fix things for
# now. Long term, the real problem should be tracked down and
# truly fixed, at which point we can remove this silly flag. This
# bug has been verified to not exist on Linux using GCC 3.3.3.
#
GCC_VERSION=$($CC -dumpversion)
GCC_VERSION_MAJOR=$(echo $GCC_VERSION | cut -d'.' -f1)
GCC_VERSION_MINOR=$(echo $GCC_VERSION | cut -d'.' -f2)
GCC_VERSION_PATCH=$(echo $GCC_VERSION | cut -d'.' -f3)
if test "$GCC_VERSION_MAJOR" -le 3; then
if test 0"$GCC_VERSION_MINOR" -le 3; then
if test 0"$GCC_VERSION_PATCH" -le 3; then
CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls"
fi
fi
fi
# fish does not use exceptions
# Disabling exceptions saves about 20% (!) of the compiled code size
CXXFLAGS="$CXXFLAGS -fno-exceptions"
#
# -Wall is there to keep me on my toes
#
# Some day...
CXXFLAGS="$CXXFLAGS -Wall"
#
# This is needed in order to get the really cool backtraces on Linux
#
if test `uname` != "Darwin"; then
LDFLAGS_FISH="$LDFLAGS_FISH -rdynamic"
fi
#
# This is needed in order to get the really cool backtraces on Linux
#
if test `uname` != "Darwin"; then
LDFLAGS_FISH="$LDFLAGS_FISH -rdynamic"
fi
#
# On Cygwin, we need to add some flags for ncurses.
#
case `uname` in
CYGWIN*)
echo "adding flags for ncurses on Cygwin"
CXXFLAGS="$CXXFLAGS -I/usr/include -I/usr/include/ncursesw"
LDFLAGS_FISH="$LDFLAGS_FISH -L/usr/lib/ncursesw"
;;
esac
#
# If we are compiling against glibc, set some flags to work around
@@ -367,35 +301,6 @@ case $target_os in
;;
esac
# Check for Solaris curses tputs having fixed length parameter list.
AC_MSG_CHECKING([if we are using non varargs tparm.])
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM(
[
#include <curses.h>
#include <term.h>
],
[
tparm( "" );
]
)
],
[tparm_solaris_kludge=no],
[tparm_solaris_kludge=yes]
)
if test "x$tparm_solaris_kludge" = "xyes"; then
AC_MSG_RESULT(yes)
AC_DEFINE(
[TPARM_SOLARIS_KLUDGE],
[1],
[Define to 1 if tparm accepts a fixed amount of paramters.]
)
else
AC_MSG_RESULT(no)
fi
#
# BSD-specific flags go here
#
@@ -413,40 +318,6 @@ case $target_os in
esac
#
# Set up PREFIX and related preprocessor symbols. Fish needs to know
# where it will be installed. One of the reasons for this is so that
# it can make sure the fish installation directory is in the path
# during startup.
#
if [[ "$prefix" = NONE ]]; then
prefix=/usr/local
fi
#
# Set up the directory where the documentation files should be
# installed
#
AC_ARG_VAR( [docdir], [Documentation direcotry] )
if test -z $docdir; then
docdir=$datadir/doc/fish
else
docdir=$docdir
fi
#
# Set up locale directory. This is where the .po files will be
# installed.
#
localedir=$datadir/locale
#
# See if Linux procfs is present. This is used to get extra
# information about running processes.
@@ -466,6 +337,9 @@ AC_DEFINE(
[Define to 1 if the wgettext function should be used for translating strings.]
)
# Disable curses macros that conflict with the STL
AC_DEFINE([NCURSES_NOMACROS], [1], [Define to 1 to disable ncurses macros that conflict with the STL])
AC_DEFINE([NOMACROS], [1], [Define to 1 to disable curses macros that conflict with the STL])
#
# Check presense of various libraries. This is done on a per-binary
@@ -475,89 +349,22 @@ AC_DEFINE(
#
# Check for os dependant libraries for all binaries.
LIBS_COMMON=$LIBS
LIBS=""
AC_SEARCH_LIBS( connect, socket, , [AC_MSG_ERROR([Cannot find the socket library, needed to build this package.] )] )
AC_SEARCH_LIBS( nanosleep, rt, , [AC_MSG_ERROR([Cannot find the rt library, needed to build this package.] )] )
AC_SEARCH_LIBS( shm_open, rt, , [AC_MSG_ERROR([Cannot find the rt library, needed to build this package.] )] )
AC_SEARCH_LIBS( pthread_create, pthread, , [AC_MSG_ERROR([Cannot find the pthread library, needed to build this package.] )] )
AC_SEARCH_LIBS( setupterm, [ncurses curses], , [AC_MSG_ERROR([Could not find a curses implementation, needed to build fish. If this is Linux, try running 'sudo apt-get install libncurses5-dev' or 'sudo yum install ncurses-devel'])] )
AC_SEARCH_LIBS( setupterm, [ncurses tinfo curses], , [AC_MSG_ERROR([Could not find a curses implementation, needed to build fish. If this is Linux, try running 'sudo apt-get install libncurses5-dev' or 'sudo yum install ncurses-devel'])] )
AC_SEARCH_LIBS( [nan], [m], [AC_DEFINE( [HAVE_NAN], [1], [Define to 1 if you have the nan function])] )
LIBS_SHARED=$LIBS
LIBS=$LIBS_COMMON
#
# Check for libraries needed by fish.
#
LIBS_COMMON=$LIBS
LIBS="$LIBS_SHARED"
if test x$local_gettext != xno; then
AC_SEARCH_LIBS( gettext, intl,,)
fi
# Check for libiconv_open if we can't find iconv_open. Silly OS X does
# weird macro magic for the sole purpose of amusing me.
AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] )
LIBS_FISH=$LIBS
LIBS=$LIBS_COMMON
#
# Check for libraries needed by fish_indent.
#
LIBS_COMMON=$LIBS
LIBS="$LIBS_SHARED"
if test x$local_gettext != xno; then
AC_SEARCH_LIBS( gettext, intl,,)
fi
LIBS_FISH_INDENT=$LIBS
LIBS=$LIBS_COMMON
#
# Check for libraries needed by fish_pager.
#
LIBS_COMMON=$LIBS
LIBS="$LIBS_SHARED"
if test x$local_gettext != xno; then
AC_SEARCH_LIBS( gettext, intl,,)
fi
AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] )
LIBS_FISH_PAGER=$LIBS
LIBS=$LIBS_COMMON
#
# Check for libraries needed by fishd.
#
LIBS_COMMON=$LIBS
LIBS="$LIBS_SHARED"
if test x$local_gettext != xno; then
AC_SEARCH_LIBS( gettext, intl,,)
fi
AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] )
LIBS_FISHD=$LIBS
LIBS=$LIBS_COMMON
#
# Check for libraries needed by mimedb.
#
LIBS_COMMON=$LIBS
LIBS="$LIBS_SHARED"
if test x$local_gettext != xno; then
AC_SEARCH_LIBS( gettext, intl,,)
fi
LIBS_MIMEDB=$LIBS
LIBS=$LIBS_COMMON
#
# Check presense of various header files
#
AC_CHECK_HEADERS([getopt.h termios.h sys/resource.h term.h ncurses/term.h ncurses.h curses.h stropts.h siginfo.h sys/select.h sys/ioctl.h execinfo.h spawn.h sys/sysctl.h])
AC_CHECK_HEADERS([getopt.h termios.h sys/resource.h term.h ncurses/term.h ncurses.h ncurses/curses.h curses.h stropts.h siginfo.h sys/select.h sys/ioctl.h execinfo.h spawn.h sys/sysctl.h])
if test x$local_gettext != xno; then
AC_CHECK_HEADERS([libintl.h])
@@ -575,7 +382,6 @@ AC_CHECK_HEADER(
[AC_MSG_ERROR([Could not find the header regex.h, needed to build fish])]
)
#
# On some platforms (Solaris 10) adding -std=c99 in turn requires that
# _POSIX_C_SOURCE be defined to 200112L otherwise several
@@ -644,6 +450,10 @@ for i in "" "-D_POSIX_C_SOURCE=200112L" "-D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=2
/* As above (under at least Linux and FreeBSD). */
#include <sys/ioctl.h>
#endif
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#endif
],
[
/* Avert high-level optimisation, by making the program's
@@ -690,6 +500,16 @@ if test ! x$local_found_posix_switch = xyes; then
CXXFLAGS="$XCXXFLAGS"
fi
#
# Detect nanoseconds fields in struct stat
#
AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec])
AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec])
#
# Check for D_TYPE in dirent, only on BSD and Linux
#
AC_STRUCT_DIRENT_D_TYPE
#
# Check for presense of various functions used by fish
@@ -697,7 +517,7 @@ fi
AC_CHECK_FUNCS( wcsdup wcsndup wcslen wcscasecmp wcsncasecmp fwprintf )
AC_CHECK_FUNCS( futimes wcwidth wcswidth wcstok fputwc fgetwc )
AC_CHECK_FUNCS( wcstol wcslcat wcslcpy lrand48_r killpg )
AC_CHECK_FUNCS( wcstol wcslcat wcslcpy lrand48_r killpg mkostemp )
AC_CHECK_FUNCS( backtrace backtrace_symbols sysconf getifaddrs )
if test x$local_gettext != xno; then
@@ -789,7 +609,7 @@ AC_LINK_IFELSE(
#
# If we have a fwprintf in libc, test that it actually works. As of
# March 2006, it is broken under Dragonfly BSD.
# March 2006, it is broken under DragonFly BSD.
#
if test "$ac_cv_func_fwprintf" = yes; then
@@ -874,6 +694,56 @@ else
AC_MSG_RESULT(no)
fi
# Check for sys_errlist
AC_MSG_CHECKING([for sys_errlist array])
AC_TRY_LINK(
[
#include <stdio.h>
],
[
const char *p;
p = sys_errlist[sys_nerr];
],
have_sys_errlist=yes,
have_sys_errlist=no
)
if test "$have_sys_errlist" = yes; then
AC_MSG_RESULT(yes)
AC_DEFINE(
[HAVE_SYS_ERRLIST],
[1],
[Define to 1 if the sys_errlist array is available.]
)
else
AC_MSG_RESULT(no)
fi
# Check for _sys_errs
AC_MSG_CHECKING([for _sys_errs array])
AC_TRY_LINK(
[
#include <string>
],
[
std::string p;
extern const char _sys_errs[];
extern const int _sys_index[];
p = _sys_errs[_sys_index[0]];
],
have__sys__errs=yes,
have__sys__errs=no
)
if test "$have__sys__errs" = yes; then
AC_MSG_RESULT(yes)
AC_DEFINE(
[HAVE__SYS__ERRS],
[1],
[Define to 1 if the _sys_errs array is available.]
)
else
AC_MSG_RESULT(no)
fi
# Check if getopt_long exists and works
AC_MSG_CHECKING([if getopt_long exists and works])
AC_TRY_LINK(
@@ -910,26 +780,45 @@ else
AC_MSG_RESULT(no)
fi
# Check if del_curterm is broken - in that case we redefine
# del_curterm as a no-op, to avoid a double-free
# Check for Solaris curses tputs having fixed length parameter list.
AC_MSG_CHECKING([if we are using non varargs tparm.])
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM(
[
#if HAVE_NCURSES_H
#include <ncurses.h>
#else
#include <curses.h>
#endif
AC_MSG_CHECKING([If del_curterm is broken])
case $target_os in
*bsd*)
AC_MSG_RESULT(yes)
AC_DEFINE(
[HAVE_BROKEN_DEL_CURTERM],
[1],
[del_curterm is broken, redefine it to a no-op to avoid a double-free bug]
#if HAVE_TERM_H
#include <term.h>
#elif HAVE_NCURSES_TERM_H
#include <ncurses/term.h>
#endif
],
[
tparm( "" );
]
)
;;
*)
AC_MSG_RESULT(no)
;;
esac
],
[tparm_solaris_kludge=no],
[tparm_solaris_kludge=yes]
)
if test "x$tparm_solaris_kludge" = "xyes"; then
AC_MSG_RESULT(yes)
AC_DEFINE(
[TPARM_SOLARIS_KLUDGE],
[1],
[Define to 1 if tparm accepts a fixed amount of paramters.]
)
else
AC_MSG_RESULT(no)
fi
# Tell the world what we know
AC_CONFIG_FILES([Makefile fish.spec])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
if test ! x$local_found_posix_switch = xyes; then

262
doc_src/FORMATTING.md Normal file
View File

@@ -0,0 +1,262 @@
# Formatting guide for fish docs
The fish documentation has been updated to support Doxygen 1.8.7+, and while the main benefit of this change is extensive Markdown support, the addition of a fish lexicon and syntax filter, combined with semantic markup rules allows for automatic formatting enhancements across the HTML user_docs, the developer docs and the man pages.
Initially my motivation was to fix a problem with long options ([Issue #1557](https://github.com/fish-shell/fish-shell/issues/1557) on GitHub), but as I worked on fixing the issue I realised there was an opportunity to simplify, reinforce and clarify the current documentation, hopefully making further contribution easier and cleaner, while allowing the documentation examples to presented more clearly with less author effort.
While the documentation is pretty robust to variations in the documentation source, adherence to the following style guide will help keep the already excellent documention in good shape moving forward.
## Line breaks and wrapping
Contrary to the rest of the fish source code, the documentation greatly benefits from the use of long lines and soft wrapping. It allows paragraphs to be treated as complete blocks by Doxygen, means that the semantic filter can see complete lines when deciding on how to apply syntax highlighting, and means that man pages will consistently wrap to the width of the users console in advanced pagers, such as 'most'.
## Doxygen special commands and aliases
While Markdown syntax forms the basis of the documentation content, there are some exceptions that require the use of Doxygen special commands. On the whole, Doxygen commands should be avoided, especially inline word formatting such as \\c as this would allow Doxygen to make unhelpful assumptions, such as converting double dashes (\--) to n-dashes ().
### Structure: \\page, \\section and \\subsection
Use of Doxygen sections markers are important, as these determine what will be eventually output as a web page, man page or included in the developer docs.
Currently the make process for the documentation is quite convoluted, but basically the HTML docs are produced from a single, compiled file, doc.h. This contains a number of \\page markers that produce the various pages used in the documentation. The format of a \\page mark is:
\page universally_unique_page_id Page title
The source files that contain the page markers are currently:
- __index.hdr.in__: Core documentation
- __commands.hdr.in__: Individual commands
- __tutorial.hdr__: Tutorial
- __design.hdr__: Design document
- __faq.hdr__: Frequently Asked Questions
- __license.hdr__: Fish and 3rd party licences
Unless there is a _VERY_ good reason and developer consensus, new pages should never be added.
The rest of the documentation is structured using \\section and \\subsection markers. Most of the source files (listed above) contain their full content, the exception being commands, which are separated out into source text files in the doc_src directory. These files are concatenated into one file, so each one starts with a \\section declaration. The synopsis, description and examples (if present) are declared as \\subsections. The format of these marks is practically identical to the page mark.
\section universally_unique_section_id Section title
\subsection universally_unique_subsection_id Subsection title
Each page, section and subsection id _must_ be unique across the whole of the documentation, otherwise Doxygen will issue a warning.
### Semantic markup: the \\fish .. \\endfish block
While Doxygen has support for \\code..\\endcode blocks with enhanced markup and syntax colouring, it only understands the core Doxygen languages: C, C++, Objective C, Java, PHP, Python, Tcl and Fortran. To enhance Fish's syntax presentation, use the special \\fish..\\endfish blocks instead.
Text placed in this block will be parsed by Doxygen using the included lexicon filter (see lexicon_filter.in) as a Doxygen input filter. The filter is built during make so that it can pick up information on builtins, functions and shell commands mentioned in completions and apply markup to keywords found inside the \\fish block.
Basically, preformatted plain text inside the \\fish block is fed through the filter and is returned marked up so that Doxygen aliases can convert it back to a presentable form, according to the output document type.
For instance:
`echo hello world`
is transformed into:
`@cmnd{echo} @args{hello} @args{world}`
which is then transformed by Doxygen into an HTML version (`make user_doc`):
`<span class="command">echo</span> <span class="argument">hello</span> <span class="argument">world</span>`
A man page version (`make share/man`):
__echo__ hello world
And a simple HTML version for the developer docs (`make doc`) and the LATEX/PDF manual (`make doc/refman.pdf`):
`echo hello world`
### Fonts
In older browsers, it was easy to set the fonts used for the three basic type styles (serif, sans-serif and monospace). Modern browsers have removed these options in their respective quests for simplification, assuming the content author will provide suitable styles for the content in the site's CSS, or the end user will provide overriding styles manually. Doxygen's default styling is very simple and most users will just accept this default.
I've tried to use a sensible set of fonts in the documentation's CSS based on 'good' terminal fonts and as a result the firt preference font used throughout the documentation is '[DejaVu](http://dejavu-fonts.org)'. The rationale behaind this is that while DejaVu is getting a little long in the tooth, it still provides the most complete support across serif, sans-serif and monospace styles (giving a well balanced feel and consistent [x-height](http://en.wikipedia.org/wiki/X-height)), has the widest support for extended Unicode characters and has a free, permissive licenses (though it's still incompatible with GPLv2, though arguably less so than the SIL Open Font license, though this is a moot point when using it solely in the docs).
#### Fonts inside \\fish blocks and \`backticks\`
As the point of these contructs is to make fish's syntax clearer to the user, it makes sense to mimic what the user will see in the console, therefore any content is formatted using the monospaced style, specifically monospaced fonts are chosen in the following order:
1. __DejaVu Sans Mono__: Explained above. [[&darr;](http://dejavu-fonts.org)]
2. __Source Code Pro__: Monospaced code font, part of Adobe's free Edge Web Fonts. [[&darr;](https://edgewebfonts.adobe.com)]
3. __Menlo__: Apple supplied variant of DejaVu.
4. __Ubuntu Mono__: Ubuntu Linux's default monospaced font. [[&darr;](http://font.ubuntu.com)]
5. __Consolas__: Modern Microsoft supplied console font.
6. __Monaco__: Apple supplied console font since 1984!
7. __Lucida Console__: Generic mono terminal font, standard in many OS's and distros.
8. __monospace__: Catchall style. Chooses default monospaced font, often Courier.
9. __fixed__: As above, more often used on mobile devices.
#### General Fonts
1. __DejaVu Sans__: As above.[[&darr;](http://dejavu-fonts.org)]
2. __Roboto__: Elegant Google free font and is Doxygen's default [[&darr;](http://www.google.com/fonts/specimen/Roboto)]
3. __Lucida Grande__: Default Apple OS X content font.
4. __Calibri__: Default Microsoft Office font (since 2007).
5. __Verdana__: Good general font found in a lot of OSs.
6. __Helvetica Neue__: Better spaced and balanced Helvetica/Arial variant.
7. __Helvetica__: Standard humanist typeface found almost everywhere.
8. __Arial__: Microsoft's Helvetica.
9. __sans-serif__: Catchall style. Chooses default sans-serif typeface, often Helvetica.
The ordering of the fonts is important as it's designed to allow the documentation to settle into a number of different identities according to the fonts available. If you have the complete DejaVu family installed, then the docs are presented using that, and if your Console is set up to use the same fonts, presentation will be completely consistent.
On OS X, with nothing extra installed, the docs will default to Menlo and Lucida Grande giving a Mac feel. Under Windows, it will default to using Consolas and Calibri on recent versions, giving a modern Windows style.
#### Other sources:
- [Font Squirrel](http://www.fontsquirrel.com): Good source of open source font packages.
### Choosing a CLI style: using a \\fish{style} block
By default, when output as HTML, a \\fish block uses syntax colouring suited to the style of the documentation rather than trying to mimic the terminal. The block has a light, bordered background and a colour scheme that 'suggests' what the user would see in a console.
Additional stying can be applied adding a style declaration:
\fish{additional_style [another_style...]}
...
\endfish
This will translate to classes applied to the `<div>` tag, like so:
<div class="fish additional_style another_style">
...
</div>
The various classes are defined in `doc_src/user_doc.css` and new style can be simply added
The documentation currently defines a couple of additional styles:
- __cli-dark__: Used in the _tutorial_ and _FAQ_ to simulate a dark background terminal, with fish's default colours (slightly tweaked for legibility in the browser).
- __synopsis__: A simple colour theme helpful for displaying the logical 'summary' of a command's syntax, options and structure.
## Markdown
Apart from the exceptions discussed above, the rest of the documentation now supports the use of Markdown. As such the use of Doxygen special commands for HTML tags is unnecessary.
There are a few exceptions and extensions to the Markdown [standard](http://daringfireball.net/projects/markdown/) that are documented in the Doxygen [documentation](http://www.stack.nl/~dimitri/doxygen/manual/markdown.html).
### \`Backticks\`
As is standard in Markdown and 'Github Flavoured Markdown' (GFM), backticks can be used to denote inline technical terms in the documentation, `like so`. In the documentation this will set the font to the monospaced 'console' typeface and will cause the enclosed term to stand out.
However, fenced code blocks using 4 spaces or 3 backticks (\`\`\`) should be avoided as Doxygen will interpret these as \\code blocks and try to apply standard syntax colouring, which doesn't work so well for fish examples. Use `\fish..\endfish` blocks instead.
### Lists
Standard Markdown list rules apply, but as Doxygen will collapse white space on output, combined with the use of long lines, it's a good idea to include an extra new line between long list items to assist future editing.
## Special cases
The following can be used in \\fish blocks to render some fish scenarios. These are mostly used in the tutorial when an interactive situation needs to be displayed.
### Custom formatting tags
- `<s>`: auto\<s\>suggestion\</s\>.
- `<m>`: \<m\>Matched\</m\> items, such as tab completions.
- `<sm>`: Matched items \<sm\>searched\<sm\> for, like grep results.
- `<error>`: \<error\>This would be shown as an error.\</error\>
- `<asis>`: \<asis\>This test will not be parsed for fish markup.\</asis\>
- `<outp>`: \<outp\>This would be rendered as command/script output.\</outp\>
### Prompts and cursors
- `>_`: Display a basic prompt.
- `~>_`: Display a prompt with a the home directory as the current working directory.
- `___` (3 underscores): Display a cursor.
### Keyboard shortcuts: @key{} and @cursor_key{}
Graphical keyboard shortcuts can be defined using the following special commands. These allow for the different text requirements across the html and man pages. The HTML uses CSS to create a keyboard style, whereas the man page would display the key as text.
- `@key{lable}`
Displays a key with a purely textual lable, such as: 'Tab', 'Page Up', 'Page Down', 'Home', 'End', 'F1', 'F19' and so on.
- `@key{modifier,lable}`
Displays a keystroke requiring the use of a 'modifier' key, such as 'Control-A', 'Shift-X', 'Alt-Tab' etc.
- `@key{modifier,entity,lable}`
Displays a keystroke using a graphical entity, such as an arrow symbol for cursor key based shortcuts.
- `@cursor_key{entity,lable}`
A special case for cursor keys, when no modifier is needed. i.e. `@cursor_key{&uarr;,up}` for the up arrow key.
Some useful Unicode/HTML5 entities:
- Up arrow: `&uarr;`
- Down arrow: `&darr;`
- Left arrow: `&larr;`
- Right arrow `&rarr;`
- Shift: `&#8679;`
- Tab: `&rarrb;`
- Mac option: `&#8997;`
- Mac command: `&#8984;`
## Notes
### Doxygen
Tested on:
- Ubuntu 14.04 with Doxygen 1.8.8, built from [GitHub source](https://github.com/doxygen/doxygen.git).
- CentOS 6.5 with Doxygen 1.8.8, built from [GitHub source](https://github.com/doxygen/doxygen.git).
- Mac OS X 10.9 with Homebrew install Doxygen 1.8.7 and 1.8.8.
Graphviz was also installed in all the above testing.
Doxygen 1.8.6 and lower do not have the \\htmlonly[block] directive which fixes a multitude of problems in the rendering of the docs. In Doxygen 1.8.7 the list of understood HTML entities was greatly increased. I tested earlier versions and many little issues returned.
As fish ships with pre-built documentation, I don't see this as an issue.
### Updated Configure/Makefile
- Tested on Ubuntu 14.04, CentOS 6.5 and Mac OS X 10.9.
- Makefile has GNU/BSD sed/grep detection.
### HTML output
- The output HTML is HTML5 compliant, but should quickly and elegantly degrade on older browsers without losing basic structure.
- The CSS avoids the use or browser specific extenstions (i.e. -webkit, -moz etc), using the W3C HTML5 standard instead.
- It's been tested in Chrome 37.0 and Firefox 32.0 on Mac OS X 10.9 (+Safari 7), Windows 8.1 (+Internet Explorer 11) and Ubuntu Desktop 14.04.
- My assumption is basically that if someone cares enough to want to install fish, they'll be keeping a browser current.
### Man page output
- Tested on Ubuntu 14.04, CentOS 6.5 and Mac OS X 10.9.
- Output is substantially cleaner.
- Tested in cat, less, more and most pagers using the following fish script:
```
function manTest --description 'Test manpage' --argument page
set -l pager
for i in $argv
switch $i
case "-l"
set pager -P '/usr/bin/less -is'
case "-m"
set pager -P '/usr/bin/more -s'
case "-c"
set pager -P '/bin/cat'
end
end
man $pager ~/Projects/OpenSource/fish-shell/share/man/man1/$page.1
end
# Assumes 'most' is the default system pager.
# NOT PORTABLE! Paths would be need to be updated on other systems.
```
### Developer docs and LATEX/PDF output
- HTML developer docs tested on Ubuntu 14.04, CentOS 6.5 and Mac OS X 10.9.
- LATEX/PDF reference manual tested on Mac OS X 10.9 using MacTEX. PDF production returns an error (due to Doxygen's use of an outdated 'float' package), but manual PDF output is ok.
### Future changes
1. The documentation creation process would be better if it could be modularised further and moved out of the makefile into a number of supporting scripts. This would allow both the automake and Xcode build processes to use the documentation scripts directly.
2. Remove the Doxygen dependency entirely for the user documentation. This would be very acheivable now that the bulk of the documentation is in Markdown.
3. It would be useful to gauge what parts of the documentation are actually used by users. Judging by the amount of 'missing comment' errors during the developer docs build phase, this aspect of the docs has been rather neglected. If it is not longer used or useful, then this could change the future direction of the documentation and significantly streamline the process.
#### Author: Mark Griffiths [@GitHub](https://github.com/MarkGriffiths)

44
doc_src/abbr.txt Normal file
View File

@@ -0,0 +1,44 @@
\section abbr abbr - manage fish abbreviations
\subsection abbr-synopsis Synopsis
\fish{synopsis}
abbr -a word="phrase"
abbr -s
abbr -l
abbr -e word
\endfish
\subsection abbr-description Description
`abbr` manipulates the list of abbreviations that fish will expand.
Abbreviations are user-defined character sequences or words that are replaced with longer phrases after they are entered. For example, a frequently-run command such as `git checkout` can be abbreviated to `gco`. After entering `gco` and pressing @key{Space} or @key{Enter}, the full text `git checkout` will appear in the command line.
Abbreviations are stored, by default, in a universal variable.
The following parameters are available:
- `-a WORD PHRASE` or `--add WORD PHRASE` Adds a new abbreviation, where WORD will be expanded to PHRASE.
- `-s` or `--show` Show all abbreviated words and their expanded phrases in a manner suitable for export and import.
- `-l` or `--list` Lists all abbreviated words.
- `-e WORD` or `--erase WORD` Erase the abbreviation WORD.
\subsection abbr-example Examples
\fish
abbr -a gco git checkout
\endfish
Add a new abbreviation where `gco` will be replaced with `git checkout`.
\fish
abbr -e gco
\endfish
Erase the `gco` abbreviation.
\fish
ssh another_host abbr -s | source
\endfish
Import the abbreviations defined on another_host over SSH.

View File

@@ -1,34 +1,34 @@
\section alias alias - create a function
\subsection alias-synopsis Synopsis
<pre>alias NAME DEFINITION
alias NAME=DEFINITION</pre>
\fish{synopsis}
alias NAME DEFINITION
alias NAME=DEFINITION
\endfish
\subsection alias-description Description
\c alias is a simple wrapper for the \c function builtin.
It exists for backwards compatibility with Posix
shells. For other uses, it is recommended to define a <a
href='#function'>function</a>.
`alias` is a simple wrapper for the `function` builtin. It exists for backwards compatibility with Posix shells. For other uses, it is recommended to define a <a href='#function'>function</a>.
\c fish does not keep track of which functions have been defined using
\c alias. They must be erased using <code>functions -e</code>.
`fish` does not keep track of which functions have been defined using `alias`. They must be erased using `functions -e`.
- NAME is the name of the alias
- DEFINITION is the actual command to execute. The string " $argv" will be appended.
- `NAME` is the name of the alias
- `DEFINITION` is the actual command to execute. The string `$argv` will be appended.
You cannot create an alias to a function with the same name.
\subsection alias-example Example
The following code will create \c rmi, which runs \c rm with additional
arguments on every invocation.
The following code will create `rmi`, which runs `rm` with additional arguments on every invocation.
<code>alias rmi "rm -i"</code>
\fish
alias rmi "rm -i"
This is equivalent to entering the following function:
# This is equivalent to entering the following function:
<pre>function rmi
function rmi
rm -i $argv
end</pre>
end
\endfish

View File

@@ -1,27 +1,24 @@
\section and and - conditionally execute a command
\subsection and-synopsis Synopsis
<tt>COMMAND1; and COMMAND2</tt>
\fish{synopsis}
COMMAND1; and COMMAND2
\endfish
\subsection and-description Description
\c and is used to execute a command if the current exit
status (as set by the last previous command) is 0.
`and` is used to execute a command if the current exit status (as set by the last previous command) is 0.
\c and does not change the current exit status.
`and` does not change the current exit status.
The exit status of the last foreground command to exit can always be accessed using the <a href="index.html#variables-status">$status</a> variable.
The exit status of the last foreground command to exit can always be
accessed using the <a href="index.html#variables-status">$status</a>
variable.
\subsection and-example Example
The following code runs the \c make command to build a program. If the
build succeeds, <code>make</code>'s exit status is 0, and the program is installed. If either step fails,
the exit status is 1, and <tt>make clean</tt> is run, which removes the files created by the.
build process.
The following code runs the `make` command to build a program. If the build succeeds, `make`'s exit status is 0, and the program is installed. If either step fails, the exit status is 1, and `make clean` is run, which removes the files created by the build process.
<pre>
\fish
make; and make install; or make clean
</pre>
\endfish

BIN
doc_src/ascii_fish.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,49 +1,45 @@
\section begin begin - start a new block of code
\subsection begin-synopsis Synopsis
<tt>begin; [COMMANDS...;] end</tt>
\fish{synopsis}
begin; [COMMANDS...;] end
\endfish
\subsection begin-description Description
\c begin is used to create a new block of code.
`begin` is used to create a new block of code.
The block
is unconditionally executed. <code>begin; ...; end</tt> is equivalent
to <tt>if true; ...; end</tt>.
The block is unconditionally executed. `begin; ...; end` is equivalent to `if true; ...; end`.
\c begin is used to group a number of commands into a block.
This allows the introduction of a new variable scope, redirection of the input or
output of a set of commands as a group, or to specify precedence when
using the conditional commands like \c and.
`begin` is used to group a number of commands into a block. This allows the introduction of a new variable scope, redirection of the input or output of a set of commands as a group, or to specify precedence when using the conditional commands like `and`.
`begin` does not change the current exit status.
\c begin does not change the current exit status.
\subsection begin-example Example
The following code sets a number of variables inside of a block
scope. Since the variables are set inside the block and have local
scope, they will be automatically deleted when the block ends.
The following code sets a number of variables inside of a block scope. Since the variables are set inside the block and have local scope, they will be automatically deleted when the block ends.
<pre>
\fish
begin
set -l PIRATE Yarrr
...
set -l PIRATE Yarrr
...
end
# This will not output anything, since the PIRATE variable went out
# of scope at the end of the block
echo $PIRATE
</pre>
# This will not output anything, since the PIRATE variable
# went out of scope at the end of the block
\endfish
In the following code, all output is redirected to the file out.html.
<pre>
\fish
begin
echo $xml_header
echo $html_header
if test -e $file
...
end
...
end &gt; out.html
</pre>
echo $xml_header
echo $html_header
if test -e $file
...
end
...
end > out.html
\endfish

View File

@@ -1,17 +1,17 @@
\section bg bg - send jobs to background
\subsection bg-synopsis Synopsis
<tt>bg [PID...]</tt>
\fish{synopsis}
bg [PID...]
\endfish
\subsection bg-description Description
\c bg sends <a href="index.html#syntax-job-control">jobs</a> to the background, resuming them if they are stopped. A background job is
executed simultaneously with fish, and does not have access to the
keyboard. If no job is specified, the last job to be used is put in the background. If PID is specified, the jobs with the specified process group IDs are put in the background.
`bg` sends <a href="index.html#syntax-job-control">jobs</a> to the background, resuming them if they are stopped. A background job is executed simultaneously with fish, and does not have access to the keyboard. If no job is specified, the last job to be used is put in the background. If PID is specified, the jobs with the specified process group IDs are put in the background.
The PID of the desired process is usually found by using <a href="index.html#expand-process">process expansion</a>.
\subsection bg-example Example
<tt>bg \%1</tt> will put the job with job ID 1 in the background.
`bg %1` will put the job with job ID 1 in the background.

View File

@@ -1,97 +1,125 @@
\section bind bind - handle fish key bindings
\subsection bind-synopsis Synopsis
<tt>bind [OPTIONS] SEQUENCE COMMAND</tt>
\fish{synopsis}
bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE]
[(-k | --key)] SEQUENCE COMMAND [COMMAND...]
bind [(-M | --mode) MODE] [(-k | --key)] SEQUENCE
bind (-K | --key-names) [(-a | --all)]
bind (-f | --function-names)
bind (-e | --erase) [(-M | --mode) MODE]
(-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])
\endfish
\subsection bind-description Description
<tt>bind</tt> adds a binding for the specified key sequence to the
specified command.
`bind` adds a binding for the specified key sequence to the specified command.
SEQUENCE is the character sequence to bind to. These should be written as
<a href="index.html#escapes">fish escape sequences</a>. For example, because pressing
the Alt key and another character sends that character prefixed with
an escape character, Alt-based key bindings can be written using the
\c \\e escape. For example, Alt-w can be written as
<tt>\\ew</tt>. The control character can be written in much the same way
using the \c \\c escape, for example Control-x (^X) can be written as
<tt>\\cx</tt>. Note that Alt-based key bindings are case sensitive and
Control-based key bindings are not. This is a constraint of text-based
terminals, not \c fish.
SEQUENCE is the character sequence to bind to. These should be written as <a href="index.html#escapes">fish escape sequences</a>. For example, because pressing the Alt key and another character sends that character prefixed with an escape character, Alt-based key bindings can be written using the `\e` escape. For example, @key{Alt,w} can be written as `\ew`. The control character can be written in much the same way using the `\c` escape, for example @key{Control,X} (^X) can be written as `\cx`. Note that Alt-based key bindings are case sensitive and Control-based key bindings are not. This is a constraint of text-based terminals, not `fish`.
The default key binding can be set by specifying a SEQUENCE of the empty
string (that is, <code>''</code>). It will be used whenever no
other binding matches. For most key bindings, it makes sense to use
the \c self-insert function (i.e. <tt>bind '' self-insert</tt> as the
default keybinding. This will insert any keystrokes not specifically
bound to into the editor. Non-printable characters are ignored by the
editor, so this will not result in control sequences being
printable.
The default key binding can be set by specifying a `SEQUENCE` of the empty string (that is, ```''``` ). It will be used whenever no other binding matches. For most key bindings, it makes sense to use the `self-insert` function (i.e. ```bind '' self-insert```) as the default keybinding. This will insert any keystrokes not specifically bound to into the editor. Non- printable characters are ignored by the editor, so this will not result in control sequences being printable.
If the -k switch is used, the name of the key (such as down, up or
backspace) is used instead of a sequence. The names used are the same
as the corresponding curses variables, but without the 'key_'
prefix. (See \c terminfo(5) for more information, or use <tt>bind
--key-names</tt> for a list of all available named keys.)
If the `-k` switch is used, the name of the key (such as 'down', 'up' or 'backspace') is used instead of a sequence. The names used are the same as the corresponding curses variables, but without the 'key_' prefix. (See `terminfo(5)` for more information, or use `bind --key-names` for a list of all available named keys.)
COMMAND can be any fish command, but it can also be one of a set of
special input functions. These include functions for moving the
cursor, operating on the kill-ring, performing tab completion,
etc. Use 'bind --function-names' for a complete list of these input
functions.
`COMMAND` can be any fish command, but it can also be one of a set of special input functions. These include functions for moving the cursor, operating on the kill-ring, performing tab completion, etc. Use `bind --function-names` for a complete list of these input functions.
When COMMAND is a shellscript command, it is a good practice to put
the actual code into a <a href="#function">function</a> and simply
bind to the function name. This way it becomes significantly easier to
test the function while editing, and the result is usually more
readable as well.
When `COMMAND` is a shellscript command, it is a good practice to put the actual code into a <a href="#function">function</a> and simply bind to the function name. This way it becomes significantly easier to test the function while editing, and the result is usually more readable as well.
If such a script produces output, the script needs to finish by
calling 'commandline -f repaint' in order to tell fish that a repaint
is in order.
If such a script produces output, the script needs to finish by calling `commandline -f repaint` in order to tell fish that a repaint is in order.
Key bindings are not saved between sessions by default. To save custom
keybindings, edit the \c fish_user_key_bindings function and insert the
appropriate \c bind statements.
When multiple `COMMAND`s are provided, they are all run in the specified order when the key is pressed.
If no `SEQUENCE` is provided, all bindings (or just the bindings in the specified `MODE`) are printed. If `SEQUENCE` is provided without `COMMAND`, just the binding matching that sequence is printed.
Key bindings are not saved between sessions by default. To save custom keybindings, edit the `fish_user_key_bindings` function and insert the appropriate `bind` statements.
Key bindings may use "modes", which mimics Vi's modal input behavior. The default mode is "default", and every bind applies to a single mode. The mode can be viewed/changed with the `$fish_bind_mode` variable.
The following parameters are available:
- <tt>-k</tt> or <tt>--key</tt> Specify a key name, such as 'left' or 'backspace' instead of a character sequence
- <tt>-K</tt> or <tt>--key-names</tt> Display a list of available key names
- <tt>-f</tt> or <tt>--function-names</tt> Display a list of available input functions
- `-k` or `--key` Specify a key name, such as 'left' or 'backspace' instead of a character sequence
- `-K` or `--key-names` Display a list of available key names. Specifying `-a` or `--all` includes keys that don't have a known mapping
- `-f` or `--function-names` Display a list of available input functions
- `-M MODE` or `--mode MODE` Specify a bind mode that the bind is used in. Defaults to "default"
- `-m NEW_MODE` or `--sets-mode NEW_MODE` Change the current mode to `NEW_MODE` after this binding is executed
- `-e` or `--erase` Erase the binding with the given sequence and mode instead of defining a new one. Multiple sequences can be specified with this flag. Specifying `-a` or `--all` with `-M` or `--mode` erases all binds in the given mode regardless of sequence. Specifying `-a` or `--all` without `-M` or `--mode` erases all binds in all modes regardless of sequence.
- `-a` or `--all` See `--erase` and `--key-names`
The following special input functions are available:
- \c backward-char, moves one character to the left
- \c backward-delete-char, deletes one character of input to the left of the cursor
- \c backward-kill-line, move everything from the beginning of the line to the cursor to the killring
- \c backward-kill-word, move the word to the left of the cursor to the killring
- \c backward-word, move one word to the left
- \c beginning-of-history, move to the beginning of the history
- \c beginning-of-line, move to the beginning of the line
- \c capitalize-word, make the current word begin with a capital letter
- \c complete, guess the remainder of the current token
- \c delete-char, delete one character to the right of the cursor
- \c delete-line, delete the entire line
- \c downcase-word, make the current word lowercase
- \c dump-functions, print a list of all key-bindings
- \c end-of-history, move to the end of the history
- \c end-of-line, move to the end of the line
- \c explain, print a description of possible problems with the current command
- \c forward-char, move one character to the right
- \c forward-word, move one word to the right
- \c history-search-backward, search the history for the previous match
- \c history-search-forward, search the history for the next match
- \c kill-line, move everything from the cursor to the end of the line to the killring
- \c kill-whole-line, move the line to the killring
- \c kill-word, move the next word to the killring
- \c upcase-word, make the current word uppercase
- \c yank, insert the latest entry of the killring into the buffer
- \c yank-pop, rotate to the previous entry of the killring
- `backward-char`, moves one character to the left
- `backward-delete-char`, deletes one character of input to the left of the cursor
- `backward-kill-line`, move everything from the beginning of the line to the cursor to the killring
- `backward-kill-word`, move the word to the left of the cursor to the killring
- `backward-word`, move one word to the left
- `beginning-of-history`, move to the beginning of the history
- `beginning-of-line`, move to the beginning of the line
- `capitalize-word`, make the current word begin with a capital letter
- `complete`, guess the remainder of the current token
- `delete-char`, delete one character to the right of the cursor
- `delete-line`, delete the entire line
- `downcase-word`, make the current word lowercase
- `dump-functions`, print a list of all key-bindings
- `end-of-history`, move to the end of the history
- `end-of-line`, move to the end of the line
- `explain`, print a description of possible problems with the current command
- `forward-char`, move one character to the right
- `forward-word`, move one word to the right
- `history-search-backward`, search the history for the previous match
- `history-search-forward`, search the history for the next match
- `kill-line`, move everything from the cursor to the end of the line to the killring
- `kill-whole-line`, move the line to the killring
- `kill-word`, move the next word to the killring
- `upcase-word`, make the current word uppercase
- `yank`, insert the latest entry of the killring into the buffer
- `yank-pop`, rotate to the previous entry of the killring
\subsection bind-example Examples
<tt>bind \\cd 'exit'</tt> causes \c fish to exit when Control-d is pressed.
\fish
bind \cd 'exit'
\endfish
Causes `fish` to exit when @key{Control,D} is pressed.
<tt>bind -k ppage history-search-backward</tt> performs a history search when the Page Up key is pressed.
\fish
bind -k ppage history-search-backward
\endfish
Performs a history search when the @key{Page Up} key is pressed.
\fish
set -g fish_key_bindings fish_vi_key_bindings
bind -M insert \cc kill-whole-line force-repaint
\endfish
Turns on Vi key bindings and rebinds @key{Control,C} to clear the input line.

View File

@@ -1,40 +1,41 @@
\section block block - temporarily block delivery of events
\subsection block-synopsis Synopsis
<tt>block [OPTIONS...]</tt>
\fish{synopsis}
block [OPTIONS...]
\endfish
\subsection block-description Description
\c block prevents events triggered by \c fish or the
<a href="commands.html#emit"><code>emit</code></a> command from
being delivered and acted upon while the block is in place.
`block` prevents events triggered by `fish` or the <a href="commands.html#emit">`emit`</a> command from being delivered and acted upon while the block is in place.
In functions, \c block can be useful while performing work that
should not be interrupted by the shell.
In functions, `block` can be useful while performing work that should not be interrupted by the shell.
The block can be removed. Any events which triggered while the
block was in place will then be delivered.
The block can be removed. Any events which triggered while the block was in place will then be delivered.
Event blocks should not be confused with code blocks, which are created
with <code>begin</code>, <code>if</code>, <code>while</code> or
<code>for</code>
Event blocks should not be confused with code blocks, which are created with `begin`, `if`, `while` or `for`
The following parameters are available:
- <tt>-l</tt> or <tt>--local</tt> Release the block automatically at the end of the current innermost code block scope
- <tt>-g</tt> or <tt>--global</tt> Never automatically release the lock
- <tt>-e</tt> or <tt>--erase</tt> Release global block
- `-l` or `--local` Release the block automatically at the end of the current innermost code block scope
- `-g` or `--global` Never automatically release the lock
- `-e` or `--erase` Release global block
\subsection block-example Example
<pre>
\fish
# Create a function that listens for events
function --on-event foo foo; echo 'foo fired'; end
# Block the delivery of events
block -g
emit foo
# No output will be produced
block -e
# 'foo fired' will now be printed
</pre>
\endfish

View File

@@ -1,22 +1,25 @@
\section break break - stop the current inner loop
\subsection break-synopsis Synopsis
<tt>LOOP_CONSTRUCT; [COMMANDS...] break; [COMMANDS...] end</tt>
\fish{synopsis}
LOOP_CONSTRUCT; [COMMANDS...] break; [COMMANDS...] end
\endfish
\subsection break-description Description
\c break halts a currently running loop, such as a <a href="#for">for</a> loop or a <a href="#while">while</a> loop. It is usually added inside of a conditional block such as an <a href="#if">if</a> statement or a <a href="#switch">switch</a> statement.
`break` halts a currently running loop, such as a <a href="#for">for</a> loop or a <a href="#while">while</a> loop. It is usually added inside of a conditional block such as an <a href="#if">if</a> statement or a <a href="#switch">switch</a> statement.
There are no parameters for `break`.
There are no parameters for <code>break</code>.
\subsection break-example Example
The following code searches all .c files for "smurf", and halts at the first occurrence.
<pre>
\fish
for i in *.c
if grep smurf $i
echo Smurfs are present in $i
break
end
end
</pre>
\endfish

View File

@@ -1,14 +1,14 @@
\section breakpoint breakpoint - Launch debug mode
\subsection breakpoint-synopsis Synopsis
<tt>breakpoint</tt>
\fish{synopsis}
breakpoint
\endfish
\subsection breakpoint-description Description
\c breakpoint is used to halt a running script and launch
an interactive debugging prompt.
`breakpoint` is used to halt a running script and launch an interactive debugging prompt.
For more details, see <a href="index.html#debugging">Debugging fish
scripts</a> in the \c fish manual.
For more details, see <a href="index.html#debugging">Debugging fish scripts</a> in the `fish` manual.
There are no parameters for <code>breakpoint</code>.
There are no parameters for `breakpoint`.

View File

@@ -1,16 +1,22 @@
\section builtin builtin - run a builtin command
\subsection builtin-synopsis Synopsis
<tt>builtin BUILTINNAME [OPTIONS...]</tt>
\fish{synopsis}
builtin BUILTINNAME [OPTIONS...]
\endfish
\subsection builtin-description Description
\c builtin forces the shell to use a builtin command, rather than a function or program.
`builtin` forces the shell to use a builtin command, rather than a function or program.
The following parameters are available:
- <tt>-n</tt> or <tt>--names</tt> List the names of all defined builtins
- `-n` or `--names` List the names of all defined builtins
\subsection builtin-example Example
<tt>builtin jobs</tt> executes the jobs builtin, even if a function named jobs exists.
\fish
builtin jobs
# executes the jobs builtin, even if a function named jobs exists
\endfish

View File

@@ -1,35 +1,27 @@
\section case case - conditionally execute a block of commands
\subsection case-synopsis Synopsis
<tt>switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end</tt>
\fish{synopsis}
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
\endfish
\subsection case-description Description
\c switch performs one of several blocks of commands, depending on whether
a specified value equals one of several wildcarded values. \c case is used
together with the \c switch statement in order to determine which block should
be executed.
`switch` performs one of several blocks of commands, depending on whether a specified value equals one of several wildcarded values. `case` is used together with the `switch` statement in order to determine which block should be executed.
Each \c case command is given one or more parameters. The first \c case
command with a parameter that matches the string specified in the
switch command will be evaluated. \c case parameters may contain
wildcards. These need to be escaped or quoted in order to avoid
regular wildcard expansion using filenames.
Each `case` command is given one or more parameters. The first `case` command with a parameter that matches the string specified in the switch command will be evaluated. `case` parameters may contain wildcards. These need to be escaped or quoted in order to avoid regular wildcard expansion using filenames.
Note that fish does not fall through on case statements. Only the
first matching case is executed.
Note that fish does not fall through on case statements. Only the first matching case is executed.
Note that command substitutions in a case statement will be evaluated even if its body is not taken. All substitutions, including command substitutions, must be performed before the value can be compared against the parameter.
Note that command substitutions in a case statement will be
evaluated even if its body is not taken. All substitutions, including
command substitutions, must be performed before the value can be compared
against the parameter.
\subsection case-example Example
If the variable \$animal contains the name of an animal, the following
code would attempt to classify it:
<pre>
\fish
switch $animal
case cat
echo evil
@@ -43,8 +35,8 @@ switch $animal
case '*'
echo I have no idea what a $animal is
end
</pre>
\endfish
If the above code was run with \c \$animal set to \c whale, the output
would be \c mammal.
If the above code was run with `$animal` set to `whale`, the output
would be `mammal`.

View File

@@ -1,25 +1,26 @@
\section cd cd - change directory
\subsection cd-synopsis Synopsis
<tt>cd [DIRECTORY]</tt>
\fish{synopsis}
cd [DIRECTORY]
\endfish
\subsection cd-description Description
\c cd changes the current working directory.
`cd` changes the current working directory.
If \c DIRECTORY is supplied, it will become the new directory. If no parameter
is given, the contents of the \c HOME environment variable will be used.
If `DIRECTORY` is supplied, it will become the new directory. If no parameter is given, the contents of the `HOME` environment variable will be used.
If \c DIRECTORY is a relative path, the paths found in the
\c CDPATH environment variable array will be tried as prefixes for the specified
path.
If `DIRECTORY` is a relative path, the paths found in the `CDPATH` environment variable array will be tried as prefixes for the specified path.
Note that the shell will attempt to change directory without requiring `cd` if the name of a directory is provided (starting with `.`, `/` or `~`, or ending with `/`).
Note that the shell will attempt to change directory without requiring \c cd
if the name of a directory is provided (starting with '.', '/' or '~', or ending
with '/').
\subsection cd-example Examples
\c cd changes the working directory to your home directory.
\fish
cd
# changes the working directory to your home directory.
<code>cd /usr/src/fish-shell</code> changes the working directory to
<code>/usr/src/fish-shell</code>.
cd /usr/src/fish-shell
# changes the working directory to /usr/src/fish-shell
\endfish

View File

@@ -1,12 +1,24 @@
\section command command - run a program
\subsection command-synopsis Synopsis
<tt>command COMMANDNAME [OPTIONS...]</tt>
\fish{synopsis}
command [OPTIONS] COMMANDNAME [ARGS...]
\endfish
\subsection command-description Description
\c command forces the shell to execute the program \c COMMANDNAME and ignore any functions or builtins with the same name.
`command` forces the shell to execute the program `COMMANDNAME` and ignore any functions or builtins with the same name.
\subsection command-example Example
The following options are available:
<tt>command ls</tt> causes fish to execute the \c ls program, even if an 'ls' function exists.
- `-s` or `--search` returns the name of the disk file that would be executed, or nothing if no file with the specified name could be found in the `$PATH`.
With the `-s` option, `command` treats every argument as a separate command to look up and sets the exit status to 0 if any of the specified commands were found, or 1 if no commands could be found.
For basic compatibility with POSIX `command`, the `-v` flag is recognized as an alias for `-s`.
\subsection command-example Examples
`command ls` causes fish to execute the `ls` program, even if an `ls` function exists.
`command -s ls` returns the path to the `ls` program.

View File

@@ -1,63 +1,59 @@
\section commandline commandline - set or get the current command line buffer
\subsection commandline-synopsis Synopsis
<tt>commandline [OPTIONS] [CMD]</tt>
\fish{synopsis}
commandline [OPTIONS] [CMD]
\endfish
\subsection commandline-description Description
\c commandline can be used to set or get the current contents of the command
line buffer.
`commandline` can be used to set or get the current contents of the command line buffer.
With no parameters, \c commandline returns the current value of the command
line.
With no parameters, `commandline` returns the current value of the command line.
With \c CMD specified, the command line buffer is erased and replaced with
the contents of \c CMD.
With `CMD` specified, the command line buffer is erased and replaced with the contents of `CMD`.
The following options are available:
- \c -C or \c --cursor set or get the current cursor position, not
the contents of the buffer. If no argument is given, the current
cursor position is printed, otherwise the argument is interpreted
as the new cursor position.
- \c -f or \c --function inject readline functions into the
reader. This option cannot be combined with any other option. It
will cause any additional arguments to be interpreted as readline
functions, and these functions will be injected into the reader, so
that they will be returned to the reader before any additional
actual key presses are read.
- `-C` or `--cursor` set or get the current cursor position, not the contents of the buffer. If no argument is given, the current cursor position is printed, otherwise the argument is interpreted as the new cursor position.
The following options change the way \c commandline updates the
command line buffer:
- `-f` or `--function` inject readline functions into the reader. This option cannot be combined with any other option. It will cause any additional arguments to be interpreted as readline functions, and these functions will be injected into the reader, so that they will be returned to the reader before any additional actual key presses are read.
- \c -a or \c --append do not remove the current commandline, append
the specified string at the end of it
- \c -i or \c --insert do not remove the current commandline, insert
the specified string at the current cursor position
- \c -r or \c --replace remove the current commandline and replace it
with the specified string (default)
The following options change the way `commandline` updates the command line buffer:
The following options change what part of the commandline is printed
or updated:
- `-a` or `--append` do not remove the current commandline, append the specified string at the end of it
- \c -b or \c --current-buffer select the entire buffer (default)
- \c -j or \c --current-job select the current job
- \c -p or \c --current-process select the current process
- \c -t or \c --current-token select the current token.
- `-i` or `--insert` do not remove the current commandline, insert the specified string at the current cursor position
The following options change the way \c commandline prints the current
commandline buffer:
- `-r` or `--replace` remove the current commandline and replace it with the specified string (default)
- \c -c or \c --cut-at-cursor only print selection up until the
current cursor position
- \c -o or \c --tokenize tokenize the selection and print one string-type token per line
The following options change what part of the commandline is printed or updated:
- `-b` or `--current-buffer` select the entire buffer (default)
- `-j` or `--current-job` select the current job
- `-p` or `--current-process` select the current process
- `-t` or `--current-token` select the current token.
The following options change the way `commandline` prints the current commandline buffer:
- `-c` or `--cut-at-cursor` only print selection up until the current cursor position
- `-o` or `--tokenize` tokenize the selection and print one string-type token per line
If `commandline` is called during a call to complete a given string using `complete -C STRING`, `commandline` will consider the specified string to be the current contents of the command line.
The following options output metadata about the commandline state:
- `-L` or `--line` print the line that the cursor is on, with the topmost line starting at 1
- `-S` or `--search-mode` evaluates to true if the commandline is performing a history search
- `-P` or `--paging-mode` evaluates to true if the commandline is showing pager contents, such as tab completions
If \c commandline is called during a call to complete a given string
using <code>complete -C STRING</code>, \c commandline will consider the
specified string to be the current contents of the command line.
\subsection commandline-example Example
<tt>commandline -j $history[3]</tt> replaces the job under the cursor with the
third item from the command line history.
`commandline -j $history[3]` replaces the job under the cursor with the third item from the command line history.

View File

@@ -1,15 +1,38 @@
/** \page commands Commands bundled with fish
\htmlonly <div class="fish_left_bar fish_left_little"> \endhtmlonly
@command_list_toc@
\htmlonly </div> \endhtmlonly
\htmlonly
<div class="fish_right_bar fish_right_big">
<h1 class="interior_title_borderless">Commands</h1>
Fish ships with a large number of builtin commands, shellscript functions and external commands. These are all described below.
/**
\page commands Commands
\htmlonly[block]
<div class="fish_left_bar">
<div class="logo"></div>
<div class="menu commands_menu">
\endhtmlonly
@command_list@
\htmlonly </div> \endhtmlonly
@command_list_toc@
\htmlonly[block]
</div>
</div>
<div class="commands fish_right_bar">
<h1 class="interior_title">Command reference</h1>
\endhtmlonly
`fish` ships with a large number of builtin commands, shellscript functions and external commands. These are all described below.
Almost all fish commands respond to the `-h` or `--help` options to display their relevant help, also accessible using the `help` and `man` commands, like so:
\fish
echo -h
echo --help
# Prints help to the terminal window
man echo
# Displays the man page in the system pager
# (normally 'less', 'more' or 'most').
help echo
# Open a web browser to show the relevant documentation
\endfish
@command_list@
\htmlonly[block]
</div>
\endhtmlonly
*/

View File

@@ -1,7 +1,14 @@
\section complete complete - edit command specific tab-completions
\subsection complete-synopsis Synopsis
<tt>complete (-c|--command|-p|--path) COMMAND [(-s|--short-option) SHORT_OPTION] [(-l|--long-option|-o|--old-option) LONG_OPTION [(-a||--arguments) OPTION_ARGUMENTS] [(-d|--description) DESCRIPTION] </tt>
\fish{synopsis}
complete ( -c | --command | -p | --path ) COMMAND
[( -s | --short-option ) SHORT_OPTION]
[( -l | --long-option | -o | --old-option ) LONG_OPTION]
[( -a | --arguments ) OPTION_ARGUMENTS]
[( -w | --wraps ) WRAPPED_COMMAND]
[( -d | --description ) DESCRIPTION]
\endfish
\subsection complete-description Description
@@ -9,69 +16,88 @@ For an introduction to specifying completions, see <a
href='index.html#completion-own'>Writing your own completions</a> in
the fish manual.
- <tt>COMMAND</tt> is the name of the command for which to add a completion
- <tt>SHORT_OPTION</tt> is a one character option for the command
- <tt>LONG_OPTION</tt> is a multi character option for the command
- <tt>OPTION_ARGUMENTS</tt> is parameter containing a space-separated list of possible option-arguments, which may contain subshells
- <tt>DESCRIPTION</tt> is a description of what the option and/or option arguments do
- <tt>-C STRING</tt> or <tt>--do-complete=STRING</tt> makes complete try to find all possible completions for the specified string
- <tt>-e</tt> or <tt>--erase</tt> implies that the specified completion should be deleted
- <tt>-f</tt> or <tt>--no-files</tt> specifies that the option specified by this completion may not be followed by a filename
- <tt>-n</tt> or <tt>--condition</tt> specifies a shell command that must return 0 if the completion is to be used. This makes it possible to specify completions that should only be used in some cases.
- <tt>-o</tt> or <tt>--old-option</tt> implies that the command uses old long style options with only one dash
- <tt>-p</tt> or <tt>--path</tt> implies that the string COMMAND is the full path of the command
- <tt>-r</tt> or <tt>--require-parameter</tt> specifies that the option specified by this completion always must have an option argument, i.e. may not be followed by another option
- <tt>-u</tt> or <tt>--unauthoritative</tt> implies that there may be more options than the ones specified, and that fish should not assume that options not listed are spelling errors
- <tt>-A</tt> or <tt>--authoritative</tt> implies that there may be no more options than the ones specified, and that fish should assume that options not listed are spelling errors
- <tt>-x</tt> or <tt>--exclusive</tt> implies both <tt>-r</tt> and <tt>-f</tt>
- `COMMAND` is the name of the command for which to add a completion.
Command specific tab-completions in \c fish are based on the notion
of options and arguments. An option is a parameter which begins with a
hyphen, such as '-h', '-help' or '--help'. Arguments are parameters
that do not begin with a hyphen. Fish recognizes three styles of
options, the same styles as the GNU version of the getopt
library. These styles are:
- `SHORT_OPTION` is a one character option for the command.
- Short options, like '-a'. Short options are a single character long, are preceded by a single hyphen and may be grouped together (like '-la', which is equivalent to '-l -a'). Option arguments may be specified in the following parameter ('-w 32') or by appending the option with the value ('-w32').
- Old style long options, like '-Wall'. Old style long options can be more than one character long, are preceded by a single hyphen and may not be grouped together. Option arguments are specified in the following parameter ('-ao null').
- GNU style long options, like '--colors'. GNU style long options can be more than one character long, are preceded by two hyphens, and may not be grouped together. Option arguments may be specified in the following parameter ('--quoting-style shell') or by appending the option with a '=' and the value ('--quoting-style=shell'). GNU style long options may be abbreviated so long as the abbreviation is unique ('--h' is equivalent to '--help' if help is the only long option beginning with an 'h').
- `LONG_OPTION` is a multi character option for the command.
The options for specifying command name, command path, or command
switches may all be used multiple times to specify multiple commands
which have the same completion or multiple switches accepted by a
command.
- `OPTION_ARGUMENTS` is parameter containing a space-separated list of possible option-arguments, which may contain subshells.
- `DESCRIPTION` is a description of what the option and/or option arguments do.
- `-C STRING` or `--do-complete=STRING` makes complete try to find all possible completions for the specified string.
- `-w WRAPPED_COMMAND` or `--wraps=WRAPPED_COMMAND` causes the specified command to inherit completions from the wrapped command.
- `-e` or `--erase` implies that the specified completion should be deleted.
- `-f` or `--no-files` specifies that the option specified by this completion may not be followed by a filename.
- `-n` or `--condition` specifies a shell command that must return 0 if the completion is to be used. This makes it possible to specify completions that should only be used in some cases.
- `-o` or `--old-option` implies that the command uses old long style options with only one dash.
- `-p` or `--path` implies that the string `COMMAND` is the full path of the command.
- `-r` or `--require-parameter` specifies that the option specified by this completion always must have an option argument, i.e. may not be followed by another option.
- `-u` or `--unauthoritative` implies that there may be more options than the ones specified, and that fish should not assume that options not listed are spelling errors.
- `-A` or `--authoritative` implies that there may be no more options than the ones specified, and that fish should assume that options not listed are spelling errors.
- `-x` or `--exclusive` implies both `-r` and `-f`.
Command specific tab-completions in `fish` are based on the notion of options and arguments. An option is a parameter which begins with a hyphen, such as '`-h`', '`-help`' or '`--help`'. Arguments are parameters that do not begin with a hyphen. Fish recognizes three styles of options, the same styles as the GNU version of the getopt library. These styles are:
- Short options, like '`-a`'. Short options are a single character long, are preceded by a single hyphen and may be grouped together (like '`-la`', which is equivalent to '`-l -a`'). Option arguments may be specified in the following parameter ('`-w 32`') or by appending the option with the value ('`-w32`').
- Old style long options, like '`-Wall`'. Old style long options can be more than one character long, are preceded by a single hyphen and may not be grouped together. Option arguments are specified in the following parameter ('`-ao null`').
- GNU style long options, like '`--colors`'. GNU style long options can be more than one character long, are preceded by two hyphens, and may not be grouped together. Option arguments may be specified in the following parameter ('`--quoting-style`') or by appending the option with a '`=`' and the value ('`--quoting-style=shell`'). GNU style long options may be abbreviated so long as the abbreviation is unique ('`--h`') is equivalent to '`--help`' if help is the only long option beginning with an 'h').
The options for specifying command name, command path, or command switches may all be used multiple times to specify multiple commands which have the same completion or multiple switches accepted by a command.
The `-w` or `--wraps` options causes the specified command to inherit completions from another command. The inheriting command is said to "wrap" the inherited command. The wrapping command may have its own completions in addition to inherited ones. A command may wrap multiple commands, and wrapping is transitive: if A wraps B, and B wraps C, then A automatically inherits all of C's completions. Wrapping can be removed using the `-e` or `--erase` options.
When erasing completions, it is possible to either erase all completions for a specific command by specifying `complete -e -c COMMAND`, or by specifying a specific completion option to delete by specifying either a long, short or old style option.
When erasing completions, it is possible to either erase all
completions for a specific command by specifying <tt>complete -e -c
COMMAND</tt>, or by specifying a specific completion option to delete
by specifying either a long, short or old style option.
\subsection complete-example Example
The short style option <tt>-o</tt> for the \c gcc command requires
that a file follows it. This can be done using writing <tt>complete
-c gcc -s o -r</tt>.
The short style option `-o` for the `gcc` command requires that a file follows it. This can be done using writing:
The short style option <tt>-d</tt> for the \c grep command requires
that one of the strings 'read', 'skip' or 'recurse' is used. This can
be specified writing <tt>complete -c grep -s d -x -a "read skip
recurse"</tt>.
\fish
complete -c gcc -s o -r
\endfish
The \c su command takes any username as an argument. Usernames are
given as the first colon-separated field in the file /etc/passwd. This
can be specified as: <tt>complete -x -c su -d "Username" -a "(cat
/etc/passwd|cut -d : -f 1)" </tt>.
The short style option `-d` for the `grep` command requires that one of the strings '`read`', '`skip`' or '`recurse`' is used. This can be specified writing:
The \c rpm command has several different modes. If the \c -e or \c
--erase flag has been specified, \c rpm should delete one or more
packages, in which case several switches related to deleting packages
are valid, like the \c nodeps switch.
\fish
complete -c grep -s d -x -a "read skip recurse"
\endfish
The `su` command takes any username as an argument. Usernames are given as the first colon-separated field in the file /etc/passwd. This can be specified as:
\fish
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
\endfish
The `rpm` command has several different modes. If the `-e` or `--erase` flag has been specified, `rpm` should delete one or more packages, in which case several switches related to deleting packages are valid, like the `nodeps` switch.
This can be written as:
<tt>complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d
"Don't check dependencies"</tt>
\fish
complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don't check dependencies"
\endfish
where \c __fish_contains_opt is a function that checks the commandline
buffer for the presence of a specified set of options.
where `__fish_contains_opt` is a function that checks the commandline buffer for the presence of a specified set of options.
To implement an alias, use the `-w` or `--wraps` option:
\fish
complete -c hub -w git
\endfish
Now hub inherits all of the completions from git. Note this can also be specified in a function declaration.

View File

@@ -1,26 +1,38 @@
\section contains contains - test if a word is present in a list
\subsection contains-synopsis Synopsis
<code>contains [OPTIONS] KEY [VALUES...]</code>
\fish{synopsis}
contains [OPTIONS] KEY [VALUES...]
\endfish
\subsection contains-description Description
\c contains tests whether the set \c VALUES contains the string
<code>KEY</code>. If so, \c contains exits with status 0; if not, it exits
with status 1.
`contains` tests whether the set `VALUES` contains the string `KEY`. If so, `contains` exits with status 0; if not, it exits with status 1.
The following options are available:
- \c -i or \c --index print the word index
- \c -h or \c --help display this message
- `-i` or `--index` print the word index
Note that, like GNU tools, `contains` interprets all arguments starting with a `-` as options to contains, until it reaches an argument that is `--` (two dashes). See the examples below.
\subsection contains-example Example
<pre>
for i in ~/bin /usr/local/bin
if not contains \$i \$PATH
set PATH \$PATH \$i
end
end
</pre>
The above code tests if \c ~/bin and \c /usr/local/bin are in the path and adds them if not.
\fish
for i in ~/bin /usr/local/bin
if not contains $i $PATH
set PATH $PATH $i
end
end
\endfish
The above code tests if `~/bin` and `/usr/local/bin` are in the path and adds them if not.
\fish
function hasargs
if contains -- -q $argv
echo '$argv contains a -q option'
end
end
\endfish
The above code checks for `-q` in the argument list, using the `--` argument to demarcate options to `contains` from the key to search for.

View File

@@ -1,19 +1,23 @@
\section continue continue - skip the remainder of the current iteration of the current inner loop
\subsection continue-synopsis Synopsis
<tt>LOOP_CONSTRUCT; [COMMANDS...;] continue; [COMMANDS...;] end</tt>
\fish{synopsis}
LOOP_CONSTRUCT; [COMMANDS...;] continue; [COMMANDS...;] end
\endfish
\subsection continue-description Description
\c continue skips the remainder of the current iteration of the current inner loop, such as a <a href="#for">for</a> loop or a <a href="#while">while</a> loop. It is usually added inside of a conditional block such as an <a href="#if">if</a> statement or a <a href="#switch">switch</a> statement.
`continue` skips the remainder of the current iteration of the current inner loop, such as a <a href="#for">for</a> loop or a <a href="#while">while</a> loop. It is usually added inside of a conditional block such as an <a href="#if">if</a> statement or a <a href="#switch">switch</a> statement.
\subsection continue-example Example
The following code removes all tmp files that do not contain the word smurf.
<pre>
\fish
for i in *.tmp
if grep smurf $i
continue
end
rm $i
end
</pre>
\endfish

View File

@@ -1,29 +1,25 @@
\section count count - count the number of elements of an array
\subsection count-synopsis Synopsis
<tt>count $VARIABLE</tt>
\fish{synopsis}
count $VARIABLE
\endfish
\subsection count-description Description
<tt>count</tt> prints the number of arguments that were
passed to it. This is usually used to find out how many elements an
environment variable array contains.
`count` prints the number of arguments that were passed to it. This is usually used to find out how many elements an environment variable array contains.
\c count does not accept any options, including '-h'.
`count` does not accept any options, including `-h` or `--help`.
`count` exits with a non-zero exit status if no arguments were passed to it, and with zero if at least one argument was passed.
\c count exits with a non-zero exit status if no arguments were passed
to it, and with zero if at least one argument was passed.
\subsection count-example Example
<pre>
\fish
count $PATH
</pre>
# Returns the number of directories in the users PATH variable.
returns the number of directories in the users PATH variable.
<pre>
count *.txt
</pre>
returns the number of files in the current working directory ending with the suffix '.txt'.
# Returns the number of files in the current working directory ending with the suffix '.txt'.
\endfish

View File

@@ -1,138 +1,110 @@
/** \page design Design document
\htmlonly <div class="fish_only_bar"> \endhtmlonly
/**
\page design Design document
\htmlonly[block]
<div class="fish_only_bar">
<div class="design">
<h1 class="interior_title">Design documentation</h1>
\endhtmlonly
\section design-overview Overview
This is a description of the design principles that have been used to
design fish. The fish design has three high level goals. These are:
This is a description of the design principles that have been used to design fish. The fish design has three high level goals. These are:
-# Everything that can be done in other shell languages should be
possible to do in fish, though fish may rely on external commands in
doing so.
-# Fish should be user friendly, but not at the expense of expressiveness.
Most tradeoffs between power and ease of use can be avoided with careful design.
-# Whenever possible without breaking the above goals, fish should
follow the Posix syntax.
-# Everything that can be done in other shell languages should be possible to do in fish, though fish may rely on external commands in doing so.
-# Fish should be user friendly, but not at the expense of expressiveness. Most tradeoffs between power and ease of use can be avoided with careful design.
-# Whenever possible without breaking the above goals, fish should follow the Posix syntax.
To achieve these high-level goals, the fish design relies on a number of more specific design principles. These are presented below, together with a rationale and a few examples for each.
To achieve these high-level goals, the fish design relies on a number
of more specific design principles. These are presented below,
together with a rationale and a few examples for each.
\section ortho The law of orthogonality
The shell language should have a small set of orthogonal features. Any
situation where two features are related but not identical, one of them
should be removed, and the other should be made powerful and general
enough to handle all common use cases of either feature.
The shell language should have a small set of orthogonal features. Any situation where two features are related but not identical, one of them should be removed, and the other should be made powerful and general enough to handle all common use cases of either feature.
Rationale:
Related features make the language larger, which makes it harder to
learn. It also increases the size of the sourcecode, making the
program harder to maintain and update.
Related features make the language larger, which makes it harder to learn. It also increases the size of the source code, making the program harder to maintain and update.
Examples:
- Here documents are too similar to using echo inside of a pipeline.
- Subshells, command substitution and process substitution are strongly related. \c fish only supports command substitution, the others can be achieved either using a block or the psub shellscript function.
- Having both aliases and functions is confusing, especially since both of them have limitations and problems. \c fish functions have none of the drawbacks of either syntax.
- The many Posix quoting styles are silly, especially \$''.
\section sep The law of responsiveness
- Subshells, command substitution and process substitution are strongly related. `fish` only supports command substitution, the others can be achieved either using a block or the psub shellscript function.
- Having both aliases and functions is confusing, especially since both of them have limitations and problems. `fish` functions have none of the drawbacks of either syntax.
- The many Posix quoting styles are silly, especially $''.
\section design-response The law of responsiveness
The shell should attempt to remain responsive to the user at all times, even in the face of contended or unresponsive filesystems. It is only acceptable to block in response to a user initiated action, such as running a command.
Rationale:
Bad performance increases user-facing complexity, because it trains users to recognize and route around slow use cases. It is also incredibly frustrating.
Examples:
- Features like syntax highlighting and autosuggestions must perform all of their disk I/O asynchronously.
- Startup should minimize forks and disk I/O, so that fish can be started even if the system is under load.
\section conf Configurability is the root of all evil
\section design-configurability Configurability is the root of all evil
Every configuration option in a program is a place where the program
is too stupid to figure out for itself what the user really wants, and
should be considered a failiure of both the program and the programmer
who implemented it.
Every configuration option in a program is a place where the program is too stupid to figure out for itself what the user really wants, and should be considered a failure of both the program and the programmer who implemented it.
Rationale:
Different configuration options are a nightmare to maintain, since the
number of potential bugs caused by specific configuration combinations
quickly becomes an issue. Configuration options often imply
assumptions about the code which change when reimplementing the code,
causing issues with backwards compatibility. But mostly, configuration
options should be avoided since they simply should not exist, as the
program should be smart enough to do what is best, or at least a good
enough approximation of it.
Different configuration options are a nightmare to maintain, since the number of potential bugs caused by specific configuration combinations quickly becomes an issue. Configuration options often imply assumptions about the code which change when reimplementing the code, causing issues with backwards compatibility. But mostly, configuration options should be avoided since they simply should not exist, as the program should be smart enough to do what is best, or at least a good enough approximation of it.
Examples:
- Fish allows the user to set various syntax highlighting colors. This is needed because fish does not know what colors the terminal uses by default, which might make some things unreadable. The proper solution would be for text color preferences to be defined centrally by the user for all programs, and for the terminal emulator to send these color properties to fish.
- Fish does not allow you to set the history filename, the number of history entries, different language substyles or any number of other common shell configuration options.
A special note on the evils of configurability is the long list of
very useful features found in some shells, that are not turned on by
default. Both zsh and bash support command specific completions, but
no such completions are shipped with bash by default, and they are
turned off by default in zsh. Other features that zsh support that are
disabled by default include tab-completion of strings containing
wildcards, a sane completion pager and a history file.
A special note on the evils of configurability is the long list of very useful features found in some shells, that are not turned on by default. Both zsh and bash support command-specific completions, but no such completions are shipped with bash by default, and they are turned off by default in zsh. Other features that zsh supports that are disabled by default include tab-completion of strings containing wildcards, a sane completion pager and a history file.
\section user The law of user focus
When designing a program, one should first think about how to make a
intuitive and powerful program. Implementation issues should only be
considered once a user interface has been designed.
When designing a program, one should first think about how to make a intuitive and powerful program. Implementation issues should only be considered once a user interface has been designed.
Rationale:
This design rule is different than the others, since it describes how
one should go about designing new features, not what the features
should be. The problem with focusing on what can be done, and what is
easy to do, is that to much of the implementation is exposed. This
means that the user must know a great deal about the underlying system
to be able to guess how the shell works, it also means that the
language will often be rather low-level.
This design rule is different than the others, since it describes how one should go about designing new features, not what the features should be. The problem with focusing on what can be done, and what is easy to do, is that too much of the implementation is exposed. This means that the user must know a great deal about the underlying system to be able to guess how the shell works, it also means that the language will often be rather low-level.
Examples:
- There should only be one type of input to the shell, lists of commands. Loops, conditionals and variable assignments are all performed through regular commands.
- The differences between builtin commands and shellscript functions should be made as small as possible. Builtins and shellscript functions should have exactly the same types of argument expansion as other commands, should be possible to use in any position in a pipeline, and should support any io redirection.
- The differences between built-in commands and shellscript functions should be made as small as possible. Built-ins and shellscript functions should have exactly the same types of argument expansion as other commands, should be possible to use in any position in a pipeline, and should support any I/O redirection.
- Instead of forking when performing command substitution to provide a fake variable scope, all fish commands are performed from the same process, and fish instead supports true scoping.
- All blocks end with the \c end builtin.
- All blocks end with the `end` built-in.
\section disc The law of discoverability
A program should be designed to make its features as
easy as possible to discover for the user.
A program should be designed to make its features as easy as possible to discover for the user.
Rationale:
A program whose features are discoverable turns a new user into an expert in a shorter span of time, since the user will become an expert on the program simply by using it.
A program whose features are discoverable turns a new user into an
expert in a shorter span of time, since the user will become an expert
on the program simply by using it.
The main benefit of a graphical program over a command line-based
program is discoverability. In a graphical program, one can discover
all the common features by simply looking at the user interface and
guessing what the different buttons, menus and other widgets do. The
traditional way to discover features in commandline programs is
through manual pages. This requires both that the user starts to use a
different program, and the she/he then remembers the new information
until the next time she/he uses the same program.
The main benefit of a graphical program over a command-line-based program is discoverability. In a graphical program, one can discover all the common features by simply looking at the user interface and guessing what the different buttons, menus and other widgets do. The traditional way to discover features in command-line programs is through manual pages. This requires both that the user starts to use a different program, and then she/he remembers the new information until the next time she/he uses the same program.
Examples:
- Everything should be tab-completable, and every tab completion should have a description.
- Every syntax error and error in a builtin command should contain an error message describing what went wrong and a relevant help page. Whenever possible, errors should be flagged red by the syntax highlighter.
- Every syntax error and error in a built-in command should contain an error message describing what went wrong and a relevant help page. Whenever possible, errors should be flagged red by the syntax highlighter.
- The help manual should be easy to read, easily available from the shell, complete and contain many examples
- The language should be uniform, so that once the user understands the command/argument syntax, he will know the whole language, and be able to use tab-completion to discover new featues.
- The language should be uniform, so that once the user understands the command/argument syntax, she/he will know the whole language, and be able to use tab-completion to discover new features.
\htmlonly[block]
</div>
</div>
\endhtmlonly
*/
\htmlonly </div> \endhtmlonly

View File

@@ -1,12 +1,12 @@
\section dirh dirh - print directory history
\subsection dirh-synopsis Synopsis
<tt>dirh</tt>
\fish{synopsis}
dirh
\endfish
\subsection dirh-description Description
<tt>dirh</tt> prints the current directory history. The current position in the
history is highlighted using the color defined in the
<tt>fish_color_history_current</tt> environment variable.
`dirh` prints the current directory history. The current position in the history is highlighted using the color defined in the `fish_color_history_current` environment variable.
\c dirh does not accept any parameters.
`dirh` does not accept any parameters.

View File

@@ -1,10 +1,12 @@
\section dirs dirs - print directory stack
\subsection dirs-synopsis Synopsis
<tt>dirs</tt>
\fish{synopsis}
dirs
\endfish
\subsection dirs-description Description
<tt>dirs</tt> prints the current directory stack, as created by the
<code><a href="#pushd">pushd</a></code> command.
\c dirs does not accept any parameters.
`dirs` prints the current directory stack, as created by the <a href="#pushd">`pushd`</a> command.
`dirs` does not accept any parameters.

View File

@@ -1,39 +1,60 @@
\section echo echo - display a line of text
\subsection echo-synopsis Synopsis
<tt>echo [STRING]</tt>
\fish{synopsis}
echo [OPTIONS] [STRING]
\endfish
\subsection echo-description Description
\c echo displays a string of text.
`echo` displays a string of text.
The following options are available:
- \c -n, \c Do not output a newline
- \c -s, \c Do not separate arguments with spaces
- \c -E, \c Disable interpretation of backslash escapes (default)
- \c -e, \c Enable interpretation of backslash escapes
- \c -h, \c --help Display this help
- `-n`, Do not output a newline
- `-s`, Do not separate arguments with spaces
- `-E`, Disable interpretation of backslash escapes (default)
- `-e`, Enable interpretation of backslash escapes
\subsection echo-escapes Escape Sequences
If \c -e is used, the following sequences are recognized:
If `-e` is used, the following sequences are recognized:
- \c \\\\ \c backslash
- \\a alert (BEL)
- \\b backspace
- \\c produce no further output
- \\e escape
- \\f form feed
- \\n new line
- \\r carriage return
- \\t horizontal tab
- \\v vertical tab
- \\0NNN byte with octal value NNN (1 to 3 digits)
- \\xHH byte with hexadecimal value HH (1 to 2 digits)
- `\` backslash
- `\a` alert (BEL)
- `\b` backspace
- `\c` produce no further output
- `\e` escape
- `\f` form feed
- `\n` new line
- `\r` carriage return
- `\t` horizontal tab
- `\v` vertical tab
- `\0NNN` byte with octal value NNN (1 to 3 digits)
- `\xHH` byte with hexadecimal value HH (1 to 2 digits)
\subsection echo-example Example
<tt>echo 'Hello World'</tt> Print hello world to stdout
\fish
echo 'Hello World'
\endfish
Print hello world to stdout
<tt>echo -e 'Top\\nBottom'</tt> Print Top and Bottom on separate lines, using an escape sequence
\fish
echo -e 'Top\nBottom'
\endfish
Print Top and Bottom on separate lines, using an escape sequence

View File

@@ -1,21 +1,23 @@
\section else else - execute command if a condition is not met
\subsection else-synopsis Synopsis
<tt>if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end</tt>
\fish{synopsis}
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
\endfish
\subsection else-description Description
<tt>if</tt> will execute the command \c CONDITION. If the condition's exit
status is 0, the commands \c COMMANDS_TRUE will execute. If it is not 0 and
<tt>else</tt> is given, \c COMMANDS_FALSE will be executed.
`if` will execute the command `CONDITION`. If the condition's exit status is 0, the commands `COMMANDS_TRUE` will execute. If it is not 0 and `else` is given, `COMMANDS_FALSE` will be executed.
\subsection else-example Example
The following code tests whether a file \c foo.txt exists as a regular file.
The following code tests whether a file `foo.txt` exists as a regular file.
<pre>
\fish
if test -f foo.txt
echo foo.txt exists
else
echo foo.txt does not exist
end
</pre>
\endfish

View File

@@ -1,20 +1,23 @@
\section emit emit - Emit a generic event
\subsection block-synopsis Synopsis
<tt>emit EVENT_NAME [ARGUMENTS...]</tt>
\subsection emit-synopsis Synopsis
\fish{synopsis}
emit EVENT_NAME [ARGUMENTS...]
\endfish
\subsection emit-description Description
\c emit emits, or fires, an event. Events are delivered to, or caught by, special functions called event handlers. The arguments are passed to the event handlers as function arguments.
`emit` emits, or fires, an event. Events are delivered to, or caught by, special functions called event handlers. The arguments are passed to the event handlers as function arguments.
\subsection emit-example Example
The following code first defines an event handler for the generic
event named 'test_event', and then emits an event of that type.
The following code first defines an event handler for the generic event named 'test_event', and then emits an event of that type.
<pre>function event_test --on-event test_event
\fish
function event_test --on-event test_event
echo event test: $argv
end
emit test_event something
</pre>
\endfish

View File

@@ -1,19 +1,19 @@
\section end end - end a block of commands.
\subsection end-synopsis Synopsis
<pre>
\fish{synopsis}
begin; [COMMANDS...] end
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
while CONDITION; COMMANDS...; end
for VARNAME in [VALUES...]; COMMANDS...; end
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
</pre>
\endfish
\subsection end-description Description
<tt>end</tt> ends a block of commands.
`end` ends a block of commands.
For more information, read the
documentation for the block constructs, such as \c if, \c for and \c
while.
documentation for the block constructs, such as `if`, `for` and `while`.
The \c end command does not change the current exit status.
The `end` command does not change the current exit status.

View File

@@ -1,19 +1,20 @@
\section eval eval - evaluate the specified commands
\subsection eval-synopsis Synopsis
<tt>eval [COMMANDS...]</tt>
\fish{synopsis}
eval [COMMANDS...]
\endfish
\subsection eval-description Description
<tt>eval</tt> evaluates the specified parameters as a command. If more than one parameter is specified, all parameters will be joined using a space character as a separator.
`eval` evaluates the specified parameters as a command. If more than one parameter is specified, all parameters will be joined using a space character as a separator.
\subsection eval-example Example
The folloing code will call the ls command. Note that \c fish does not
support the use of environment variables as direct commands; \c eval can
be used to work around this.
The following code will call the ls command. Note that `fish` does not support the use of shell variables as direct commands; `eval` can be used to work around this.
<pre>
\fish
set cmd ls
eval $cmd
</pre>
\endfish

View File

@@ -1,15 +1,15 @@
\section exec exec - execute command in current process
\subsection exec-synopsis Synopsis
<tt>exec COMMAND [OPTIONS...]</tt>
\fish{synopsis}
exec COMMAND [OPTIONS...]
\endfish
\subsection exec-description Description
\c exec replaces the currently running shell with a new command.
On successful completion, \c exec never returns. \c exec cannot be used
inside a pipeline.
`exec` replaces the currently running shell with a new command. On successful completion, `exec` never returns. `exec` cannot be used inside a pipeline.
\subsection exec-example Example
<tt>exec emacs</tt> starts up the emacs text editor, and exits \c fish.
When emacs exits, the session will terminate.
`exec emacs` starts up the emacs text editor, and exits `fish`. When emacs exits, the session will terminate.

View File

@@ -1,14 +1,12 @@
\section exit exit - exit the shell
\subsection exit-synopsis Synopsis
<tt>exit [STATUS]</tt>
\fish{synopsis}
exit [STATUS]
\endfish
\subsection exit-description Description
\c exit causes fish to exit. If <tt>STATUS</tt> is
supplied, it will be converted to an integer and used as the exit
code. Otherwise, the exit code will be that of the last command executed.
`exit` causes fish to exit. If `STATUS` is supplied, it will be converted to an integer and used as the exit code. Otherwise, the exit code will be that of the last command executed.
If exit is called while sourcing a file (using the <a
href="#source">.</a> builtin) the rest of the file will be skipped,
but the shell itself will not exit.
If exit is called while sourcing a file (using the <a href="#source">source</a> builtin) the rest of the file will be skipped, but the shell itself will not exit.

10
doc_src/false.txt Normal file
View File

@@ -0,0 +1,10 @@
\section false false - return an unsuccessful result
\subsection false-synopsis Synopsis
\fish{synopsis}
false
\endfish
\subsection false-description Description
`false` sets the exit status to 1.

View File

@@ -1,9 +1,14 @@
/** \page faq Frequently asked questions
/**
\page faq Frequently asked questions
\htmlonly[block]
<div class="fish_left_bar">
<div class="logo"></div>
<div class="menu faq_menu">
\htmlonly <div class="fish_left_bar fish_left_big"> \endhtmlonly
\endhtmlonly
- <a href='#faq-envvar'>How do I set or clear an environment variable?</a>
- <a href='#faq-login-cmd'>How do I run a command every login? What's fish's equivalent to <tt>.bashrc</tt>?</a>
- <a href='#faq-login-cmd'>How do I run a command every login? What's fish's equivalent to `.bashrc`?</a>
- <a href='#faq-prompt'>How do I set my prompt?</a>
- <a href='#faq-cmd-history'>How do I run a command from history?</a>
- <a href='#faq-subcommand'>How do I run a subcommand? The backtick doesn't work!</a>
@@ -20,257 +25,198 @@
- <a href='#faq-history'>Why doesn't history substitution ("!$" etc.) work?</a>
- <a href='#faq-uninstalling'>How do I uninstall fish?</a>
\htmlonly
\htmlonly[block]
</div>
<div class="fish_right_bar fish_right_little">
</div>
<div class="faq fish_right_bar">
<h1 class="interior_title">Frequently Asked Questions</h1>
\endhtmlonly
\section faq-envvar How do I set or clear an environment variable?
Use the <a href="commands.html#set"><code>set</code></a> command:
Use the <a href="commands.html#set">`set`</a> command:
<pre>set -x key value
set -e key</pre>
\fish{cli-dark}
set -x key value
set -e key
\endfish
<hr>
\section faq-login-cmd How do I run a command every login? What's fish's equivalent to .bashrc?
Edit the file <tt>~/.config/fish/config.fish</tt>, creating it if it does not
exist. (Note the leading period.)
Edit the file `~/.config/fish/config.fish`, creating it if it does not exist (Note the leading period).
<hr>
\section faq-prompt How do I set my prompt?
The prompt is the output of the \c fish_prompt function. Put it in
<tt>~/.config/fish/functions/fish_prompt.fish</tt>. For example, a simple
prompt is:
<pre>function fish_prompt
set_color $fish_color_cwd
echo -n (prompt_pwd)
set_color normal
echo -n ' > '
end</pre>
The prompt is the output of the `fish_prompt` function. Put it in `~/.config/fish/functions/fish_prompt.fish`. For example, a simple prompt is:
You can also use the Web configuration tool,
<a href="commands.html#fish_config"><code>fish_config</code></a>, to preview
and choose from a gallery of sample prompts.
\fish{cli-dark}
function fish_prompt
set_color $fish_color_cwd
echo -n (prompt_pwd)
set_color normal
echo -n ' > '
end
\endfish
You can also use the Web configuration tool, <a href="commands.html#fish_config">`fish_config`</a>, to preview and choose from a gallery of sample prompts.
<hr>
\section faq-cmd-history How do I run a command from history?
Type some part of the command, and then hit the up or down arrow keys to
navigate through history matches.
Type some part of the command, and then hit the @cursor_key{&uarr;,up} or @cursor_key{&darr;,down} arrow keys to navigate through history matches.
<hr>
\section faq-subcommand How do I run a subcommand? The backtick doesn't work!
\c fish uses parentheses for subcommands. For example:
`fish` uses parentheses for subcommands. For example:
<pre>for i in (ls)
echo $i
end</pre>
\fish{cli-dark}
for i in (ls)
echo $i
end
\endfish
<hr>
\section faq-exit-status How do I get the exit status of a command?
Use the \c $status variable. This replaces the \c $? variable used in some
other shells.
Use the `$status` variable. This replaces the `$?` variable used in some other shells.
<hr>
\section faq-single-env How do I set an environment variable for just one command?
<i><tt>SOME_VAR=1 command</tt> produces an error: <tt>Unknown command "SOME_VAR=1"</tt>.</i>
<i>`SOME_VAR=1 command` produces an error: `Unknown command "SOME_VAR=1"`.</i>
Use the \c env command.
Use the `env` command.
<tt>env SOME_VAR=1 command</tt>
`env SOME_VAR=1 command`
You can also declare a local variable in a block:
<pre>begin
set -lx SOME_VAR 1
command
end</pre>
\fish{cli-dark}
begin
set -lx SOME_VAR 1
command
end
\endfish
<hr>
\section faq-customize-colors How do I customize my syntax highlighting colors?
Use the web configuration tool,
<a href="commands.html#fish_config"><code>fish_config</code></a>, or alter the
<a href="index.html#variables-color">\c fish_color family of environment variables</a>.
Use the web configuration tool, <a href="commands.html#fish_config">`fish_config`</a>, or alter the <a href="index.html#variables-color">`fish_color` family of environment variables</a>.
<hr>
\section faq-update-manpage-completions How do I update man page completions?
Use the
<a href="commands.html#fish_update_completions"><tt>fish_update_completions</tt></a>
command.
Use the <a href="commands.html#fish_update_completions">`fish_update_completions`</a> command.
<hr>
\section faq-cwd-symlink Why does cd, $PWD and and various fish commands always resolve symlinked directories to their canonical path?
<i>
For example if ~/images is a symlink to ~/Documents/Images, if I write
'cd images', my prompt will say ~/D/Images, not ~/images.
</i>
<i>For example if `~/images` is a symlink to `~/Documents/Images`, if I write '`cd images`', my prompt will say `~/Documents/Images`, not `~/images`.</i>
Because it is impossible to consistently keep symlinked directories
unresolved. It is indeed possible to do this partially, and many other
shells do so. But it was felt there are enough serious corner cases
that this is a bad idea. Most such issues have to do with how '..' is
handled, and are varitations of the following example:
Because it is impossible to consistently keep symlinked directories unresolved. It is indeed possible to do this partially, and many other shells do so. But it was felt there are enough serious corner cases that this is a bad idea. Most such issues have to do with how '..' is handled, and are varitations of the following example:
Writing <code>cd images; ls ..</code> given the above directory
structure would list the contents of ~/Documents, not of ~, even
though using <code>cd ..</code> changes the current directory to ~,
and the prompt, the pwd builtin and many other directory information
sources suggest that the current directory is ~/images and its
parent is ~. This issue is not possible to fix without either making
every single command into a builtin, breaking Unix semantics or
implementing kludges in every single command.
Writing `cd images; ls ..` given the above directory structure would list the contents of `~/Documents`, not of `~`, even though using `cd ..` changes the current directory to `~`, and the prompt, the `pwd` builtin and many other directory information sources suggest that the current directory is `~/images` and its parent is `~`. This issue is not possible to fix without either making every single command into a builtin, breaking Unix semantics or implementing kludges in every single command. This issue can also be seen when doing IO redirection.
This issue can also be seen when doing IO redirection.
Another related issue is that many programs that operate on recursive
directory trees, like the find command, silently ignore symlinked
directories. For example, <code>find $PWD -name '*.txt'</code>
silently fails in shells that don't resolve symlinked paths.
Another related issue is that many programs that operate on recursive directory trees, like the find command, silently ignore symlinked directories. For example, ```find $PWD -name '*.txt'``` silently fails in shells that don't resolve symlinked paths.
<hr>
\section faq-cd-implicit I accidentally entered a directory path and fish changed directory. What happened?
If fish is unable to locate a command with a given name, and it starts with '.', '/' or '~', fish will
test if a directory of that name exists. If it does, it is implicitly
assumed that you want to change working directory. For example, the
fastest way to switch to your home directory is to simply press
<code>~</code> and enter.
If fish is unable to locate a command with a given name, and it starts with '`.`', '`/`' or '`~`', fish will test if a directory of that name exists. If it does, it is implicitly assumed that you want to change working directory. For example, the fastest way to switch to your home directory is to simply press `~` and enter.
<hr>
\section faq-open The open command doesn't work.
The \c open command uses the MIME type database and the <code>.desktop</code> files
used by Gnome and KDE to identify filetypes and default actions. If
at least one of these environments is installed, but the open command is
not working, this probably means that the relevant files are installed
in a non-standard location. Consider <a href="index.html#more-help">asking for
more help</a>.
The `open` command uses the MIME type database and the `.desktop` files used by Gnome and KDE to identify filetypes and default actions. If at least one of these environments is installed, but the open command is not working, this probably means that the relevant files are installed in a non-standard location. Consider <a href="index.html#more-help">asking for more help</a>.
<hr>
\section faq-default How do I make fish my default shell?
If you installed fish manually (e.g. by compiling it, not by using a
package manager), you first need to add fish to the list of shells by
executing the following command (assuming you installed fish in
/usr/local) as root:
If you installed fish manually (e.g. by compiling it, not by using a package manager), you first need to add fish to the list of shells by executing the following command (assuming you installed fish in /usr/local) as root:
\fish{cli-dark}
echo /usr/local/bin/fish >>/etc/shells
\endfish
<code>echo /usr/local/bin/fish >>/etc/shells</code>
If you installed a prepackaged version of fish, the package manager
should have already done this for you.
If you installed a prepackaged version of fish, the package manager should have already done this for you.
In order to change your default shell, type:
<code>chsh -s /usr/local/bin/fish</code>
\fish{cli-dark}
chsh -s /usr/local/bin/fish
\endfish
You may need to adjust the above path to e.g. \c /usr/bin/fish. Use the command <code>which fish</code> if you are unsure of where fish is installed.
You may need to adjust the above path to e.g. `/usr/bin/fish`. Use the command `which fish` if you are unsure of where fish is installed.
Unfortunately, there is no way to make the changes take effect at once.
You will need to log out and back in again.
Unfortunately, there is no way to make the changes take effect at once. You will need to log out and back in again.
<hr>
\section faq-titlebar I'm seeing weird output before each prompt when using screen. What's wrong?
Quick answer:
Run the following command in fish:
<pre>
echo 'function fish_title;end' &gt; ~/.config/fish/config.fish
</pre>
\fish{cli-dark}
function fish_title; end; funcsave fish_title
\endfish
Problem solved!
The long answer:
Fish is trying to set the titlebar message of your terminal. While
screen itself supports this feature, your terminal does
not. Unfortunately, when the underlying terminal doesn't support
setting the titlebar, screen simply passes through the escape codes
and text to the underlying terminal instead of ignoring them. It is
impossible detect and resolve this problem from inside fish since fish
has no way of knowing what the underlying terminal type is. For now,
the only way to fix this is to unset the titlebar message, as
suggested above.
Fish is trying to set the titlebar message of your terminal. While screen itself supports this feature, your terminal does not. Unfortunately, when the underlying terminal doesn't support setting the titlebar, screen simply passes through the escape codes and text to the underlying terminal instead of ignoring them. It is impossible to detect and resolve this problem from inside fish since fish has no way of knowing what the underlying terminal type is. For now, the only way to fix this is to unset the titlebar message, as suggested above.
Note that fish has a default titlebar message, which will be used if
the fish_title function is undefined. So simply unsetting the
fish_title function will not work.
Note that fish has a default titlebar message, which will be used if the fish_title function is undefined. So simply unsetting the fish_title function will not work.
<hr>
\section faq-greeting How do I change the greeting message?
Change the value of the variable fish_greeting. For example, to remove
the greeting use:
Change the value of the variable `fish_greeting` or create a `fish_greeting` function. For example, to remove the greeting use:
<pre>
\fish{cli-dark}
set fish_greeting
</pre>
\endfish
<hr>
\section faq-history Why doesn't history substitution ("!$" etc.) work?
Because history substitution is an awkward interface that was invented before
interactive line editing was even possible. Fish drops it in favor of
perfecting the interactive history recall interface. Switching requires a
small change of habits: if you want to modify an old line/word, first recall
it, then edit. E.g. don't type "sudo !!" - first press Up, then Home, then
type "sudo ".
Because history substitution is an awkward interface that was invented before interactive line editing was even possible. Fish drops it in favor of perfecting the interactive history recall interface. Switching requires a small change of habits: if you want to modify an old line/word, first recall it, then edit. E.g. don't type "sudo !!" - first press Up, then Home, then type "sudo ".
Fish history recall is very simple yet effective:
- As in any modern shell, the Up arrow recalls whole lines, starting from the last line executed. A single press replaces "!!", later presses replace "!-3" and the like.
- If the line you want is far back in the history, type any part of the line and then press Up one or more times. This will constrain the recall to lines that include this text, and you will get to the line you want much faster. This replaces "!vi", "!?bar.c" and the like.
- Alt+Up recalls individual arguments, starting from the last argument in the last line executed. A single press replaces "!$", later presses replace "!!:4" and the like.
- If the argument you want is far back in history (e.g. 2 lines back - that's a lot of words!), type any part of it and then press Alt+Up. This will show only arguments containing that part and you will get what you want much faster. Try it out, this is very convenient!
- If you want to reuse several arguments from the same line ("!!:3*" and the like), consider recalling the whole line and removing what you don't need (Alt+D and Alt+Backspace are your friends).
- As in any modern shell, the Up arrow, @cursor_key{&uarr;,Up} recalls whole lines, starting from the last line executed. A single press replaces "!!", later presses replace "!-3" and the like.
- If the line you want is far back in the history, type any part of the line and then press Up one or more times. This will constrain the recall to lines that include this text, and you will get to the line you want much faster. This replaces "!vi", "!?bar.c" and the like.
- @key{Alt,&uarr;,Up} recalls individual arguments, starting from the last argument in the last line executed. A single press replaces "!$", later presses replace "!!:4" and the like.
- If the argument you want is far back in history (e.g. 2 lines back - that's a lot of words!), type any part of it and then press @key{Alt,&uarr;,Up}. This will show only arguments containing that part and you will get what you want much faster. Try it out, this is very convenient!
- If you want to reuse several arguments from the same line ("!!:3*" and the like), consider recalling the whole line and removing what you don't need (@key{Alt,D} and @key{Alt,Backspace} are your friends).
See <a href='index.html#editor'>documentation</a> for more details about line editing in fish.
<hr>
\section faq-uninstalling Uninstalling fish
Should you wish to uninstall fish, first ensure fish is not set as your shell. Run <code>chsh -s /bin/bash</code> if you are not sure.
Should you wish to uninstall fish, first ensure fish is not set as your shell. Run `chsh -s /bin/bash` if you are not sure.
Next, do the following (assuming fish was installed to /usr/local):
<pre>
\fish{cli-dark}
rm -Rf /usr/local/etc/fish /usr/local/share/fish ~/.config/fish
rm /usr/local/share/man/man1/fish*.1
cd /usr/local/bin
rm -f fish mimedb fish_pager fishd fish_indent
</pre>
rm -f fish mimedb fishd fish_indent
\endfish
*/
\htmlonly
\htmlonly[block]
</div>
\endhtmlonly
*/

View File

@@ -1,14 +1,17 @@
\section fg fg - bring job to foreground
\subsection fg-synopsis Synopsis
<tt>fg [PID]</tt>
\fish{synopsis}
fg [PID]
\endfish
\subsection fg-description Description
\c fg brings the specified <a href="index.html#syntax-job-control">job</a> to the foreground, resuming it if it is stopped. While a foreground job is
executed, fish is suspended. If no job is specified, the last job to be used is put in the foreground. If PID is specified, the job with the specified group ID is put in the foreground.
`fg` brings the specified <a href="index.html#syntax-job-control">job</a> to the foreground, resuming it if it is stopped. While a foreground job is executed, fish is suspended. If no job is specified, the last job to be used is put in the foreground. If PID is specified, the job with the specified group ID is put in the foreground.
The PID of the desired process is usually found by using <a href="index.html#expand-process">process expansion</a>.
\subsection fg-example Example
<tt>fg \%1</tt> will put the job with job ID 1 in the foreground.
`fg %1` will put the job with job ID 1 in the foreground.

View File

@@ -1,25 +1,28 @@
\section fish fish - the friendly interactive shell
\subsection fish-synopsis Synopsis
fish [-h] [-v] [-c command] [FILE [ARGUMENTS...]]
\fish{synopsis}
fish [OPTIONS] [-c command] [FILE [ARGUMENTS...]]
\endfish
\subsection fish-description Description
\c fish is a command-line shell written mainly with interactive use in mind. The
full manual is available <a href='index.html'>in HTML</a> by using the
<a href='#help'>help</a> command from inside fish.
`fish` is a command-line shell written mainly with interactive use in mind. The full manual is available <a href='index.html'>in HTML</a> by using the <a href='#help'>help</a> command from inside fish.
The following options are available:
- <code>-c</code> or <code>--command=COMMANDS</code> evaluate the specified commands instead of reading from the commandline
- <code>-d</code> or <code>--debug-level=DEBUG_LEVEL</code> specify the verbosity level of fish. A higher number means higher verbosity. The default level is 1.
- <code>-h</code> or <code>--help</code> display help and exit
- <code>-i</code> or <code>--interactive</code> specify that fish is to run in interactive mode
- <code>-l</code> or <code>--login</code> specify that fish is to run as a login shell
- <code>-n</code> or <code>--no-execute</code> do not execute any commands, only perform syntax checking
- <code>-p</code> or <code>--profile=PROFILE_FILE</code> when fish exits, output timing information on all executed commands to the specified file
- <code>-v</code> or <code>--version</code> display version and exit
- `-c` or `--command=COMMANDS` evaluate the specified commands instead of reading from the commandline
The fish exit status is generally the exit status of the last
foreground command. If fish is exiting because of a parse error, the
exit status is 127.
- `-d` or `--debug-level=DEBUG_LEVEL` specify the verbosity level of fish. A higher number means higher verbosity. The default level is 1.
- `-i` or `--interactive` specify that fish is to run in interactive mode
- `-l` or `--login` specify that fish is to run as a login shell
- `-n` or `--no-execute` do not execute any commands, only perform syntax checking
- `-p` or `--profile=PROFILE_FILE` when fish exits, output timing information on all executed commands to the specified file
- `-v` or `--version` display version and exit
The fish exit status is generally the exit status of the last foreground command. If fish is exiting because of a parse error, the exit status is 127.

View File

@@ -2,21 +2,17 @@
\subsection fish_config-description Description
\c fish_config starts the web-based configuration interface.
`fish_config` starts the web-based configuration interface.
The web interface allows you to view your functions, variables and history, and
to make changes to your prompt and color configuration.
The web interface allows you to view your functions, variables and history, and to make changes to your prompt and color configuration.
\c fish_config starts a local web server and then opens a web browser window; when
you have finished, close the browser window and then press the Enter key to
terminate the configuration session.
`fish_config` starts a local web server and then opens a web browser window; when you have finished, close the browser window and then press the Enter key to terminate the configuration session.
<code>fish_config</code> optionally accepts name of the initial configuration tab. For e.g. <code>fish_config history</code> will start configuration interface with history tab.
`fish_config` optionally accepts name of the initial configuration tab. For e.g. `fish_config history` will start configuration interface with history tab.
If the `BROWSER` environment variable is set, it will be used as the name of the web browser to open instead of the system default.
If the \c BROWSER environment variable is set, it will be used as the name
of the web browser to open instead of the system default.
\subsection fish_config-example Example
\c fish_config opens a new web browser window and allows you to configure certain
fish settings.
`fish_config` opens a new web browser window and allows you to configure certain fish settings.

View File

@@ -1,17 +1,20 @@
\section fish_indent fish_indent - indenter and prettifier
\subsection fish_indent-synopsis Synopsis
<tt>fish_indent [options]</tt>
\fish{synopsis}
fish_indent [OPTIONS]
\endfish
\subsection fish_indent-description Description
\c fish_indent is used to indent a piece of fish
code. \c fish_indent reads commands from standard input and outputs
them to standard output.
`fish_indent` is used to indent a piece of fish code. `fish_indent` reads commands from standard input and outputs them to standard output.
The following options are available:
- <tt>-h</tt> or <tt>--help</tt> displays this help message and then exits
- <tt>-i</tt> or <tt>--no-indent</tt> do not indent commands
- <tt>-v</tt> or <tt>--version</tt> displays the current fish version and then exits
- `-i` or `--no-indent` do not indent commands; only reformat to one job per line
- `-v` or `--version` displays the current fish version and then exits
- `--ansi` colorizes the output using ANSI escape sequences, appropriate for the current $TERM, using the colors defined in the environment (such as `$fish_color_command`).
- `--html` outputs HTML, which supports syntax highlighting if the appropriate CSS is defined. The CSS class names are the same as the variable names, such as `fish_color_command`

View File

@@ -1,7 +0,0 @@
\section fish_pager fish_pager - internal command used by fish
\subsection fish_pager-description Description
\c fish_pager is used internally by fish. It should not be used by other
commands, as its interface is liable to change in the future.

View File

@@ -1,28 +1,29 @@
\section fish_prompt fish_prompt - define the appearance of the command line prompt
\subsection fish_prompt-synopsis Synopsis
<pre>function fish_prompt
\fish{synopsis}
function fish_prompt
...
end</pre>
end
\endfish
\subsection fish_prompt-description Description
By defining the \c fish_prompt function, the user can choose a custom
prompt. The \c fish_prompt function is executed when the prompt is to
be shown, and the output is used as a prompt.
By defining the `fish_prompt` function, the user can choose a custom prompt. The `fish_prompt` function is executed when the prompt is to be shown, and the output is used as a prompt.
The exit status of commands within \c fish_prompt will not modify the value of <a href="index.html#variables-status">$status</a> outside of the \c fish_prompt function.
The exit status of commands within `fish_prompt` will not modify the value of <a href="index.html#variables-status">$status</a> outside of the `fish_prompt` function.
`fish` ships with a number of example prompts that can be chosen with the `fish_config` command.
\c fish ships with a number of example prompts that can be chosen with the
\c fish_config command.
\subsection fish_prompt-example Example
A simple prompt:
<pre>
\fish
function fish_prompt -d "Write out the prompt"
printf '\%s\@\%s\%s\%s\%s> ' (whoami) (hostname|cut -d . -f 1) (set_color \$fish_color_cwd) (prompt_pwd) (set_color normal)
printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
end
</pre>
\endfish

View File

@@ -1,23 +1,26 @@
\section fish_right_prompt fish_right_prompt - define the appearance of the right-side command line prompt
\subsection fish_right_prompt-synopsis Synopsis
<pre>function fish_right_prompt
\fish{synopsis}
function fish_right_prompt
...
end</pre>
end
\endfish
\subsection fish_right_prompt-description Description
\c fish_right_prompt is similar to \c fish_prompt, except that it appears on the right side of the terminal window.
`fish_right_prompt` is similar to `fish_prompt`, except that it appears on the right side of the terminal window.
Multiple lines are not supported in \c fish_right_prompt.
Multiple lines are not supported in `fish_right_prompt`.
\subsection fish_prompt-example Example
\subsection fish_right_prompt-example Example
A simple right prompt:
<pre>
\fish
function fish_right_prompt -d "Write out the right prompt"
date "+%m/%d/%y"
end
</pre>
\endfish

View File

@@ -2,8 +2,8 @@
\subsection fish_update_completions-description Description
\c fish_update_completions parses manual pages installed on the system, and attempts to create completion files in the \c fish configuration directory.
`fish_update_completions` parses manual pages installed on the system, and attempts to create completion files in the `fish` configuration directory.
This does not overwrite custom completions.
There are no parameters for <code>fish_update_completions</code>.
There are no parameters for `fish_update_completions`.

10
doc_src/fish_vi_mode.txt Normal file
View File

@@ -0,0 +1,10 @@
408-600-6421\section fish_vi_mode fish_vi_mode - Enable vi mode
\subsection fish_vi_mode-synopsis Synopsis
\fish{synopsis}
fish_vi_mode
\endfish
\subsection fish_vi_mode-description Description
`fish_vi_mode` enters a vi-like command editing mode. To always start in vi mode, add `fish_vi_mode` to your `config.fish` file.

View File

@@ -1,33 +0,0 @@
\section fishd fishd - universal variable daemon
\subsection fishd-synopsis Synopsis
<tt>fishd [(-h|--help|-v|--version)]</tt>
\subsection fishd-description Description
The \c fishd daemon is used to load, save and distribute universal
variable information. \c fish automatically connects to \c fishd via a socket
on startup.
\c fishd is started and stopped automatically.
The following options are available if starting \c fishd manually:
- <tt>-h</tt> or <tt>--help</tt> displays this help message and then exits
- <tt>-v</tt> or <tt>--version</tt> displays the current fish version and then exits
\subsection fishd-files Files
- \c ~/.config/fish/fishd.MACHINE_ID - permanent storage location for universal
variable data. \c MACHINE_ID is generally based on the machine's MAC address.
The data is stored as a set of \c set and \c set_export commands such as
would be parsed by fishd. The file must always be stored in YAML format.
If an instance of fishd is running (which is generally the case), manual
modifications to \c ~/.fishd.MACHINE_ID will be lost. Do NOT edit this file manually!
- \c /tmp/fishd.socket.USERNAME - the socket which fishd uses to communicate
with all clients.
- /tmp/fishd.log.USERNAME - the fishd log file

View File

@@ -1,25 +1,21 @@
\section for for - perform a set of commands multiple times.
\subsection for-synopsis Synopsis
<tt>for VARNAME in [VALUES...]; COMMANDS...; end</tt>
\fish{synopsis}
for VARNAME in [VALUES...]; COMMANDS...; end
\endfish
\subsection for-description Description
<tt>for</tt> is a loop construct. It will perform the commands specified by
\c COMMANDS multiple times. On each iteration, the environment variable specified by
\c VARNAME is assigned a new value from \c VALUES. If \c VALUES is empty, \c COMMANDS will
not be executed at all.
`for` is a loop construct. It will perform the commands specified by `COMMANDS` multiple times. On each iteration, the local variable specified by `VARNAME` is assigned a new value from `VALUES`. If `VALUES` is empty, `COMMANDS` will not be executed at all.
\subsection for-example Example
The command
\fish
for i in foo bar baz; echo $i; end
<tt>for i in foo bar baz; echo $i; end</tt>
would output:
<pre>
# would output:
foo
bar
baz
</pre>
\endfish

View File

@@ -1,21 +1,18 @@
\section funced funced - edit a function interactively
\subsection funced-synopsis Synopsis
<code>funced [OPTIONS] NAME</code>
\fish{synopsis}
funced [OPTIONS] NAME
\endfish
\subsection funced-description Description
\c funced provides an interface to edit the definition of the function
<code>NAME</code>.
`funced` provides an interface to edit the definition of the function `NAME`.
If the \c $EDITOR environment variable is set, it will be used as the program
to edit the function. Otherwise, a built-in editor will be used.
If the `$EDITOR` environment variable is set, it will be used as the program to edit the function. Otherwise, a built-in editor will be used.
If there is no function called \c NAME a new function will be created with
the specified name
If there is no function called `NAME` a new function will be created with the specified name
- <code>-e command</code> or <code>--editor command</code> Open the function
body inside the text editor given by the command (for example, "vi"). The
command 'fish' will use the built-in editor.
- <code>-i</code> or <code>--interactive</code> Open function body in the
built-in editor.
- `-e command` or `--editor command` Open the function body inside the text editor given by the command (for example, "vi"). The command 'fish' will use the built-in editor.
- `-i` or `--interactive` Open function body in the built-in editor.

View File

@@ -1,13 +1,10 @@
\section funcsave funcsave - save the definition of a function to the user's autoload directory
\subsection funcsave-synopsis Synopsis
<tt>funcsave FUNCTION_NAME</tt>
\fish{synopsis}
funcsave FUNCTION_NAME
\endfish
\subsection funcsave-description Description
\c funcsave saves the current definition of a function to
a file in the fish configuration directory. This function will be automatically
loaded by current and future fish
sessions. This can be useful if you have interactively created a new
function and wish to save it for later use.
`funcsave` saves the current definition of a function to a file in the fish configuration directory. This function will be automatically loaded by current and future fish sessions. This can be useful if you have interactively created a new function and wish to save it for later use.

View File

@@ -1,61 +1,93 @@
\section function function - create a function
\subsection function-synopsis Synopsis
<code>function [OPTIONS] NAME; BODY; end </code>
\fish{synopsis}
function [OPTIONS] NAME; BODY; end
\endfish
\subsection function-description Description
\c function creates a new function \c NAME with the body <code>BODY</code>.
`function` creates a new function `NAME` with the body `BODY`.
A function is a list of commands that will be executed when the name of the
function is given as a command.
A function is a list of commands that will be executed when the name of the function is given as a command.
The following options are available:
- <code>-a NAMES</code> or <code>--argument-names NAMES</code> assigns the value of successive command-line arguments to the names given in NAMES.
- <code>-d DESCRIPTION</code> or \c --description=DESCRIPTION is a description of what the function does, suitable as a completion description.
- <code>-e</code> or <code>--on-event EVENT_NAME</code> tells fish to run this function when the specified named event is emitted. Fish internally generates named events e.g. when showing the prompt.
- <code>-j PID</code> or <code> --on-job-exit PID</code> tells fish to run this function when the job with group ID PID exits. Instead of PID, the string 'caller' can be specified. This is only legal when in a command substitution, and will result in the handler being triggered by the exit of the job which created this command substitution.
- <code>-p PID</code> or <code> --on-process-exit PID</code> tells fish to run this function when the fish child process with process ID PID exits.
- <code>-s</code> or <code>--on-signal SIGSPEC</code> tells fish to run this function when the signal SIGSPEC is delivered. SIGSPEC can be a signal number, or the signal name, such as SIGHUP (or just HUP).
- \c -S or \c --no-scope-shadowing allows the function to access the variables of calling functions. Normally, any variables inside the function that have the same name as variables from the calling function are "shadowed", and their contents is independent of the calling function.
- <code>-v</code> or <code>--on-variable VARIABLE_NAME</code> tells fish to run this function when the variable VARIABLE_NAME changes value.
- `-a NAMES` or `--argument-names NAMES` assigns the value of successive command-line arguments to the names given in NAMES.
If the user enters any additional arguments after the function, they
are inserted into the environment <a href="index.html#variables-arrays">variable array</a>
<code>$argv</code>. If the \c --argument-names option is provided, the arguments are
also assigned to names specified in that option.
- `-d DESCRIPTION` or `--description=DESCRIPTION` is a description of what the function does, suitable as a completion description.
- `-w WRAPPED_COMMAND` or `--wraps=WRAPPED_COMMAND` causes the function to inherit completions from the given wrapped command. See the documentation for <a href="#complete">`complete`</a> for more information.
- `-e` or `--on-event EVENT_NAME` tells fish to run this function when the specified named event is emitted. Fish internally generates named events e.g. when showing the prompt.
- `-v` or `--on-variable VARIABLE_NAME` tells fish to run this function when the variable VARIABLE_NAME changes value.
- `-j PGID` or `--on-job-exit PGID` tells fish to run this function when the job with group ID PGID exits. Instead of PGID, the string 'caller' can be specified. This is only legal when in a command substitution, and will result in the handler being triggered by the exit of the job which created this command substitution.
- `-p PID` or `--on-process-exit PID` tells fish to run this function when the fish child process with process ID PID exits.
- `-s` or `--on-signal SIGSPEC` tells fish to run this function when the signal SIGSPEC is delivered. SIGSPEC can be a signal number, or the signal name, such as SIGHUP (or just HUP).
- `-S` or `--no-scope-shadowing` allows the function to access the variables of calling functions. Normally, any variables inside the function that have the same name as variables from the calling function are "shadowed", and their contents is independent of the calling function.
- `-V` or `--inherit-variable NAME` snapshots the value of the variable `NAME` and defines a local variable with that same name and value when the function is executed.
If the user enters any additional arguments after the function, they are inserted into the environment <a href="index.html#variables-arrays">variable array</a> `$argv`. If the `--argument-names` option is provided, the arguments are also assigned to names specified in that option.
By using one of the event handler switches, a function can be made to run automatically at specific events. The user may generate new events using the <a href="#emit">emit</a> builtin. Fish generates the following named events:
- \c fish_prompt, which is emitted whenever a new fish prompt is about to be displayed.
- \c fish_command_not_found, which is emitted whenever a command lookup failed.
- `fish_prompt`, which is emitted whenever a new fish prompt is about to be displayed.
- `fish_command_not_found`, which is emitted whenever a command lookup failed.
- `fish_preexec`, which is emitted right before executing an interactive command. The commandline is passed as the first parameter.
Note: This event will be emitted even if the command is invalid. The commandline parameter includes the entire commandline verbatim, and may potentially include newlines.
- `fish_postexec`, which is emitted right after executing an interactive command. The commandline is passed as the first parameter.
Note: This event will be emitted even if the command is invalid. The commandline parameter includes the entire commandline verbatim, and may potentially include newlines.
\subsection function-example Example
<pre>
\fish
function ll
ls -l $argv
ls -l $argv
end
</pre>
\endfish
will run the \c ls command, using the \c -l option, while passing on any additional files and switches to \c ls.
will run the `ls` command, using the `-l` option, while passing on any additional files and switches to `ls`.
<pre>
\fish
function mkdir -d "Create a directory and set CWD"
command mkdir $argv
if test $status = 0
switch $argv[(count $argv)]
case '-*'
command mkdir $argv
if test $status = 0
switch $argv[(count $argv)]
case '-*'
case '*'
cd $argv[(count $argv)]
return
end
end
case '*'
cd $argv[(count $argv)]
return
end
end
end
</pre>
\endfish
will run the mkdir command, and if it is successful, change the
current working directory to the one just created.
This will run the `mkdir` command, and if it is successful, change the current working directory to the one just created.
\fish
function notify
set -l job (jobs -l -g)
or begin; echo "There are no jobs" >&2; return 1; end
function _notify_job_$job --on-job-exit $job --inherit-variable job
echo -n \a # beep
functions -e _notify_job_$job
end
end
\endfish
This will beep when the most recent job completes.

View File

@@ -1,51 +1,52 @@
\section functions functions - print or erase functions
\subsection function-synopsis Synopsis
<pre>functions [-n]
\subsection functions-synopsis Synopsis
\fish{synopsis}
functions [ -a | --all ] [ -n | --names ]
functions -c OLDNAME NEWNAME
functions -d DESCRIPTION FUNCTION
functions [-eq] FUNCTIONS...</pre>
functions [ -e | -q ] FUNCTIONS...
\endfish
\subsection functions-description Description
\c functions prints or erases functions.
`functions` prints or erases functions.
The following options are available:
- <code>-a</code> or <code>--all</code> lists all functions, even those whose name start with an underscore.
- <code>-c OLDNAME NEWNAME</code> or <code>--copy OLDNAME NEWNAME</code> creates a new function named NEWNAME, using the definition of the OLDNAME function.
- <code>-d DESCRIPTION</code> or <code>--description=DESCRIPTION</code> changes the description of this function.
- <code>-e</code> or <code>--erase</code> causes the specified functions to be erased.
- <code>-h</code> or <code>--help</code> displays a help message and exits.
- <code>-n</code> or <code>--names</code> lists the names of all defined functions.
- <code>-q</code> or <code>--query</code> tests if the specified functions exist.
- `-a` or `--all` lists all functions, even those whose name start with an underscore.
The default behavior of <code>functions</code>, when called with no arguments,
is to print the names of all defined functions. Unless the \c -a option is
given, no functions starting with underscores are not included in the output.
- `-c OLDNAME NEWNAME` or `--copy OLDNAME NEWNAME` creates a new function named NEWNAME, using the definition of the OLDNAME function.
If any non-option parameters are given, the definition of the specified
functions are printed.
- `-d DESCRIPTION` or `--description=DESCRIPTION` changes the description of this function.
Automatically loaded functions cannot be removed using <code>functions
-e</code>. Either remove the definition file or change the
$fish_function_path variable to remove autoloaded functions.
- `-e` or `--erase` causes the specified functions to be erased.
Copying a function using \c -c copies only the body of the function, and
does not attach any event notifications from the original function.
- `-n` or `--names` lists the names of all defined functions.
Only one function's description can be changed in a single invocation
of <code>functions -d</code>.
- `-q` or `--query` tests if the specified functions exist.
The default behavior of `functions`, when called with no arguments, is to print the names of all defined functions. Unless the `-a` option is given, no functions starting with underscores are not included in the output.
If any non-option parameters are given, the definition of the specified functions are printed.
Automatically loaded functions cannot be removed using `functions -e`. Either remove the definition file or change the $fish_function_path variable to remove autoloaded functions.
Copying a function using `-c` copies only the body of the function, and does not attach any event notifications from the original function.
Only one function's description can be changed in a single invocation of `functions -d`.
The exit status of `functions` is the number of functions specified in the argument list that do not exist, which can be used in concert with the `-q` option.
The exit status of \c functions is the number of functions
specified in the argument list that do not exist, which can be used in
concert with the \c -q option.
\subsection functions-example Examples
\fish
functions -n
# Displays a list of currently-defined functions
<code>functions -n</code> displays a list of currently-defined functions.
functions -c foo bar
# Copies the 'foo' function to a new function called 'bar'
<code>functions -c foo bar</code> copies the \c foo function to a new function called
<code>bar</code>.
<code>functions -e bar</code> erases the function <code>bar</code>.
functions -e bar
# Erases the function `bar`
\endfish

View File

@@ -1,20 +1,21 @@
\section help help - display fish documentation
\subsection help-synopsis Synopsis
<tt>help [SECTION]</tt>
\fish{synopsis}
help [SECTION]
\endfish
\subsection help-description Description
\c help displays the fish help documentation.
`help` displays the fish help documentation.
If a \c SECTION is specified, the help for that command is shown.
If a `SECTION` is specified, the help for that command is shown.
If the BROWSER environment variable is set, it will be used to display the
documentation. Otherwise, fish will search for a suitable browser.
If the BROWSER environment variable is set, it will be used to display the documentation. Otherwise, fish will search for a suitable browser.
Note that most builtin commands display their help in the terminal when given the `--help` option.
Note that most builtin commands display their help in the terminal when
given the <tt>--help</tt> option.
\subsection help-example Example
<tt>help fg</tt> shows the documentation for the \c fg builtin.
`help fg` shows the documentation for the `fg` builtin.

View File

@@ -1,44 +1,44 @@
\section history history - Show and manipulate command history
\subsection history-synopsis Synopsis
<pre>
history (--save | --clear)
history (--search | --delete ) (--prefix "prefix string" | --contains "search string")
</pre>
\fish{synopsis}
history ( --merge | --save | --clear )
history ( --search | --delete ) [ --prefix "prefix string" | --contains "search string" ]
\endfish
\subsection history-description Description
\c history is used to list, search and delete the history of commands used.
`history` is used to list, search and delete the history of commands used.
The following options are available:
- `--merge` immediately incorporates history changes from other sessions. Ordinarily `fish` ignores history changes from sessions started after the current one. This command applies those changes immediately.
- \c --save saves all changes in the history file. The shell automatically
saves the history file; this option is provided for internal use.
- \c --clear clears the history file. A prompt is displayed before the history
is erased.
- \c --search returns history items in keeping with the \c --prefix or
\c --contains options.
- \c --delete deletes history items.
- \c --prefix searches or deletes items in the history that begin with the
specified text string.
- \c --contains searches or deletes items in the history that contain the
specified text string.
- `--save` saves all changes in the history file. The shell automatically saves the history file; this option is provided for internal use.
If \c --search is specified without \c --contains or <code>--prefix</code>,
\c --contains will be assumed.
- `--clear` clears the history file. A prompt is displayed before the history is erased.
- `--search` returns history items in keeping with the `--prefix` or `--contains` options.
- `--delete` deletes history items.
- `--prefix` searches or deletes items in the history that begin with the specified text string.
- `--contains` searches or deletes items in the history that contain the specified text string.
If `--search` is specified without `--contains` or `--prefix`, `--contains` will be assumed.
If `--delete` is specified without `--contains` or `--prefix`, only a history item which exactly matches the parameter will be erased. No prompt will be given. If `--delete` is specified with either of these parameters, an interactive prompt will be displayed before any items are deleted.
If \c --delete is specified without \c --contains or <code>--prefix</code>,
only a history item which exactly matches the parameter will be erased. No
prompt will be given. If \c --delete is specified with either of these
parameters, an interactive prompt will be displayed before any items are
deleted.
\subsection history-examples Example
<code>history --clear</code> deletes all history items
\fish
history --clear
# Deletes all history items
<code>history --search --contains "foo"</code> outputs a list of all previous
commands containing the string "foo".
history --search --contains "foo"
# Outputs a list of all previous commands containing the string "foo".
<code>history --delete --prefix "foo"</code> interactively deletes the record
of previous commands which start with "foo".
history --delete --prefix "foo"
# Interactively deletes the record of previous commands which start with "foo".
\endfish

View File

@@ -1,36 +1,32 @@
\section if if - conditionally execute a command
\subsection if-synopsis Synopsis
<tt>if CONDITION; COMMANDS_TRUE...; [else if CONDITION2; COMMANDS_TRUE2...;] [else; COMMANDS_FALSE...;] end</tt>
\fish{synopsis}
if CONDITION; COMMANDS_TRUE...;
[else if CONDITION2; COMMANDS_TRUE2...;]
[else; COMMANDS_FALSE...;]
end
\endfish
\subsection if-description Description
<tt>if</tt> will execute the command \c CONDITION. If the condition's
exit status is 0, the commands \c COMMANDS_TRUE will execute. If the
exit status is not 0 and <tt>else</tt> is given, \c COMMANDS_FALSE will
be executed.
`if` will execute the command `CONDITION`. If the condition's exit status is 0, the commands `COMMANDS_TRUE` will execute. If the exit status is not 0 and `else` is given, `COMMANDS_FALSE` will be executed.
In order to use the exit status of multiple commands as the condition
of an if block, use <a href="#begin"><tt>begin; ...; end</tt></a> and
the short circuit commands <a href="commands.html#and"><tt>and</tt></a>
and <a href="commands.html#or"><tt>or</tt></a>.
In order to use the exit status of multiple commands as the condition of an if block, use <a href="#begin">`begin; ...; end`</a> and the short circuit commands <a href="commands.html#and">`and`</a> and <a href="commands.html#or">`or`</a>.
The exit status of the last foreground command to exit can always be accessed using the <a href="index.html#variables-status">$status</a> variable.
The exit status of the last foreground command to exit can always be
accessed using the <a href="index.html#variables-status">$status</a>
variable.
\subsection if-example Example
<pre>
The following code will print `foo.txt exists` if the file foo.txt exists and is a regular file, otherwise it will print `bar.txt exists` if the file bar.txt exists and is a regular file, otherwise it will print `foo.txt and bar.txt do not exist`.
\fish
if test -f foo.txt
echo foo.txt exists
echo foo.txt exists
else if test -f bar.txt
echo bar.txt exists
echo bar.txt exists
else
echo foo.txt and bar.txt do not exist
echo foo.txt and bar.txt do not exist
end
</pre>will print <tt>foo.txt exists</tt> if the file foo.txt
exists and is a regular file, otherwise it will print
<tt>bar.txt exists</tt> if the file bar.txt exists
and is a regular file, otherwise it will print
<tt>foo.txt and bar.txt do not exist</tt>.
\endfish

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,35 @@
\section isatty isatty - test if the specified file descriptor is a tty
\section isatty isatty - test if a file descriptor is a tty.
\subsection isatty-synopsis Synopsis
<tt>isatty [FILE DESCRIPTOR]</tt>
\fish{synopsis}
isatty [FILE DESCRIPTOR]
\endfish
\subsection isatty-description Description
<tt>isatty</tt> tests if a file descriptor is a tty.
<tt>FILE DESCRIPTOR</tt> may be either the number of a file descriptor, or one of the
strings <tt>stdin</tt>, \c stdout and <tt>stderr</tt>.
`isatty` tests if a file descriptor is a tty.
If the specified file descriptor is a tty, the exit status of the command is
zero. Otherwise, it is non-zero.
`FILE DESCRIPTOR` may be either the number of a file descriptor, or one of the strings `stdin`, `stdout`, or `stderr`.
If the specified file descriptor is a tty, the exit status of the command is zero. Otherwise, the exit status is non-zero. No messages are printed to standard error.
\subsection isatty-examples Examples
From an interactive shell, the commands below exit with a return value of zero:
\fish
isatty
isatty stdout
isatty 2
echo | isatty 1
\endfish
And these will exit non-zero:
\fish
echo | isatty
isatty 9
isatty stdout > file
isatty 2 2> file
\endfish

View File

@@ -1,25 +1,27 @@
\section jobs jobs - print currently running jobs
\subsection jobs-synopsis Synopsis
<code>jobs [OPTIONS] [PID]</code>
\fish{synopsis}
jobs [OPTIONS] [PID]
\endfish
\subsection jobs-description Description
<code>jobs</code> prints a list of the currently
running <a href="index.html#syntax-job-control">jobs</a> and their status.
`jobs` prints a list of the currently running <a href="index.html#syntax-job-control">jobs</a> and their status.
jobs accepts the following switches:
- <code>-c</code> or <code>--command</code> prints the command name for each process in jobs.
- <code>-g</code> or <code>--group</code> only prints the group ID of each job.
- <code>-h</code> or <code>--help</code> displays a help message and exits.
- <code>-l</code> or <code>--last</code> prints only the last job to be started.
- <code>-p</code> or <code>--pid</code> prints the process ID for each process in all jobs.
- `-c` or `--command` prints the command name for each process in jobs.
- `-g` or `--group` only prints the group ID of each job.
- `-l` or `--last` prints only the last job to be started.
- `-p` or `--pid` prints the process ID for each process in all jobs.
On systems that supports this feature, jobs will print the CPU usage of each job since the last command was executed. The CPU usage is expressed as a percentage of full CPU activity. Note that on multiprocessor systems, the total activity may be more than 100\%.
On systems that supports this feature, jobs will print the CPU usage
of each job since the last command was executed. The CPU usage is
expressed as a percentage of full CPU activity. Note that on
multiprocessor systems, the total activity may be more than 100\%.
\subsection jobs-example Example
<code>jobs</code> outputs a summary of the current jobs.
`jobs` outputs a summary of the current jobs.

File diff suppressed because it is too large Load Diff

View File

@@ -2,25 +2,19 @@
\section math math - Perform mathematics calculations
\subsection math-synopsis Synopsis
<tt>math EXPRESSION</tt>
\fish{synopsis}
math EXPRESSION
\endfish
\subsection math-description Description
\c math is used to perform mathematical calculations. It is a very
thin wrapper for the bc program, which makes it possible to specify an
expression from the command line without using non-standard extensions
or a pipeline.
`math` is used to perform mathematical calculations. It is a very thin wrapper for the bc program, which makes it possible to specify an expression from the command line without using non-standard extensions or a pipeline.
For a description of the syntax supported by math, see the manual for the bc program. Keep in mind that parameter expansion takes place on any expressions before they are evaluated. This can be very useful in order to perform calculations involving shell variables or the output of command substitutions, but it also means that parenthesis have to be escaped.
For a description of the syntax supported by math, see the manual for
the bc program. Keep in mind that parameter expansion takes place on
any expressions before they are evaluated. This can be very useful in
order to perform calculations involving environment variables or the
output of command substitutions, but it also means that parenthesis
have to be escaped.
\subsection math-example Examples
<code>math 1+1</code> outputs 2.
`math 1+1` outputs 2.
<code>math $status-128</code> outputs the numerical exit status of the
last command minus 128.
`math $status-128` outputs the numerical exit status of the last command minus 128.

View File

@@ -1,26 +1,28 @@
\section mimedb mimedb - lookup file information via the mime database
\subsection mimedb-synopsis Synopsis
<tt>mimedb [OPTIONS] FILES...</tt>
\fish{synopsis}
mimedb [OPTIONS] FILES...
\endfish
\subsection mimedb-description Description
\c mimedb queries the MIME type database and the \c .desktop files
installed on the system in order to find information on
the files listed in <code>FILES</code>. The information that \c mimedb
can retrieve includes the MIME type for a file, a description of the type,
and the default action that can be performed on the file. \c mimedb can also
be used to launch the default action for this file.
`mimedb` queries the MIME type database and the `.desktop` files installed on the system in order to find information on the files listed in `FILES`. The information that `mimedb` can retrieve includes the MIME type for a file, a description of the type, and the default action that can be performed on the file. `mimedb` can also be used to launch the default action for this file.
The following options are available:
- \c -t, \c --input-file-data determines the files' type both by their filename and by their contents (default behaviour).
- \c -f, \c --input-filename determines the files' type by their filename.
- \c -i, \c --input-mime specifies that the arguments are not files, but MIME types.
- \c -m, \c --output-mime outputs the MIME type of each file (default behaviour).
- \c -f, \c --output-description outputs the description of each MIME type.
- \c -a, \c --output-action outputs the default action of each MIME type.
- \c -l, \c --launch launches the default action for the specified files.
- \c -h, \c --help displays a help message and exit.
- \c -v, \c --version displays the version number and exits.
- `-t`, `--input-file-data` determines the files' type both by their filename and by their contents (default behaviour).
- `-f`, `--input-filename` determines the files' type by their filename.
- `-i`, `--input-mime` specifies that the arguments are not files, but MIME types.
- `-m`, `--output-mime` outputs the MIME type of each file (default behaviour).
- `-f`, `--output-description` outputs the description of each MIME type.
- `-a`, `--output-action` outputs the default action of each MIME type.
- `-l`, `--launch` launches the default action for the specified files.
- `-v`, `--version` displays the version number and exits.

View File

@@ -1,24 +1,29 @@
\section nextd nextd - move forward through directory history
\subsection nextd-synopsis Synopsis
<tt>nextd [-l | --list] [POS]</tt>
\fish{synopsis}
nextd [ -l | --list ] [POS]
\endfish
\subsection nextd-description Description
<tt>nextd</tt> moves forwards <tt>POS</tt> positions in the history of visited
directories; if the end of the history has been hit, a warning is printed.
If the <code>-l></code> or <code>--list</code> flag is specified, the current
directory history is also displayed.
`nextd` moves forwards `POS` positions in the history of visited directories; if the end of the history has been hit, a warning is printed.
If the `-l` or `--list` flag is specified, the current directory history is also displayed.
\subsection nextd-example Example
\code
\fish
cd /usr/src
# Working directory is now /usr/src
cd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
prevd
# Working directory is now /usr/src
nextd
# Working directory is now /usr/src/fish-shell</pre>
\endcode
# Working directory is now /usr/src/fish-shell
\endfish

View File

@@ -1,21 +1,23 @@
\section not not - negate the exit status of a job
\subsection not-synopsis Synopsis
<tt>not COMMAND [OPTIONS...]</tt>
\fish{synopsis}
not COMMAND [OPTIONS...]
\endfish
\subsection not-description Description
\c not negates the exit status of another command. If the exit status
is zero, \c not returns 1. Otherwise, \c not returns 0.
`not` negates the exit status of another command. If the exit status is zero, `not` returns 1. Otherwise, `not` returns 0.
\subsection not-example Example
The following code reports an error and exits if no file named spoon can be found.
<pre>
\fish
if not test -f spoon
echo There is no spoon
exit 1
echo There is no spoon
exit 1
end
</pre>
\endfish

View File

@@ -1,12 +1,15 @@
\section open open - open file in its default application
\subsection open-synopsis Synopsis
<tt>open FILES...</tt>
\fish{synopsis}
open FILES...
\endfish
\subsection open-description Description
\c open opens a file in its default application, using the \c xdg-open command if it exists, or else the <a href="commands.html#mimedb">mimedb</a> command.
`open` opens a file in its default application, using the `xdg-open` command if it exists, or else the <a href="commands.html#mimedb">mimedb</a> command.
\subsection open-example Example
<tt>open *.txt</tt> opens all the text files in the current directory using your system's default text editor.
`open *.txt` opens all the text files in the current directory using your system's default text editor.

View File

@@ -1,27 +1,23 @@
\section or or - conditionally execute a command
\subsection or-synopsis Synopsis
<tt>COMMAND1; or COMMAND2</tt>
\fish{synopsis}
COMMAND1; or COMMAND2
\endfish
\subsection or-description Description
\c or is used to execute a command if the current exit
status (as set by the last previous command) is not 0.
`or` is used to execute a command if the current exit status (as set by the last previous command) is not 0.
\c or does not change the current exit status.
`or` does not change the current exit status.
The exit status of the last foreground command to exit can always be accessed using the <a href="index.html#variables-status">$status</a> variable.
The exit status of the last foreground command to exit can always be
accessed using the <a href="index.html#variables-status">$status</a>
variable.
\subsection or-example Example
The following code runs the \c make command to build a program. If the
build succeeds, the program is installed. If either step fails,
<tt>make clean</tt> is run, which removes the files created by the
build process.
The following code runs the `make` command to build a program. If the build succeeds, the program is installed. If either step fails, `make clean` is run, which removes the files created by the build process.
<pre>
\fish
make; and make install; or make clean
</pre>
\endfish

View File

@@ -1,24 +1,27 @@
\section popd popd - move through directory stack
\subsection popd-synopsis Synopsis
<tt>popd</tt>
\fish{synopsis}
popd
\endfish
\subsection popd-description Description
<tt>popd</tt> removes the top directory from the directory stack and
changes the working directory to the new top directory. Use <a
href="#pushd"><tt>pushd</tt></a> to add directories to the stack.
`popd` removes the top directory from the directory stack and changes the working directory to the new top directory. Use <a href="#pushd">`pushd`</a> to add directories to the stack.
\subsection popd-example Example
<pre>
\fish
pushd /usr/src
# Working directory is now /usr/src
# Directory stack contains /usr/src
pushd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
# Directory stack contains /usr/src /usr/src/fish-shell
popd
# Working directory is now /usr/src
# Directory stack contains /usr/src
</pre>
\endfish

View File

@@ -1,26 +1,29 @@
\section prevd prevd - move backward through directory history
\subsection prevd-synopsis Synopsis
<tt>prevd [-l | --list] [POS]</tt>
\fish{synopsis}
prevd [ -l | --list ] [POS]
\endfish
\subsection prevd-description Description
<tt>prevd</tt> moves backwards <tt>POS</tt> positions in the history
of visited directories; if the beginning of the history has been hit,
a warning is printed.
`prevd` moves backwards `POS` positions in the history of visited directories; if the beginning of the history has been hit, a warning is printed.
If the `-l` or `--list` flag is specified, the current history is also displayed.
If the <code>-l</code> or <code>--list</code> flag is specified, the current
history is also displayed.
\subsection prevd-example Example
\code
\fish
cd /usr/src
# Working directory is now /usr/src
cd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
prevd
# Working directory is now /usr/src
nextd
# Working directory is now /usr/src/fish-shell</pre>
\endcode
# Working directory is now /usr/src/fish-shell
\endfish

View File

@@ -1,26 +1,20 @@
\section psub psub - perform process substitution
\subsection psub-synopsis Synopsis
<tt>COMMAND1 (COMMAND2|psub [-f]) </tt>
\fish{synopsis}
COMMAND1 ( COMMAND2 | psub [-f] )
\endfish
\subsection psub-description Description
Posix shells feature a syntax that is a mix between command
substitution and piping, called process substitution. It is used to
send the output of a command into the calling command, much like
command substitution, but with the difference that the output is not
sent through commandline arguments but through a named pipe, with the
filename of the named pipe sent as an argument to the calling
program. \c psub combined with a
regular command substitution provides the same functionality.
Posix shells feature a syntax that is a mix between command substitution and piping, called process substitution. It is used to send the output of a command into the calling command, much like command substitution, but with the difference that the output is not sent through commandline arguments but through a named pipe, with the filename of the named pipe sent as an argument to the calling program. `psub` combined with a regular command substitution provides the same functionality.
If the `-f` or `--file` switch is given to `psub`, `psub` will use a regular file instead of a named pipe to communicate with the calling process. This will cause `psub` to be significantly slower when large amounts of data are involved, but has the advantage that the reading process can seek in the stream.
If the \c -f or \c --file switch is given to <tt>psub</tt>, \c psub will use a
regular file instead of a named pipe to communicate with the calling
process. This will cause \c psub to be significantly slower when large
amounts of data are involved, but has the advantage that the reading
process can seek in the stream.
\subsection psub-example Example
<tt>diff (sort a.txt|psub) (sort b.txt|psub)</tt> shows the difference
between the sorted versions of files a.txt and b.txt.
\fish
diff (sort a.txt | psub) (sort b.txt | psub)
# shows the difference between the sorted versions of files `a.txt` and `b.txt`.
\endfish

View File

@@ -1,23 +1,27 @@
\section pushd pushd - push directory to directory stack
\subsection pushd-synopsis Synopsis
<tt>pushd [DIRECTORY]</tt>
\fish{synopsis}
pushd [DIRECTORY]
\endfish
\subsection pushd-description Description
The <tt>pushd</tt> function adds \c DIRECTORY to the top of the directory stack
and makes it the current working directory. <a href="#popd"><tt>popd</tt></a> will pop it off and
return to the original directory.
The `pushd` function adds `DIRECTORY` to the top of the directory stack and makes it the current working directory. <a href="#popd">`popd`</a> will pop it off and return to the original directory.
\subsection pushd-example Example
<pre>
\fish
pushd /usr/src
# Working directory is now /usr/src
# Directory stack contains /usr/src
pushd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
# Directory stack contains /usr/src /usr/src/fish-shell
popd
# Working directory is now /usr/src
# Directory stack contains /usr/src
</pre>
\endfish

View File

@@ -1,10 +1,12 @@
\section pwd pwd - output the current working directory
\subsection pwd-synopsis Synopsis
<tt>pwd</tt>
\fish{synopsis}
pwd
\endfish
\subsection pwd-description Description
\c pwd outputs (prints) the current working directory.
`pwd` outputs (prints) the current working directory.
Note that \c fish always resolves symbolic links in the current directory path.
Note that `fish` always resolves symbolic links in the current directory path.

View File

@@ -1,25 +1,24 @@
\section random random - generate random number
\subsection random-synopsis Synopsis
<tt>random [SEED]</tt>
\fish{synopsis}
random [SEED]
\endfish
\subsection random-description Description
\c random outputs a random number from 0 to 32766, inclusive.
`random` outputs a random number from 0 to 32766, inclusive.
If a `SEED` value is provided, it is used to seed the random number generator, and no output will be produced. This can be useful for debugging purposes, where it can be desirable to get the same random number sequence multiple times. If the random number generator is called without first seeding it, the current time will be used as the seed.
If a \c SEED value is provided, it is used to seed the random number
generator, and no output will be produced. This can be useful for debugging
purposes, where it can be desirable to get the same random number sequence
multiple times. If the random number generator is called without first
seeding it, the current time will be used as the seed.
\subsection random-example Example
The following code will count down from a random number to 1:
<pre>
\fish
for i in (seq (random) -1 1)
echo $i
sleep
echo $i
sleep
end
</pre>
\endfish

Some files were not shown because too many files have changed in this diff Show More