Added Rule Help

Cleaned up some other stuff
Sane Defaults aswell
This commit is contained in:
Stephen Toth 2023-09-30 21:40:01 -04:00
parent b764750bdd
commit 3a56e56820
3 changed files with 52 additions and 32 deletions

View File

@ -39,14 +39,14 @@ make run
```sh ```sh
make run make run
# or # or (for strace)
make trace
make traces
``` ```
As of right now there are only 7 hardcoded replacements (for color) in the src/main.c file. As of right now there are only 7 hardcoded replacements (for color) in the src/main.c file.
These are actually regex patterns. These are actually regex patterns.
```c ```c
// all are temporary // OUT OF DATE. IM LAZY AND DIDNT UPDATE THEM YET
"^d" //-> Magenta "^d" //-> Magenta
"r--" //-> Green "r--" //-> Green
"rw-" //-> Red "rw-" //-> Red
@ -68,7 +68,7 @@ If you need to use these kinds of applications, do not use this program to wrap
## Installation ## "Installation"
Normal build: `make` Normal build: `make`

View File

@ -6,12 +6,12 @@
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_HOTFIX 0 #define VERSION_HOTFIX 0
#define VERSION_BUILD 354 #define VERSION_BUILD 368
//#define DEFAULT_CMD "/bin/sh" //#define DEFAULT_CMD "/bin/sh"
#define CONF_DO_CMD_ACK 1 #define CONF_DO_CMD_ACK 1
#define DEBG_DO_EOL_MARK 1 #define DEBG_DO_EOL_MARK 0
//EOLMARK defined in parsebuffer() //EOLMARK defined in parsebuffer()
@ -35,6 +35,6 @@
//child stdout read buffer size //child stdout read buffer size
#define BUFCHUNKSIZE 4096 #define BUFCHUNKSIZE 4096
#define BUFSAFEPAD 8 //shut it, ik its useless #define BUFSAFEPAD 8 //shut it, ik its useless
#define REG_NOFLAG 0
#endif #endif

View File

