Files
dotfiles/ranger/plugins/devicons2/__init__.py

68 lines
1.5 KiB
Python

# vim: set fileencoding=utf-8
import fnmatch
import os
import stat
from ranger.api import register_linemode
from ranger.core.linemode import LinemodeBase
from .icons import file_node_extensions, file_node_exact_matches, file_node_pattern_matches
def get_icon(file):
basename = os.path.basename(file.relative_path)
em_icon = file_node_exact_matches.get(basename.lower())
if em_icon is not None:
return em_icon
for pattern, pm_icon in file_node_pattern_matches.items():
if fnmatch.filter([basename], pattern):
return pm_icon
default = '' if file.is_directory else ''
return file_node_extensions.get(file.extension, default)
def get_symbol(file):
if file.is_link:
if not file.exists:
return '!'
if file.stat and stat.S_ISDIR(file.stat.st_mode):
return '~'
return '@'
if file.is_socket:
return '='
if file.is_fifo:
return '|'
if not file.is_directory and file.stat:
mode = file.stat.st_mode
if mode & stat.S_IXUSR:
return '*'
if stat.S_ISCHR(mode):
return '-'
if stat.S_ISBLK(mode):
return '+'
# if file.is_directory:
# return '/'
return ''
@register_linemode
class DevIcons2Linemode(LinemodeBase):
name = 'devicons2'
uses_metadata = False
def filetitle(self, file, metadata):
return '{0} {1}{2}'.format(
get_icon(file),
file.relative_path,
get_symbol(file),
)