[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: fish: how to change the vendor_* directories
From: |
ng0 |
Subject: |
Re: fish: how to change the vendor_* directories |
Date: |
Sat, 6 May 2017 08:33:18 +0000 |
ng0 transcribed 3.3K bytes:
> ng0 transcribed 0.7K bytes:
> > Today I noticed that my fish completions don't work if you install them from
> > within guix.
> > They do work if they are in one of the scanned directories, which includes
> > and used to be
> > ~/.config/fish/completions/ where I symlinked my developer copy to.
> > So I just learned about ${PREFIX}/share/fish/vendor_functions.d being one
> > of the directories
> > which is intended for third party addons.
> > We can not change fish to pick up
> > $HOME/.guix-profile/share/fish/vendor_functions.d, at least
> > not from what I tried in 5 minutes. Vim was easier, you are able to set a
> > path manually.
> > Any suggestions on how we can hack this? Maybe simply extend the SEARCH
> > PATH?
>
> Okay, I tried this:
>
> address@hidden ~/s/g/guix> git diff
> diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
> index 6f06acfa4..2b0199e12 100644
> --- a/gnu/packages/shells.scm
> +++ b/gnu/packages/shells.scm
> @@ -138,6 +138,10 @@ direct descendant of NetBSD's Almquist Shell
> (@command{ash}).")
> (substitute* "share/functions/__fish_print_help.fish"
> (("nroff") (which "nroff")))
> #t)))))
> + (native-search-paths
> + (list (search-path-specification
> + (variable "fish_function_path")
> + (files '("share/fish/vendor_functions.d")))))
> (synopsis "The friendly interactive shell")
> (description
> "Fish (friendly interactive shell) is a shell focused on interactive
> use,
>
> this leads to (at guix package -i fish):
>
> The following environment variable definitions may be needed:
> export
> fish_function_path="/home/user/.guix-profile/share/fish/vendor_functions.d${fish_function_path:+:}$fish_function_path"
which leads us to:
address@hidden ~> echo $fish_function_path
/gnu/store/xh4nlpwwacgsj4q7llvb8ly2525kd26g-profile/share/fish/vendor_functions.d
/gnu/store/3bmrbk8c2a03y2b31gcv67n0bh3div7z-fish-2.5.0/share/fish/functions
if fish inherits from bash which previously sourced the
.guix-profile/etc/profile file.
> where it should be:
>
> set fish_function_path foo foo foo foo ourdir
>
> in your fish config. So we basically must output the default (see below)
> and prepend the native-search-path we added.
> Because fish has a different syntax than bash it won't work like output
> at the end, but of course fish (if you don't change any defaults and your
> user shell is bash) inherits variables of bash. So this might work in
> this special case but not the case where fish is your system shell, which
> I'd honestly not recommend with guix. Or I would recommend it, so that we
> can see what errors could be produced. I simply start fish from bash.
>
> file: "share/config.fish" in FISH source:
>
> if not set -q fish_function_path
> set fish_function_path $configdir/fish/functions $__fish_sysconfdir/functions
> $__extra_functionsdir $__fish_datadir/functions
>
> file: "configure.ac":
> …
> [extra_completionsdir=$withval],
> [extra_completionsdir='${datadir}/fish/vendor_completions.d'])
>
> AC_SUBST(extra_functionsdir)
> [extra_functionsdir=$withval],
> [extra_functionsdir='${datadir}/fish/vendor_functions.d'])
> …
>
> at the moment this leads to:
>
> address@hidden ~]$ fish
> address@hidden ~> echo $fish_function_path
> /home/user/.config/fish/functions /etc/fish/functions
> /gnu/store/3bmrbk8c2a03y2b31gcv67n0bh3div7z-fish-2.5.0/share/fish/vendor_functions.d
> /gnu/store/3bmrbk8c2a03y2b31gcv67n0bh3div7z-fish-2.5.0/share/fish/functions
>
> We could simply tell the users of this shell to update this manually OR hack
> it *somehow*
> into the defaults of fish.
>
> I'd prefer a solution with native-search-patch.
> --
> https://pragmatique.xyz
> PGP: https://people.pragmatique.xyz/ng0/
>
--
https://pragmatique.xyz
PGP: https://people.pragmatique.xyz/ng0/