mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-25 12:23:09 +00:00
Migrate abbrs from =-separated to space-separated
We silently upgrade existing abbreviations and change the separator when saving. This does not yet warn when the user is using the old syntax. Resolves #2051
This commit is contained in:
parent
fbd53f2da1
commit
0e8a8a7c80
3 changed files with 23 additions and 15 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
\subsection abbr-synopsis Synopsis
|
||||
\fish{synopsis}
|
||||
abbr -a word="phrase"
|
||||
abbr -a word phrase...
|
||||
abbr -s
|
||||
abbr -l
|
||||
abbr -e word
|
||||
|
@ -26,6 +26,8 @@ The following parameters are available:
|
|||
|
||||
- `-e WORD` or `--erase WORD` Erase the abbreviation WORD.
|
||||
|
||||
Note: fish version 2.1 supported `-a WORD=PHRASE`. This syntax is now deprecated but will still be converted.
|
||||
|
||||
\subsection abbr-example Examples
|
||||
|
||||
\fish
|
||||
|
|
|
@ -165,3 +165,14 @@ for file in $configdir/fish/conf.d/* $__fish_sysconfdir/conf.d/* $__fish_datadir
|
|||
# This allows one to use e.g. symlinks to /dev/null to "mask" something (like in systemd)
|
||||
[ -f $file -a -r $file ]; and source $file
|
||||
end
|
||||
|
||||
# Upgrade pre-existing abbreviations from the old "key=value" to the new "key value" syntax
|
||||
# This needs to be in share/config.fish because __fish_config_interactive is called after sourcing config.fish, which might contain abbr calls
|
||||
if not set -q __fish_init_2_3_0
|
||||
set -l fab
|
||||
for abb in $fish_user_abbreviations
|
||||
set fab $fab (string replace -r '^([^ =]+)=(.*)$' '$1 $2' -- $abb)
|
||||
end
|
||||
set fish_user_abbreviations $fab
|
||||
set -U __fish_init_2_3_0
|
||||
end
|
||||
|
|
|
@ -72,8 +72,12 @@ function abbr --description "Manage abbreviations"
|
|||
|
||||
switch $mode
|
||||
case 'add'
|
||||
# Convert from old "key=value" to new "key value" syntax
|
||||
if string match -qr '^[^ ]+=' -- $mode_arg
|
||||
set mode_arg (string replace "=" " " -- $mode_arg)
|
||||
end
|
||||
|
||||
# Bail out early if the exact abbr is already in
|
||||
# This depends on the separator staying the same, but that's the common case (config.fish)
|
||||
contains -- $mode_arg $fish_user_abbreviations; and return 0
|
||||
set -l key
|
||||
set -l value
|
||||
|
@ -141,12 +145,8 @@ function __fish_abbr_get_by_key
|
|||
# Going through all entries is still quicker than calling `seq`
|
||||
set -l keys
|
||||
for kv in $fish_user_abbreviations
|
||||
if string match -qr '^[^ ]+=' -- $kv
|
||||
# No need for bounds-checking because we already matched before
|
||||
set keys $keys (string split "=" -m 1 -- $kv)[1]
|
||||
else if string match -qr '^[^ ]+ .*' -- $kv
|
||||
set keys $keys (string split " " -m 1 -- $kv)[1]
|
||||
end
|
||||
# If this does not match, we have screwed up before and the error should be reported
|
||||
set keys $keys (string split " " -m 1 -- $kv)[1]
|
||||
end
|
||||
if set -l idx (contains -i -- $argv[1] $keys)
|
||||
echo $idx
|
||||
|
@ -156,11 +156,6 @@ function __fish_abbr_get_by_key
|
|||
end
|
||||
|
||||
function __fish_abbr_split -a input
|
||||
if string match -qr '^[^ ]+=' -- $input
|
||||
string split "=" -m 1 -- $input
|
||||
else if string match -qr '^[^ ]+ .*' -- $input
|
||||
string split " " -m 1 -- $input
|
||||
else
|
||||
echo $input
|
||||
end
|
||||
# Because we always save space-separated, we can be certain that this will match
|
||||
string split " " -m 1 -- $input
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue