Fallback to getpwuid in the unlikely case $HOME is underfined
Add a homedir() helper function, and document the $kak_config env var.
This commit is contained in:
parent
e7cbf38af7
commit
07dfcd336d
|
@ -80,7 +80,10 @@ informations about Kakoune's state:
|
||||||
history id of the current buffer, the history id is an integer value
|
history id of the current buffer, the history id is an integer value
|
||||||
which is used to reference a specific buffer version in the undo tree
|
which is used to reference a specific buffer version in the undo tree
|
||||||
*kak_runtime*::
|
*kak_runtime*::
|
||||||
directory containing the kak binary
|
directory containing the kak support files, determined from kakoune's
|
||||||
|
binary location.
|
||||||
|
*kak_config*::
|
||||||
|
directory containing the user configuration
|
||||||
*kak_count*::
|
*kak_count*::
|
||||||
count parameter passed to the command
|
count parameter passed to the command
|
||||||
*kak_opt_<name>*::
|
*kak_opt_<name>*::
|
||||||
|
|
29
src/file.cc
29
src/file.cc
|
@ -10,13 +10,14 @@
|
||||||
#include "unicode.hh"
|
#include "unicode.hh"
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstring>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
@ -51,7 +52,7 @@ String parse_filename(StringView filename)
|
||||||
{
|
{
|
||||||
auto prefix = filename.substr(0_byte, 2_byte);
|
auto prefix = filename.substr(0_byte, 2_byte);
|
||||||
if (prefix == "~" or prefix == "~/")
|
if (prefix == "~" or prefix == "~/")
|
||||||
return getenv("HOME") + filename.substr(1_byte);
|
return homedir() + filename.substr(1_byte);
|
||||||
return filename.str();
|
return filename.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,10 +106,10 @@ String compact_path(StringView filename)
|
||||||
if (prefix_match(real_filename, real_cwd))
|
if (prefix_match(real_filename, real_cwd))
|
||||||
return real_filename.substr(real_cwd.length()).str();
|
return real_filename.substr(real_cwd.length()).str();
|
||||||
|
|
||||||
const char* home = getenv("HOME");
|
const StringView home = homedir();
|
||||||
if (home)
|
if (not home.empty())
|
||||||
{
|
{
|
||||||
ByteCount home_len = (int)strlen(home);
|
ByteCount home_len = home.length();
|
||||||
if (real_filename.substr(0, home_len) == home)
|
if (real_filename.substr(0, home_len) == home)
|
||||||
return "~" + real_filename.substr(home_len);
|
return "~" + real_filename.substr(home_len);
|
||||||
}
|
}
|
||||||
|
@ -125,6 +126,14 @@ StringView tmpdir()
|
||||||
return "/tmp";
|
return "/tmp";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StringView homedir()
|
||||||
|
{
|
||||||
|
StringView home = getenv("HOME");
|
||||||
|
if (home.empty())
|
||||||
|
return getpwuid(geteuid())->pw_dir;
|
||||||
|
return home;
|
||||||
|
}
|
||||||
|
|
||||||
bool fd_readable(int fd)
|
bool fd_readable(int fd)
|
||||||
{
|
{
|
||||||
fd_set rfds;
|
fd_set rfds;
|
||||||
|
@ -331,7 +340,7 @@ String find_file(StringView filename, ConstArrayView<String> paths)
|
||||||
}
|
}
|
||||||
if (filename.substr(0_byte, 2_byte) == "~/")
|
if (filename.substr(0_byte, 2_byte) == "~/")
|
||||||
{
|
{
|
||||||
String candidate = getenv("HOME") + filename.substr(1_byte);
|
String candidate = homedir() + filename.substr(1_byte);
|
||||||
if (stat(candidate.c_str(), &buf) == 0 and S_ISREG(buf.st_mode))
|
if (stat(candidate.c_str(), &buf) == 0 and S_ISREG(buf.st_mode))
|
||||||
return candidate;
|
return candidate;
|
||||||
return "";
|
return "";
|
||||||
|
|
|
@ -25,6 +25,7 @@ String real_path(StringView filename);
|
||||||
String compact_path(StringView filename);
|
String compact_path(StringView filename);
|
||||||
|
|
||||||
StringView tmpdir();
|
StringView tmpdir();
|
||||||
|
StringView homedir();
|
||||||
|
|
||||||
// returns pair { directory, filename }
|
// returns pair { directory, filename }
|
||||||
std::pair<StringView, StringView> split_path(StringView path);
|
std::pair<StringView, StringView> split_path(StringView path);
|
||||||
|
|
|
@ -72,7 +72,7 @@ String config_directory()
|
||||||
{
|
{
|
||||||
StringView config_home = getenv("XDG_CONFIG_HOME");
|
StringView config_home = getenv("XDG_CONFIG_HOME");
|
||||||
if (config_home.empty())
|
if (config_home.empty())
|
||||||
return format("{}/.config/kak", getenv("HOME"));
|
return format("{}/.config/kak", homedir());
|
||||||
return format("{}/kak", config_home);
|
return format("{}/kak", config_home);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user