Skip to content

Commit

Permalink
Add list-inputs command
Browse files Browse the repository at this point in the history
  • Loading branch information
Leon-Plickat authored and ifreund committed Jun 13, 2021
1 parent c9c9901 commit 3f4fd97
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
3 changes: 3 additions & 0 deletions doc/riverctl.1.scd
Original file line number Diff line number Diff line change
Expand Up @@ -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_.

Expand Down
1 change: 1 addition & 0 deletions river/command.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
Expand Down
31 changes: 31 additions & 0 deletions river/command/input.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 3f4fd97

Please sign in to comment.