Skip to content

Commit

Permalink
Merge branch 'main' of github.com:kamiyaa/joshuto
Browse files Browse the repository at this point in the history
  • Loading branch information
kamiyaa committed Nov 29, 2024
2 parents 6a66cc9 + 1bd52c0 commit b2d1671
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 155 deletions.
310 changes: 167 additions & 143 deletions config/preview_file.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,168 +51,192 @@ 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
}

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
7 changes: 1 addition & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
};
}

Expand Down
4 changes: 1 addition & 3 deletions src/types/command/impl_completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]),
Expand Down
6 changes: 3 additions & 3 deletions src/types/command/impl_from_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?))
Expand Down

0 comments on commit b2d1671

Please sign in to comment.