diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2023-07-31 16:48:04 -0400 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2023-07-31 16:48:04 -0400 |
commit | 0cd9c1a88f5491be681b0c871584e9f64b3729b8 (patch) | |
tree | ee3bd0c58a37032347584fb2badd1ababc4ef434 | |
parent | ba4d863a71e5f182f7e38bb3b3b23aaf9e151cd0 (diff) | |
parent | 8d164f201b928c40b35100f73776af5dd2c44e3c (diff) |
Merge branch 'main' of github.com:kamiyaa/joshuto
-rw-r--r-- | README.md | 2 | ||||
-rwxr-xr-x | config/preview_file.sh | 6 | ||||
-rw-r--r-- | docs/configuration/joshuto.toml.md | 5 | ||||
-rw-r--r-- | src/commands/command_line.rs | 7 | ||||
-rw-r--r-- | src/commands/open_file.rs | 10 | ||||
-rw-r--r-- | src/commands/sub_process.rs | 4 | ||||
-rw-r--r-- | src/config/general/app.rs | 3 | ||||
-rw-r--r-- | src/config/general/app_raw.rs | 4 | ||||
-rw-r--r-- | src/main.rs | 9 | ||||
-rw-r--r-- | src/ui/widgets/tui_footer.rs | 4 | ||||
-rw-r--r-- | src/util/format.rs | 2 |
11 files changed, 45 insertions, 11 deletions
@@ -208,7 +208,7 @@ Please create an issue :) - Ctrl/Shift/Alt support - Bulk rename - File previews - - See [Image previews](/docs/image_previews.md) for more details + - See [Image previews](/docs/image_previews) for more details - Exit to current directory - Asynch File IO (cut/copy/paste) - Custom colors/theme diff --git a/config/preview_file.sh b/config/preview_file.sh index 15fa6fc..bb7cc7b 100755 --- a/config/preview_file.sh +++ b/config/preview_file.sh @@ -96,12 +96,16 @@ handle_extension() { exit 1 ;; ## OpenDocument - odt|ods|odp|sxw) + odt|sxw) ## Preview as text conversion odt2txt "${FILE_PATH}" && exit 0 ## Preview as markdown conversion pandoc -s -t markdown -- "${FILE_PATH}" && exit 0 exit 1 ;; + ods|odp) + ## Preview as text conversion (unsupported by pandoc for markdown) + odt2txt "${FILE_PATH}" && exit 0 + exit 1 ;; ## XLSX xlsx) diff --git a/docs/configuration/joshuto.toml.md b/docs/configuration/joshuto.toml.md index 3f8ce51..4a19692 100644 --- a/docs/configuration/joshuto.toml.md +++ b/docs/configuration/joshuto.toml.md @@ -74,4 +74,9 @@ directories_first = true # sort in reverse reverse = false + +# Optional list of command aliases (empty by default) +[cmd_aliases] +# q = "quit" +# ... ``` diff --git a/src/commands/command_line.rs b/src/commands/command_line.rs index 5a311b9..ae9b3af 100644 --- a/src/commands/command_line.rs +++ b/src/commands/command_line.rs @@ -23,8 +23,13 @@ pub fn read_and_execute( .get_input(backend, context, &mut listener); if let Some(s) = user_input { - let trimmed = s.trim_start(); + let mut trimmed = s.trim_start(); let _ = context.commandline_context_mut().history_mut().add(trimmed); + + if let Some(alias) = context.config_ref().cmd_aliases.get(trimmed) { + trimmed = alias; + } + let command = Command::from_str(trimmed)?; command.execute(context, backend, keymap_t) } else { diff --git a/src/commands/open_file.rs b/src/commands/open_file.rs index ba71b12..c680cb7 100644 --- a/src/commands/open_file.rs +++ b/src/commands/open_file.rs @@ -56,8 +56,9 @@ where context.worker_context_mut().push_child(child_id, handle); } else { backend.terminal_drop(); - execute_and_wait(option, files)?; + let res = execute_and_wait(option, files); backend.terminal_restore()?; + res?; } Ok(()) } @@ -73,9 +74,12 @@ fn _open_with_xdg( open::that_in_background(path); } else { backend.terminal_drop(); - let result = open::that(path); + let handle = open::that_in_background(path); + let result = handle.join(); backend.terminal_restore()?; - result?; + if let Ok(result) = result { + result?; + } } Ok(()) } diff --git a/src/commands/sub_process.rs b/src/commands/sub_process.rs index fc31278..7650d21 100644 --- a/src/commands/sub_process.rs +++ b/src/commands/sub_process.rs @@ -55,13 +55,13 @@ pub fn sub_process( ) -> JoshutoResult { backend.terminal_drop(); let res = execute_sub_process(context, words, spawn); - reload::soft_reload_curr_tab(context)?; + backend.terminal_restore()?; + let _ = reload::soft_reload_curr_tab(context); context.message_queue_mut().push_info(format!( "{}: {}", if spawn { "Spawned" } else { "Finished" }, words.join(" ") )); - backend.terminal_restore()?; res?; Ok(()) } diff --git a/src/config/general/app.rs b/src/config/general/app.rs index f2602b0..9ee900e 100644 --- a/src/config/general/app.rs +++ b/src/config/general/app.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use super::app_raw::AppConfigRaw; use super::DEFAULT_CONFIG_FILE_PATH; @@ -10,6 +12,7 @@ pub struct AppConfig { pub xdg_open: bool, pub xdg_open_fork: bool, pub watch_files: bool, + pub cmd_aliases: HashMap<String, String>, pub _display_options: DisplayOption, pub _preview_options: PreviewOption, pub _tab_options: TabOption, diff --git a/src/config/general/app_raw.rs b/src/config/general/app_raw.rs index 3c0cb9c..bebcb9c 100644 --- a/src/config/general/app_raw.rs +++ b/src/config/general/app_raw.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::convert::From; use serde_derive::Deserialize; @@ -28,6 +29,8 @@ pub struct AppConfigRaw { pub xdg_open_fork: bool, #[serde(default = "default_true")] pub watch_files: bool, + #[serde(default)] + pub cmd_aliases: HashMap<String, String>, #[serde(default, rename = "display")] pub display_options: DisplayOptionRaw, #[serde(default, rename = "preview")] @@ -43,6 +46,7 @@ impl From<AppConfigRaw> for AppConfig { xdg_open: raw.xdg_open, xdg_open_fork: raw.xdg_open_fork, watch_files: raw.watch_files, + cmd_aliases: raw.cmd_aliases, _display_options: DisplayOption::from(raw.display_options), _preview_options: PreviewOption::from(raw.preview_options), _tab_options: TabOption::from(raw.tab_options), diff --git a/src/main.rs b/src/main.rs index 3e2b8bc..03bf646 100644 --- a/src/main.rs +++ b/src/main.rs @@ -77,6 +77,15 @@ lazy_static! { static ref HOME_DIR: Option<PathBuf> = dirs_next::home_dir(); static ref USERNAME: String = whoami::username(); static ref HOSTNAME: String = whoami::hostname(); + + static ref TIMEZONE_STR: String = { + let offset = chrono::Local::now().offset().local_minus_utc() / 3600; + if offset.is_positive() { + format!(" UTC+{} ", offset.abs()) + } else { + format!(" UTC-{} ", offset.abs()) + } + }; } #[derive(Clone, Debug, StructOpt)] diff --git a/src/ui/widgets/tui_footer.rs b/src/ui/widgets/tui_footer.rs index adfe90d..dc42ee6 100644 --- a/src/ui/widgets/tui_footer.rs +++ b/src/ui/widgets/tui_footer.rs @@ -8,7 +8,7 @@ use crate::config::option::TabDisplayOption; use crate::fs::{JoshutoDirList, LinkType}; use crate::util::format; use crate::util::unix; -use crate::THEME_T; +use crate::{THEME_T, TIMEZONE_STR}; pub struct TuiFooter<'a> { dirlist: &'a JoshutoDirList, @@ -73,7 +73,7 @@ impl<'a> Widget for TuiFooter<'a> { Span::raw(format!("{}/{}", i + 1, self.dirlist.len())), Span::raw(" "), Span::raw(mtime_str), - Span::raw(" UTC "), + Span::raw(TIMEZONE_STR.as_str()), Span::raw(size_str), Span::raw(" "), Span::styled( diff --git a/src/util/format.rs b/src/util/format.rs index 0afa793..3079840 100644 --- a/src/util/format.rs +++ b/src/util/format.rs @@ -23,6 +23,6 @@ pub fn file_size_to_string(file_size: u64) -> String { pub fn mtime_to_string(mtime: time::SystemTime) -> String { const MTIME_FORMATTING: &str = "%Y-%m-%d %H:%M"; - let datetime: chrono::DateTime<chrono::offset::Utc> = mtime.into(); + let datetime: chrono::DateTime<chrono::offset::Local> = mtime.into(); datetime.format(MTIME_FORMATTING).to_string() } |