mirror of
https://github.com/fairyglade/ly.git
synced 2025-12-20 19:24:53 +00:00
Add option to change shutdown/reboot keys (#487)
Include options in the configuration to change which function keys to use for shutdown and reboot. Fix config.map_len size in src/config.c. Add missing defaults in config_defaults() in src/config.c.
This commit is contained in:
23
src/config.c
23
src/config.c
@@ -113,13 +113,13 @@ void lang_load()
|
||||
{"err_user_uid", &lang.err_user_uid, lang_handle},
|
||||
{"err_xsessions_dir", &lang.err_xsessions_dir, lang_handle},
|
||||
{"err_xsessions_open", &lang.err_xsessions_open, lang_handle},
|
||||
{"f1", &lang.f1, lang_handle},
|
||||
{"f2", &lang.f2, lang_handle},
|
||||
{"login", &lang.login, lang_handle},
|
||||
{"logout", &lang.logout, lang_handle},
|
||||
{"numlock", &lang.numlock, lang_handle},
|
||||
{"password", &lang.password, lang_handle},
|
||||
{"restart", &lang.restart, lang_handle},
|
||||
{"shell", &lang.shell, lang_handle},
|
||||
{"shutdown", &lang.shutdown, lang_handle},
|
||||
{"wayland", &lang.wayland, lang_handle},
|
||||
{"xinitrc", &lang.xinitrc, lang_handle},
|
||||
};
|
||||
@@ -169,7 +169,7 @@ void config_load(const char *cfg_path)
|
||||
{"default_input", &config.default_input, config_handle_u8},
|
||||
{"fg", &config.fg, config_handle_u8},
|
||||
{"hide_borders", &config.hide_borders, config_handle_bool},
|
||||
{"hide_f1_commands", &config.hide_f1_commands, config_handle_bool},
|
||||
{"hide_key_hints", &config.hide_key_hints, config_handle_bool},
|
||||
{"input_len", &config.input_len, config_handle_u8},
|
||||
{"lang", &config.lang, config_handle_str},
|
||||
{"load", &config.load, config_handle_bool},
|
||||
@@ -182,10 +182,12 @@ void config_load(const char *cfg_path)
|
||||
{"min_refresh_delta", &config.min_refresh_delta, config_handle_u16},
|
||||
{"path", &config.path, config_handle_str},
|
||||
{"restart_cmd", &config.restart_cmd, config_handle_str},
|
||||
{"restart_key", &config.restart_key, config_handle_str},
|
||||
{"save", &config.save, config_handle_bool},
|
||||
{"save_file", &config.save_file, config_handle_str},
|
||||
{"service_name", &config.service_name, config_handle_str},
|
||||
{"shutdown_cmd", &config.shutdown_cmd, config_handle_str},
|
||||
{"shutdown_key", &config.shutdown_key, config_handle_str},
|
||||
{"term_reset_cmd", &config.term_reset_cmd, config_handle_str},
|
||||
{"tty", &config.tty, config_handle_u8},
|
||||
{"wayland_cmd", &config.wayland_cmd, config_handle_str},
|
||||
@@ -198,7 +200,7 @@ void config_load(const char *cfg_path)
|
||||
{"xsessions", &config.xsessions, config_handle_str},
|
||||
};
|
||||
|
||||
uint16_t map_len[] = {34};
|
||||
uint16_t map_len[] = {41};
|
||||
struct configator_param* map[] =
|
||||
{
|
||||
map_no_section,
|
||||
@@ -254,13 +256,13 @@ void lang_defaults()
|
||||
lang.err_user_uid = strdup("failed to set user UID");
|
||||
lang.err_xsessions_dir = strdup("failed to find sessions folder");
|
||||
lang.err_xsessions_open = strdup("failed to open sessions folder");
|
||||
lang.f1 = strdup("F1 shutdown");
|
||||
lang.f2 = strdup("F2 reboot");
|
||||
lang.login = strdup("login:");
|
||||
lang.logout = strdup("logged out");
|
||||
lang.numlock = strdup("numlock");
|
||||
lang.password = strdup("password:");
|
||||
lang.restart = strdup("reboot");
|
||||
lang.shell = strdup("shell");
|
||||
lang.shutdown = strdup("shutdown");
|
||||
lang.wayland = strdup("wayland");
|
||||
lang.xinitrc = strdup("xinitrc");
|
||||
}
|
||||
@@ -279,6 +281,7 @@ void config_defaults()
|
||||
config.default_input = LOGIN_INPUT;
|
||||
config.fg = 9;
|
||||
config.hide_borders = false;
|
||||
config.hide_key_hints = false;
|
||||
config.input_len = 34;
|
||||
config.lang = strdup("en");
|
||||
config.load = true;
|
||||
@@ -291,10 +294,12 @@ void config_defaults()
|
||||
config.min_refresh_delta = 5;
|
||||
config.path = strdup("/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin");
|
||||
config.restart_cmd = strdup("/sbin/shutdown -r now");
|
||||
config.restart_key = strdup("F2");
|
||||
config.save = true;
|
||||
config.save_file = strdup("/etc/ly/save");
|
||||
config.service_name = strdup("ly");
|
||||
config.shutdown_cmd = strdup("/sbin/shutdown -a now");
|
||||
config.shutdown_key = strdup("F1");
|
||||
config.term_reset_cmd = strdup("/usr/bin/tput reset");
|
||||
config.tty = 2;
|
||||
config.wayland_cmd = strdup(DATADIR "/wsetup.sh");
|
||||
@@ -345,13 +350,13 @@ void lang_free()
|
||||
free(lang.err_user_uid);
|
||||
free(lang.err_xsessions_dir);
|
||||
free(lang.err_xsessions_open);
|
||||
free(lang.f1);
|
||||
free(lang.f2);
|
||||
free(lang.login);
|
||||
free(lang.logout);
|
||||
free(lang.numlock);
|
||||
free(lang.password);
|
||||
free(lang.restart);
|
||||
free(lang.shell);
|
||||
free(lang.shutdown);
|
||||
free(lang.wayland);
|
||||
free(lang.xinitrc);
|
||||
}
|
||||
@@ -364,9 +369,11 @@ void config_free()
|
||||
free(config.mcookie_cmd);
|
||||
free(config.path);
|
||||
free(config.restart_cmd);
|
||||
free(config.restart_key);
|
||||
free(config.save_file);
|
||||
free(config.service_name);
|
||||
free(config.shutdown_cmd);
|
||||
free(config.shutdown_key);
|
||||
free(config.term_reset_cmd);
|
||||
free(config.wayland_cmd);
|
||||
free(config.waylandsessions);
|
||||
|
||||
@@ -48,13 +48,13 @@ struct lang
|
||||
char* err_user_uid;
|
||||
char* err_xsessions_dir;
|
||||
char* err_xsessions_open;
|
||||
char* f1;
|
||||
char* f2;
|
||||
char* login;
|
||||
char* logout;
|
||||
char* numlock;
|
||||
char* password;
|
||||
char* restart;
|
||||
char* shell;
|
||||
char* shutdown;
|
||||
char* wayland;
|
||||
char* xinitrc;
|
||||
};
|
||||
@@ -73,7 +73,7 @@ struct config
|
||||
uint8_t default_input;
|
||||
uint8_t fg;
|
||||
bool hide_borders;
|
||||
bool hide_f1_commands;
|
||||
bool hide_key_hints;
|
||||
uint8_t input_len;
|
||||
char* lang;
|
||||
bool load;
|
||||
@@ -86,10 +86,12 @@ struct config
|
||||
uint16_t min_refresh_delta;
|
||||
char* path;
|
||||
char* restart_cmd;
|
||||
char* restart_key;
|
||||
bool save;
|
||||
char* save_file;
|
||||
char* service_name;
|
||||
char* shutdown_cmd;
|
||||
char* shutdown_key;
|
||||
char* term_reset_cmd;
|
||||
uint8_t tty;
|
||||
char* wayland_cmd;
|
||||
|
||||
48
src/draw.c
48
src/draw.c
@@ -192,7 +192,7 @@ char* time_str(char* fmt, int maxlen)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -373,30 +373,54 @@ void draw_labels(struct term_buf* buf) // throws
|
||||
}
|
||||
}
|
||||
|
||||
void draw_f_commands()
|
||||
void draw_key_hints()
|
||||
{
|
||||
struct tb_cell* f1 = str_cell(lang.f1);
|
||||
|
||||
struct tb_cell* shutdown_key = str_cell(config.shutdown_key);
|
||||
int len = strlen(config.shutdown_key);
|
||||
if (dgn_catch())
|
||||
{
|
||||
dgn_reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
tb_blit(0, 0, strlen(lang.f1), 1, f1);
|
||||
free(f1);
|
||||
tb_blit(0, 0, len, 1, shutdown_key);
|
||||
free(shutdown_key);
|
||||
}
|
||||
|
||||
struct tb_cell* f2 = str_cell(lang.f2);
|
||||
|
||||
struct tb_cell* shutdown = str_cell(lang.shutdown);
|
||||
len += 1;
|
||||
if (dgn_catch())
|
||||
{
|
||||
dgn_reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
tb_blit(strlen(lang.f1) + 1, 0, strlen(lang.f2), 1, f2);
|
||||
free(f2);
|
||||
tb_blit(len, 0, strlen(lang.shutdown), 1, shutdown);
|
||||
free(shutdown);
|
||||
}
|
||||
|
||||
struct tb_cell* restart_key = str_cell(config.restart_key);
|
||||
len += strlen(lang.shutdown) + 1;
|
||||
if (dgn_catch())
|
||||
{
|
||||
dgn_reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
tb_blit(len, 0, strlen(config.restart_key), 1, restart_key);
|
||||
free(restart_key);
|
||||
}
|
||||
|
||||
struct tb_cell* restart = str_cell(lang.restart);
|
||||
len += strlen(config.restart_key) + 1;
|
||||
if (dgn_catch())
|
||||
{
|
||||
dgn_reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
tb_blit(len, 0, strlen(lang.restart), 1, restart);
|
||||
free(restart);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -962,7 +986,7 @@ bool cascade(struct term_buf* term_buf, uint8_t* fails)
|
||||
}
|
||||
|
||||
c_under = buf[(i + 1) * width + k].ch;
|
||||
|
||||
|
||||
if (!isspace(c_under))
|
||||
{
|
||||
continue;
|
||||
@@ -983,7 +1007,7 @@ bool cascade(struct term_buf* term_buf, uint8_t* fails)
|
||||
}
|
||||
}
|
||||
|
||||
// stop force-updating
|
||||
// stop force-updating
|
||||
if (!changes)
|
||||
{
|
||||
sleep(7);
|
||||
|
||||
@@ -70,7 +70,7 @@ struct tb_cell* strn_cell(char* s, uint16_t len);
|
||||
struct tb_cell* str_cell(char* s);
|
||||
|
||||
void draw_labels(struct term_buf* buf);
|
||||
void draw_f_commands();
|
||||
void draw_key_hints();
|
||||
void draw_lock_state(struct term_buf* buf);
|
||||
void draw_desktop(struct desktop* target);
|
||||
void draw_input(struct text* input);
|
||||
|
||||
41
src/main.c
41
src/main.c
@@ -136,7 +136,7 @@ int main(int argc, char** argv)
|
||||
// init visible elements
|
||||
struct tb_event event;
|
||||
struct term_buf buf;
|
||||
|
||||
|
||||
//Place the curser on the login field if there is no saved username, if there is, place the curser on the password field
|
||||
uint8_t active_input;
|
||||
if (config.default_input == LOGIN_INPUT && login.text != login.end){
|
||||
@@ -192,8 +192,8 @@ int main(int argc, char** argv)
|
||||
draw_box(&buf);
|
||||
draw_clock(&buf);
|
||||
draw_labels(&buf);
|
||||
if(!config.hide_f1_commands)
|
||||
draw_f_commands();
|
||||
if(!config.hide_key_hints)
|
||||
draw_key_hints();
|
||||
draw_lock_state(&buf);
|
||||
position_input(&buf, &desktop, &login, &password);
|
||||
draw_desktop(&desktop);
|
||||
@@ -242,15 +242,40 @@ int main(int argc, char** argv)
|
||||
|
||||
if (event.type == TB_EVENT_KEY)
|
||||
{
|
||||
char shutdown_key[4];
|
||||
memset(shutdown_key, '\0', sizeof(shutdown_key));
|
||||
strcpy(shutdown_key, config.shutdown_key);
|
||||
memcpy(shutdown_key, "0", 1);
|
||||
|
||||
char restart_key[4];
|
||||
memset(restart_key, '\0', sizeof(restart_key));
|
||||
strcpy(restart_key, config.restart_key);
|
||||
memcpy(restart_key, "0", 1);
|
||||
|
||||
switch (event.key)
|
||||
{
|
||||
case TB_KEY_F1:
|
||||
shutdown = true;
|
||||
run = false;
|
||||
break;
|
||||
case TB_KEY_F2:
|
||||
reboot = true;
|
||||
run = false;
|
||||
case TB_KEY_F3:
|
||||
case TB_KEY_F4:
|
||||
case TB_KEY_F5:
|
||||
case TB_KEY_F6:
|
||||
case TB_KEY_F7:
|
||||
case TB_KEY_F8:
|
||||
case TB_KEY_F9:
|
||||
case TB_KEY_F10:
|
||||
case TB_KEY_F11:
|
||||
case TB_KEY_F12:
|
||||
if( 0xFFFF - event.key + 1 == atoi(shutdown_key) )
|
||||
{
|
||||
shutdown = true;
|
||||
run = false;
|
||||
}
|
||||
if( 0xFFFF - event.key + 1 == atoi(restart_key) )
|
||||
{
|
||||
reboot = true;
|
||||
run = false;
|
||||
}
|
||||
break;
|
||||
case TB_KEY_CTRL_C:
|
||||
run = false;
|
||||
|
||||
Reference in New Issue
Block a user