reimplementations of some functions
This commit is contained in:
16
defines.h
16
defines.h
@@ -3,13 +3,15 @@
|
||||
#define STATUS_QUIT_PROGRAM 1
|
||||
#define STATUS_RUN_BACKEND 2
|
||||
#define STATUS_RELOAD_DIRECTORY 4
|
||||
#define STATUS_UPDATE_SCREEN_INTERACTION 8
|
||||
#define STATUS_UPDATE_SCREEN_GENERIC 8
|
||||
#define STATUS_UPDATE_SCREEN_RESIZE 16
|
||||
#define STATUS_UPDATE_SCREEN_PRINTED 32
|
||||
#define STATUS_UPDATE_SCREEN_MASK (STATUS_UPDATE_SCREEN_INTERACTION | STATUS_UPDATE_SCREEN_RESIZE | STATUS_UPDATE_SCREEN_PRINTED)
|
||||
#define STATUS_USER_ROOT 64
|
||||
#define STATUS_INPUT_MATCH 128
|
||||
#define STATUS_DELTA_TIME 256
|
||||
#define STATUS_UPDATE_SCREEN_CLEAR 32
|
||||
#define STATUS_UPDATE_SCREEN_DIR_CHANGE 64
|
||||
#define STATUS_UPDATE_SCREEN_MASK (STATUS_UPDATE_SCREEN_GENERIC | STATUS_UPDATE_SCREEN_RESIZE | STATUS_UPDATE_SCREEN_CLEAR | STATUS_UPDATE_SCREEN_DIR_CHANGE)
|
||||
#define STATUS_USER_ROOT 128
|
||||
#define STATUS_INPUT_MATCH 256
|
||||
#define STATUS_DELTA_TIME 512
|
||||
#define STATUS_MOVE_RIGHT_MATCH 1024
|
||||
|
||||
#define SETTINGS_HAS_COLOR 1
|
||||
|
||||
@@ -71,9 +73,9 @@ typedef struct File {
|
||||
char *file_name;
|
||||
} file;
|
||||
typedef struct Dir {
|
||||
unsigned long file_count;
|
||||
file *current_file;
|
||||
file *file_list;
|
||||
unsigned long file_count;
|
||||
} dir;
|
||||
typedef struct Color {
|
||||
char *file_extension;
|
||||
|
||||
@@ -21,6 +21,7 @@ extern pthread_mutex_t mutex_rgt;
|
||||
extern pthread_mutex_t mutex_mid;
|
||||
extern pthread_mutex_t mutex_btm;
|
||||
extern pthread_cond_t cond_rgt;
|
||||
extern pthread_cond_t cond_mid;
|
||||
extern dir mid_dir;
|
||||
|
||||
extern unsigned int terminal_height;
|
||||
@@ -72,7 +73,7 @@ void user_interactions() {
|
||||
memset(input, 0, INPUT_BUFFER_SIZE);
|
||||
input_pass = 0;
|
||||
}
|
||||
status |= STATUS_UPDATE_SCREEN_INTERACTION;
|
||||
status |= STATUS_UPDATE_SCREEN_GENERIC;
|
||||
}
|
||||
|
||||
|
||||
@@ -165,24 +166,28 @@ void quit_program(){
|
||||
status = STATUS_QUIT_PROGRAM;
|
||||
}
|
||||
void update(){
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_MASK);
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY );
|
||||
}
|
||||
void select_all(){
|
||||
TODO;
|
||||
}
|
||||
void move_down(unsigned long passes){
|
||||
mid_dir.current_file = mid_dir.current_file + passes;
|
||||
if (mid_dir.current_file >= mid_dir.file_list + mid_dir.file_count - 1) {
|
||||
if (mid_dir.current_file + passes >= mid_dir.file_list + mid_dir.file_count - 1) {
|
||||
mid_dir.current_file = mid_dir.file_list + mid_dir.file_count - 1;
|
||||
} else {
|
||||
mid_dir.current_file = mid_dir.current_file + passes;
|
||||
}
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_INTERACTION);
|
||||
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_GENERIC);
|
||||
pthread_cond_signal(&cond_mid);
|
||||
}
|
||||
void move_up(unsigned long passes){
|
||||
mid_dir.current_file = mid_dir.current_file - passes;
|
||||
if (mid_dir.current_file <= mid_dir.file_list) {
|
||||
if (mid_dir.current_file - passes <= mid_dir.file_list) {
|
||||
mid_dir.current_file = mid_dir.file_list;
|
||||
} else {
|
||||
mid_dir.current_file = mid_dir.current_file - passes;
|
||||
}
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_INTERACTION);
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_GENERIC);
|
||||
}
|
||||
void move_left(unsigned long passes){
|
||||
unsigned long i;
|
||||
@@ -190,14 +195,60 @@ void move_left(unsigned long passes){
|
||||
if (chdir("..") != 0) {
|
||||
/* TODO(2025-07-09T00:30:05) fix */
|
||||
FAIL("move_left", "unhandled error of chdir");
|
||||
} else {
|
||||
}
|
||||
}
|
||||
}
|
||||
update();
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_GENERIC | STATUS_UPDATE_SCREEN_DIR_CHANGE);
|
||||
|
||||
}
|
||||
void move_right(){
|
||||
TODO;
|
||||
|
||||
if (mid_dir.current_file->file_type & FILE_TYPE_DIR) {
|
||||
if (chdir(mid_dir.current_file->file_name) != 0) {
|
||||
/* TODO(2026-05-05T20:12:14) fix */
|
||||
FAIL("move_right", "unhandled error of chdir");
|
||||
}
|
||||
} else if (mid_dir.current_file->file_type & FILE_TYPE_EXEC) {
|
||||
} else {
|
||||
char *mime = get_mimetype(mid_dir.current_file);
|
||||
char *extension = mid_dir.current_file->file_name;
|
||||
char *cmd;
|
||||
while (extension <= mid_dir.current_file->file_name + strlen(mid_dir.current_file->file_name)) {
|
||||
if (*extension == '.') {
|
||||
break;
|
||||
}
|
||||
extension++;
|
||||
}
|
||||
|
||||
long i;
|
||||
if (extension <= mid_dir.current_file->file_name + strlen(mid_dir.current_file->file_name)) {
|
||||
for (i = 0; i < file_extension_default_count; i++) {
|
||||
if (strcmp(extension, file_extension_default_cmd[i].file_extension) == 0) {
|
||||
cmd = parse_cmd(file_extension_default_cmd[i].command, mid_dir.current_file);
|
||||
if (system(cmd)) {
|
||||
}
|
||||
status |= STATUS_MOVE_RIGHT_MATCH;
|
||||
update();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(status & STATUS_MOVE_RIGHT_MATCH)) {
|
||||
for (i = 0; i < mimetype_default_count; i++) {
|
||||
if (strstr(mimetype_default_cmd[i].mimetype, mime) == 0) {
|
||||
cmd = parse_cmd(mimetype_default_cmd[i].command, mid_dir.current_file);
|
||||
if (system(cmd)) {
|
||||
}
|
||||
update();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
status &= ~STATUS_MOVE_RIGHT_MATCH;
|
||||
free(cmd);
|
||||
free(mime);
|
||||
}
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_GENERIC | STATUS_UPDATE_SCREEN_DIR_CHANGE);
|
||||
|
||||
}
|
||||
void toggle_hidden_files(){
|
||||
file_modifiers ^= FILE_MODIFIERS_HIDDEN_FILES;
|
||||
@@ -247,7 +298,7 @@ void order_by(unsigned long passes, int index){
|
||||
seed = time(NULL);
|
||||
|
||||
order_func = key_binding[index].black_magic;
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_INTERACTION | STATUS_RELOAD_DIRECTORY);
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_GENERIC | STATUS_RELOAD_DIRECTORY);
|
||||
}
|
||||
void cmd_on_selected(unsigned long passes, int index){
|
||||
TODO;
|
||||
|
||||
Reference in New Issue
Block a user