diff --git a/config/preview_file.sh b/config/preview_file.sh index ed06b75ea..b2e7360d2 100755 --- a/config/preview_file.sh +++ b/config/preview_file.sh @@ -51,94 +51,110 @@ PREVIEW_HEIGHT=10 while [ "$#" -gt 0 ]; do case "$1" in - "--path") - shift - FILE_PATH="$1" - ;; - "--preview-width") - shift - PREVIEW_WIDTH="$1" - ;; - "--preview-height") - shift - PREVIEW_HEIGHT="$1" - ;; + "--path") + shift + FILE_PATH="$1" + ;; + "--preview-width") + shift + PREVIEW_WIDTH="$1" + ;; + "--preview-height") + shift + PREVIEW_HEIGHT="$1" + ;; esac shift done handle_extension() { case "${FILE_EXTENSION_LOWER}" in - ## Archive - a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ - rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) - atool --list -- "${FILE_PATH}" && exit 0 - bsdtar --list --file "${FILE_PATH}" && exit 0 - exit 1 ;; - rar) - ## Avoid password prompt by providing empty password - unrar lt -p- -- "${FILE_PATH}" && exit 0 - exit 1 ;; - 7z) - ## Avoid password prompt by providing empty password - 7z l -p -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## PDF - pdf) - ## Preview as text conversion - pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \ - fmt -w "${PREVIEW_WIDTH}" && exit 0 - mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \ - fmt -w "${PREVIEW_WIDTH}" && exit 0 - exiftool "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## BitTorrent - torrent) - transmission-show -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## OpenDocument - 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) - ## Preview as csv conversion - ## Uses: https://github.com/dilshod/xlsx2csv - xlsx2csv -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## HTML - htm|html|xhtml) - ## Preview as text conversion - w3m -dump "${FILE_PATH}" && exit 0 - lynx -dump -- "${FILE_PATH}" && exit 0 - elinks -dump "${FILE_PATH}" && exit 0 - pandoc -s -t markdown -- "${FILE_PATH}" && exit 0 - ;; - - ## JSON - json|ipynb) - jq --color-output . "${FILE_PATH}" && exit 0 - python -m json.tool -- "${FILE_PATH}" && exit 0 - ;; - - ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected - ## by file(1). - dff|dsf|wv|wvc) - mediainfo "${FILE_PATH}" && exit 0 - exiftool "${FILE_PATH}" && exit 0 - ;; # Continue with next handler on failure + ## Archive + a | ace | alz | arc | arj | bz | bz2 | cab | cpio | deb | gz | jar | lha | lz | lzh | lzma | lzo | \ + rpm | rz | t7z | tar | tbz | tbz2 | tgz | tlz | txz | tZ | tzo | war | xpi | xz | Z | zip) + atool --list -- "${FILE_PATH}" && exit 0 + bsdtar --list --file "${FILE_PATH}" && exit 0 + exit 1 + ;; + rar) + ## Avoid password prompt by providing empty password + unrar lt -p- -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + 7z) + ## Avoid password prompt by providing empty password + 7z l -p -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## PDF + pdf) + ## Preview as text conversion + pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | + fmt -w "${PREVIEW_WIDTH}" && exit 0 + mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | + fmt -w "${PREVIEW_WIDTH}" && exit 0 + exiftool "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## BitTorrent + torrent) + transmission-show -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## OpenDocument + 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) + ## Preview as csv conversion + ## Uses: https://github.com/dilshod/xlsx2csv + xlsx2csv -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## HTML + htm | html | xhtml) + ## Preview as text conversion + w3m -dump "${FILE_PATH}" && exit 0 + lynx -dump -- "${FILE_PATH}" && exit 0 + elinks -dump "${FILE_PATH}" && exit 0 + pandoc -s -t markdown -- "${FILE_PATH}" && exit 0 + bat --color=always --paging=never \ + --style=plain \ + --terminal-width="${PREVIEW_WIDTH}" \ + "${FILE_PATH}" && exit 0 + ;; + + ## JSON + json | ipynb) + jq --color-output . "${FILE_PATH}" && exit 0 + python -m json.tool -- "${FILE_PATH}" && exit 0 + bat --color=always --paging=never \ + --style=plain \ + --terminal-width="${PREVIEW_WIDTH}" \ + "${FILE_PATH}" && exit 0 + ;; + + ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected + ## by file(1). + dff | dsf | wv | wvc) + mediainfo "${FILE_PATH}" && exit 0 + exiftool "${FILE_PATH}" && exit 0 + ;; # Continue with next handler on failure esac } @@ -146,73 +162,81 @@ handle_mime() { local mimetype="${1}" case "${mimetype}" in - ## RTF and DOC - text/rtf|*msword) - ## Preview as text conversion - ## note: catdoc does not always work for .doc files - ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/ - catdoc -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## DOCX, ePub, FB2 (using markdown) - ## You might want to remove "|epub" and/or "|fb2" below if you have - ## uncommented other methods to preview those formats - *wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml) - ## Preview as markdown conversion - pandoc -s -t markdown -- "${FILE_PATH}" | bat -l markdown \ - --color=always --paging=never \ - --style=plain \ - --terminal-width="${PREVIEW_WIDTH}" && exit 0 - exit 1 ;; - - ## E-mails - message/rfc822) - ## Parsing performed by mu: https://github.com/djcb/mu - mu view -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## XLS - *ms-excel) - ## Preview as csv conversion - ## xls2csv comes with catdoc: - ## http://www.wagner.pp.ru/~vitus/software/catdoc/ - xls2csv -- "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## Text - text/* | */xml) - bat --color=always --paging=never \ - --style=plain \ - --terminal-width="${PREVIEW_WIDTH}" \ - "${FILE_PATH}" && exit 0 - cat "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## DjVu - image/vnd.djvu) - ## Preview as text conversion (requires djvulibre) - djvutxt "${FILE_PATH}" | fmt -w "${PREVIEW_WIDTH}" && exit 0 - exiftool "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## Image - image/*) - ## Preview as text conversion - exiftool "${FILE_PATH}" && exit 0 - exit 1 ;; - - ## Video and audio - video/* | audio/*) - mediainfo "${FILE_PATH}" && exit 0 - exiftool "${FILE_PATH}" && exit 0 - exit 1 ;; + ## RTF and DOC + text/rtf | *msword) + ## Preview as text conversion + ## note: catdoc does not always work for .doc files + ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/ + catdoc -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## DOCX, ePub, FB2 (using markdown) + ## You might want to remove "|epub" and/or "|fb2" below if you have + ## uncommented other methods to preview those formats + *wordprocessingml.document | */epub+zip | */x-fictionbook+xml) + ## Preview as markdown conversion + pandoc -s -t markdown -- "${FILE_PATH}" | bat -l markdown \ + --color=always --paging=never \ + --style=plain \ + --terminal-width="${PREVIEW_WIDTH}" && exit 0 + exit 1 + ;; + + ## E-mails + message/rfc822) + ## Parsing performed by mu: https://github.com/djcb/mu + mu view -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## XLS + *ms-excel) + ## Preview as csv conversion + ## xls2csv comes with catdoc: + ## http://www.wagner.pp.ru/~vitus/software/catdoc/ + xls2csv -- "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## Text + text/* | */xml) + bat --color=always --paging=never \ + --style=plain \ + --terminal-width="${PREVIEW_WIDTH}" \ + "${FILE_PATH}" && exit 0 + cat "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## DjVu + image/vnd.djvu) + ## Preview as text conversion (requires djvulibre) + djvutxt "${FILE_PATH}" | fmt -w "${PREVIEW_WIDTH}" && exit 0 + exiftool "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## Image + image/*) + ## Preview as text conversion + exiftool "${FILE_PATH}" && exit 0 + exit 1 + ;; + + ## Video and audio + video/* | audio/*) + mediainfo "${FILE_PATH}" && exit 0 + exiftool "${FILE_PATH}" && exit 0 + exit 1 + ;; esac } FILE_EXTENSION="${FILE_PATH##*.}" FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')" handle_extension -MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" +MIMETYPE="$(file --dereference --brief --mime-type -- "${FILE_PATH}")" handle_mime "${MIMETYPE}" exit 1 diff --git a/src/main.rs b/src/main.rs index 9298d0da7..48aaa75b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -79,12 +79,7 @@ lazy_static! { static ref HOSTNAME: String = whoami::fallible::hostname().unwrap_or("No Hostname".to_string()); 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()) - } + format!(" UTC{:+} ", chrono::Local::now().offset().local_minus_utc() / 3600) }; } diff --git a/src/types/command/impl_completion.rs b/src/types/command/impl_completion.rs index ac2c928f3..ab99cea3c 100644 --- a/src/types/command/impl_completion.rs +++ b/src/types/command/impl_completion.rs @@ -45,9 +45,7 @@ impl CommandCompletion for Command { "insensitive", "sensitive", ]), - CMD_SET_DISPLAY_MODE => CompletionKind::Custom(vec![ - "default", "minimal", "hsplit", - ]), + CMD_SET_DISPLAY_MODE => CompletionKind::Custom(vec!["default", "minimal", "hsplit"]), CMD_SET_LINEMODE => CompletionKind::Custom(vec![ "all", "group", "mtime", "none", "perm", "size", "user", ]), diff --git a/src/types/command/impl_from_str.rs b/src/types/command/impl_from_str.rs index be8073b92..c28c1bb50 100644 --- a/src/types/command/impl_from_str.rs +++ b/src/types/command/impl_from_str.rs @@ -558,9 +558,9 @@ impl std::str::FromStr for Command { "minimal" => Ok(Self::SetDisplayMode(DisplayMode::Minimal)), "hsplit" => Ok(Self::SetDisplayMode(DisplayMode::HSplit)), _ => Err(AppError::new( - AppErrorKind::InvalidParameters, - format!("{}: Unknown option '{}'", command, arg), - )) + AppErrorKind::InvalidParameters, + format!("{}: Unknown option '{}'", command, arg), + )), } } else if command == CMD_SET_LINEMODE { Ok(Self::SetLineMode(LineMode::from_string(arg)?))