diff options
-rw-r--r-- | chatty.c | 18 | ||||
-rw-r--r-- | ui.c | 13 |
2 files changed, 27 insertions, 4 deletions
@@ -19,6 +19,8 @@ #define LOGFILE "chatty.log" // enable logging #define LOGGING +// Number of spaces inserted when pressing Tab/Ctrl+I +#define TAB_WIDTH 4 #define DEBUG @@ -761,12 +763,25 @@ main(int argc, char** argv) } } break; + case TB_KEY_CTRL_I: + { + for (u32 i = 0; + i < TAB_WIDTH && InputLen < INPUT_LIMIT - 1; + i++) + { + Input[InputLen] = L' '; + InputLen++; + } + } break; case TB_KEY_CTRL_D: case TB_KEY_CTRL_C: quit = 1; break; case TB_KEY_CTRL_M: // send message - if (InputLen == 0) + { + raw_result RawText = markdown_to_raw(0, Input, InputLen); + + if (RawText.Len == 0) // do not send empty message break; if (fds[FDS_UNI].fd == -1) @@ -796,6 +811,7 @@ main(int argc, char** argv) MessagesNum++; // also clear input + } // fallthrough case TB_KEY_CTRL_U: // clear input bzero(Input, InputLen * sizeof(*Input)); InputLen = 0; @@ -207,20 +207,27 @@ tb_print_wrapped_with_markdown(u32 XOffset, u32 YOffset, u32 fg, u32 bg, // Return string without markdown markup characters using `is_markdown()` // ScratchArena is used to allocate space for the raw text +// If ScratchArena is null then it will only return then length of the raw string // Len should be characters + null terminator // Copies the null terminator as well raw_result markdown_to_raw(Arena* ScratchArena, u32* Text, u32 Len) { raw_result Result = {0}; - Result.Text = ScratchArena->addr; + if (ScratchArena) + { + Result.Text = ScratchArena->addr; + } for (u32 i = 0; i < Len; i++) { if (!is_markdown(Text[i])) { - u32* ch = ArenaPush(ScratchArena, sizeof(*ch)); - *ch = Text[i]; + if (ScratchArena) + { + u32* ch = ArenaPush(ScratchArena, sizeof(*ch)); + *ch = Text[i]; + } Result.Len++; } } |