diff --git a/config/ranger/plugins/__init__.py b/config/ranger/plugins/__init__.py new file mode 100644 index 0000000..aeca62b --- /dev/null +++ b/config/ranger/plugins/__init__.py @@ -0,0 +1,19 @@ +import ranger.api +from ranger.core.linemode import LinemodeBase +from .devicons import * + +@ranger.api.register_linemode +class DevIconsLinemode(LinemodeBase): + name = "devicons" + + uses_metadata = False + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path + +@ranger.api.register_linemode +class DevIconsLinemodeFile(LinemodeBase): + name = "filename" + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path diff --git a/config/ranger/plugins/__pycache__/__init__.cpython-37.opt-1.pyc b/config/ranger/plugins/__pycache__/__init__.cpython-37.opt-1.pyc new file mode 100644 index 0000000..4e51867 Binary files /dev/null and b/config/ranger/plugins/__pycache__/__init__.cpython-37.opt-1.pyc differ diff --git a/config/ranger/plugins/__pycache__/compress.cpython-37.opt-1.pyc b/config/ranger/plugins/__pycache__/compress.cpython-37.opt-1.pyc new file mode 100644 index 0000000..5af4c58 Binary files /dev/null and b/config/ranger/plugins/__pycache__/compress.cpython-37.opt-1.pyc differ diff --git a/config/ranger/plugins/__pycache__/devicons.cpython-37.opt-1.pyc b/config/ranger/plugins/__pycache__/devicons.cpython-37.opt-1.pyc new file mode 100644 index 0000000..4a2485d Binary files /dev/null and b/config/ranger/plugins/__pycache__/devicons.cpython-37.opt-1.pyc differ diff --git a/config/ranger/plugins/__pycache__/extract.cpython-37.opt-1.pyc b/config/ranger/plugins/__pycache__/extract.cpython-37.opt-1.pyc new file mode 100644 index 0000000..4c7df2d Binary files /dev/null and b/config/ranger/plugins/__pycache__/extract.cpython-37.opt-1.pyc differ diff --git a/config/ranger/plugins/compress.py b/config/ranger/plugins/compress.py new file mode 100644 index 0000000..8286ea8 --- /dev/null +++ b/config/ranger/plugins/compress.py @@ -0,0 +1,43 @@ +import os +from ranger.api.commands import * +from ranger.core.loader import CommandLoader + +class compress(Command): + def execute(self): + """ Compress marked files to current directory """ + cwd = self.fm.thisdir + marked_files = cwd.get_selection() + + if not marked_files: + return + + def refresh(_): + cwd = self.fm.get_directory(original_path) + cwd.load_content() + + original_path = cwd.path + + # Parsing arguments line + parts = self.line.strip().split() + if len(parts) > 1: + au_flags = [' '.join(parts[1:])] + else: + au_flags = [os.path.basename(self.fm.thisdir.path) + '.zip'] + + # Making description line + files_num = len(marked_files) + files_num_str = str(files_num) + ' objects' if files_num > 1 else '1 object' + descr = "Compressing " + files_num_str + " -> " + os.path.basename(au_flags[0]) + + # Creating archive + obj = CommandLoader(args=['apack'] + au_flags + \ + [os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr, read=True) + + obj.signal_bind('after', refresh) + self.fm.loader.add(obj) + + def tab(self, tabnum): + """ Complete with current folder name """ + + extension = ['.zip', '.tar.gz', '.rar', '.7z'] + return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension] diff --git a/config/ranger/plugins/devicons.py b/config/ranger/plugins/devicons.py new file mode 100644 index 0000000..bdfaa86 --- /dev/null +++ b/config/ranger/plugins/devicons.py @@ -0,0 +1,363 @@ +#!/usr/bin/python +# coding=UTF-8 +# These glyphs, and the mapping of file extensions to glyphs +# has been copied from the vimscript code that is present in +# https://github.com/ryanoasis/vim-devicons +import re; +import os; + +# all those glyphs will show as weird squares if you don't have the correct patched font +# My advice is to use NerdFonts which can be found here: +# https://github.com/ryanoasis/nerd-fonts +file_node_extensions = { + '7z' : '', + 'a' : '', + 'ai' : '', + 'apk' : '', + 'asm' : '', + 'asp' : '', + 'aup' : '', + 'avi' : '', + 'awk' : '', + 'bash' : '', + 'bat' : '', + 'bmp' : '', + 'bz2' : '', + 'c' : '', + 'c++' : '', + 'cab' : '', + 'cbr' : '', + 'cbz' : '', + 'cc' : '', + 'class' : '', + 'clj' : '', + 'cljc' : '', + 'cljs' : '', + 'cmake' : '', + 'coffee' : '', + 'conf' : '', + 'cp' : '', + 'cpio' : '', + 'cpp' : '', + 'cs' : '', + 'csh' : '', + 'css' : '', + 'cue' : '', + 'cvs' : '', + 'cxx' : '', + 'd' : '', + 'dart' : '', + 'db' : '', + 'deb' : '', + 'diff' : '', + 'dll' : '', + 'doc' : '', + 'docx' : '', + 'dump' : '', + 'edn' : '', + 'eex' : '', + 'efi' : '', + 'ejs' : '', + 'elf' : '', + 'elm' : '', + 'epub' : '', + 'erl' : '', + 'ex' : '', + 'exe' : '', + 'exs' : '', + 'f#' : '', + 'fifo' : '|', + 'fish' : '', + 'flac' : '', + 'flv' : '', + 'fs' : '', + 'fsi' : '', + 'fsscript' : '', + 'fsx' : '', + 'gem' : '', + 'gemspec' : '', + 'gif' : '', + 'go' : '', + 'gz' : '', + 'gzip' : '', + 'h' : '', + 'haml' : '', + 'hbs' : '', + 'hh' : '', + 'hpp' : '', + 'hrl' : '', + 'hs' : '', + 'htaccess' : '', + 'htm' : '', + 'html' : '', + 'htpasswd' : '', + 'hxx' : '', + 'ico' : '', + 'img' : '', + 'ini' : '', + 'iso' : '', + 'jar' : '', + 'java' : '', + 'jl' : '', + 'jpeg' : '', + 'jpg' : '', + 'js' : '', + 'json' : '', + 'jsx' : '', + 'key' : '', + 'ksh' : '', + 'leex' : '', + 'less' : '', + 'lha' : '', + 'lhs' : '', + 'log' : '', + 'lua' : '', + 'lzh' : '', + 'lzma' : '', + 'm4a' : '', + 'm4v' : '', + 'markdown' : '', + 'md' : '', + 'mdx' : '', + 'mjs' : '', + 'mkv' : '', + 'ml' : 'λ', + 'mli' : 'λ', + 'mov' : '', + 'mp3' : '', + 'mp4' : '', + 'mpeg' : '', + 'mpg' : '', + 'msi' : '', + 'mustache' : '', + 'nix' : '', + 'o' : '', + 'ogg' : '', + 'pdf' : '', + 'php' : '', + 'pl' : '', + 'pm' : '', + 'png' : '', + 'pp' : '', + 'ppt' : '', + 'pptx' : '', + 'ps1' : '', + 'psb' : '', + 'psd' : '', + 'pub' : '', + 'py' : '', + 'pyc' : '', + 'pyd' : '', + 'pyo' : '', + 'r' : 'ﳒ', + 'rake' : '', + 'rar' : '', + 'rb' : '', + 'rc' : '', + 'rlib' : '', + 'rmd' : '', + 'rom' : '', + 'rpm' : '', + 'rproj' : '鉶', + 'rs' : '', + 'rss' : '', + 'rtf' : '', + 's' : '', + 'sass' : '', + 'scala' : '', + 'scss' : '', + 'sh' : '', + 'slim' : '', + 'sln' : '', + 'so' : '', + 'sql' : '', + 'styl' : '', + 'suo' : '', + 'swift' : '', + 't' : '', + 'tar' : '', + 'tex' : 'ﭨ', + 'tgz' : '', + 'toml' : '', + 'ts' : '', + 'tsx' : '', + 'twig' : '', + 'vim' : '', + 'vimrc' : '', + 'vue' : '﵂', + 'wav' : '', + 'webm' : '', + 'webmanifest' : '', + 'webp' : '', + 'xbps' : '', + 'xcplayground' : '', + 'xhtml' : '', + 'xls' : '', + 'xlsx' : '', + 'xml' : '', + 'xul' : '', + 'xz' : '', + 'yaml' : '', + 'yml' : '', + 'zip' : '', + 'zsh' : '', +} + +dir_node_exact_matches = { +# English + '.git' : '', + 'Desktop' : '', + 'Documents' : '', + 'Downloads' : '', + 'Dotfiles' : '', + 'Dropbox' : '', + 'Music' : '', + 'Pictures' : '', + 'Public' : '', + 'Templates' : '', + 'Videos' : '', +# Spanish + 'Escritorio' : '', + 'Documentos' : '', + 'Descargas' : '', + 'Música' : '', + 'Imágenes' : '', + 'Público' : '', + 'Plantillas' : '', + 'Vídeos' : '', +# French + 'Bureau' : '', + 'Documents' : '', + 'Images' : '', + 'Musique' : '', + 'Publique' : '', + 'Téléchargements' : '', + 'Vidéos' : '', +# Portuguese + 'Documentos' : '', + 'Imagens' : '', + 'Modelos' : '', + 'Música' : '', + 'Público' : '', + 'Vídeos' : '', + 'Área de trabalho' : '', +# Italian + 'Documenti' : '', + 'Immagini' : '', + 'Modelli' : '', + 'Musica' : '', + 'Pubblici' : '', + 'Scaricati' : '', + 'Scrivania' : '', + 'Video' : '', +# German + 'Bilder' : '', + 'Dokumente' : '', + 'Musik' : '', + 'Schreibtisch' : '', + 'Vorlagen' : '', + 'Öffentlich' : '', +# Hungarian + 'Dokumentumok' : '', + 'Képek' : '', + 'Modelli' : '', + 'Zene' : '', + 'Letöltések' : '', + 'Számítógép' : '', + 'Videók' : '', +} + +file_node_exact_matches = { + '.bash_aliases' : '', + '.bash_history' : '', + '.bash_logout' : '', + '.bash_profile' : '', + '.bashprofile' : '', + '.bashrc' : '', + '.dmrc' : '', + '.DS_Store' : '', + '.fasd' : '', + '.fehbg' : '', + '.gitattributes' : '', + '.gitconfig' : '', + '.gitignore' : '', + '.gitlab-ci.yml' : '', + '.gvimrc' : '', + '.inputrc' : '', + '.jack-settings' : '', + '.mime.types' : '', + '.ncmpcpp' : '', + '.nvidia-settings-rc' : '', + '.pam_environment' : '', + '.profile' : '', + '.recently-used' : '', + '.selected_editor' : '', + '.vim' : '', + '.viminfo' : '', + '.vimrc' : '', + '.Xauthority' : '', + '.Xdefaults' : '', + '.xinitrc' : '', + '.xinputrc' : '', + '.Xresources' : '', + '.zshrc' : '', + '_gvimrc' : '', + '_vimrc' : '', + 'a.out' : '', + 'authorized_keys' : '', + 'bspwmrc' : '', + 'cmakelists.txt' : '', + 'config' : '', + 'config.ac' : '', + 'config.m4' : '', + 'config.mk' : '', + 'config.ru' : '', + 'configure' : '', + 'docker-compose.yml' : '', + 'dockerfile' : '', + 'Dockerfile' : '', + 'dropbox' : '', + 'exact-match-case-sensitive-1.txt' : 'X1', + 'exact-match-case-sensitive-2' : 'X2', + 'favicon.ico' : '', + 'gemfile' : '', + 'gruntfile.coffee' : '', + 'gruntfile.js' : '', + 'gruntfile.ls' : '', + 'gulpfile.coffee' : '', + 'gulpfile.js' : '', + 'gulpfile.ls' : '', + 'ini' : '', + 'known_hosts' : '', + 'ledger' : '', + 'license' : '', + 'LICENSE' : '', + 'LICENSE.md' : '', + 'LICENSE.txt' : '', + 'Makefile' : '', + 'makefile' : '', + 'Makefile.ac' : '', + 'Makefile.in' : '', + 'mimeapps.list' : '', + 'mix.lock' : '', + 'node_modules' : '', + 'package-lock.json' : '', + 'package.json' : '', + 'playlists' : '', + 'procfile' : '', + 'Rakefile' : '', + 'rakefile' : '', + 'react.jsx' : '', + 'README' : '', + 'README.markdown' : '', + 'README.md' : '', + 'README.rst' : '', + 'README.txt' : '', + 'sxhkdrc' : '', + 'user-dirs.dirs' : '', + 'webpack.config.js' : '', +} + +def devicon(file): + if file.is_directory: return dir_node_exact_matches.get(file.relative_path, '') + return file_node_exact_matches.get(os.path.basename(file.relative_path), file_node_extensions.get(file.extension, '')) diff --git a/config/ranger/plugins/extract.py b/config/ranger/plugins/extract.py new file mode 100644 index 0000000..9585274 --- /dev/null +++ b/config/ranger/plugins/extract.py @@ -0,0 +1,81 @@ +import os +from ranger.api.commands import * +from ranger.core.loader import CommandLoader + +class extract(Command): + def execute(self): + """Extract copied files to current directory or directory + specified in a command line + """ + + cwd = self.fm.thisdir + copied_files = cwd.get_selection() + + if not copied_files: + return + + def refresh(_): + cwd = self.fm.get_directory(original_path) + cwd.load_content() + + one_file = copied_files[0] + cwd = self.fm.thisdir + original_path = cwd.path + + line_args = self.line.split()[1:] + if line_args: + extraction_dir = os.path.join(cwd.path, "".join(line_args)) + os.makedirs(extraction_dir, exist_ok=True) + flags = ['-X', extraction_dir] + flags += ['-e'] + else: + flags = ['-X', cwd.path] + flags += ['-e'] + + self.fm.copy_buffer.clear() + self.fm.cut_buffer = False + + if len(copied_files) == 1: + descr = "Extracting: " + os.path.basename(one_file.path) + else: + descr = "Extracting files from: " + os.path.basename(one_file.dirname) + obj = CommandLoader(args=['aunpack'] + flags \ + + [f.path for f in copied_files], descr=descr, read=True) + + obj.signal_bind('after', refresh) + self.fm.loader.add(obj) + +class extract_to_dirs(Command): + def execute(self): + """ Extract copied files to a subdirectories """ + + cwd = self.fm.thisdir + original_path = cwd.path + copied_files = cwd.get_selection() + + if not copied_files: + return + + def refresh(_): + cwd = self.fm.get_directory(original_path) + cwd.load_content() + + def make_flags(fn): + flags = ['-D'] + return flags + + one_file = copied_files[0] + self.fm.copy_buffer.clear() + self.fm.cut_buffer = False + + # Making description line + if len(copied_files) == 1: + descr = "Extracting: " + os.path.basename(one_file.path) + else: + descr = "Extracting files from: " + os.path.basename(one_file.dirname) + + # Extracting files + for f in copied_files: + obj = CommandLoader(args=['aunpack'] + make_flags(f.path) + [f.path], descr=descr, read=True) + obj.signal_bind('after', refresh) + self.fm.loader.add(obj) diff --git a/config/ranger/rc.conf b/config/ranger/rc.conf new file mode 100644 index 0000000..a2683b2 --- /dev/null +++ b/config/ranger/rc.conf @@ -0,0 +1,3 @@ +default_linemode devicons +set preview_images true +