Skip to content

Commit

Permalink
command: allow targeting outputs by name
Browse files Browse the repository at this point in the history
This extends focus-output and send-to-output to allow targeting
outputs by name instead of relative position.
  • Loading branch information
pmkap authored Feb 6, 2022
1 parent eb8f10a commit ca47b8a
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 6 deletions.
11 changes: 6 additions & 5 deletions doc/riverctl.1.scd
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ over the Wayland protocol.
Remove an app-id or title from the float filter list. Note that this
affects only new views, not already existing ones.

*focus-output* *next*|*previous*|*up*|*right*|*down*|*left*
Focus the next or previous output or the closest output in any direction.
*focus-output* *next*|*previous*|*up*|*right*|*down*|*left*|_name_
Focus the next or previous output, the closest output in any direction
or an output by name.

*focus-view* *next*|*previous*
Focus the next or previous view in the stack.
Expand All @@ -68,9 +69,9 @@ over the Wayland protocol.
Snap the focused view to the specified screen edge. The view will
be set to floating.

*send-to-output* *next*|*previous*|*up*|*right*|*down*|*left*
Send the focused view to the next or previous output or the closest
output in any direction.
*send-to-output* *next*|*previous*|*up*|*right*|*down*|*left*|_name_
Send the focused view to the next or previous output, the closest
output in any direction or to an output by name.

*spawn* _shell_command_
Run _shell_command_ using `/bin/sh -c _shell_command_`. Note that
Expand Down
2 changes: 2 additions & 0 deletions river/command.zig
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ pub const Error = error{
InvalidCharacter,
InvalidDirection,
InvalidPhysicalDirection,
InvalidOutputIndicator,
InvalidOrientation,
InvalidRgba,
InvalidValue,
Expand Down Expand Up @@ -141,6 +142,7 @@ pub fn errToMsg(err: Error) [:0]const u8 {
Error.InvalidCharacter => "invalid character in argument",
Error.InvalidDirection => "invalid direction. Must be 'next' or 'previous'",
Error.InvalidPhysicalDirection => "invalid direction. Must be 'up', 'down', 'left' or 'right'",
Error.InvalidOutputIndicator => "invalid indicator for an output. Must be 'next', 'previous', 'up', 'down', 'left', 'right' or a valid output name",
Error.InvalidOrientation => "invalid orientation. Must be 'horizontal', or 'vertical'",
Error.InvalidRgba => "invalid color format, must be hexadecimal 0xRRGGBB or 0xRRGGBBAA",
Error.InvalidValue => "invalid value",
Expand Down
11 changes: 10 additions & 1 deletion river/command/output.zig
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ pub fn sendToOutput(

if (seat.focused == .view) {
const destination_output = (try getOutput(seat, args[1])) orelse return;
// If the view is already on destination_output, do nothing
if (seat.focused.view.output == destination_output) return;
seat.focused.view.sendToOutput(destination_output);

// Handle the change and focus whatever's next in the focus stack
Expand Down Expand Up @@ -93,6 +95,13 @@ fn getOutput(seat: *Seat, str: []const u8) !?*Output {
) orelse return null;
return @intToPtr(*Output, wlr_output.data);
} else {
return Error.InvalidDirection;
// Check if an output matches by name
var it = server.root.outputs.first;
while (it) |node| : (it = node.next) {
if (std.mem.eql(u8, std.mem.span(node.data.wlr_output.name), str)) {
return &node.data;
}
}
return Error.InvalidOutputIndicator;
}
}

0 comments on commit ca47b8a

Please sign in to comment.