a key to toggle dir_modes, DISK_USAGE and BLOCK_SIZE

This commit is contained in:
Night Kaly 2024-03-16 19:26:35 +00:00
parent e15caee8d0
commit 716efb6014
No known key found for this signature in database
GPG key ID: 8E829D3381CFEBBE
2 changed files with 31 additions and 7 deletions

36
ccc.c
View file

@ -39,6 +39,7 @@ void draw_border_title(WINDOW *window, bool active);
/* global variables */ /* global variables */
unsigned int focus = 0; unsigned int focus = 0;
long current_selection = 0; long current_selection = 0;
bool dir_mode = BLOCK_SIZE;
char *cwd; char *cwd;
int half_width; int half_width;
WIN_STRUCT windows[5]; WIN_STRUCT windows[5];
@ -238,6 +239,14 @@ int main(int argc, char** argv)
} }
break; break;
/* a to toggle between DISK_USAGE and BLOCK SIZE */
case 'a':
dir_mode = !dir_mode;
clear_files();
populate_files(cwd);
highlight_current_line();
break;
/* mark files by space */ /* mark files by space */
case SPACE:; case SPACE:;
add_file_stat(get_filepath(current_selection), 1); add_file_stat(get_filepath(current_selection), 1);
@ -392,11 +401,15 @@ long add_file_stat(char *filepath, int ftype)
/* get file size */ /* get file size */
double bytes = file_stat.st_size; double bytes = file_stat.st_size;
if (S_ISDIR(file_stat.st_mode)) {
/* at most 15 fd opened */ if (!dir_mode) {
total_dir_size = 0; /* dir_mode is 0, so disk usage mode, calculate disk usage */
nftw(filepath, &get_directory_size, 15, FTW_PHYS); if (S_ISDIR(file_stat.st_mode)) {
bytes = total_dir_size; /* at most 15 fd opened */
total_dir_size = 0;
nftw(filepath, &get_directory_size, 15, FTW_PHYS);
bytes = total_dir_size;
}
} }
/* max 25 chars due to long, space, suffix and null */ /* max 25 chars due to long, space, suffix and null */
char *size = memalloc(25 * sizeof(char)); char *size = memalloc(25 * sizeof(char));
@ -502,6 +515,15 @@ void highlight_current_line()
/* update the panel */ /* update the panel */
wclear(panel); wclear(panel);
/* showing dir_mode requires 26 characters */
char *dir_mode_line = memalloc(27 * sizeof(char));
if (dir_mode)
strncpy(dir_mode_line, "Directory Mode: Block Size", 27);
else
strncpy(dir_mode_line, "Directory Mode: Disk Usage", 27);
/* check for marked files */
long num_marked = marked_len(); long num_marked = marked_len();
if (num_marked > 0) { if (num_marked > 0) {
/* Determine length of formatted string */ /* Determine length of formatted string */
@ -509,9 +531,9 @@ void highlight_current_line()
char *selected = memalloc((m_len + 1) * sizeof(char)); char *selected = memalloc((m_len + 1) * sizeof(char));
snprintf(selected, m_len + 1, "(%ld selected)", num_marked); snprintf(selected, m_len + 1, "(%ld selected)", num_marked);
wprintw(panel, "(%ld/%ld) %s %s", current_selection + 1, files_len(), selected, cwd); wprintw(panel, "(%ld/%ld) %s %s %s", current_selection + 1, files_len(), selected, cwd, dir_mode_line);
} else { } else {
wprintw(panel, "(%ld/%ld) %s", current_selection + 1, files_len(), cwd); wprintw(panel, "(%ld/%ld) %s %s", current_selection + 1, files_len(), cwd, dir_mode_line);
} }
} }
/* print the actual filename and stats */ /* print the actual filename and stats */

View file

@ -11,5 +11,7 @@
#define BACKSPACE 0x107 #define BACKSPACE 0x107
#define PH 1 /* panel height */ #define PH 1 /* panel height */
#define JUMP_NUM 14 /* how long ctrl + u/d jump are */ #define JUMP_NUM 14 /* how long ctrl + u/d jump are */
#define BLOCK_SIZE true
#define DISK_USAGE false
static const char *editor = "nvim"; /* default text editor */ static const char *editor = "nvim"; /* default text editor */