Hi All,

I do some probably "unusual" things with fish shell scripts, some of
these have broken in fish 3.0, i'm going to start by describing the
problem because i'm interested in any solution even if its significantly
different to what I was doing before.

For my prompt / greeting etc I prefer to use terminal escape sequences
rather then fish's set_color methods, this is because it properly
follows changes to my terminals palette which I do regularly depending
on which machine the terminal session is in. To make this process more
sane I store each escape sequence in an environment variable, and to
make that less painful each environment variable is loaded from a file,
some sample lines are below but you can see the full file here
https://github.com/simotek/tackle/blob/simotek-theme/themes/simotek/simotek_theme_colors.en
(note I also load a bunch of other env vars from other files)

smtk_clr_black=\e[0;30m# Black

smtk_clr_red=\e[0;31m# Red

smtk_clr_green=\e[0;32m# Green

smtk_clr_yellow=\e[0;33m# Yellow

To make this more fun I sometimes also load environment variables that
contain environment variables that need to be expanded such as

PATH=$PATH $HOME/.local/bin $HOME/src/Scripts /sbin /usr/sbin

# Fun test Enlightenment exports the variable PANTS as ON

SHIRT=$PANTS# Inline comment test

Taken from https://github.com/simotek/tackle/blob/simotek-theme/default.env

The code to load such variables used to look like this (note PATH is
handled as a special case differently)

# need to expand $split[2] twice so that any vars stored in the file get
expanded

set -l TMP "echo -e \"$split[2]\""

printf "%s" (eval $TMP) | read -gx $split[1]

Taken from line 118 of
https://github.com/simotek/tacklebox/blob/feature-env-loader-theme/tacklebox.fish
the echo -e substitutes in the terminal escape characters and the printf
expands the environment variables.

This now fails with the following

eval $TMP
^
in command substitution
        called on line 223 of file ~/src/config/tacklebox/tacklebox.fish

in function “__tacklebox_load_env_file”
        called on line 334 of file ~/src/config/tacklebox/tacklebox.fish

in function “__tacklebox_load_env_files_in_dir”
        called on line 100 of file ~/src/config/tacklebox/tacklebox.fish

in function “__tacklebox_load_theme”
        called on line 209 of file ~/src/config/tacklebox/tacklebox.fish
        with parameter list “simotek”

from sourcing file ~/src/config/tacklebox/tacklebox.fish
        called on line 9 of file ~/.config/fish/config.fish

from sourcing file ~/.config/fish/config.fish
        called during startup

Removing the eval so I have printf "%s ($TMP)" gives the following

 echo -e "\e[0;40m": command not found
~/src/config/tacklebox/tacklebox.fish (line 1):
$TMP
^
in command substitution
        called on line 223 of file ~/src/config/tacklebox/tacklebox.fish

in function “__tacklebox_load_env_file”
        called on line 12 of file
~/src/config/tackle/themes/simotek/fish_right_prompt.fish

in function “fish_right_prompt”
        called on standard input

in command substitution
        called on standard input

Thanks for any suggestions that you may have.

-- 

Simon Lees (Simotek)                            http://simotek.net

Emergency Update Team                           keybase.io/simotek
SUSE Linux                           Adelaide Australia, UTC+10:30
GPG Fingerprint: 5B87 DB9D 88DC F606 E489 CEC5 0922 C246 02F0 014B




_______________________________________________
Fish-users mailing list
Fish-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fish-users

Reply via email to