blob: 09d831a5fbc50d2d998a7e148d4dfc9857bee953 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Exclude files by filesystem type and extension that likely aren't
# viewable/editable in plain text
#
# I've seen some very clever people figure out ways to actually read the files
# or run something like file(1) over them to make an educated guess as to
# whether they're binary or not, but I don't really want to go that far. It's
# not supposed to be perfect, just a bit more likely to complete singly with
# the thing I want, and I want it to stay fast.
#
_text_filenames() {
local item
while IFS= read -r item ; do
# Exclude blanks
[[ -n $item ]] || return
# Exclude files with block, character, pipe, or socket type
[[ ! -b $item ]] || return
[[ ! -c $item ]] || return
[[ ! -p $item ]] || return
[[ ! -S $item ]] || return
# Check the filename extension to know what to exclude
case $item in
# Binary image file formats
*.bmp|*.gif|*.ico|*.jpeg|*.jpg|*.png|*.tif|*.xcf) ;;
*.BMP|*.GIF|*.ICO|*.JPEG|*.JPG|*.PNG|*.TIF|*.XCF) ;;
# Video file formats
*.avi|*.gifv|*.mkv|*.mov|*.mpg|*.rm|*.webm) ;;
*.AVI|*.GIFV|*.MKV|*.MOV|*.MPG|*.RM|*.WEBM) ;;
# Lossy audio file formats
*.au|*.mp[34]|*.ogg|*.snd|*.wma) ;;
*.AU|*.MP[34]|*.OGG|*.SND|*.WMA) ;;
# Lossless/source audio file formats
*.aup|*.flac|*.mid|*.h2song|*.nwc|*.s3m|*.wav) ;;
*.AUP|*.FLAC|*.MID|*.H2SONG|*.NWC|*.S3M|*.WAV) ;;
# Compressed/archived file formats
# (Yes I know Vim can read these)
*.bz2|*.cab|*.deb|*.gz|*.lzm|*.pack|*.tar|*.xz|*.zip) ;;
*.BZ2|*.CAB|*.DEB|*.GZ|*.LZM|*.PACK|*.TAR|*.XZ|*.ZIP) ;;
# Document formats
*.cbr|*.doc|*.docx|*.epub|*.odp|*.odt|*.pdf|*.xls|*.xlsx) ;;
*.CBR|*.DOC|*.DOCX|*.EPUB|*.ODP|*.ODT|*.PDF|*.XLS|*.XLSX) ;;
# Filesystems/disk images
*.bin|*.cue|*.hdf|*.img|*.iso|*.mdf|*.raw) ;;
*.BIN|*.CUE|*.HDF|*.IMG|*.ISO|*.MDF|*.RAW) ;;
# Font files
*.ttf) ;;
*.TTF) ;;
# Index file formats
*.idx) ;;
*.IDX) ;;
# Encrypted file formats
*.gpg) ;;
*.GPG) ;;
# Other known binary extensions
# (I haven't included .com; on UNIX, that's more likely to be
# something I saved from a website and named after the domain)
*.a|*.drv|*.exe|*.o|*.torrent|*.wad|*.rom) ;;
*.A|*.DRV|*.EXE|*.O|*.TORRENT|*.WAD|*.ROM) ;;
# Complete everything else; some of it will still be binary
*) COMPREPLY[${#COMPREPLY[@]}]=$item ;;
esac
done < <(compgen -A file -- "${COMP_WORDS[COMP_CWORD]}")
}
|