Added a slightly hacky fix to make sure bb
can be run from the local
build directory and still have the helper scripts, bbstartup.sh, and the bindings work.
This commit is contained in:
parent
9a7938ba2d
commit
1dbece8b2e
23
bb.c
23
bb.c
@ -1187,10 +1187,29 @@ int main(int argc, char *argv[])
|
|||||||
sprintf(xdg_data_home, "%s/.local/share", getenv("HOME"));
|
sprintf(xdg_data_home, "%s/.local/share", getenv("HOME"));
|
||||||
setenv("XDG_DATA_HOME", xdg_data_home, 0);
|
setenv("XDG_DATA_HOME", xdg_data_home, 0);
|
||||||
setenv("sysconfdir", "/etc", 0);
|
setenv("sysconfdir", "/etc", 0);
|
||||||
|
|
||||||
char *newpath;
|
char *newpath;
|
||||||
if (asprintf(&newpath, "%s/xdg/bb/helpers:%s/bb/helpers:%s", getenv("sysconfdir"), getenv("XDG_CONFIG_HOME"), getenv("PATH")) < 0)
|
static char bbpath[PATH_MAX];
|
||||||
err("Could not allocate memory");
|
// Hacky fix to allow `bb` to be run out of its build directory:
|
||||||
|
if (strncmp(argv[0], "./", 2) == 0) {
|
||||||
|
if (realpath(argv[0], bbpath) == NULL)
|
||||||
|
err("Could not resolve path: %s", bbpath);
|
||||||
|
char *slash = strrchr(bbpath, '/');
|
||||||
|
if (!slash) err("No slash found in real path: %s", bbpath);
|
||||||
|
*slash = '\0';
|
||||||
|
setenv("BBPATH", bbpath, 1);
|
||||||
|
}
|
||||||
|
if (getenv("BBPATH")) {
|
||||||
|
if (asprintf(&newpath, "%s/helpers:%s/bb/helpers:%s",
|
||||||
|
getenv("BBPATH"), getenv("XDG_CONFIG_HOME"), getenv("PATH")) < 0)
|
||||||
|
err("Could not allocate memory for PATH");
|
||||||
|
} else {
|
||||||
|
if (asprintf(&newpath, "%s/xdg/bb/helpers:%s/bb/helpers:%s",
|
||||||
|
getenv("sysconfdir"), getenv("XDG_CONFIG_HOME"), getenv("PATH")) < 0)
|
||||||
|
err("Could not allocate memory for PATH");
|
||||||
|
}
|
||||||
setenv("PATH", newpath, 1);
|
setenv("PATH", newpath, 1);
|
||||||
|
|
||||||
setenv("SHELL", "bash", 0);
|
setenv("SHELL", "bash", 0);
|
||||||
setenv("EDITOR", "nano", 0);
|
setenv("EDITOR", "nano", 0);
|
||||||
char *curdepth = getenv("BBDEPTH");
|
char *curdepth = getenv("BBDEPTH");
|
||||||
|
15
bb.h
15
bb.h
@ -244,11 +244,14 @@ static const char *description_str = "bb - an itty bitty console TUI file browse
|
|||||||
static const char *usage_str = "Usage: bb (-h/--help | -v/--version | -s | -d | -0 | +command)* [[--] directory]\n";
|
static const char *usage_str = "Usage: bb (-h/--help | -v/--version | -s | -d | -0 | +command)* [[--] directory]\n";
|
||||||
|
|
||||||
static const char *runstartup =
|
static const char *runstartup =
|
||||||
"for path in \"$XDG_CONFIG_HOME/bb\" \"$sysconfdir/xdg/bb\" .; do\n"
|
"if [ \"$BBPATH\" ]; then\n"
|
||||||
" if [ -e \"$path/bbstartup.sh\" ]; then\n"
|
" . \"$BBPATH/bbstartup.sh\"\n"
|
||||||
" . \"$path/bbstartup.sh\";\n"
|
"else\n"
|
||||||
" break;\n"
|
" for path in \"$XDG_CONFIG_HOME/bb\" \"$sysconfdir/xdg/bb\"; do\n"
|
||||||
" fi;\n"
|
" [ -e \"$path/bbstartup.sh\" ] || continue\n"
|
||||||
"done\n";
|
" . \"$path/bbstartup.sh\"\n"
|
||||||
|
" break\n"
|
||||||
|
" done\n"
|
||||||
|
"fi\n";
|
||||||
|
|
||||||
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1
|
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1
|
||||||
|
12
bbstartup.sh
12
bbstartup.sh
@ -5,13 +5,13 @@
|
|||||||
# Load key bindings
|
# Load key bindings
|
||||||
# first check ~/.config/bb/bindings.bb, then /etc/xdg/bb/bindings.bb, then ./bindings.bb
|
# first check ~/.config/bb/bindings.bb, then /etc/xdg/bb/bindings.bb, then ./bindings.bb
|
||||||
[ ! -d "$XDG_DATA_HOME/bb" ] && mkdir -p "$XDG_DATA_HOME/bb"
|
[ ! -d "$XDG_DATA_HOME/bb" ] && mkdir -p "$XDG_DATA_HOME/bb"
|
||||||
if [ ! -e "$XDG_CONFIG_HOME/bb/bindings.bb" ] && [ ! -e "$sysconfdir/xdg/bb/bindings.bb" ]; then
|
|
||||||
cat "./bindings.bb" 2>/dev/null | awk '/^#/ {next} /^[^ ]/ {printf "\0bind:"} {print $0} END {printf "\0"}' >> "$BBCMD"
|
if [ "$BBPATH" ]; then
|
||||||
|
cat "$BBPATH/bindings.bb" 2>/dev/null
|
||||||
else
|
else
|
||||||
for path in "$sysconfdir/xdg/bb" "$XDG_CONFIG_HOME/bb"; do
|
cat "$sysconfdir/xdg/bb/bindings.bb" "$XDG_CONFIG_HOME/bb/bindings.bb" 2>/dev/null
|
||||||
cat "$path/bindings.bb" 2>/dev/null
|
fi | awk '/^#/ {next} /^[^ ]/ {printf "\0bind:"} {print $0} END {printf "\0"}' >> "$BBCMD"
|
||||||
done | awk '/^#/ {next} /^[^ ]/ {printf "\0bind:"} {print $0} END {printf "\0"}' >> "$BBCMD"
|
|
||||||
fi
|
|
||||||
if [ -e "$XDG_DATA_HOME/bb/state.sh" ]; then
|
if [ -e "$XDG_DATA_HOME/bb/state.sh" ]; then
|
||||||
. "$XDG_DATA_HOME/bb/state.sh"
|
. "$XDG_DATA_HOME/bb/state.sh"
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user