1 #!/usr/bin/python
   2 # coding=UTF-8
   3 # These glyphs, and the mapping of file extensions to glyphs
   4 # has been copied from the vimscript code that is present in
   5 # https://github.com/ryanoasis/vim-devicons
   6 import re;
   7 import os;
   8 
   9 # all those glyphs will show as weird squares if you don't have the correct patched font
  10 # My advice is to use NerdFonts which can be found here:
  11 # https://github.com/ryanoasis/nerd-fonts
  12 file_node_extensions = {
  13     '7z'       : '',
  14     'a'        : '',
  15     'ai'       : '',
  16     'apk'      : '',
  17     'asm'      : '',
  18     'asp'      : '',
  19     'aup'      : '',
  20     'avi'      : '',
  21     'bat'      : '',
  22     'bmp'      : '',
  23     'bz2'      : '',
  24     'c'        : '',
  25     'c++'      : '',
  26     'cab'      : '',
  27     'cbr'      : '',
  28     'cbz'      : '',
  29     'cc'       : '',
  30     'class'    : '',
  31     'clj'      : '',
  32     'cljc'     : '',
  33     'cljs'     : '',
  34     'cmake'    : '',
  35     'coffee'   : '',
  36     'conf'     : '',
  37     'cp'       : '',
  38     'cpio'     : '',
  39     'cpp'      : '',
  40     'css'      : '',
  41     'cue'      : '',
  42     'cvs'      : '',
  43     'cxx'      : '',
  44     'd'        : '',
  45     'dart'     : '',
  46     'db'       : '',
  47     'deb'      : '',
  48     'diff'     : '',
  49     'dll'      : '',
  50     'doc'      : '',
  51     'docx'     : '',
  52     'dump'     : '',
  53     'edn'      : '',
  54     'efi'      : '',
  55     'ejs'      : '',
  56     'elf'      : '',
  57     'epub'     : '',
  58     'erl'      : '',
  59     'exe'      : '',
  60     'f#'       : '',
  61     'fifo'     : '|',
  62     'fish'     : '',
  63     'flac'     : '',
  64     'flv'      : '',
  65     'fs'       : '',
  66     'fsi'      : '',
  67     'fsscript' : '',
  68     'fsx'      : '',
  69     'gem'      : '',
  70     'gif'      : '',
  71     'go'       : '',
  72     'gz'       : '',
  73     'gzip'     : '',
  74     'h'        : '',
  75     'hbs'      : '',
  76     'hrl'      : '',
  77     'hs'       : '',
  78     'htaccess' : '',
  79     'htpasswd' : '',
  80     'htm'      : '',
  81     'html'     : '',
  82     'ico'      : '',
  83     'img'      : '',
  84     'ini'      : '',
  85     'iso'      : '',
  86     'jar'      : '',
  87     'java'     : '',
  88     'jl'       : '',
  89     'jpeg'     : '',
  90     'jpg'      : '',
  91     'js'       : '',
  92     'json'     : '',
  93     'jsx'      : '',
  94     'key'      : '',
  95     'less'     : '',
  96     'lha'      : '',
  97     'lhs'      : '',
  98     'log'      : '',
  99     'lua'      : '',
 100     'lzh'      : '',
 101     'lzma'     : '',
 102     'm4a'      : '',
 103     'm4v'      : '',
 104     'markdown' : '',
 105     'md'       : '',
 106     'mkv'      : '',
 107     'ml'       : 'λ',
 108     'mli'      : 'λ',
 109     'mov'      : '',
 110     'mp3'      : '',
 111     'mp4'      : '',
 112     'mpeg'     : '',
 113     'mpg'      : '',
 114     'msi'      : '',
 115     'mustache' : '',
 116     'o'        : '',
 117     'ogg'      : '',
 118     'pdf'      : '',
 119     'php'      : '',
 120     'pl'       : '',
 121     'pm'       : '',
 122     'png'      : '',
 123     'pub'      : '',
 124     'ppt'      : '',
 125     'pptx'     : '',
 126     'psb'      : '',
 127     'psd'      : '',
 128     'py'       : '',
 129     'pyc'      : '',
 130     'pyd'      : '',
 131     'pyo'      : '',
 132     'rar'      : '',
 133     'rb'       : '',
 134     'rc'       : '',
 135     'rlib'     : '',
 136     'rom'      : '',
 137     'rpm'      : '',
 138     'rs'       : '',
 139     'rss'      : '',
 140     'rtf'      : '',
 141     's'        : '',
 142     'so'       : '',
 143     'scala'    : '',
 144     'scss'     : '',
 145     'sh'       : '',
 146     'slim'     : '',
 147     'sln'      : '',
 148     'sql'      : '',
 149     'styl'     : '',
 150     'suo'      : '',
 151     't'        : '',
 152     'tar'      : '',
 153     'tgz'      : '',
 154     'ts'       : '',
 155     'twig'     : '',
 156     'vim'      : '',
 157     'vimrc'    : '',
 158     'wav'      : '',
 159     'webm'     : '',
 160     'xbps'     : '',
 161     'xhtml'    : '',
 162     'xls'        : '',
 163     'xlsx'      : '',
 164     'xml'      : '',
 165     'xul'      : '',
 166     'xz'       : '',
 167     'yaml'     : '',
 168     'yml'      : '',
 169     'zip'      : '',
 170 }
 171 
 172 dir_node_exact_matches = {
 173 # English
 174     '.git'                             : '',
 175     'Desktop'                          : '',
 176     'Documents'                        : '',
 177     'Downloads'                        : '',
 178     'Dotfiles'                         : '',
 179     'Dropbox'                          : '',
 180     'Music'                            : '',
 181     'Pictures'                         : '',
 182     'Public'                           : '',
 183     'Templates'                        : '',
 184     'Videos'                           : '',
 185 # Spanish
 186     'Escritorio'                       : '',
 187     'Documentos'                       : '',
 188     'Descargas'                        : '',
 189     'Música'                           : '',
 190     'Imágenes'                         : '',
 191     'Público'                          : '',
 192     'Plantillas'                       : '',
 193     'Vídeos'                           : '',
 194 # French
 195     'Bureau'                           : '',
 196     'Documents'                        : '',
 197     'Images'                           : '',
 198     'Musique'                          : '',
 199     'Publique'                         : '',
 200     'Téléchargements'                  : '',
 201     'Vidéos'                           : '',
 202 # Portuguese
 203     'Documentos'                       : '',
 204     'Imagens'                          : '',
 205     'Modelos'                          : '',
 206     'Música'                           : '',
 207     'Público'                          : '',
 208     'Vídeos'                           : '',
 209     'Área de trabalho'                 : '',
 210 # Italian
 211     'Documenti'                        : '',
 212     'Immagini'                         : '',
 213     'Modelli'                          : '',
 214     'Musica'                           : '',
 215     'Pubblici'                         : '',
 216     'Scaricati'                        : '',
 217     'Scrivania'                        : '',
 218     'Video'                            : '',
 219 # German
 220     'Bilder'                           : '',
 221     'Dokumente'                        : '',
 222     'Musik'                            : '',
 223     'Schreibtisch'                     : '',
 224     'Vorlagen'                         : '',
 225     'Öffentlich'                       : '',
 226 # Hungarian
 227     'Dokumentumok'                     : '',
 228     'Képek'                            : '',
 229     'Modelli'                          : '',
 230     'Zene'                             : '',
 231     'Letöltések'                       : '',
 232     'Számítógép'                        : '',
 233     'Videók'                           : '',
 234 }
 235 
 236 file_node_exact_matches = {
 237     '.Xauthority'                       : '',
 238     '.Xdefaults'                       : '',
 239     '.Xresources'                      : '',
 240     '.bash_aliases'                    : '',
 241     '.bashprofile'                     : '',
 242     '.bash_profile'                       : '',
 243     '.bash_logout'                     : '',
 244     '.bash_history'                       : '',
 245     '.bashrc'                          : '',
 246     '.dmrc'                            : '',
 247     '.DS_Store'                        : '',
 248     '.fasd'                            : '',
 249     '.fehbg'                        : '',
 250     '.gitconfig'                       : '',
 251     '.gitattributes'                       : '',
 252     '.gitignore'                       : '',
 253     '.inputrc'                       : '',
 254     '.jack-settings'                   : '',
 255     '.mime.types'                      : '',
 256     '.nvidia-settings-rc'              : '',
 257     '.pam_environment'                 : '',
 258     '.profile'                         : '',
 259     '.recently-used'                   : '',
 260     '.selected_editor'                 : '',
 261     '.vim'                           : '',
 262     '.vimrc'                           : '',
 263     '.viminfo'                    : '',
 264     '.xinitrc'                       : '',
 265     '.xinputrc'                        : '',
 266     'config'                           : '',
 267     'dropbox'                          : '',
 268     'exact-match-case-sensitive-1.txt' : 'X1',
 269     'exact-match-case-sensitive-2'     : 'X2',
 270     'favicon.ico'                      : '',
 271     'a.out'                            : '',
 272     'bspwmrc'                      : '',
 273     'sxhkdrc'                       : '',
 274     'Makefile'                         : '',
 275     'Makefile.in'                    : '',
 276     'Makefile.ac'                   : '',
 277     'config.mk'                        : '',
 278     'config.m4'                        : '',
 279     'config.ac'                        : '',
 280     'configure'                        : '',
 281     'Rakefile'                         : '',
 282     'gruntfile.coffee'                 : '',
 283     'gruntfile.js'                     : '',
 284     'gruntfile.ls'                     : '',
 285     'gulpfile.coffee'                  : '',
 286     'gulpfile.js'                      : '',
 287     'gulpfile.ls'                      : '',
 288     'ini'                              : '',
 289     'ledger'                           : '',
 290     'package.json'                  : '',
 291     'package-lock.json'            : '',
 292     '.ncmpcpp'                          : '',
 293     'playlists'                           : '',
 294     'known_hosts'                      : '',
 295     'authorized_keys'                  : '',
 296     'license'                          : '',
 297     'LICENSE.md'                       : '',
 298     'LICENSE'                          : '',
 299     'LICENSE.txt'                      : '',
 300     'mimeapps.list'                    : '',
 301     'node_modules'                     : '',
 302     'procfile'                         : '',
 303     'react.jsx'                        : '',
 304     'README.rst'                       : '',
 305     'README.md'                        : '',
 306     'README.markdown'                  : '',
 307     'README'                           : '',
 308     'README.txt'                       : '',
 309     'user-dirs.dirs'                   : '',
 310     'webpack.config.js'                : '',
 311 }
 312 
 313 def devicon(file):
 314   if file.is_directory: return dir_node_exact_matches.get(file.relative_path, '')
 315   return file_node_exact_matches.get(file.relative_path, file_node_extensions.get(file.extension, ''))
 316 import ranger.api
 317 from ranger.core.linemode import LinemodeBase
 318 # from .devicons import *
 319 
 320 @ranger.api.register_linemode
 321 class DevIconsLinemode(LinemodeBase):
 322   name = "devicons"
 323 
 324   uses_metadata = False
 325 
 326   def filetitle(self, file, metadata):
 327     return devicon(file) + ' ' + file.relative_path
 328 
 329 @ranger.api.register_linemode
 330 class DevIconsLinemodeFile(LinemodeBase):
 331   name = "filename"
 332 
 333   def filetitle(self, file, metadata):
 334     return devicon(file) + ' ' + file.relative_path