aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-12-29 07:51:14 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-12-29 07:51:14 +0400
commitd6c553091f037f482f63d8a8afce306b236c404b (patch)
tree62b7cc1d759c48b5036f998971f3444c4f42972b
parent097c415036ed63c0736a6434ab9be25fbac042e1 (diff)
downloadniri-d6c553091f037f482f63d8a8afce306b236c404b.tar.gz
niri-d6c553091f037f482f63d8a8afce306b236c404b.tar.bz2
niri-d6c553091f037f482f63d8a8afce306b236c404b.zip
Add focus-column-{first,last}
-rw-r--r--resources/default-config.kdl3
-rw-r--r--src/config.rs2
-rw-r--r--src/input.rs6
-rw-r--r--src/layout/mod.rs18
-rw-r--r--src/layout/monitor.rs8
-rw-r--r--src/layout/workspace.rs12
6 files changed, 49 insertions, 0 deletions
diff --git a/resources/default-config.kdl b/resources/default-config.kdl
index bf1c004b..1cee634a 100644
--- a/resources/default-config.kdl
+++ b/resources/default-config.kdl
@@ -203,6 +203,9 @@ binds {
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// 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+J { focus-monitor-down; }
Mod+Shift+K { focus-monitor-up; }
diff --git a/src/config.rs b/src/config.rs
index 9ca61e20..df9d0ecd 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -313,6 +313,8 @@ pub enum Action {
FullscreenWindow,
FocusColumnLeft,
FocusColumnRight,
+ FocusColumnFirst,
+ FocusColumnLast,
FocusWindowDown,
FocusWindowUp,
FocusWindowOrWorkspaceDown,
diff --git a/src/input.rs b/src/input.rs
index d315754a..9e7e66f2 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -357,6 +357,12 @@ impl State {
Action::FocusColumnRight => {
self.niri.layout.focus_right();
}
+ Action::FocusColumnFirst => {
+ self.niri.layout.focus_column_first();
+ }
+ Action::FocusColumnLast => {
+ self.niri.layout.focus_column_last();
+ }
Action::FocusWindowDown => {
self.niri.layout.focus_down();
}
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index c60211a3..02287db6 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -816,6 +816,20 @@ impl<W: LayoutElement> Layout<W> {
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) {
let Some(monitor) = self.active_monitor() else {
return;
@@ -1524,6 +1538,8 @@ mod tests {
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
FocusColumnLeft,
FocusColumnRight,
+ FocusColumnFirst,
+ FocusColumnLast,
FocusWindowDown,
FocusWindowUp,
FocusWindowOrWorkspaceDown,
@@ -1635,6 +1651,8 @@ mod tests {
}
Op::FocusColumnLeft => layout.focus_left(),
Op::FocusColumnRight => layout.focus_right(),
+ Op::FocusColumnFirst => layout.focus_column_first(),
+ Op::FocusColumnLast => layout.focus_column_last(),
Op::FocusWindowDown => layout.focus_down(),
Op::FocusWindowUp => layout.focus_up(),
Op::FocusWindowOrWorkspaceDown => layout.focus_window_or_workspace_down(),
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs
index aa4c439e..28d7921e 100644
--- a/src/layout/monitor.rs
+++ b/src/layout/monitor.rs
@@ -197,6 +197,14 @@ impl<W: LayoutElement> Monitor<W> {
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) {
self.active_workspace().focus_down();
}
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs
index aa00b348..d496cd69 100644
--- a/src/layout/workspace.rs
+++ b/src/layout/workspace.rs
@@ -617,6 +617,18 @@ impl<W: LayoutElement> Workspace<W> {
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) {
if self.columns.is_empty() {
return;