fish-shell/share/functions
Aaron Gyes 3669805627 Improve compatibility with 0-16 color terminals.
Fish assumed that it could use tparm to emit escapes to set colors
as long as the color was under 16 or max_colors from terminfo was 256::

 if (idx < 16 || term256_support_is_native()) {
    // Use tparm to emit color escape
    writembs(tparm(todo, idx);

If a terminal has max_colors = 8, here is what happenened, except
inside fish:

 > env TERM=xterm tput setaf 7 | xxd
   00000000: 1b5b 3337 6d                             .[37m
 > env TERM=xterm tput setaf 9 | xxd
   00000000: 1b5b 3338 6d                             .[39m

The first escape is good, that second escape is not valid.
Bright colors should start at \e[90m:

 > env TERM=xterm-16color tput setaf 9 | xxd
   00000000: 1b5b 3931 6d                             .[91m

This is what caused "white" not to work in #3176 in Terminal.app, and
obviously isn't good for real low-color terminals either.

So we replace the term256_support_is_native(), which just checked if
max_colors is 256 or not, with a function that takes an argument and
checks terminfo for that to see if tparm can handle it. We only use this
test, because otherwise, tparm should be expected to output garbage:

 /// Returns true if we think tparm can handle outputting a color index
 static bool term_supports_color_natively(unsigned int c) { return max_colors >= c; }
...

 if (term_supports_color_natively(idx) {

And if terminfo can't do it, the "forced" escapes no longer use the fancy
format when handling colors under 16, as this is not going to be compatible with
low color terminals. The code before used:

 else {
     char buff[16] = "";
     snprintf(buff, sizeof buff, "\x1b[%d;5;%dm", is_fg ? 38 : 48, idx);

I added an intermediate format for colors 0-15:

 else {
     // We are attempting to bypass the term here. Generate the ANSI escape sequence ourself.
     char buff[16] = "";
     if (idx < 16) {
         snprintf(buff, sizeof buff, "\x1b[%dm", ((idx > 7) ? 82 : 30) + idx + !is_fg * 10);
     } else {
         snprintf(buff, sizeof buff, "\x1b[%d;5;%dm", is_fg ? 38 : 48, idx);
     }

Restores harmony to white, brwhite, brblack, black color names.
We don't want "white" to refer to color color #16, but to the
standard color #8. #16 is "brwhite".

Move comments from output.h to output.cpp

Nuke the config.fish set_color hack for linux VTs.

Sync up our various incomplete color lists and fix all color values.
Colors 0-8 are assumed to be brights - e.g. red was FF0000. Perplexing!

Using this table:
 <http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html>

Fixes #3176
2016-07-24 17:02:29 -07:00
..
__fish_append.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_bind_test1.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_bind_test2.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_cancel_commandline.fish Remove the errant newline in __fish_cancel_commandline again 2016-05-13 23:19:53 +01:00
__fish_commandline_test.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_abook_formats.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_ant_targets.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_complete_atool_archive_contents.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_bittorrent.fish
__fish_complete_blockdevice.fish Split off __fish_complete_blockdevice from mount.fish. 2016-05-27 14:56:47 -07:00
__fish_complete_cd.fish Fix "." and ".." paths in cd completions 2016-04-08 15:03:49 +02:00
__fish_complete_command.fish Another stringification (__fish_complete_command) 2016-02-04 13:53:55 +01:00
__fish_complete_convert_options.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_directories.fish Minor polish like adding missing whitespace, switch to using --argument switch in function definitions to make code more readable, add a few minor saftey checks, etc. 2007-09-24 07:07:30 +10:00
__fish_complete_file_url.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_complete_ftp.fish Fixed ftp completions 2013-07-18 21:26:32 +05:30
__fish_complete_groups.fish use getent for passwd and group if available 2012-11-27 11:49:52 +08:00
__fish_complete_job_pids.fish Add a function to complete job PIDs. 2015-11-27 16:07:16 -08:00
__fish_complete_list.fish Squashed commit of the following: 2013-04-01 10:49:02 -07:00
__fish_complete_lpr_option.fish Stringify __fish_complete_lpr_option 2016-02-03 23:26:41 +01:00
__fish_complete_lpr.fish Remove trailing whitespaces and change tabs to spaces 2012-11-18 11:23:22 +01:00
__fish_complete_lsusb.fish Rename __fish_complete_usb function. 2014-01-14 08:28:15 +01:00
__fish_complete_man.fish Remove stray "0" output from man completions 2016-05-29 14:34:20 +02:00
__fish_complete_path.fish __fish_complete_path: add new completion, mimics builtin path completion 2014-09-29 14:05:18 +08:00
__fish_complete_pgrep.fish Squashed commit of the following: 2013-04-01 10:49:02 -07:00
__fish_complete_pids.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_complete_ppp_peer.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_proc.fish Fix proc and pid completion on OS X, and improve it on Linux. 2013-01-16 14:11:43 -08:00
__fish_complete_setxkbmap.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_complete_ssh.fish Squashed commit of the following: 2013-04-01 10:49:02 -07:00
__fish_complete_subcommand_root.fish Suppress PATH errors in sudo tab-completion 2014-09-04 13:22:06 -07:00
__fish_complete_subcommand.fish Replace tr invocations 2016-02-03 23:47:46 +01:00
__fish_complete_suffix.fish __fish_complete_suffix: don't provide file description by default 2015-07-23 14:26:38 +08:00
__fish_complete_svn_diff.fish Remove trailing whitespaces and change tabs to spaces 2012-11-18 11:23:22 +01:00
__fish_complete_tar.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_complete_unrar.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_complete_users.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_complete_wvdial_peers.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_config_interactive.fish Improve compatibility with 0-16 color terminals. 2016-07-24 17:02:29 -07:00
__fish_contains_opt.fish Rename sgrep to __fish_sgrep 2015-09-09 20:55:04 +02:00
__fish_crux_packages.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_cursor_konsole.fish Add tmux support 2014-01-20 21:28:54 +04:00
__fish_cursor_xterm.fish Replace uses of expr with math/string 2016-02-03 23:23:59 +01:00
__fish_describe_command.fish Get rid of 'nothing appropriate' output when completing. 2012-08-04 11:20:03 -07:00
__fish_filter_ant_targets.fish Improve ant completions. This patch comes from Steven Knight. (minor tweaks applied) 2008-01-09 08:16:08 +10:00
__fish_git_prompt.fish Completions (mostly): s/.../…/g 2016-07-09 10:57:59 -07:00
__fish_gnu_complete.fish Squashed commit of the following: 2013-04-01 10:49:02 -07:00
__fish_hg_prompt.fish hg_prompt: Use string match -q instead of redirection 2016-01-08 14:10:03 +01:00
__fish_is_first_token.fish
__fish_is_token_n.fish Replace uses of expr with math/string 2016-02-03 23:23:59 +01:00
__fish_list_current_token.fish make alt-L output respect multi-line prompts 2016-03-18 15:53:29 -07:00
__fish_make_completion_signals.fish __fish_make_completion_signals to stop spewing on OS X 2016-07-09 17:45:16 -07:00
__fish_man_page.fish Add Meta+H as keybinding for man page. 2014-09-28 11:12:25 +02:00
__fish_move_last.fish Completions (mostly): s/.../…/g 2016-07-09 10:57:59 -07:00
__fish_no_arguments.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_not_contain_opt.fish Rename sgrep to __fish_sgrep 2015-09-09 20:55:04 +02:00
__fish_number_of_cmd_args_wo_opts.fish Add eselect, rc-update and rc-service completions. (These are utilities used by Gentoo Linux) 2013-11-27 18:36:05 +08:00
__fish_paginate.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_ports_dirs.fish
__fish_print_abook_emails.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_print_addresses.fish __fish_print_{addresses,interaces}: Better OSX/BSD 2015-09-24 15:32:15 +02:00
__fish_print_arch_daemons.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_cmd_args_without_options.fish Add eselect, rc-update and rc-service completions. (These are utilities used by Gentoo Linux) 2013-11-27 18:36:05 +08:00
__fish_print_cmd_args.fish Add eselect, rc-update and rc-service completions. (These are utilities used by Gentoo Linux) 2013-11-27 18:36:05 +08:00
__fish_print_commands.fish Allow compressed man pages in help 2016-06-10 14:13:15 +02:00
__fish_print_debian_apache_confs.fish Add completions for Debian's Apache tools, a2{en,dis}{mod,conf,site} 2015-06-26 16:14:01 +08:00
__fish_print_debian_apache_mods.fish Add completions for Debian's Apache tools, a2{en,dis}{mod,conf,site} 2015-06-26 16:14:01 +08:00
__fish_print_debian_apache_sites.fish Add completions for Debian's Apache tools, a2{en,dis}{mod,conf,site} 2015-06-26 16:14:01 +08:00
__fish_print_debian_services.fish adds completion for Debian's invoke-rc.d command 2009-02-05 05:17:57 +10:00
__fish_print_encodings.fish Create common function for listing available character encodings, make sure it is used in all relevant places. 2007-09-22 07:10:51 +10:00
__fish_print_filesystems.fish Include mount helpers in filesystem completion 2015-12-30 19:02:03 +01:00
__fish_print_function_prototypes.fish
__fish_print_help.fish Allow compressed man pages in help 2016-06-10 14:13:15 +02:00
__fish_print_hostnames.fish Don't use getent to list hosts if its not supported (#3259) 2016-07-23 13:24:12 +02:00
__fish_print_interfaces.fish Replace tr invocations 2016-02-03 23:47:46 +01:00
__fish_print_lpr_options.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_lpr_printers.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_lsblk_columns.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_make_targets.fish Rename sgrep to __fish_sgrep 2015-09-09 20:55:04 +02:00
__fish_print_modules.fish Merge pull request #3123 from moverest/completion 2016-06-20 18:05:01 -07:00
__fish_print_mounted.fish Port linux __fish_print_mounted to string 2015-12-17 12:14:03 +01:00
__fish_print_packages.fish __fish_print_packages: use libzypp builtin cache for zypper 2016-03-30 15:03:51 +02:00
__fish_print_pacman_repos.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_print_service_names.fish Improve __fish_print_service_names 2016-02-07 14:53:12 +01:00
__fish_print_svn_rev.fish Add __fish_svn_prompt function 2015-12-10 18:17:40 +01:00
__fish_print_users.fish Stringify many completions and functions, with --invert stringification. 2016-04-08 10:49:29 +08:00
__fish_print_xdg_mimeapps.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_xdg_mimetypes.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_xrandr_modes.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_xrandr_outputs.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_print_xwindows.fish Squashed commit of the following: 2012-06-15 17:30:33 -07:00
__fish_prt_no_subcommand.fish
__fish_prt_packages.fish
__fish_prt_ports.fish
__fish_prt_use_package.fish remove trialing spaces #2 2010-09-18 10:18:26 +08:00
__fish_prt_use_port.fish
__fish_pwd.fish Mac OS X doesn't support uname -o. Use uname instead. 2013-08-16 20:48:44 +02:00
__fish_seen_subcommand_from.fish
__fish_sgrep.fish Add __fish_sgrep 2015-09-09 21:52:18 +02:00
__fish_svn_prompt.fish Add __fish_svn_prompt function 2015-12-10 18:17:40 +01:00
__fish_systemctl_automounts.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_devices.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_mounts.fish systemctl completions: Support user-mode 2015-03-06 23:05:24 -08:00
__fish_systemctl_scopes.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_service_paths.fish systemctl completions: Only list matching units on enable/disable 2015-03-06 23:05:24 -08:00
__fish_systemctl_services.fish systemctl completions: Show instanced services 2015-09-17 18:16:56 +02:00
__fish_systemctl_slices.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_snapshots.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_sockets.fish systemctl completions: Only list matching units on enable/disable 2015-03-06 23:05:24 -08:00
__fish_systemctl_swaps.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_targets.fish systemctl completions: Add more unit types and commands 2015-03-06 23:05:24 -08:00
__fish_systemctl_timers.fish systemctl completions: Only list matching units on enable/disable 2015-03-06 23:05:24 -08:00
__fish_systemd_machine_images.fish Add completions for systemd's machinectl 2015-07-02 14:36:48 +08:00
__fish_systemd_machines.fish machinectl: Add "shell" subcommand 2015-09-28 16:22:29 +02:00
__fish_test_arg.fish
__fish_toggle_comment_commandline.fish add way to comment/uncomment a command 2016-04-28 14:58:15 +08:00
__fish_urlencode.fish echo the no-string errors to stderr and return 1. 2016-06-26 16:25:41 -07:00
__fish_use_subcommand.fish
__fish_vcs_prompt.fish Add __fish_vcs_prompt helper function 2015-12-16 19:05:28 +01:00
__terlar_git_prompt.fish Vcs prompt: Break if vcs isn't installed 2015-09-06 14:58:09 +02:00
_.fish Make gettext function use echo instead of printf to save a fork 2012-04-25 13:37:41 -07:00
abbr.fish Simplify some code in abbr 2016-05-23 19:59:02 +02:00
alias.fish Fix aliases with whitespace 2015-09-23 13:28:32 +02:00
cd.fish add function --shadow-builtin flag 2016-05-14 20:38:32 -07:00
contains_seq.fish Replace uses of expr with math/string 2016-02-03 23:23:59 +01:00
delete-or-exit.fish Made C-d delete characters in multiple lines. 2012-06-07 21:18:02 +05:30
dirh.fish number dirh output to make prevd/nextd easier 2016-04-16 18:40:16 -07:00
dirs.fish Improve dirs output and add -c option 2015-07-12 12:20:44 -07:00
down-or-search.fish Replace tr invocations 2016-02-03 23:47:46 +01:00
eval.fish Clean up recent fix for #1892 2015-01-17 15:36:30 -08:00
export.fish Use string split in export.fish 2016-02-10 20:33:43 +01:00
fish_clipboard_copy.fish Add clipboard helper functions and bind them 2016-05-25 16:10:16 +02:00
fish_clipboard_paste.fish clipboard_paste: Fix lines starting with "-" 2016-07-03 12:29:58 +02:00
fish_config.fish Fix fish_config in .app 2016-07-01 04:43:57 -07:00
fish_default_key_bindings.fish Bind clipboard-copy to \cx, restore yank binding 2016-06-21 16:19:40 +02:00
fish_fallback_prompt.fish Revert "prompts: more concise way of getting the hostname." 2015-10-16 07:01:12 +08:00
fish_indent.fish string escape some eval calls 2016-07-01 00:08:46 -07:00
fish_mode_prompt.fish Remove $__fish_vi_mode 2016-06-06 22:21:52 +08:00
fish_prompt.fish Revert "prompts: more concise way of getting the hostname." 2015-10-16 07:01:12 +08:00
fish_update_completions.fish string escape some eval calls 2016-07-01 00:08:46 -07:00
fish_vi_cursor.fish Style fixes for fish_vi_cursor 2016-05-30 16:40:49 +02:00
fish_vi_key_bindings.fish clarify fish_vi_mode deprecation warning 2016-04-29 15:52:10 -07:00
fish_vi_mode.fish clarify fish_vi_mode deprecation warning 2016-04-29 15:52:10 -07:00
funced.fish Funced: Make removal safer, take two 2016-05-28 12:34:04 +02:00
funcsave.fish Fix funcsave to not delete the function it just created 2015-04-06 22:40:13 -07:00
grep.fish Try to just see if grep is happy with --color=auto, or not, as the --help exit status varies in BSD vs. GNU. 2016-02-20 21:11:40 +01:00
help.fish Fix user browser for help in Cygwin 2016-02-12 23:53:17 +01:00
history.fish correct handling of history args 2016-07-20 21:18:48 -07:00
hostname.fish Mac OS X doesn't support uname -o. Use uname instead. 2013-08-16 20:48:44 +02:00
isatty.fish isatty: use command test instead of redirections 2015-02-01 18:18:34 +08:00
la.fish
ll.fish Making spacing of .fish files uniform. 2015-08-08 11:22:44 -07:00
ls.fish ls: find and use various dircolors initialisation files, if they exist 2014-10-17 10:23:05 +08:00
man.fish functions/man.fish: add fish into MANPATH even if it is already set 2015-10-09 21:01:59 +08:00
math.fish add floating point output to math command 2016-05-03 19:29:04 -07:00
N_.fish
nextd-or-forward-word.fish {prev,next}d-or-*-word: Fix for multiple lines 2015-08-26 21:30:04 +02:00
nextd.fish Make dirh, nextd, prevd work on OS X 2012-05-04 18:53:38 -07:00
open.fish Making spacing of .fish files uniform. 2015-08-08 11:22:44 -07:00
popd.fish Completions (mostly): s/.../…/g 2016-07-09 10:57:59 -07:00
prevd-or-backward-word.fish {prev,next}d-or-*-word: Fix for multiple lines 2015-08-26 21:30:04 +02:00
prevd.fish Make dirh, nextd, prevd work on OS X 2012-05-04 18:53:38 -07:00
prompt_pwd.fish Use fish -c string ... as the string fallback. 2016-07-01 00:00:53 -07:00
psub.fish psub: add -s, --suffix 2015-11-14 13:15:30 +01:00
pushd.fish Making spacing of .fish files uniform. 2015-08-08 11:22:44 -07:00
realpath.fish provide a realpath implementation 2016-04-29 21:30:26 -07:00
seq.fish Remove circular dependency in fallback seq 2015-11-27 19:34:27 +01:00
setenv.fish
string.fish string.fish: use if/else. Reindent. 2016-07-02 11:40:22 -07:00
suspend.fish Rename things to avoid conflicts in headers 2016-07-01 03:57:16 -07:00
trap.fish Stringify trap 2016-02-03 23:23:04 +01:00
type.fish fish_indent type -a's function output and colorize 2016-07-01 06:45:03 -07:00
umask.fish Rename sgrep to __fish_sgrep 2015-09-09 20:55:04 +02:00
up-or-search.fish Further work on keyboard navigating the completion list 2014-01-18 12:42:53 -08:00
vared.fish Making spacing of .fish files uniform. 2015-08-08 11:22:44 -07:00