From c44dea2beb75d26cac87c754778d1b36379fd177 Mon Sep 17 00:00:00 2001 From: druckdev <63563978+druckdev@users.noreply.github.com> Date: Tue, 14 Jul 2020 14:28:50 +0200 Subject: [PATCH] Add support for directories with spaces Add support for directories with spaces when launching the scratchpad-terminal. NOTE: The exact same command but with 6 backlashes instead of 8 seems to work just fine. That makes no sense in my head. Either I'm missing something or there is a bug in the escaping of backslashes in i3. --- .config/i3/config | 8 +++++--- .config/i3/scratchpad-terminal.sh | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.config/i3/config b/.config/i3/config index 76fe49b..e6f9d5a 100644 --- a/.config/i3/config +++ b/.config/i3/config @@ -217,10 +217,12 @@ for_window [class="st-256color" title="^scratchpad-terminal$"] \ resize set 1600 900, \ border none, \ move position center -# hide scratchpad-terminal again when restarting i3 +# Hide scratchpad-terminal again when restarting i3 exec_always i3-msg '[class="St" title="^scratchpad-terminal$"] scratchpad show' -# show scratchpad-terminal or create one if none exists -bindsym $mod+comma exec ~/.config/i3/scratchpad-terminal.sh -s -c st-256color -n scratchpad-terminal -e 'st -d "$(xcwd)"' +# Show scratchpad-terminal or create one if none exists +# Pass current working directory of the focused window but escape spaces. +# Layers of escaping: i3, sh, sed +bindsym $mod+comma exec /bin/sh -c '~/.config/i3/scratchpad-terminal.sh -s -c st-256color -n scratchpad-terminal -e -- st -d $(xcwd | sed "s/ /\\\\\\\\ /g")' # hide scratchpad-terminal indepedent of where the focus sits bindsym $mod+Shift+comma exec ~/.config/i3/scratchpad-terminal.sh -h -c st-256color -n scratchpad-terminal diff --git a/.config/i3/scratchpad-terminal.sh b/.config/i3/scratchpad-terminal.sh index 04245a2..20e076d 100755 --- a/.config/i3/scratchpad-terminal.sh +++ b/.config/i3/scratchpad-terminal.sh @@ -12,7 +12,11 @@ while getopts "c:e:hn:s" FLAGS; do *) exit 1;; esac done -shift $(($OPTIND - 1 )) +shift $(($OPTIND - 1)) + +if [ "$COMMAND" = "--" ]; then + COMMAND="$@" +fi [ -n "$W_CLASS" ] || return 1 [ -n "$W_NAME" ] || return 1