client: Automate display refresh enablement
The display refresh is automatically enabled or disabled depending on the width of the window. This allows to avoid the incorrect display on refresh for the small windows.
This commit is contained in:
parent
9eeaedf189
commit
5d68fbd55f
|
@ -28,6 +28,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
|
@ -48,6 +50,7 @@ static struct l_timeout *refresh_timeout;
|
||||||
static struct saved_input *agent_saved_input;
|
static struct saved_input *agent_saved_input;
|
||||||
|
|
||||||
static struct display_refresh {
|
static struct display_refresh {
|
||||||
|
bool enabled;
|
||||||
char *family;
|
char *family;
|
||||||
char *entity;
|
char *entity;
|
||||||
const struct command *cmd;
|
const struct command *cmd;
|
||||||
|
@ -56,7 +59,7 @@ static struct display_refresh {
|
||||||
size_t undo_lines;
|
size_t undo_lines;
|
||||||
struct l_queue *redo_entries;
|
struct l_queue *redo_entries;
|
||||||
bool recording;
|
bool recording;
|
||||||
} display_refresh;
|
} display_refresh = { .enabled = true };
|
||||||
|
|
||||||
struct saved_input {
|
struct saved_input {
|
||||||
char *line;
|
char *line;
|
||||||
|
@ -221,12 +224,45 @@ void display_refresh_set_cmd(const char *family, const char *entity,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void display_refresh_check_feasibility(void)
|
||||||
|
{
|
||||||
|
const struct winsize ws;
|
||||||
|
|
||||||
|
ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws);
|
||||||
|
|
||||||
|
if (ws.ws_col < LINE_LEN - 1) {
|
||||||
|
if (display_refresh.enabled) {
|
||||||
|
display_refresh.recording = false;
|
||||||
|
display(COLOR_YELLOW "Auto-refresh is disabled. "
|
||||||
|
"Enlarge window width to at least %u to enable."
|
||||||
|
"\n" COLOR_OFF, LINE_LEN - 1);
|
||||||
|
display_refresh.recording = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
display_refresh.enabled = false;
|
||||||
|
} else {
|
||||||
|
display_refresh.enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display_refresh_check_applicability(void)
|
||||||
|
{
|
||||||
|
if (display_refresh.enabled && display_refresh.cmd)
|
||||||
|
display_refresh_redo_lines();
|
||||||
|
else if (display_refresh.cmd)
|
||||||
|
display_refresh_timeout_set();
|
||||||
|
}
|
||||||
|
|
||||||
static void timeout_callback(struct l_timeout *timeout, void *user_data)
|
static void timeout_callback(struct l_timeout *timeout, void *user_data)
|
||||||
{
|
{
|
||||||
struct saved_input *input;
|
struct saved_input *input;
|
||||||
|
|
||||||
if (!display_refresh.cmd)
|
if (!display_refresh.enabled || !display_refresh.cmd) {
|
||||||
|
if (display_refresh.cmd)
|
||||||
|
display_refresh_timeout_set();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
input = save_input();
|
input = save_input();
|
||||||
display_refresh_undo_lines();
|
display_refresh_undo_lines();
|
||||||
|
@ -336,8 +372,7 @@ void display_table_footer(void)
|
||||||
{
|
{
|
||||||
display_text("\n");
|
display_text("\n");
|
||||||
|
|
||||||
if (display_refresh.cmd)
|
display_refresh_check_applicability();
|
||||||
display_refresh_redo_lines();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_command_line(const char *command_family,
|
void display_command_line(const char *command_family,
|
||||||
|
@ -636,8 +671,7 @@ void display_quit(void)
|
||||||
|
|
||||||
static void window_change_signal_handler(void *user_data)
|
static void window_change_signal_handler(void *user_data)
|
||||||
{
|
{
|
||||||
if (display_refresh.cmd)
|
display_refresh_check_feasibility();
|
||||||
display_refresh_reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *history_path;
|
static char *history_path;
|
||||||
|
@ -691,6 +725,8 @@ void display_init(void)
|
||||||
readline_callback);
|
readline_callback);
|
||||||
|
|
||||||
rl_redisplay();
|
rl_redisplay();
|
||||||
|
|
||||||
|
display_refresh_check_feasibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_exit(void)
|
void display_exit(void)
|
||||||
|
|
|
@ -28,6 +28,7 @@ struct command_family;
|
||||||
#define COLOR_GREEN "\x1b[32m"
|
#define COLOR_GREEN "\x1b[32m"
|
||||||
#define COLOR_RED "\x1B[0;91m"
|
#define COLOR_RED "\x1B[0;91m"
|
||||||
#define COLOR_BLUE "\x1B[94m"
|
#define COLOR_BLUE "\x1B[94m"
|
||||||
|
#define COLOR_YELLOW "\x1b[33m"
|
||||||
#define COLOR_OFF "\x1B[0m"
|
#define COLOR_OFF "\x1B[0m"
|
||||||
#define CLEAR_SCREEN "\033[2J"
|
#define CLEAR_SCREEN "\033[2J"
|
||||||
#define MARGIN " "
|
#define MARGIN " "
|
||||||
|
|
Loading…
Reference in New Issue