@ -9,12 +9,11 @@
#include <sysexits.h> #include <sysexits.h>
#include <fcntl.h> #include <fcntl.h>
#include <readline/readline.h> #include <readline/readline.h>
//#include <readline/history.h> //#include <readline/history.h> /* who needs history anyway */
//regex branch init
#include <regex.h> #include <regex.h>
// Custom debug include for some debug macros and functions // custom headers
#include <config.h> #include <config.h>
#include <debug.h> #include <debug.h>
#include <structdef.h> #include <structdef.h>
@ -22,44 +21,67 @@
#include <linework.h> #include <linework.h>
#include <notmine.h> #include <notmine.h>
//temporary //NOTE: temporarly in here for config, but probably will create a seperate file that loads the rules down the line
/*
Rule Writiting Help:
Available Color Codes: KRED KGRN KYEL KBLU KMAG KCYN KWHT
KNRM to reset to default
If you want a smattering of the colors, `make debug` and `make run`
Available Regex Flags: REG_NOFLAG REG_EXTENDED, REG_ICASE
REPLACE_GROUP selects the submatch of the regex to replace;
if your regex looks like this: /(matchme)otherstuff$/ ,you probably want to change it from 0
For now, there is no implementation for non static regex replacing. ex: x2tx ~ /x([02])tx/1/--$1-/ => x--2-tx
there is the function for it (line_regex_wrap_match), its just not used. its coming later
Gotta be careful right now because earlier replaces also effect later ones (see processline());
also these rules get applied to EVERY line
*/
/*== USER CHANGE CONFIG ==*/
ct_match replace_rules[]= { ct_match replace_rules[]= {
//gotta be careful right now because earlier replaces also effect later ones /* {REGEX_PATTERN, REG_FLAGS, REPLACE_GROUP, REPLACE_WITH} */
{ "alpine", 0, 0, KMAG"alpine"KNRM }, { "(alpine)[[:blank:]01]", REG_EXTENDED, 1, KMAG"alpine"KNRM }, /* matches alpine alpine0 alpine1 and only colorizes "alpine" */
{ "r--", 0, 0, KGRN"r--"KNRM }, { "r--", REG_NOFLAG, 0, KGRN"r--"KNRM },
{ "rw-", 0, 0, KRED"rw-"KNRM }, { "rw-", REG_NOFLAG, 0, KRED"rw-"KNRM },
{ " \\.\\.$", 0, 0, KBLU" .."KNRM }, { "^d[r\\-].* (\\.\\.)$", REG_EXTENDED, 1, KGRN".."KNRM },
{ " \\.$", 0, 0, KBLU" ."KNRM }, { "^d[r\\-].* (\\.)$", REG_EXTENDED, 1, KGRN"."KNRM },
{ "^d", 0, 0, KMAG"d"KNRM }, { "^d[r\\-].* ().*?$", REG_EXTENDED, 1, KBLU }, /* color directories blue; this one is such a hack omg just implement the function you keep talking about */
{ "z9Da0Da1", 0, 0, KRED"z9Da0Da1"KNRM }, { "z9Da0Da1", REG_NOFLAG, 0, KRED"(SUS STRING)z9Da0Da1"KNRM }, /* NOTE: this string is in the testing/long file btw. */
}; };
char ps1[] = KGRN"~>"KNRM; char ps1[] = KGRN"~>"KNRM;
char ps1_ack[] = KBLU"1~"KNRM; char ps1_ack[] = KBLU"1~"KNRM;
//CONF_DO_CMD_ACK defined in include/config.h to disable the ack above
//DBUG_DO_EOL_MARK defined in include/config.h if you want & at the end of lines
/*== REST IS CODE ==*/
/* pls dont break it */
ct_line processline(ct_line current_line){ ct_line processline(ct_line current_line){
int rules_length = (sizeof(replace_rules)/sizeof(replace_rules[0])); int rules_length = (sizeof(replace_rules)/sizeof(replace_rules[0]));
//TODO: implement line_regex_wrap_match as well for easier rule writing
for (int i=0; i<rules_length; i++) { for (int i=0; i<rules_length; i++) {
regex_t comp_regex; regex_t comp_regex;
int match1_comp_result = regcomp(&comp_regex, replace_rules[i].match_regex, replace_rules[i].match_cflags); //unused but needed int match1_comp_result = regcomp(&comp_regex, replace_rules[i].match_regex, replace_rules[i].match_cflags); //unused but needed; also slowwwwwwwww
int regex_result = line_regex_replace(&current_line, &comp_regex, replace_rules[i].replace_group, replace_rules[i].replace_with, 255); int regex_result = line_regex_replace(&current_line, &comp_regex, replace_rules[i].replace_group, replace_rules[i].replace_with, 4096); //4096 jank rn
regfree(&comp_regex); regfree(&comp_regex);
} }
return current_line; return current_line;
} }
void parsebuffer(char *roll_buffer, size_t read_length, int buffer_read_count) { void parsebuffer(char *roll_buffer, size_t read_length, int buffer_read_count) {
#if !DEBG_DO_EOL_MARK #if !DEBG_DO_EOL_MARK
char endstring[] = KNRM"\n"; char endstring[] = KNRM"\n";
@ -71,7 +93,7 @@ void parsebuffer(char *roll_buffer, size_t read_length, int buffer_read_count) {
int line_number = 0; //true int line_number = 0; //true
if (buffer_read_count != 0) line_number=1; if (buffer_read_count != 0) line_number=1;
char *found_char = strtok(roll_buffer, "\r\n"); //basically replace "\r\n" with NULL char *found_char = strtok(roll_buffer, "\r\n"); //basically replace next "\r\n" with NULL
while(found_char != NULL){ while(found_char != NULL){
ct_line current_line = {found_char, 0}; ct_line current_line = {found_char, 0};
ct_line post_processed_line = processline(current_line); ct_line post_processed_line = processline(current_line);
@ -83,7 +105,7 @@ void parsebuffer(char *roll_buffer, size_t read_length, int buffer_read_count) {
if (post_processed_line.need_free == 1) free(post_processed_line.line_str); if (post_processed_line.need_free == 1) free(post_processed_line.line_str);
line_number++; line_number++;
found_char = strtok(NULL, "\r\n"); // I really do not like this repetition found_char = strtok(NULL, "\r\n"); //NOTE: I really do not like this repetition
} }
//no more lines in buffer //no more lines in buffer
} }
@ -123,9 +145,8 @@ void supervise(int master_fd, int child_pid){
write(master_fd, parent_in_buffer, strlen(parent_in_buffer)); write(master_fd, parent_in_buffer, strlen(parent_in_buffer));
write(master_fd, "\n", 1); write(master_fd, "\n", 1);
usleep(100*1000); usleep(200*1000); //dirty hack because *some* commands are slow
} }
free(child_out_roll_buffer); free(child_out_roll_buffer);
free(parent_in_buffer); free(parent_in_buffer);
} }
@ -149,7 +170,6 @@ int main(int argc, char *argv[]) {
exit(EX_USAGE); exit(EX_USAGE);
} }
int master_fd; int master_fd;
pid_t child_pid; pid_t child_pid;
//if the pty window size is to be assigned. shoudnt be a concern since only used by tui programs //if the pty window size is to be assigned. shoudnt be a concern since only used by tui programs