Implement scr.break (word)

This commit is contained in:
pancake 2016-12-17 10:42:15 +01:00
parent df413fef42
commit 15c10b2bdc
3 changed files with 31 additions and 1 deletions

View File

@ -167,7 +167,7 @@ R_API void r_cons_strcat_justify (const char *str, int j, char c) {
}
}
if (len > 1) {
r_cons_memcat (str+o, len);
r_cons_memcat (str + o, len);
}
}
@ -381,6 +381,7 @@ R_API RCons *r_cons_free() {
free (I.buffer);
I.buffer = NULL;
}
R_FREE (I.break_word);
r_stack_free (I.cons_stack);
r_stack_free (I.break_stack);
return NULL;
@ -828,6 +829,11 @@ R_API void r_cons_memcat(const char *str, int len) {
if (I.flush) {
r_cons_flush ();
}
if (I.break_word) {
if (r_mem_mem ((const ut8*)str, len, (const ut8*)I.break_word, I.break_word_len)) {
I.breaked = true;
}
}
}
R_API void r_cons_memset(char ch, int len) {
@ -1248,3 +1254,13 @@ R_API const char* r_cons_get_rune(const ut8 ch) {
return NULL;
}
R_API void r_cons_breakword(const char *s) {
free (I.break_word);
if (s) {
I.break_word = strdup (s);
I.break_word_len = strlen (s);
} else {
I.break_word = NULL;
I.break_word_len = 0;
}
}

View File

@ -1158,6 +1158,16 @@ static int cb_rgbcolors(void *user, void *data) {
return true;
}
static int cb_scrbreak(void* user, void* data) {
RConfigNode *node = (RConfigNode*) data;
if (*node->value) {
r_cons_breakword (node->value);
} else {
r_cons_breakword (NULL);
}
return true;
}
static int cb_scrcolumns(void* user, void* data) {
RConfigNode *node = (RConfigNode*) data;
RCore *core = (RCore*) user;
@ -2099,6 +2109,7 @@ R_API int r_core_config_init(RCore *core) {
SETPREF("scr.atport", "false", "V@ starts a background http server and spawns an r2 -C");
SETI("scr.wheelspeed", 4, "Mouse wheel speed");
// DEPRECATED: USES hex.cols now SETI("scr.colpos", 80, "Column position of cmd.cprompt in visual");
SETCB("scr.break", "", &cb_scrbreak, "Emulate console break (^C) when a word is printed (useful for pD)");
SETICB("scr.columns", 0, &cb_scrcolumns, "Force console column count (width)");
SETCB("scr.rows", "0", &cb_scrrows, "Force console row count (height) ");
SETICB("scr.rows", 0, &cb_rows, "Force console row count (height) (duplicate?)");

View File

@ -269,6 +269,8 @@ typedef struct r_cons_t {
bool use_utf8; // use utf8 features
int linesleep;
int pagesize;
char *break_word;
int break_word_len;
ut64 timeout;
} RCons;
@ -429,6 +431,7 @@ typedef void (*RConsBreak)(void *);
R_API void r_cons_break_end(void);
R_API bool r_cons_is_breaked();
R_API void r_cons_break_timeout(int timeout);
R_API void r_cons_breakword(const char *s);
/* pipe */
R_API int r_cons_pipe_open(const char *file, int fdn, int append);