From 355cb88e382dba3b1f4c1e730e09c343dd752616 Mon Sep 17 00:00:00 2001 From: David Adam Date: Tue, 11 Dec 2018 22:04:20 +0800 Subject: [PATCH 1/5] Bump version for 3.0b1 --- CHANGELOG.md | 2 +- osx/Info.plist | 2 +- osx/config.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9f56ce28..5deaf80e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# fish 3.0b1 +# fish 3.0b1 (released December 11, 2018) fish 3 is a major release, which introduces some breaking changes alongside improved functionality. Although most existing scripts will continue to work, they should be reviewed against the list below. diff --git a/osx/Info.plist b/osx/Info.plist index fae00c0da..ada78049b 100644 --- a/osx/Info.plist +++ b/osx/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.500 + 2.7.900 CFBundleVersion 0.1 LSApplicationCategoryType diff --git a/osx/config.h b/osx/config.h index cfe081b1b..d9f913647 100644 --- a/osx/config.h +++ b/osx/config.h @@ -206,7 +206,7 @@ #define PACKAGE_NAME "fish" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "fish 2.7.1-git" +#define PACKAGE_STRING "fish 3.0b1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "fish" @@ -215,7 +215,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.7.1-git" +#define PACKAGE_VERSION "3.0b1" /* The size of `wchar_t', as computed by sizeof. */ #define SIZEOF_WCHAR_T 4 From ffab420e4318c65387a72a8572f2e40e301d0028 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Wed, 12 Dec 2018 15:12:12 +0100 Subject: [PATCH 2/5] Add fallback wcstod_l for musl Just sets locale to "C" (because that's the only one we need), does wcstod and resets the locale. No idea why uselocale(loc) failed for me, but it did. Fixes #5407. --- cmake/ConfigureChecks.cmake | 1 + configure.ac | 1 + src/fallback.cpp | 15 +++++++++++++++ src/fallback.h | 4 ++++ 4 files changed, 21 insertions(+) diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake index 052a39172..1444361e9 100644 --- a/cmake/ConfigureChecks.cmake +++ b/cmake/ConfigureChecks.cmake @@ -72,6 +72,7 @@ CHECK_CXX_SYMBOL_EXISTS(wcsdup wchar.h HAVE_WCSDUP) CHECK_CXX_SYMBOL_EXISTS(wcslcpy wchar.h HAVE_WCSLCPY) CHECK_CXX_SYMBOL_EXISTS(wcsncasecmp wchar.h HAVE_WCSNCASECMP) CHECK_CXX_SYMBOL_EXISTS(wcsndup wchar.h HAVE_WCSNDUP) +CHECK_CXX_SYMBOL_EXISTS(wcstod_l wchar.h HAVE_WCSTOD_L) CHECK_CXX_SYMBOL_EXISTS(_sys_errs stdlib.h HAVE__SYS__ERRS) diff --git a/configure.ac b/configure.ac index ebaceb1de..7070799ff 100644 --- a/configure.ac +++ b/configure.ac @@ -316,6 +316,7 @@ AC_STRUCT_DIRENT_D_TYPE # AC_CHECK_FUNCS( wcsndup ) +AC_CHECK_FUNCS( wcstod_l ) AC_CHECK_FUNCS( futimes ) AC_CHECK_FUNCS( wcslcpy lrand48_r killpg ) AC_CHECK_FUNCS( backtrace_symbols getifaddrs ) diff --git a/src/fallback.cpp b/src/fallback.cpp index 42a9d62d2..d7e4e508e 100644 --- a/src/fallback.cpp +++ b/src/fallback.cpp @@ -388,3 +388,18 @@ int flock(int fd, int op) { } #endif // HAVE_FLOCK + +#ifndef HAVE_WCSTOD_L +// musl doesn't feature wcstod_l, +// so we just wrap wcstod. +double wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc) { + char *saved_locale = strdup(setlocale(LC_NUMERIC, NULL)); + // Yes, this is hardcoded to use the "C" locale. + // That's the only thing we need, and uselocale(loc) broke in my testing. + setlocale(LC_NUMERIC, "C"); + double ret = wcstod(enptr, endptr); + setlocale(LC_NUMERIC, saved_locale); + free(saved_locale); + return ret; +} +#endif // defined(wcstod_l) diff --git a/src/fallback.h b/src/fallback.h index 44ddee398..b0680de05 100644 --- a/src/fallback.h +++ b/src/fallback.h @@ -198,3 +198,7 @@ int flock(int fd, int op); #endif #endif + +#ifndef wcstod_l +double wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc); +#endif From 79d53a32dca454c3e6559b6330d95c6ad8010997 Mon Sep 17 00:00:00 2001 From: David Adam Date: Wed, 12 Dec 2018 17:47:17 +0800 Subject: [PATCH 3/5] history: drop use of fish_indent Largely reverts 007d794b6e47ff2c368932abd4ccef769ece13de. fish_indent is extremely resource-intensive on large inputs and can crash; it also does not handle invalid characters gracefully. Work on #5402. --- share/functions/history.fish | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/share/functions/history.fish b/share/functions/history.fish index b41e1f73a..26ab6b0f9 100644 --- a/share/functions/history.fish +++ b/share/functions/history.fish @@ -32,7 +32,6 @@ function history --description "display or manipulate interactive command histor set -l hist_cmd set -l show_time - set -l skip_indent set -l max_count set -q _flag_max set max_count -n$_flag_max @@ -41,10 +40,6 @@ function history --description "display or manipulate interactive command histor and set -l _flag_show_time $_flag_with_time if set -q _flag_show_time[1] set show_time --show-time=$_flag_show_time - # `history -t` by default shows timestamps on seperate lines beginning with # characters. - # When colorized the timetamps would highlighted as comments by fish_indent. With a custom - # format there is no guarantee fish_indent can do anything useful. - set skip_indent true else if set -q _flag_show_time set show_time --show-time end @@ -93,18 +88,15 @@ function history --description "display or manipulate interactive command histor and set pager $PAGER # If the user hasn't preconfigured less with the $LESS environment variable, - # we do so to prevent the stripping of control characters (for color) and have - # it behave like cat if output fits on one screen. Prevent the screen from clearing - # on quit, so there is something to see if it exits. - # These are the same three options `git` sets through $LESS before starting the pager. + # we do so to have it behave like cat if output fits on one screen. Prevent the + # screen from clearing on quit, so there is something to see if it exits. + # These are two of the options `git` sets through $LESS before starting the pager. not set -qx LESS - and set -x LESS --RAW-CONTROL-CHARS --quit-if-one-screen --no-init + and set -x LESS --quit-if-one-screen --no-init not set -qx LV # ask the pager lv not to strip colors and set -x LV -c - set -q skip_indent[1] # --show-time=FORMAT set, arbitrary output may not be valid fish script - and builtin history search $search_mode $show_time $max_count $_flag_case_sensitive $_flag_reverse $_flag_null -- $argv | $pager - or builtin history search $search_mode $show_time $max_count $_flag_case_sensitive $_flag_reverse $_flag_null -- $argv | fish_indent --ansi | $pager + builtin history search $search_mode $show_time $max_count $_flag_case_sensitive $_flag_reverse $_flag_null -- $argv | $pager else builtin history search $search_mode $show_time $max_count $_flag_case_sensitive $_flag_reverse $_flag_null -- $argv end From 99ba07354a8650ecd4e1aaa7a486b614406cc958 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Thu, 13 Dec 2018 17:33:48 +0100 Subject: [PATCH 4/5] fish_vi_key_bindings: Remove weird argv handling Instead of maybe adding "-s" and "-M" if "-s" hasn't already been given, just add "-s" to _every_ bind invocation, and "-M" to those who need it. Fixes #5028. --- share/functions/fish_vi_key_bindings.fish | 313 +++++++++++----------- 1 file changed, 154 insertions(+), 159 deletions(-) diff --git a/share/functions/fish_vi_key_bindings.fish b/share/functions/fish_vi_key_bindings.fish index 2c83e7195..44b05913b 100644 --- a/share/functions/fish_vi_key_bindings.fish +++ b/share/functions/fish_vi_key_bindings.fish @@ -17,11 +17,6 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish' bind --erase --all --preset # clear earlier bindings, if any end - # Silence warnings about unavailable keys. See #4431, 4188 - if not contains -- -s $argv - set argv "-s" "-M" $argv - end - # Allow just calling this function to correctly set the bindings. # Because it's a rather discoverable name, users will execute it # and without this would then have subtly broken bindings. @@ -61,217 +56,217 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish' __fish_shared_key_bindings -M $mode end - bind --preset $argv insert \r execute - bind --preset $argv insert \n execute + bind -s --preset -M insert \r execute + bind -s --preset -M insert \n execute - bind --preset $argv insert "" self-insert + bind -s --preset -M insert "" self-insert # Add way to kill current command line while in insert mode. - bind --preset $argv insert \cc __fish_cancel_commandline + bind -s --preset -M insert \cc __fish_cancel_commandline # Add a way to switch from insert to normal (command) mode. # Note if we are paging, we want to stay in insert mode # See #2871 - bind --preset $argv insert \e "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char force-repaint; end" + bind -s --preset -M insert \e "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char force-repaint; end" # Default (command) mode - bind --preset :q exit - bind --preset -m insert \cc __fish_cancel_commandline - bind --preset $argv default h backward-char - bind --preset $argv default l forward-char - bind --preset -m insert \n execute - bind --preset -m insert \r execute - bind --preset -m insert i force-repaint - bind --preset -m insert I beginning-of-line force-repaint - bind --preset -m insert a forward-char force-repaint - bind --preset -m insert A end-of-line force-repaint - bind --preset -m visual v begin-selection force-repaint + bind -s --preset :q exit + bind -s --preset -m insert \cc __fish_cancel_commandline + bind -s --preset -M default h backward-char + bind -s --preset -M default l forward-char + bind -s --preset -m insert \n execute + bind -s --preset -m insert \r execute + bind -s --preset -m insert i force-repaint + bind -s --preset -m insert I beginning-of-line force-repaint + bind -s --preset -m insert a forward-char force-repaint + bind -s --preset -m insert A end-of-line force-repaint + bind -s --preset -m visual v begin-selection force-repaint - #bind --preset -m insert o "commandline -a \n" down-line force-repaint - #bind --preset -m insert O beginning-of-line "commandline -i \n" up-line force-repaint # doesn't work + #bind -s --preset -m insert o "commandline -a \n" down-line force-repaint + #bind -s --preset -m insert O beginning-of-line "commandline -i \n" up-line force-repaint # doesn't work - bind --preset gg beginning-of-buffer - bind --preset G end-of-buffer + bind -s --preset gg beginning-of-buffer + bind -s --preset G end-of-buffer for key in $eol_keys - bind --preset $key end-of-line + bind -s --preset $key end-of-line end for key in $bol_keys - bind --preset $key beginning-of-line + bind -s --preset $key beginning-of-line end - bind --preset u history-search-backward - bind --preset \cr history-search-forward + bind -s --preset u history-search-backward + bind -s --preset \cr history-search-forward - bind --preset [ history-token-search-backward - bind --preset ] history-token-search-forward + bind -s --preset [ history-token-search-backward + bind -s --preset ] history-token-search-forward - bind --preset k up-or-search - bind --preset j down-or-search - bind --preset b backward-word - bind --preset B backward-bigword - bind --preset ge backward-word - bind --preset gE backward-bigword - bind --preset w forward-word forward-char - bind --preset W forward-bigword forward-char - bind --preset e forward-char forward-word backward-char - bind --preset E forward-bigword backward-char + bind -s --preset k up-or-search + bind -s --preset j down-or-search + bind -s --preset b backward-word + bind -s --preset B backward-bigword + bind -s --preset ge backward-word + bind -s --preset gE backward-bigword + bind -s --preset w forward-word forward-char + bind -s --preset W forward-bigword forward-char + bind -s --preset e forward-char forward-word backward-char + bind -s --preset E forward-bigword backward-char # OS X SnowLeopard doesn't have these keys. Don't show an annoying error message. # Vi/Vim doesn't support these keys in insert mode but that seems silly so we do so anyway. - bind --preset $argv insert -k home beginning-of-line 2>/dev/null - bind --preset $argv default -k home beginning-of-line 2>/dev/null - bind --preset $argv insert -k end end-of-line 2>/dev/null - bind --preset $argv default -k end end-of-line 2>/dev/null + bind -s --preset -M insert -k home beginning-of-line 2>/dev/null + bind -s --preset -M default -k home beginning-of-line 2>/dev/null + bind -s --preset -M insert -k end end-of-line 2>/dev/null + bind -s --preset -M default -k end end-of-line 2>/dev/null # Vi moves the cursor back if, after deleting, it is at EOL. # To emulate that, move forward, then backward, which will be a NOP # if there is something to move forward to. - bind --preset $argv default x delete-char forward-char backward-char - bind --preset $argv default X backward-delete-char - bind --preset $argv insert -k dc delete-char forward-char backward-char - bind --preset $argv default -k dc delete-char forward-char backward-char + bind -s --preset -M default x delete-char forward-char backward-char + bind -s --preset -M default X backward-delete-char + bind -s --preset -M insert -k dc delete-char forward-char backward-char + bind -s --preset -M default -k dc delete-char forward-char backward-char # Backspace deletes a char in insert mode, but not in normal/default mode. - bind --preset $argv insert -k backspace backward-delete-char - bind --preset $argv default -k backspace backward-char - bind --preset $argv insert \ch backward-delete-char - bind --preset $argv default \ch backward-char - bind --preset $argv insert \x7f backward-delete-char - bind --preset $argv default \x7f backward-char - bind --preset $argv insert \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete - bind --preset $argv default \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete + bind -s --preset -M insert -k backspace backward-delete-char + bind -s --preset -M default -k backspace backward-char + bind -s --preset -M insert \ch backward-delete-char + bind -s --preset -M default \ch backward-char + bind -s --preset -M insert \x7f backward-delete-char + bind -s --preset -M default \x7f backward-char + bind -s --preset -M insert \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete + bind -s --preset -M default \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-ctrl-delete - bind --preset dd kill-whole-line - bind --preset D kill-line - bind --preset d\$ kill-line - bind --preset d\^ backward-kill-line - bind --preset dw kill-word - bind --preset dW kill-bigword - bind --preset diw forward-char forward-char backward-word kill-word - bind --preset diW forward-char forward-char backward-bigword kill-bigword - bind --preset daw forward-char forward-char backward-word kill-word - bind --preset daW forward-char forward-char backward-bigword kill-bigword - bind --preset de kill-word - bind --preset dE kill-bigword - bind --preset db backward-kill-word - bind --preset dB backward-kill-bigword - bind --preset dge backward-kill-word - bind --preset dgE backward-kill-bigword - bind --preset df begin-selection forward-jump kill-selection end-selection - bind --preset dt begin-selection forward-jump backward-char kill-selection end-selection - bind --preset dF begin-selection backward-jump kill-selection end-selection - bind --preset dT begin-selection backward-jump forward-char kill-selection end-selection + bind -s --preset dd kill-whole-line + bind -s --preset D kill-line + bind -s --preset d\$ kill-line + bind -s --preset d\^ backward-kill-line + bind -s --preset dw kill-word + bind -s --preset dW kill-bigword + bind -s --preset diw forward-char forward-char backward-word kill-word + bind -s --preset diW forward-char forward-char backward-bigword kill-bigword + bind -s --preset daw forward-char forward-char backward-word kill-word + bind -s --preset daW forward-char forward-char backward-bigword kill-bigword + bind -s --preset de kill-word + bind -s --preset dE kill-bigword + bind -s --preset db backward-kill-word + bind -s --preset dB backward-kill-bigword + bind -s --preset dge backward-kill-word + bind -s --preset dgE backward-kill-bigword + bind -s --preset df begin-selection forward-jump kill-selection end-selection + bind -s --preset dt begin-selection forward-jump backward-char kill-selection end-selection + bind -s --preset dF begin-selection backward-jump kill-selection end-selection + bind -s --preset dT begin-selection backward-jump forward-char kill-selection end-selection - bind --preset -m insert s delete-char force-repaint - bind --preset -m insert S kill-whole-line force-repaint - bind --preset -m insert cc kill-whole-line force-repaint - bind --preset -m insert C kill-line force-repaint - bind --preset -m insert c\$ kill-line force-repaint - bind --preset -m insert c\^ backward-kill-line force-repaint - bind --preset -m insert cw kill-word force-repaint - bind --preset -m insert cW kill-bigword force-repaint - bind --preset -m insert ciw forward-char forward-char backward-word kill-word force-repaint - bind --preset -m insert ciW forward-char forward-char backward-bigword kill-bigword force-repaint - bind --preset -m insert caw forward-char forward-char backward-word kill-word force-repaint - bind --preset -m insert caW forward-char forward-char backward-bigword kill-bigword force-repaint - bind --preset -m insert ce kill-word force-repaint - bind --preset -m insert cE kill-bigword force-repaint - bind --preset -m insert cb backward-kill-word force-repaint - bind --preset -m insert cB backward-kill-bigword force-repaint - bind --preset -m insert cge backward-kill-word force-repaint - bind --preset -m insert cgE backward-kill-bigword force-repaint + bind -s --preset -m insert s delete-char force-repaint + bind -s --preset -m insert S kill-whole-line force-repaint + bind -s --preset -m insert cc kill-whole-line force-repaint + bind -s --preset -m insert C kill-line force-repaint + bind -s --preset -m insert c\$ kill-line force-repaint + bind -s --preset -m insert c\^ backward-kill-line force-repaint + bind -s --preset -m insert cw kill-word force-repaint + bind -s --preset -m insert cW kill-bigword force-repaint + bind -s --preset -m insert ciw forward-char forward-char backward-word kill-word force-repaint + bind -s --preset -m insert ciW forward-char forward-char backward-bigword kill-bigword force-repaint + bind -s --preset -m insert caw forward-char forward-char backward-word kill-word force-repaint + bind -s --preset -m insert caW forward-char forward-char backward-bigword kill-bigword force-repaint + bind -s --preset -m insert ce kill-word force-repaint + bind -s --preset -m insert cE kill-bigword force-repaint + bind -s --preset -m insert cb backward-kill-word force-repaint + bind -s --preset -m insert cB backward-kill-bigword force-repaint + bind -s --preset -m insert cge backward-kill-word force-repaint + bind -s --preset -m insert cgE backward-kill-bigword force-repaint - bind --preset '~' capitalize-word - bind --preset gu downcase-word - bind --preset gU upcase-word + bind -s --preset '~' capitalize-word + bind -s --preset gu downcase-word + bind -s --preset gU upcase-word - bind --preset J end-of-line delete-char - bind --preset K 'man (commandline -t) 2>/dev/null; or echo -n \a' + bind -s --preset J end-of-line delete-char + bind -s --preset K 'man (commandline -t) 2>/dev/null; or echo -n \a' - bind --preset yy kill-whole-line yank - bind --preset Y kill-whole-line yank - bind --preset y\$ kill-line yank - bind --preset y\^ backward-kill-line yank - bind --preset yw kill-word yank - bind --preset yW kill-bigword yank - bind --preset yiw forward-char forward-char backward-word kill-word yank - bind --preset yiW forward-char forward-char backward-bigword kill-bigword yank - bind --preset yaw forward-char forward-char backward-word kill-word yank - bind --preset yaW forward-char forward-char backward-bigword kill-bigword yank - bind --preset ye kill-word yank - bind --preset yE kill-bigword yank - bind --preset yb backward-kill-word yank - bind --preset yB backward-kill-bigword yank - bind --preset yge backward-kill-word yank - bind --preset ygE backward-kill-bigword yank + bind -s --preset yy kill-whole-line yank + bind -s --preset Y kill-whole-line yank + bind -s --preset y\$ kill-line yank + bind -s --preset y\^ backward-kill-line yank + bind -s --preset yw kill-word yank + bind -s --preset yW kill-bigword yank + bind -s --preset yiw forward-char forward-char backward-word kill-word yank + bind -s --preset yiW forward-char forward-char backward-bigword kill-bigword yank + bind -s --preset yaw forward-char forward-char backward-word kill-word yank + bind -s --preset yaW forward-char forward-char backward-bigword kill-bigword yank + bind -s --preset ye kill-word yank + bind -s --preset yE kill-bigword yank + bind -s --preset yb backward-kill-word yank + bind -s --preset yB backward-kill-bigword yank + bind -s --preset yge backward-kill-word yank + bind -s --preset ygE backward-kill-bigword yank - bind --preset f forward-jump - bind --preset F backward-jump - bind --preset t forward-jump-till - bind --preset T backward-jump-till - bind --preset ';' repeat-jump - bind --preset , repeat-jump-reverse + bind -s --preset f forward-jump + bind -s --preset F backward-jump + bind -s --preset t forward-jump-till + bind -s --preset T backward-jump-till + bind -s --preset ';' repeat-jump + bind -s --preset , repeat-jump-reverse # in emacs yank means paste - bind --preset p yank - bind --preset P backward-char yank - bind --preset gp yank-pop + bind -s --preset p yank + bind -s --preset P backward-char yank + bind -s --preset gp yank-pop - bind --preset '"*p' "commandline -i ( xsel -p; echo )[1]" - bind --preset '"*P' backward-char "commandline -i ( xsel -p; echo )[1]" + bind -s --preset '"*p' "commandline -i ( xsel -p; echo )[1]" + bind -s --preset '"*P' backward-char "commandline -i ( xsel -p; echo )[1]" # # Lowercase r, enters replace_one mode # - bind --preset -m replace_one r force-repaint - bind --preset $argv replace_one -m default '' delete-char self-insert backward-char force-repaint - bind --preset $argv replace_one -m default \e cancel force-repaint + bind -s --preset -m replace_one r force-repaint + bind -s --preset -M replace_one -m default '' delete-char self-insert backward-char force-repaint + bind -s --preset -M replace_one -m default \e cancel force-repaint # # visual mode # - bind --preset $argv visual h backward-char - bind --preset $argv visual l forward-char + bind -s --preset -M visual h backward-char + bind -s --preset -M visual l forward-char - bind --preset $argv visual k up-line - bind --preset $argv visual j down-line + bind -s --preset -M visual k up-line + bind -s --preset -M visual j down-line - bind --preset $argv visual b backward-word - bind --preset $argv visual B backward-bigword - bind --preset $argv visual ge backward-word - bind --preset $argv visual gE backward-bigword - bind --preset $argv visual w forward-word - bind --preset $argv visual W forward-bigword - bind --preset $argv visual e forward-word - bind --preset $argv visual E forward-bigword - bind --preset $argv visual o swap-selection-start-stop force-repaint + bind -s --preset -M visual b backward-word + bind -s --preset -M visual B backward-bigword + bind -s --preset -M visual ge backward-word + bind -s --preset -M visual gE backward-bigword + bind -s --preset -M visual w forward-word + bind -s --preset -M visual W forward-bigword + bind -s --preset -M visual e forward-word + bind -s --preset -M visual E forward-bigword + bind -s --preset -M visual o swap-selection-start-stop force-repaint - bind --preset $argv visual f forward-jump - bind --preset $argv visual t forward-jump-till - bind --preset $argv visual F backward-jump - bind --preset $argv visual T backward-jump-till + bind -s --preset -M visual f forward-jump + bind -s --preset -M visual t forward-jump-till + bind -s --preset -M visual F backward-jump + bind -s --preset -M visual T backward-jump-till for key in $eol_keys - bind --preset $argv visual $key end-of-line + bind -s --preset -M visual $key end-of-line end for key in $bol_keys - bind --preset $argv visual $key beginning-of-line + bind -s --preset -M visual $key beginning-of-line end - bind --preset $argv visual -m insert c kill-selection end-selection force-repaint - bind --preset $argv visual -m default d kill-selection end-selection force-repaint - bind --preset $argv visual -m default x kill-selection end-selection force-repaint - bind --preset $argv visual -m default X kill-whole-line end-selection force-repaint - bind --preset $argv visual -m default y kill-selection yank end-selection force-repaint - bind --preset $argv visual -m default '"*y' "commandline -s | xsel -p; commandline -f end-selection force-repaint" + bind -s --preset -M visual -m insert c kill-selection end-selection force-repaint + bind -s --preset -M visual -m default d kill-selection end-selection force-repaint + bind -s --preset -M visual -m default x kill-selection end-selection force-repaint + bind -s --preset -M visual -m default X kill-whole-line end-selection force-repaint + bind -s --preset -M visual -m default y kill-selection yank end-selection force-repaint + bind -s --preset -M visual -m default '"*y' "commandline -s | xsel -p; commandline -f end-selection force-repaint" - bind --preset $argv visual -m default \cc end-selection force-repaint - bind --preset $argv visual -m default \e end-selection force-repaint + bind -s --preset -M visual -m default \cc end-selection force-repaint + bind -s --preset -M visual -m default \e end-selection force-repaint # Make it easy to turn an unexecuted command into a comment in the shell history. Also, remove # the commenting chars so the command can be further edited then executed. - bind --preset $argv default \# __fish_toggle_comment_commandline - bind --preset $argv visual \# __fish_toggle_comment_commandline + bind -s --preset -M default \# __fish_toggle_comment_commandline + bind -s --preset -M visual \# __fish_toggle_comment_commandline # Set the cursor shape # After executing once, this will have defined functions listening for the variable. From 081e14fd213b99f0a28c71e801bf5f60a843be75 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Thu, 13 Dec 2018 22:49:12 +0100 Subject: [PATCH 5/5] completions/git: Allow aliases with whitespace in the command Fixes #5412. --- share/completions/git.fish | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/completions/git.fish b/share/completions/git.fish index 60822fe49..ca8f24f75 100644 --- a/share/completions/git.fish +++ b/share/completions/git.fish @@ -445,7 +445,7 @@ end # So instead, we store the aliases in global variables, named after the alias, containing the command. # This is because alias:command is an n:1 mapping (an alias can only have one corresponding command, # but a command can be aliased multiple times) -git config -z --get-regexp 'alias\..*' | while read -lz alias command _ +git config -z --get-regexp 'alias\..*' | while read -lz alias command # Git aliases can contain chars that variable names can't - escape them. set alias (string replace 'alias.' '' -- $alias | string escape --style=var) set -g __fish_git_alias_$alias $command