Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit 31b360aa186994d9ad184fc23d8d2112af6db4bb Author: rani <clagv.randomgames@gmail.com> Date: Tue Jun 28 16:24:10 2022 +0000 add padding for owner/group in long mode diff --git a/include/dir.h b/include/dir.h index f079f56..3f671fb 100644 --- a/include/dir.h +++ b/include/dir.h @@ -498 +498 @@ struct dir_entry_t {     uint16_t mode;   time_t mtime; - long owner; - long group; + char * owner; + char * group;   int size;   enum f_size u_size;  }; @@ -666 +6610 @@ char * mode_to_s(struct dir_entry_t *);    // number of directory entries  extern size_t n_dir_entries; +// longest owner name in dir +extern size_t dir_longest_owner; +// longest group name in dir +extern size_t dir_longest_group;  // actual directory entries  extern struct dir_entry_t ** dir_entries;   diff --git a/include/io.h b/include/io.h index 4d20757..dc5a9d0 100644 --- a/include/io.h +++ b/include/io.h @@ -576 +577 @@ void unmark_all(void);  void mark_all(void);  void set_color(void);  void print_mode(struct dir_entry_t *); +void padstr(size_t);      extern bool print_path; diff --git a/src/dir.c b/src/dir.c index d1655ca..6eddb16 100644 --- a/src/dir.c +++ b/src/dir.c @@ -66 +68 @@  #include <stdbool.h>  #include <unistd.h>  #include <errno.h> +#include <pwd.h> +#include <grp.h>    #include "type.h"  #include "opts.h" @@ -166 +188 @@  char * cwd = NULL;    size_t n_dir_entries = 0; +size_t dir_longest_owner = 0; +size_t dir_longest_group = 0;  struct dir_entry_t ** dir_entries = NULL;    bool permission_denied = false; @@ -1458 +14913 @@ int list_dir(char * dir_path) {  #else   dir_entry->mtime = buf->st_mtim.tv_sec;  #endif - dir_entry->owner = buf->st_uid; - dir_entry->group = buf->st_gid; + size_t n; + dir_entry->owner = getpwuid(buf->st_uid)->pw_name; + if ((n = strlen(dir_entry->owner)) > dir_longest_owner) + dir_longest_owner = n; + dir_entry->group = getgrgid(buf->st_gid)->gr_name; + if ((n = strlen(dir_entry->group)) > dir_longest_group) + dir_longest_group = n;     dir_entry->size = buf->st_size;   dir_entry->u_size = 0; diff --git a/src/io.c b/src/io.c index 5a422e3..4a9ac3b 100644 --- a/src/io.c +++ b/src/io.c @@ -78 +76 @@  #include <locale.h>  #include <fcntl.h>  #include <time.h> -#include <pwd.h> -#include <grp.h>    #if ICONS  #include "type.h" @@ -10915 +10713 @@ void curses_write_file(struct dir_entry_t * dir_entry, bool highlight) {   char * icon = NULL;  #endif   char * smode = NULL; - char * owner = NULL; - char * group = NULL; + char * owner = dir_entry->owner; + char * group = dir_entry->group;   char * size = NULL;   char time[128];     if (p_long) {   smode = mode_to_s(dir_entry); - owner = getpwuid(dir_entry->owner)->pw_name; - group = getgrgid(dir_entry->group)->gr_name;   switch (dir_entry->u_size) {   case 0: size = "B"; break;   case 1: size = "KB"; break; @@ -1979 +19320 @@ void curses_write_file(struct dir_entry_t * dir_entry, bool highlight) {   if (dir_entry->marked) printw("%c ", '-');   if (p_long) {   print_mode(dir_entry); - printw(" %s %s %4d %-2s %s ", - owner, group, dir_entry->size, - size, time); + // print owner + addch(' '); + addstr(owner); + size_t n = strlen(owner); + if (n < dir_longest_owner) padstr(dir_longest_owner - n); + + // print group + addch(' '); + addstr(group); + n = strlen(owner); + if (n < dir_longest_group) padstr(dir_longest_group - n); + + printw(" %4d %-2s %s ", + dir_entry->size, size, time);   free(smode);   }  #if ICONS @@ -2386 +24511 @@ void print_mode(struct dir_entry_t * f) {  }     +void padstr(size_t n) { + for (size_t i = 0; i < n; i++) addch(' '); +} + +  char * prompt(char * t, char ** args) {   int sub_cols = 30;   int sub_rows = sub_cols / 2;