mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-03 21:52:00 -07:00
[fish] Unescape query from commandline (#4236)
More natural processing of the query taken from command line, by unquoting/unescaping the token. Unescaped open quotes are removed. Because of how `string unescape` works, if both single and double quotes are present, with the outer quotes open, only the outer quotes are removed. Examples: `'foo bar'`, `"foo bar"`, `foo\ bar` becomes `foo bar` `"foobar`, `'foobar`, `foo"bar`, `foo'bar` becomes `foobar` `'"foo"'`, `'"foo"` becomes `"foo"` `"'foo'"`, `"'foo'` becomes `'foo'` `"'foo` becomes `'foo` `'"foo` becomes `"foo`
This commit is contained in:
@@ -154,8 +154,8 @@ function fzf_key_bindings
|
|||||||
# eval is used to do shell expansion on paths
|
# eval is used to do shell expansion on paths
|
||||||
eval set commandline $commandline
|
eval set commandline $commandline
|
||||||
|
|
||||||
# Combine multiple consecutive slashes into one
|
# Combine multiple consecutive slashes into one, and unescape.
|
||||||
set commandline (string replace -r -a -- '/+' '/' $commandline)
|
set commandline (string replace -r -a -- '/+' '/' $commandline | string unescape -n)
|
||||||
|
|
||||||
if test -z "$commandline"
|
if test -z "$commandline"
|
||||||
# Default to current directory with no --query
|
# Default to current directory with no --query
|
||||||
@@ -171,10 +171,8 @@ function fzf_key_bindings
|
|||||||
# if $dir is "." but commandline is not a relative path, this means no file path found
|
# if $dir is "." but commandline is not a relative path, this means no file path found
|
||||||
set fzf_query $commandline
|
set fzf_query $commandline
|
||||||
else
|
else
|
||||||
# Special characters must be double escaped.
|
|
||||||
set -l re_dir (string escape -n -- $dir)
|
|
||||||
# Also remove trailing slash after dir, to "split" input properly
|
# Also remove trailing slash after dir, to "split" input properly
|
||||||
set fzf_query (string replace -r -- "^$re_dir/?" '' $commandline)
|
set fzf_query (string replace -r -- "^$dir/?" '' $commandline)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -184,7 +182,7 @@ function fzf_key_bindings
|
|||||||
end
|
end
|
||||||
|
|
||||||
function __fzf_get_dir -d 'Find the longest existing filepath from input string'
|
function __fzf_get_dir -d 'Find the longest existing filepath from input string'
|
||||||
set dir (string unescape -n -- $argv)
|
set dir $argv
|
||||||
|
|
||||||
# Strip trailing slash, unless $dir is root dir (/)
|
# Strip trailing slash, unless $dir is root dir (/)
|
||||||
set dir (string replace -r -- '(?<!^)/$' '' $dir)
|
set dir (string replace -r -- '(?<!^)/$' '' $dir)
|
||||||
|
Reference in New Issue
Block a user