diff --git a/yazi-config/preset/keymap.toml b/yazi-config/preset/keymap.toml index 110376ca..9e4c0493 100644 --- a/yazi-config/preset/keymap.toml +++ b/yazi-config/preset/keymap.toml @@ -62,7 +62,7 @@ keymap = [ { on = [ "o" ], run = "open", desc = "Open the selected files" }, { on = [ "O" ], run = "open --interactive", desc = "Open the selected files interactively" }, { on = [ "" ], run = "open", desc = "Open the selected files" }, - { on = [ "" ], run = "open --interactive", desc = "Open the selected files interactively" }, + { on = [ "" ], run = "open --interactive", desc = "Open the selected files interactively" }, { on = [ "y" ], run = "yank", desc = "Copy the selected files" }, { on = [ "Y" ], run = "unyank", desc = "Cancel the yank status of files" }, { on = [ "x" ], run = "yank --cut", desc = "Cut the selected files" }, diff --git a/yazi-config/preset/yazi.toml b/yazi-config/preset/yazi.toml index b1f2309f..5470abc0 100644 --- a/yazi-config/preset/yazi.toml +++ b/yazi-config/preset/yazi.toml @@ -67,7 +67,7 @@ rules = [ { mime = "application/json", use = [ "edit", "reveal" ] }, { mime = "*/javascript", use = [ "edit", "reveal" ] }, - { mime = "*", use = [ "open", "reveal" ] }, + { name = "*", use = [ "open", "reveal" ] }, ] [tasks] diff --git a/yazi-config/src/open/open.rs b/yazi-config/src/open/open.rs index 6d5fc5e2..c83928d0 100644 --- a/yazi-config/src/open/open.rs +++ b/yazi-config/src/open/open.rs @@ -78,6 +78,13 @@ impl<'de> Deserialize<'de> for Open { } let mut outer = Outer::deserialize(deserializer)?; + + if outer.open.append_rules.iter().any(|r| r.any_file()) { + outer.open.rules.retain(|r| !r.any_file()); + } + if outer.open.append_rules.iter().any(|r| r.any_dir()) { + outer.open.rules.retain(|r| !r.any_dir()); + } Preset::mix(&mut outer.open.rules, outer.open.prepend_rules, outer.open.append_rules); let openers = outer diff --git a/yazi-config/src/open/rule.rs b/yazi-config/src/open/rule.rs index 08333c92..d69371d2 100644 --- a/yazi-config/src/open/rule.rs +++ b/yazi-config/src/open/rule.rs @@ -13,6 +13,14 @@ pub(super) struct OpenRule { pub(super) use_: Vec, } +impl OpenRule { + #[inline] + pub fn any_file(&self) -> bool { self.name.as_ref().is_some_and(|p| p.any_file()) } + + #[inline] + pub fn any_dir(&self) -> bool { self.name.as_ref().is_some_and(|p| p.any_dir()) } +} + impl OpenRule { fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> where diff --git a/yazi-config/src/theme/icons.rs b/yazi-config/src/theme/icons.rs index 1fd09ea8..4c2a63fe 100644 --- a/yazi-config/src/theme/icons.rs +++ b/yazi-config/src/theme/icons.rs @@ -43,10 +43,15 @@ impl Icons { #[inline] fn match_name(&self, file: &File) -> Option<&Icon> { let name = file.name()?.to_str()?; - if let Some(i) = if file.is_dir() { self.dirs.get(name) } else { self.files.get(name) } { - return Some(i); + if file.is_dir() { + self.dirs.get(name).or_else(|| self.dirs.get(&name.to_ascii_lowercase())) + } else { + self + .files + .get(name) + .or_else(|| self.files.get(&name.to_ascii_lowercase())) + .or_else(|| self.exts.get(file.url.extension()?.to_str()?)) } - self.exts.get(file.url.extension()?.to_str()?) } } diff --git a/yazi-plugin/preset/plugins/font.lua b/yazi-plugin/preset/plugins/font.lua index 69cd82ff..50e19f70 100644 --- a/yazi-plugin/preset/plugins/font.lua +++ b/yazi-plugin/preset/plugins/font.lua @@ -46,7 +46,7 @@ function M:preload() end local status = child:wait() - return status and status:success() and 1 or 2 + return status and status.success and 1 or 2 end return M diff --git a/yazi-plugin/preset/plugins/fzf.lua b/yazi-plugin/preset/plugins/fzf.lua index 210bd419..70033f16 100644 --- a/yazi-plugin/preset/plugins/fzf.lua +++ b/yazi-plugin/preset/plugins/fzf.lua @@ -16,8 +16,8 @@ local function entry() local output, err = child:wait_with_output() if not output then return fail("Cannot read `fzf` output, error code %s", err) - elseif not output.status:success() and output.status:code() ~= 130 then - return fail("`fzf` exited with error code %s", output.status:code()) + elseif not output.status.success and output.status.code ~= 130 then + return fail("`fzf` exited with error code %s", output.status.code) end local target = output.stdout:gsub("\n$", "") diff --git a/yazi-plugin/preset/plugins/magick.lua b/yazi-plugin/preset/plugins/magick.lua index 1f865b4a..c680355d 100644 --- a/yazi-plugin/preset/plugins/magick.lua +++ b/yazi-plugin/preset/plugins/magick.lua @@ -37,7 +37,7 @@ function M:preload() end local status = child:wait() - return status and status:success() and 1 or 2 + return status and status.success and 1 or 2 end return M diff --git a/yazi-plugin/preset/plugins/mime.lua b/yazi-plugin/preset/plugins/mime.lua index 1d7e673c..548b07e4 100644 --- a/yazi-plugin/preset/plugins/mime.lua +++ b/yazi-plugin/preset/plugins/mime.lua @@ -59,4 +59,28 @@ function M:fetch() return j == #urls and 3 or 2 end +-- TODO: remove this after v0.3 release +local notified = ya.sync(function (state) + if state.notified then + return true + else + state.notified = true + return false + end +end) +function M:preload() + if notified() then + return 1 + end + ya.notify { + title = "Error", + content = [[In Yazi v0.3, the `mime` plugin has been re-classified as a fetcher. Please remove it from the `preloaders` of your yazi.toml + +See https://github.com/sxyazi/yazi/issues/1046 for details.]], + timeout = 20, + level = "error", + } + return 1 +end + return M diff --git a/yazi-plugin/preset/plugins/pdf.lua b/yazi-plugin/preset/plugins/pdf.lua index 4854ba74..de4f4ef8 100644 --- a/yazi-plugin/preset/plugins/pdf.lua +++ b/yazi-plugin/preset/plugins/pdf.lua @@ -34,7 +34,7 @@ function M:preload() if not output then return 0 - elseif not output.status:success() then + elseif not output.status.success then local pages = tonumber(output.stderr:match("the last page %((%d+)%)")) or 0 if self.skip > 0 and pages > 0 then ya.manager_emit("peek", { math.max(0, pages - 1), only_if = self.file.url, upper_bound = true }) diff --git a/yazi-plugin/preset/plugins/video.lua b/yazi-plugin/preset/plugins/video.lua index e8b9fe52..50ea9528 100644 --- a/yazi-plugin/preset/plugins/video.lua +++ b/yazi-plugin/preset/plugins/video.lua @@ -55,7 +55,7 @@ function M:preload() end local status = child:wait() - return status and status:success() and 1 or 2 + return status and status.success and 1 or 2 end return M diff --git a/yazi-plugin/preset/plugins/zoxide.lua b/yazi-plugin/preset/plugins/zoxide.lua index 208a5285..a7b89aeb 100644 --- a/yazi-plugin/preset/plugins/zoxide.lua +++ b/yazi-plugin/preset/plugins/zoxide.lua @@ -75,8 +75,8 @@ local function entry() local output, err = child:wait_with_output() if not output then return fail("Cannot read `zoxide` output, error code %s", err) - elseif not output.status:success() and output.status:code() ~= 130 then - return fail("`zoxide` exited with error code %s", output.status:code()) + elseif not output.status.success and output.status.code ~= 130 then + return fail("`zoxide` exited with error code %s", output.status.code) end local target = output.stdout:gsub("\n$", "") diff --git a/yazi-plugin/src/bindings/cha.rs b/yazi-plugin/src/bindings/cha.rs index 73e9795e..d2228fef 100644 --- a/yazi-plugin/src/bindings/cha.rs +++ b/yazi-plugin/src/bindings/cha.rs @@ -13,13 +13,10 @@ impl Cha { reg.add_field_method_get("is_hidden", |_, me| Ok(me.is_hidden())); reg.add_field_method_get("is_link", |_, me| Ok(me.is_link())); reg.add_field_method_get("is_orphan", |_, me| Ok(me.is_orphan())); - // TODO: rename to `is_block` - reg.add_field_method_get("is_block_device", |_, me| Ok(me.is_block())); - // TODO: rename to `is_char` - reg.add_field_method_get("is_char_device", |_, me| Ok(me.is_char())); + reg.add_field_method_get("is_block", |_, me| Ok(me.is_block())); + reg.add_field_method_get("is_char", |_, me| Ok(me.is_char())); reg.add_field_method_get("is_fifo", |_, me| Ok(me.is_fifo())); - // TODO: rename to `is_sock` - reg.add_field_method_get("is_socket", |_, me| Ok(me.is_sock())); + reg.add_field_method_get("is_sock", |_, me| Ok(me.is_sock())); reg.add_field_method_get("is_exec", |_, me| Ok(me.is_exec())); reg.add_field_method_get("is_sticky", |_, me| Ok(me.is_sticky())); diff --git a/yazi-plugin/src/process/status.rs b/yazi-plugin/src/process/status.rs index 7c8e05f7..ef7116f2 100644 --- a/yazi-plugin/src/process/status.rs +++ b/yazi-plugin/src/process/status.rs @@ -9,8 +9,8 @@ impl Status { } impl UserData for Status { - fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) { - methods.add_method("success", |_, me, ()| Ok(me.inner.success())); - methods.add_method("code", |_, me, ()| Ok(me.inner.code())); + fn add_fields<'lua, F: mlua::UserDataFields<'lua, Self>>(fields: &mut F) { + fields.add_field_method_get("success", |_, me| Ok(me.inner.success())); + fields.add_field_method_get("code", |_, me| Ok(me.inner.code())); } }