Add focus-column-{first,last}

This commit is contained in:
Ivan Molodetskikh
2023-12-29 07:51:14 +04:00
parent 097c415036
commit d6c553091f
6 changed files with 49 additions and 0 deletions
+3
View File
@@ -203,6 +203,9 @@ binds {
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; } // Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; } // Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Shift+H { focus-monitor-left; } Mod+Shift+H { focus-monitor-left; }
Mod+Shift+J { focus-monitor-down; } Mod+Shift+J { focus-monitor-down; }
Mod+Shift+K { focus-monitor-up; } Mod+Shift+K { focus-monitor-up; }
+2
View File
@@ -313,6 +313,8 @@ pub enum Action {
FullscreenWindow, FullscreenWindow,
FocusColumnLeft, FocusColumnLeft,
FocusColumnRight, FocusColumnRight,
FocusColumnFirst,
FocusColumnLast,
FocusWindowDown, FocusWindowDown,
FocusWindowUp, FocusWindowUp,
FocusWindowOrWorkspaceDown, FocusWindowOrWorkspaceDown,
+6
View File
@@ -357,6 +357,12 @@ impl State {
Action::FocusColumnRight => { Action::FocusColumnRight => {
self.niri.layout.focus_right(); self.niri.layout.focus_right();
} }
Action::FocusColumnFirst => {
self.niri.layout.focus_column_first();
}
Action::FocusColumnLast => {
self.niri.layout.focus_column_last();
}
Action::FocusWindowDown => { Action::FocusWindowDown => {
self.niri.layout.focus_down(); self.niri.layout.focus_down();
} }
+18
View File
@@ -816,6 +816,20 @@ impl<W: LayoutElement> Layout<W> {
monitor.focus_right(); monitor.focus_right();
} }
pub fn focus_column_first(&mut self) {
let Some(monitor) = self.active_monitor() else {
return;
};
monitor.focus_column_first();
}
pub fn focus_column_last(&mut self) {
let Some(monitor) = self.active_monitor() else {
return;
};
monitor.focus_column_last();
}
pub fn focus_down(&mut self) { pub fn focus_down(&mut self) {
let Some(monitor) = self.active_monitor() else { let Some(monitor) = self.active_monitor() else {
return; return;
@@ -1524,6 +1538,8 @@ mod tests {
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize), FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
FocusColumnLeft, FocusColumnLeft,
FocusColumnRight, FocusColumnRight,
FocusColumnFirst,
FocusColumnLast,
FocusWindowDown, FocusWindowDown,
FocusWindowUp, FocusWindowUp,
FocusWindowOrWorkspaceDown, FocusWindowOrWorkspaceDown,
@@ -1635,6 +1651,8 @@ mod tests {
} }
Op::FocusColumnLeft => layout.focus_left(), Op::FocusColumnLeft => layout.focus_left(),
Op::FocusColumnRight => layout.focus_right(), Op::FocusColumnRight => layout.focus_right(),
Op::FocusColumnFirst => layout.focus_column_first(),
Op::FocusColumnLast => layout.focus_column_last(),
Op::FocusWindowDown => layout.focus_down(), Op::FocusWindowDown => layout.focus_down(),
Op::FocusWindowUp => layout.focus_up(), Op::FocusWindowUp => layout.focus_up(),
Op::FocusWindowOrWorkspaceDown => layout.focus_window_or_workspace_down(), Op::FocusWindowOrWorkspaceDown => layout.focus_window_or_workspace_down(),
+8
View File
@@ -197,6 +197,14 @@ impl<W: LayoutElement> Monitor<W> {
self.active_workspace().focus_right(); self.active_workspace().focus_right();
} }
pub fn focus_column_first(&mut self) {
self.active_workspace().focus_column_first();
}
pub fn focus_column_last(&mut self) {
self.active_workspace().focus_column_last();
}
pub fn focus_down(&mut self) { pub fn focus_down(&mut self) {
self.active_workspace().focus_down(); self.active_workspace().focus_down();
} }
+12
View File
@@ -617,6 +617,18 @@ impl<W: LayoutElement> Workspace<W> {
self.activate_column(min(self.active_column_idx + 1, self.columns.len() - 1)); self.activate_column(min(self.active_column_idx + 1, self.columns.len() - 1));
} }
pub fn focus_column_first(&mut self) {
self.activate_column(0);
}
pub fn focus_column_last(&mut self) {
if self.columns.is_empty() {
return;
}
self.activate_column(self.columns.len() - 1);
}
pub fn focus_down(&mut self) { pub fn focus_down(&mut self) {
if self.columns.is_empty() { if self.columns.is_empty() {
return; return;