From 06c6615507539e3227005844363cb1da39aeb18b Mon Sep 17 00:00:00 2001 From: bitraid Date: Sat, 8 Feb 2025 15:18:05 +0200 Subject: [PATCH] [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. --- shell/key-bindings.fish | 14 ++++++++------ 1 file 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 -- '(?