summaryrefslogtreecommitdiff
path: root/shell/key-bindings.fish
diff options
context:
space:
mode:
authorbitraid <bitraid@protonmail.ch>2025-02-08 15:18:05 +0200
committerGitHub <noreply@github.com>2025-02-08 22:18:05 +0900
commit06c6615507539e3227005844363cb1da39aeb18b (patch)
treecb9b1857a32f038f265eff770b77fa7899f16f5c /shell/key-bindings.fish
parent818d0be436a9a580561f793424b7780c3584c59c (diff)
downloadfzf-06c6615507539e3227005844363cb1da39aeb18b.tar.gz
[fish] Fix for directories with special characters (#4230)
Using CTRL-T or ALT-C when the current command line token contained a directory with special characters, the script would fail to detect it. For exampe, an existing directory named `it\'s\ a\ test`, instead of using it as walker-root, it would use it as the query.
Diffstat (limited to 'shell/key-bindings.fish')
-rw-r--r--shell/key-bindings.fish14
1 files changed, 8 insertions, 6 deletions
diff --git a/shell/key-bindings.fish b/shell/key-bindings.fish
index c66a2aa2..9d173d48 100644
--- a/shell/key-bindings.fish
+++ b/shell/key-bindings.fish
@@ -171,18 +171,20 @@ function fzf_key_bindings
# if $dir is "." but commandline is not a relative path, this means no file path found
set fzf_query $commandline
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
- set fzf_query (string replace -r -- "^$dir/?" '' $commandline)
+ set fzf_query (string replace -r -- "^$re_dir/?" '' $commandline)
end
end
- echo (string escape -- $dir)
- echo (string escape -- $fzf_query)
- echo $prefix
+ echo -- $dir
+ string escape -- $fzf_query
+ echo -- $prefix
end
function __fzf_get_dir -d 'Find the longest existing filepath from input string'
- set dir $argv
+ set dir (string unescape -n -- $argv)
# Strip trailing slash, unless $dir is root dir (/)
set dir (string replace -r -- '(?<!^)/$' '' $dir)
@@ -194,7 +196,7 @@ function fzf_key_bindings
set dir (dirname -- "$dir")
end
- echo $dir
+ string escape -n -- $dir
end
end