print marked files with cyan
introduce free file method remove strip from makefile as -s already did
This commit is contained in:
parent
e7640b5768
commit
e15caee8d0
4 changed files with 111 additions and 14 deletions
1
Makefile
1
Makefile
|
@ -18,7 +18,6 @@ SRC = ccc.c util.c file.c $(CONF)
|
||||||
|
|
||||||
$(TARGET): $(SRC)
|
$(TARGET): $(SRC)
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $(SRC) -o $@
|
$(CC) $(CFLAGS) $(LDFLAGS) $(SRC) -o $@
|
||||||
strip $(TARGET)
|
|
||||||
|
|
||||||
dist:
|
dist:
|
||||||
mkdir -p $(TARGET)-$(VERSION)
|
mkdir -p $(TARGET)-$(VERSION)
|
||||||
|
|
34
ccc.c
34
ccc.c
|
@ -84,7 +84,7 @@ int main(int argc, char** argv)
|
||||||
init_pair(4, COLOR_YELLOW, -1); /* BLK */
|
init_pair(4, COLOR_YELLOW, -1); /* BLK */
|
||||||
init_pair(5, COLOR_BLUE, -1); /* DIR */
|
init_pair(5, COLOR_BLUE, -1); /* DIR */
|
||||||
init_pair(6, COLOR_MAGENTA, -1); /* */
|
init_pair(6, COLOR_MAGENTA, -1); /* */
|
||||||
init_pair(7, COLOR_CYAN, -1); /* */
|
init_pair(7, COLOR_CYAN, -1); /* MARKED FILES */
|
||||||
init_pair(8, COLOR_WHITE, -1); /* REG */
|
init_pair(8, COLOR_WHITE, -1); /* REG */
|
||||||
|
|
||||||
half_width = COLS / 2;
|
half_width = COLS / 2;
|
||||||
|
@ -239,7 +239,7 @@ int main(int argc, char** argv)
|
||||||
break;
|
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);
|
||||||
highlight_current_line();
|
highlight_current_line();
|
||||||
break;
|
break;
|
||||||
|
@ -440,13 +440,17 @@ long add_file_stat(char *filepath, int ftype)
|
||||||
|
|
||||||
if (ftype == 1) {
|
if (ftype == 1) {
|
||||||
long index = add_marked(filepath, type);
|
long index = add_marked(filepath, type);
|
||||||
if (index == -1) {
|
|
||||||
|
|
||||||
}
|
|
||||||
free(type);
|
free(type);
|
||||||
free(size);
|
free(size);
|
||||||
free(time);
|
free(time);
|
||||||
return index;
|
if (index != -1) {
|
||||||
|
/* just marked */
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
/* already marked */
|
||||||
|
return -1;
|
||||||
|
/* -1 does nothing, just function required to return something */
|
||||||
|
|
||||||
}
|
}
|
||||||
char *total_stat = memalloc(45 * sizeof(char));
|
char *total_stat = memalloc(45 * sizeof(char));
|
||||||
snprintf(total_stat, 45, "%-18s %-10s", time, size);
|
snprintf(total_stat, 45, "%-18s %-10s", time, size);
|
||||||
|
@ -513,16 +517,28 @@ void highlight_current_line()
|
||||||
/* print the actual filename and stats */
|
/* print the actual filename and stats */
|
||||||
char *line = get_line(i);
|
char *line = get_line(i);
|
||||||
int color = get_color(i);
|
int color = get_color(i);
|
||||||
|
/* check is file marked for action */
|
||||||
|
bool marked = in_marked(get_filepath(i));
|
||||||
|
if (marked) {
|
||||||
|
/* show file is selected */
|
||||||
|
wattron(directory_content, COLOR_PAIR(7));
|
||||||
|
} else {
|
||||||
|
/* print the whole directory with default colors */
|
||||||
|
wattron(directory_content, COLOR_PAIR(color));
|
||||||
|
}
|
||||||
|
|
||||||
/* print the whole directory with colors */
|
|
||||||
wattron(directory_content, COLOR_PAIR(color));
|
|
||||||
if (overflow > 0)
|
if (overflow > 0)
|
||||||
mvwprintw(directory_content, line_count, 0, "%s", line);
|
mvwprintw(directory_content, line_count, 0, "%s", line);
|
||||||
else
|
else
|
||||||
mvwprintw(directory_content, i, 0, "%s", line);
|
mvwprintw(directory_content, i, 0, "%s", line);
|
||||||
|
|
||||||
|
if (marked) {
|
||||||
|
wattroff(directory_content, COLOR_PAIR(7));
|
||||||
|
} else {
|
||||||
|
wattroff(directory_content, COLOR_PAIR(color));
|
||||||
|
}
|
||||||
|
|
||||||
wattroff(directory_content, A_REVERSE);
|
wattroff(directory_content, A_REVERSE);
|
||||||
wattroff(directory_content, COLOR_PAIR(color));
|
|
||||||
free(line);
|
free(line);
|
||||||
line_count++;
|
line_count++;
|
||||||
}
|
}
|
||||||
|
|
84
file.c
84
file.c
|
@ -1,5 +1,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
@ -45,13 +46,24 @@ long marked_len()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_file(file *toremove)
|
||||||
|
{
|
||||||
|
if (toremove->type != NULL)
|
||||||
|
free(toremove->type);
|
||||||
|
if (toremove->path != NULL)
|
||||||
|
free(toremove->path);
|
||||||
|
if (toremove->stats != NULL)
|
||||||
|
free(toremove->stats);
|
||||||
|
free(toremove);
|
||||||
|
}
|
||||||
|
|
||||||
void clear_files()
|
void clear_files()
|
||||||
{
|
{
|
||||||
file *tmp;
|
file *tmp;
|
||||||
while (files != NULL) {
|
while (files != NULL) {
|
||||||
tmp = files;
|
tmp = files;
|
||||||
files = files->next;
|
files = files->next;
|
||||||
free(tmp);
|
free_file(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +73,7 @@ void clear_marked()
|
||||||
while (marked != NULL) {
|
while (marked != NULL) {
|
||||||
tmp = marked;
|
tmp = marked;
|
||||||
files = marked->next;
|
files = marked->next;
|
||||||
free(tmp);
|
free_file(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +108,29 @@ long add_file(char *filepath, char *stats, char *type, int color)
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void remove_marked(file *marked_file)
|
||||||
|
{
|
||||||
|
/* If the head node itself is marked for removal */
|
||||||
|
if (marked == marked_file) {
|
||||||
|
marked = marked->next;
|
||||||
|
free_file(marked_file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Search for the marked file node in the list */
|
||||||
|
file* temp = marked;
|
||||||
|
while (temp != NULL && temp->next != marked_file) {
|
||||||
|
temp = temp->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the marked file node is found, remove it from the list */
|
||||||
|
if (temp != NULL) {
|
||||||
|
temp->next = marked_file->next;
|
||||||
|
free_file(marked_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
long add_marked(char *filepath, char *type)
|
long add_marked(char *filepath, char *type)
|
||||||
{
|
{
|
||||||
file *current = marked;
|
file *current = marked;
|
||||||
|
@ -107,20 +142,63 @@ long add_marked(char *filepath, char *type)
|
||||||
}
|
}
|
||||||
new_file->path = buf;
|
new_file->path = buf;
|
||||||
new_file->type = buf2;
|
new_file->type = buf2;
|
||||||
|
new_file->stats = NULL;
|
||||||
|
new_file->color = 0;
|
||||||
new_file->next = NULL;
|
new_file->next = NULL;
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
marked = new_file;
|
marked = new_file;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long index = 1;
|
long index = 1;
|
||||||
while (current->next != NULL) {
|
while (current->next != NULL) {
|
||||||
|
if (strcmp(current->path, new_file->path) == 0) {
|
||||||
|
remove_marked(current);
|
||||||
|
free_file(new_file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
current = current->next;
|
current = current->next;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
if (strcmp(current->path, new_file->path) == 0){
|
||||||
|
remove_marked(current);
|
||||||
|
free_file(new_file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
current->next = new_file;
|
current->next = new_file;
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
file *get_marked(long index)
|
||||||
|
{
|
||||||
|
file *current = marked;
|
||||||
|
if (index == 0) {
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
if (index > files_len()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
for (long i = 0; i < index; i++) {
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool in_marked(char *path)
|
||||||
|
{
|
||||||
|
file *tmp = marked;
|
||||||
|
if (tmp == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while (tmp != NULL) {
|
||||||
|
if (strcmp(path, tmp->path) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
tmp = tmp->next;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
file *get_file(long index)
|
file *get_file(long index)
|
||||||
{
|
{
|
||||||
file *current = files;
|
file *current = files;
|
||||||
|
@ -160,7 +238,7 @@ int get_color(long index)
|
||||||
}
|
}
|
||||||
return color;
|
return color;
|
||||||
} else {
|
} else {
|
||||||
return 8; /* white */
|
return 8; /* white */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
file.h
4
file.h
|
@ -11,10 +11,14 @@ typedef struct file {
|
||||||
|
|
||||||
long files_len();
|
long files_len();
|
||||||
long marked_len();
|
long marked_len();
|
||||||
|
void free_file(file *toremove);
|
||||||
void clear_files();
|
void clear_files();
|
||||||
void clear_marked();
|
void clear_marked();
|
||||||
long add_file(char *filepath, char *stats, char *type, int color);
|
long add_file(char *filepath, char *stats, char *type, int color);
|
||||||
|
void remove_marked(file *marked_file);
|
||||||
long add_marked(char *filepath, char *type);
|
long add_marked(char *filepath, char *type);
|
||||||
|
file *get_marked(long index);
|
||||||
|
bool in_marked(char *path);
|
||||||
file *get_file(long index);
|
file *get_file(long index);
|
||||||
char *get_filepath(long index);
|
char *get_filepath(long index);
|
||||||
int get_color(long index);
|
int get_color(long index);
|
||||||
|
|
Loading…
Reference in a new issue