summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2023-07-31 16:48:04 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2023-07-31 16:48:04 -0400
commit0cd9c1a88f5491be681b0c871584e9f64b3729b8 (patch)
treeee3bd0c58a37032347584fb2badd1ababc4ef434
parentba4d863a71e5f182f7e38bb3b3b23aaf9e151cd0 (diff)
parent8d164f201b928c40b35100f73776af5dd2c44e3c (diff)
Merge branch 'main' of github.com:kamiyaa/joshuto
-rw-r--r--README.md2
-rwxr-xr-xconfig/preview_file.sh6
-rw-r--r--docs/configuration/joshuto.toml.md5
-rw-r--r--src/commands/command_line.rs7
-rw-r--r--src/commands/open_file.rs10
-rw-r--r--src/commands/sub_process.rs4
-rw-r--r--src/config/general/app.rs3
-rw-r--r--src/config/general/app_raw.rs4
-rw-r--r--src/main.rs9
-rw-r--r--src/ui/widgets/tui_footer.rs4
-rw-r--r--src/util/format.rs2
11 files changed, 45 insertions, 11 deletions
diff --git a/README.md b/README.md
index 3812f7b..552377a 100644
--- a/README.md
+++ b/README.md
@@ -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()
}