aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/riverctl.1.scd3
-rw-r--r--river/command.zig1
-rw-r--r--river/command/input.zig31
3 files changed, 35 insertions, 0 deletions
diff --git a/doc/riverctl.1.scd b/doc/riverctl.1.scd
index 9e106c1..caad6f1 100644
--- a/doc/riverctl.1.scd
+++ b/doc/riverctl.1.scd
@@ -269,6 +269,9 @@ A complete list may be found in _/usr/include/linux/input-event-codes.h_
## INPUT CONFIGURATION
+*list-inputs*
+ List all input devices.
+
The _input_ command can be used to create a configuration rule for an input
device identified by its _name_.
diff --git a/river/command.zig b/river/command.zig
index 9cdface..5738366 100644
--- a/river/command.zig
+++ b/river/command.zig
@@ -58,6 +58,7 @@ const str_to_impl_fn = [_]struct {
.{ .name = "focus-output", .impl = @import("command/focus_output.zig").focusOutput },
.{ .name = "focus-view", .impl = @import("command/focus_view.zig").focusView },
.{ .name = "input", .impl = @import("command/input.zig").input },
+ .{ .name = "list-inputs", .impl = @import("command/input.zig").listInputs },
.{ .name = "map", .impl = @import("command/map.zig").map },
.{ .name = "map-pointer", .impl = @import("command/map.zig").mapPointer },
.{ .name = "mod-layout-value", .impl = @import("command/layout.zig").modLayoutValue },
diff --git a/river/command/input.zig b/river/command/input.zig
index cbf3342..c2ba937 100644
--- a/river/command/input.zig
+++ b/river/command/input.zig
@@ -27,6 +27,37 @@ const Seat = @import("../Seat.zig");
const InputConfig = @import("../InputConfig.zig");
const InputManager = @import("../InputManager.zig");
+pub fn listInputs(
+ allocator: *mem.Allocator,
+ seat: *Seat,
+ args: []const []const u8,
+ out: *?[]const u8,
+) Error!void {
+ var input_list = std.ArrayList(u8).init(allocator);
+ const writer = input_list.writer();
+ var prev = false;
+
+ var it = server.input_manager.input_devices.first;
+ while (it) |node| : (it = node.next) {
+ const configured = for (server.input_manager.input_configs.items) |*input_config| {
+ if (mem.eql(u8, input_config.identifier, mem.sliceTo(node.data.identifier, 0))) {
+ break true;
+ }
+ } else false;
+
+ if (prev) try input_list.appendSlice("\n");
+ prev = true;
+
+ try writer.print("{s}\n\ttype: {s}\n\tconfigured: {s}\n", .{
+ node.data.identifier,
+ @tagName(node.data.device.type),
+ configured,
+ });
+ }
+
+ out.* = input_list.toOwnedSlice();
+}
+
pub fn input(
allocator: *mem.Allocator,
seat: *Seat,