commit 98cef004b7690a6aa2f49132ee63bb67ef0bfcf5
Author: Raniconduh <clagv.randomgames@gmail.com>
Date: Tue Oct 18 09:23:25 2022 +0000
diff --git a/include/dir.h b/include/dir.h
index e7d2aa1..d77b5a4 100644
--- a/include/dir.h
+++ b/include/dir.h
@@ -826 +828 @@ extern struct dir_entry_t ** dir_entries;
// current working directory
extern char * cwd;
extern char * homedir;
+extern size_t homedir_len;
+extern bool in_home_subdir;
extern bool permission_denied;
extern bool cwd_is_file;
diff --git a/src/dir.c b/src/dir.c
index eccb28d..bc7b37b 100644
--- a/src/dir.c
+++ b/src/dir.c
@@ -176 +178 @@
char * cwd = NULL;
char * homedir = NULL;
+size_t homedir_len = 0;
+bool in_home_subdir = false;
size_t n_dir_entries = 0;
size_t dir_longest_owner = 0;
@@ -2436 +2459 @@ void cd_back(void) {
dir_longest_owner = 0;
dir_longest_group = 0;
+
+ if (!strncmp(cwd, homedir, homedir_len)) in_home_subdir = true;
+ else in_home_subdir = false;
}
@@ -2606 +2659 @@ void enter_dir(char * name) {
dir_longest_owner = 0;
dir_longest_group = 0;
+
+ if (!strncmp(cwd, homedir, homedir_len)) in_home_subdir = true;
+ else in_home_subdir = false;
}
@@ -3348 +34212 @@ void get_home(void) {
char * s = getenv("HOME");
if (!s || *s == '\0') { // no var or empty
struct passwd * pw = getpwuid(geteuid());
- homedir = strdup(pw->pw_dir);
+ homedir_len = strlen(pw->pw_dir);
+ homedir = malloc(homedir_len + 1);
+ strcpy(homedir, pw->pw_dir);
} else {
- homedir = strdup(s);
+ homedir_len = strlen(s);
+ homedir = malloc(homedir_len + 1);
+ strcpy(homedir, s);
}
}
diff --git a/src/main.c b/src/main.c
index 78e27ad..e494fef 100644
--- a/src/main.c
+++ b/src/main.c
@@ -916 +918 @@ int main(int argc, char ** argv) {
chdir(cwd);
}
+ if (!strncmp(cwd, homedir, homedir_len)) in_home_subdir = true;
+
curses_init();
signal(SIGCONT, sig_handler);
@@ -1167 +11814 @@ int main(int argc, char ** argv) {
}
// print path at top
- printw("\n%s", cwd);
+ addch('\n');
+ if (in_home_subdir) {
+ addch('~');
+ // cwd == homedir
+ if (cwd[homedir_len] == '\0') addch('/');
+ else addstr(cwd + homedir_len);
+ } else addstr(cwd);
+
if (permission_denied) {
attron(COLOR_PAIR(RED));
printw("\tPermission Denied");