mirror of https://github.com/fairyglade/ly.git
Remove tput dependency & use termbox2 instead
Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
parent
0bbe9c78dd
commit
b73c78d2fb
|
@ -13,8 +13,6 @@ Ly is a lightweight TUI (ncurses-like) display manager for Linux and BSD.
|
||||||
- Runtime (with default config):
|
- Runtime (with default config):
|
||||||
- xorg
|
- xorg
|
||||||
- xorg-xauth
|
- xorg-xauth
|
||||||
- mcookie
|
|
||||||
- tput
|
|
||||||
- shutdown
|
- shutdown
|
||||||
|
|
||||||
### Debian
|
### Debian
|
||||||
|
|
|
@ -155,12 +155,6 @@ numlock = false
|
||||||
# Service name (set to ly to use the provided pam config file)
|
# Service name (set to ly to use the provided pam config file)
|
||||||
service_name = ly
|
service_name = ly
|
||||||
|
|
||||||
# Terminal reset command (tput is faster)
|
|
||||||
term_reset_cmd = $PREFIX_DIRECTORY/bin/tput reset
|
|
||||||
|
|
||||||
# Terminal restore cursor command
|
|
||||||
term_restore_cursor_cmd = $PREFIX_DIRECTORY/bin/tput cnorm
|
|
||||||
|
|
||||||
# Wayland setup command
|
# Wayland setup command
|
||||||
wayland_cmd = $CONFIG_DIRECTORY/ly/wsetup.sh
|
wayland_cmd = $CONFIG_DIRECTORY/ly/wsetup.sh
|
||||||
|
|
||||||
|
|
18
src/auth.zig
18
src/auth.zig
|
@ -117,7 +117,9 @@ pub fn authenticate(config: Config, current_environment: Session.Environment, lo
|
||||||
|
|
||||||
removeUtmpEntry(&entry);
|
removeUtmpEntry(&entry);
|
||||||
|
|
||||||
try resetTerminal(pwd.pw_shell.?, config.term_reset_cmd);
|
// Take back control of the TTY
|
||||||
|
_ = interop.termbox.tb_init();
|
||||||
|
_ = interop.termbox.tb_set_output_mode(interop.termbox.TB_OUTPUT_NORMAL);
|
||||||
|
|
||||||
if (shared_err.readError()) |err| return err;
|
if (shared_err.readError()) |err| return err;
|
||||||
}
|
}
|
||||||
|
@ -157,7 +159,8 @@ fn startSession(
|
||||||
// Execute what the user requested
|
// Execute what the user requested
|
||||||
std.posix.chdirZ(pwd.pw_dir.?) catch return error.ChangeDirectoryFailed;
|
std.posix.chdirZ(pwd.pw_dir.?) catch return error.ChangeDirectoryFailed;
|
||||||
|
|
||||||
try resetTerminal(pwd.pw_shell.?, config.term_reset_cmd);
|
// Give up control on the TTY
|
||||||
|
_ = interop.termbox.tb_shutdown();
|
||||||
|
|
||||||
switch (current_environment.display_server) {
|
switch (current_environment.display_server) {
|
||||||
.wayland => try executeWaylandCmd(pwd.pw_shell.?, config.wayland_cmd, current_environment.cmd),
|
.wayland => try executeWaylandCmd(pwd.pw_shell.?, config.wayland_cmd, current_environment.cmd),
|
||||||
|
@ -270,17 +273,6 @@ fn loginConv(
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn resetTerminal(shell: [*:0]const u8, term_reset_cmd: [:0]const u8) !void {
|
|
||||||
const pid = try std.posix.fork();
|
|
||||||
if (pid == 0) {
|
|
||||||
const args = [_:null]?[*:0]const u8{ shell, "-c", term_reset_cmd };
|
|
||||||
std.posix.execveZ(shell, &args, std.c.environ) catch {};
|
|
||||||
std.process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
_ = std.posix.waitpid(pid, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn getFreeDisplay() !u8 {
|
fn getFreeDisplay() !u8 {
|
||||||
var buf: [15]u8 = undefined;
|
var buf: [15]u8 = undefined;
|
||||||
var i: u8 = 0;
|
var i: u8 = 0;
|
||||||
|
|
|
@ -41,8 +41,6 @@ shutdown_cmd: []const u8 = "/sbin/shutdown -a now",
|
||||||
shutdown_key: []const u8 = "F1",
|
shutdown_key: []const u8 = "F1",
|
||||||
sleep_cmd: ?[]const u8 = null,
|
sleep_cmd: ?[]const u8 = null,
|
||||||
sleep_key: []const u8 = "F3",
|
sleep_key: []const u8 = "F3",
|
||||||
term_reset_cmd: [:0]const u8 = build_options.prefix_directory ++ "/bin/tput reset",
|
|
||||||
term_restore_cursor_cmd: []const u8 = build_options.prefix_directory ++ "/bin/tput cnorm",
|
|
||||||
tty: u8 = build_options.tty,
|
tty: u8 = build_options.tty,
|
||||||
vi_mode: bool = false,
|
vi_mode: bool = false,
|
||||||
vi_default_mode: ViMode = .normal,
|
vi_default_mode: ViMode = .normal,
|
||||||
|
|
|
@ -63,7 +63,9 @@ pub fn configFieldHandler(_: std.mem.Allocator, field: ini.IniField) ?ini.IniFie
|
||||||
std.mem.eql(u8, field.key, "max_desktop_len") or
|
std.mem.eql(u8, field.key, "max_desktop_len") or
|
||||||
std.mem.eql(u8, field.key, "max_login_len") or
|
std.mem.eql(u8, field.key, "max_login_len") or
|
||||||
std.mem.eql(u8, field.key, "max_password_len") or
|
std.mem.eql(u8, field.key, "max_password_len") or
|
||||||
std.mem.eql(u8, field.key, "mcookie_cmd"))
|
std.mem.eql(u8, field.key, "mcookie_cmd") or
|
||||||
|
std.mem.eql(u8, field.key, "term_reset_cmd") or
|
||||||
|
std.mem.eql(u8, field.key, "term_restore_cursor_cmd"))
|
||||||
{
|
{
|
||||||
// The options don't exist anymore
|
// The options don't exist anymore
|
||||||
mapped_config_fields = true;
|
mapped_config_fields = true;
|
||||||
|
|
10
src/main.zig
10
src/main.zig
|
@ -712,15 +712,13 @@ pub fn main() !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
try std.posix.tcsetattr(std.posix.STDIN_FILENO, .FLUSH, tb_termios);
|
try std.posix.tcsetattr(std.posix.STDIN_FILENO, .FLUSH, tb_termios);
|
||||||
if (auth_fails < config.auth_fails) {
|
if (auth_fails < config.auth_fails) _ = termbox.tb_clear();
|
||||||
_ = termbox.tb_clear();
|
|
||||||
_ = termbox.tb_present();
|
|
||||||
}
|
|
||||||
|
|
||||||
update = true;
|
update = true;
|
||||||
|
|
||||||
var restore_cursor = std.process.Child.init(&[_][]const u8{ "/bin/sh", "-c", config.term_restore_cursor_cmd }, allocator);
|
// Restore the cursor
|
||||||
_ = restore_cursor.spawnAndWait() catch .{};
|
_ = termbox.tb_set_cursor(0, 0);
|
||||||
|
_ = termbox.tb_present();
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
if (!insert_mode) {
|
if (!insert_mode) {
|
||||||
|
|
Loading…
Reference in New Issue