From a0ff5b10f1307c12ffd464850eeec3ec66e2770f Mon Sep 17 00:00:00 2001 From: BanceDev Date: Tue, 10 Sep 2024 11:29:43 -0400 Subject: lua api functions for getting terminal width and height --- src/lua_api.c | 25 +++++++++++++++++++++++++ src/lush.c | 15 +++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'src') diff --git a/src/lua_api.c b/src/lua_api.c index 21f5d39..93fee31 100644 --- a/src/lua_api.c +++ b/src/lua_api.c @@ -26,6 +26,7 @@ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. #include #include #include +#include #include #include @@ -332,6 +333,26 @@ static int l_alias(lua_State *L) { return 0; } +static int l_terminal_cols(lua_State *L) { + struct winsize w; + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == -1) { + perror("ioctl"); + return 0; + } + lua_pushnumber(L, w.ws_col); + return 1; +} + +static int l_terminal_rows(lua_State *L) { + struct winsize w; + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == -1) { + perror("ioctl"); + return 0; + } + lua_pushnumber(L, w.ws_row); + return 1; +} + // -- register Lua functions -- void lua_register_api(lua_State *L) { @@ -370,6 +391,10 @@ void lua_register_api(lua_State *L) { lua_setfield(L, -2, "setPrompt"); lua_pushcfunction(L, l_alias); lua_setfield(L, -2, "alias"); + lua_pushcfunction(L, l_terminal_cols); + lua_setfield(L, -2, "termCols"); + lua_pushcfunction(L, l_terminal_rows); + lua_setfield(L, -2, "termRows"); // set the table as global lua_setglobal(L, "lush"); } diff --git a/src/lush.c b/src/lush.c index bd8d4e8..d295e45 100644 --- a/src/lush.c +++ b/src/lush.c @@ -195,6 +195,9 @@ static size_t get_prompt_len(const char *format, const char *username, } else if (strncmp(format, "%w", 2) == 0) { prompt_len += strlen(cwd); format += 2; + } else if (strncmp(format, "%t", 2) == 0) { + prompt_len += 8; // size of time format + format += 2; } else { prompt_len++; format++; @@ -230,6 +233,18 @@ static char *format_prompt_string(const char *input, const char *username, strcpy(dest, cwd); dest += strlen(cwd); input += 2; + } else if (strncmp(input, "%t", 2) == 0) { + time_t current_time; + time(¤t_time); + + struct tm *local_time = localtime(¤t_time); + + // Format the time as HH:MM:SS + char time_string[9]; // HH:MM:SS is 8 characters + null terminator + strftime(time_string, sizeof(time_string), "%H:%M:%S", local_time); + strcpy(dest, time_string); + dest += strlen(time_string); + input += 2; } else { *dest++ = *input++; } -- cgit v1.2.3-59-g8ed1b