summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-04-15 16:56:32 +0200
committerAram Drevekenin <aram@poor.dev>2024-04-15 16:56:32 +0200
commitba2557ed15338e0b0014fcd3511e7e18bd9fb5ab (patch)
tree3f5fb2f805b5af8e34b56396597a9aef44274133
parent2e51c6bb8d2ae7ff01caf77335907740b2b4f550 (diff)
parentd473c7291d375fa99ccfa601bd9e48452f2ac786 (diff)
Merge branch 'main' into rename-create-backgroundrename-create-background
-rw-r--r--CHANGELOG.md1
-rw-r--r--default-plugins/session-manager/src/resurrectable_sessions.rs54
-rw-r--r--zellij-server/src/background_jobs.rs8
3 files changed, 42 insertions, 21 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 46bbb3aa1..643c257f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* feat(cli): allow starting a session in the background (detached) (https://github.com/zellij-org/zellij/pull/3257)
* feat(config): allow disabling writing of session metadata to disk (https://github.com/zellij-org/zellij/pull/3258)
* fix(compact-bar): properly pad mode indicator (https://github.com/zellij-org/zellij/pull/3260)
+* fix(resurrection): do not list empty sessions and fix search ux issue in session-manager (https://github.com/zellij-org/zellij/pull/3264)
## [0.39.2] - 2023-11-29
* fix(cli): typo in cli help (https://github.com/zellij-org/zellij/pull/2906)
diff --git a/default-plugins/session-manager/src/resurrectable_sessions.rs b/default-plugins/session-manager/src/resurrectable_sessions.rs
index 988870366..3b03d5072 100644
--- a/default-plugins/session-manager/src/resurrectable_sessions.rs
+++ b/default-plugins/session-manager/src/resurrectable_sessions.rs
@@ -21,6 +21,9 @@ impl ResurrectableSessions {
pub fn update(&mut self, mut list: Vec<(String, Duration)>) {
list.sort_by(|a, b| a.1.cmp(&b.1));
self.all_resurrectable_sessions = list;
+ if self.is_searching {
+ self.update_search_term();
+ }
}
pub fn render(&self, rows: usize, columns: usize, x: usize, y: usize) {
if self.delete_all_dead_sessions_warning {
@@ -256,23 +259,29 @@ impl ResurrectableSessions {
}
}
pub fn delete_selected_session(&mut self) {
- self.selected_index
- .and_then(|i| {
- if self.all_resurrectable_sessions.len() > i {
- // optimistic update
- if i == 0 {
- self.selected_index = None;
- } else if i == self.all_resurrectable_sessions.len().saturating_sub(1) {
- self.selected_index = Some(i.saturating_sub(1));
+ if self.is_searching {
+ self.selected_search_index
+ .and_then(|i| self.search_results.get(i))
+ .map(|search_result| delete_dead_session(&search_result.session_name));
+ } else {
+ self.selected_index
+ .and_then(|i| {
+ if self.all_resurrectable_sessions.len() > i {
+ // optimistic update
+ if i == 0 {
+ self.selected_index = None;
+ } else if i == self.all_resurrectable_sessions.len().saturating_sub(1) {
+ self.selected_index = Some(i.saturating_sub(1));
+ }
+ Some(self.all_resurrectable_sessions.remove(i))
+ } else {
+ None
}
- Some(self.all_resurrectable_sessions.remove(i))
- } else {
- None
- }
- })
- .map(|session_name_and_creation_time| {
- delete_dead_session(&session_name_and_creation_time.0)
- });
+ })
+ .map(|session_name_and_creation_time| {
+ delete_dead_session(&session_name_and_creation_time.0)
+ });
+ }
}
fn delete_all_sessions(&mut self) {
// optimistic update
@@ -319,7 +328,18 @@ impl ResurrectableSessions {
matches.sort_by(|a, b| b.score.cmp(&a.score));
self.search_results = matches;
self.is_searching = !self.search_term.is_empty();
- self.selected_search_index = Some(0);
+ match self.selected_search_index {
+ Some(search_index) => {
+ if self.search_results.is_empty() {
+ self.selected_search_index = None;
+ } else if search_index >= self.search_results.len() {
+ self.selected_search_index = Some(self.search_results.len().saturating_sub(1));
+ }
+ },
+ None => {
+ self.selected_search_index = Some(0);
+ },
+ }
}
}
diff --git a/zellij-server/src/background_jobs.rs b/zellij-server/src/background_jobs.rs
index ddf90ee6d..d1bd05859 100644
--- a/zellij-server/src/background_jobs.rs
+++ b/zellij-server/src/background_jobs.rs
@@ -436,10 +436,10 @@ fn find_resurrectable_sessions(
{
Ok(created) => Some(created),
Err(e) => {
- if e.kind() != std::io::ErrorKind::NotFound {
- // let's not spam the
- // logs if serialization
- // is disabled
+ if e.kind() == std::io::ErrorKind::NotFound {
+ return None; // no layout file, cannot resurrect session, let's not
+ // list it
+ } else {
log::error!(
"Failed to read created stamp of resurrection file: {:?}",
e