Add support for RAR archive preview

This commit is contained in:
Kovid Goyal
2025-11-27 09:33:15 +05:30
parent 37eead581b
commit 5f90102413
4 changed files with 18 additions and 2 deletions

View File

@@ -14,6 +14,7 @@ import (
"github.com/klauspost/compress/gzip"
"github.com/klauspost/compress/zip"
"github.com/klauspost/compress/zstd"
"github.com/nwaples/rardecode/v2"
"github.com/ulikunitz/xz"
"github.com/kovidgoyal/kitty/tools/utils"
@@ -25,7 +26,7 @@ func IsSupportedArchiveFile(abspath string) bool {
name := strings.ToLower(filepath.Base(abspath))
ext := filepath.Ext(name)
switch ext {
case ".zip", ".tgz", ".tbz2", ".tzst", ".txz":
case ".zip", ".tgz", ".tbz2", ".tzst", ".txz", ".rar":
return true
case ".gz", ".bz2", ".zst", ".xz":
name = name[:len(name)-len(ext)]
@@ -88,6 +89,18 @@ func (p *archive_preview) render() {
}
}
case ".rar":
r, err := rardecode.OpenReader(p.path, rardecode.SkipCheck)
if err == nil {
defer r.Close()
for len(names) < 500 {
hdr, err := r.Next()
if err != nil {
break
}
names = append(names, displayFilename(hdr.Name))
}
}
case ".gz", ".tgz":
if f, err := os.Open(p.path); err == nil {
defer f.Close()