diff --git a/CHANGELOG.md b/CHANGELOG.md index b5c02c2000..b972a53c8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * The default key to close the commit error message popup is now the Escape key [[@wessamfathi](https://github.com/wessamfathi)] ([#2552](https://github.com/extrawurst/gitui/issues/2552)) * use OSC52 copying in case other methods fail [[@naseschwarz](https://github.com/naseschwarz)] ([#2366](https://github.com/gitui-org/gitui/issues/2366)) * push: respect `branch.*.merge` when push default is upstream [[@vlad-anger](https://github.com/vlad-anger)] ([#2542](https://github.com/gitui-org/gitui/pull/2542)) +* set the terminal title to `gitui ({repo_path})` [[@acuteenvy](https://github.com/acuteenvy)] ([#2462](https://github.com/gitui-org/gitui/issues/2462)) ## [0.27.0] - 2024-01-14 diff --git a/src/main.rs b/src/main.rs index abc7f7b464..feea894491 100644 --- a/src/main.rs +++ b/src/main.rs @@ -47,7 +47,7 @@ mod ui; mod watcher; use crate::{app::App, args::process_cmdline}; -use anyhow::{bail, Result}; +use anyhow::{anyhow, bail, Result}; use app::QuitState; use asyncgit::{ sync::{utils::repo_work_dir, RepoPath}, @@ -71,7 +71,9 @@ use spinner::Spinner; use std::{ cell::RefCell, io::{self, Stdout}, - panic, process, + panic, + path::Path, + process, time::{Duration, Instant}, }; use ui::style::Theme; @@ -142,8 +144,8 @@ fn main() -> Result<()> { set_panic_handlers()?; - let mut terminal = start_terminal(io::stdout())?; let mut repo_path = cliargs.repo_path; + let mut terminal = start_terminal(io::stdout(), &repo_path)?; let input = Input::new(); let updater = if cliargs.notify_watcher { @@ -359,8 +361,27 @@ fn select_event( Ok(ev) } -fn start_terminal(buf: Stdout) -> io::Result { - let backend = CrosstermBackend::new(buf); +fn start_terminal( + buf: Stdout, + repo_path: &RepoPath, +) -> Result { + let mut path = repo_path.gitpath().canonicalize()?; + let home = dirs::home_dir().ok_or_else(|| { + anyhow!("failed to find the home directory") + })?; + if path.starts_with(&home) { + let relative_part = path + .strip_prefix(&home) + .expect("can't fail because of the if statement"); + path = Path::new("~").join(relative_part); + } + + let mut backend = CrosstermBackend::new(buf); + backend.execute(crossterm::terminal::SetTitle(format!( + "gitui ({})", + path.display() + )))?; + let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?; terminal.clear()?;