From fddd05f0b03e2dfdec4e872c45cda4810ef4ca6e Mon Sep 17 00:00:00 2001 From: Jeff LANCE Date: Sun, 4 Apr 2021 14:35:53 +0200 Subject: [PATCH] add ranger fm config --- conf.d/ranger/colorschemes/butter.py | 105 +++ conf.d/ranger/colorschemes/colorful.py | 115 ++++ conf.d/ranger/colorschemes/euphrasia.py | 116 ++++ .../ranger/colorschemes/unix_on_the_rocks.py | 156 +++++ conf.d/ranger/plugins/compress.py | 43 ++ conf.d/ranger/plugins/devicons.py | 322 ++++++++++ conf.d/ranger/plugins/devicons_linemode.py | 19 + conf.d/ranger/plugins/extract.py | 85 +++ conf.d/ranger/rc.conf | 604 ++++++++++++++++++ conf.d/ranger/rifle.conf | 265 ++++++++ conf.d/ranger/scope.sh | 121 ++++ meta/tasks/ranger.yaml | 17 + 12 files changed, 1968 insertions(+) create mode 100644 conf.d/ranger/colorschemes/butter.py create mode 100644 conf.d/ranger/colorschemes/colorful.py create mode 100644 conf.d/ranger/colorschemes/euphrasia.py create mode 100644 conf.d/ranger/colorschemes/unix_on_the_rocks.py create mode 100644 conf.d/ranger/plugins/compress.py create mode 100755 conf.d/ranger/plugins/devicons.py create mode 100755 conf.d/ranger/plugins/devicons_linemode.py create mode 100644 conf.d/ranger/plugins/extract.py create mode 100644 conf.d/ranger/rc.conf create mode 100644 conf.d/ranger/rifle.conf create mode 100755 conf.d/ranger/scope.sh create mode 100644 meta/tasks/ranger.yaml diff --git a/conf.d/ranger/colorschemes/butter.py b/conf.d/ranger/colorschemes/butter.py new file mode 100644 index 0000000..7b0f8fd --- /dev/null +++ b/conf.d/ranger/colorschemes/butter.py @@ -0,0 +1,105 @@ +from ranger.gui.colorscheme import ColorScheme +from ranger.gui.color import * + +class Default(ColorScheme): + def use(self, context): + fg, bg, attr = default_colors + + if context.reset: + return default_colors + + elif context.in_browser: + if context.selected: + fg = white + attr = bold + else: + attr = normal + if context.empty or context.error: + fg = black + if context.border: + attr = normal + fg = default + if context.media: + if context.image: + fg = red + else: + fg = yellow + if context.container: + attr |= normal + fg = green + if context.directory: + attr |= normal + fg = magenta + elif context.executable and not \ + any((context.media, context.container, + context.fifo, context.socket)): + attr |= bold + fg = red + if context.socket: + fg = black + if context.fifo or context.device: + fg = blue + if context.device: + attr |= bold + if context.link: + fg = context.good and white or red + if context.tag_marker and not context.selected: + attr |= bold + if fg in (red, white): + fg = black + else: + fg = green + if not context.selected and (context.cut or context.copied): + fg = black + attr |= bold + if context.main_column: + if context.selected: + attr |= normal + if context.marked: + attr |= underline + fg = white + if context.badinfo: + if attr & reverse: + bg = red + else: + fg = red + + elif context.in_titlebar: + attr |= normal + if context.hostname: + attr |= normal + fg = red + elif context.directory: + fg = red + elif context.tab: + if context.good: + bg = white + elif context.link: + fg = green + + elif context.in_statusbar: + if context.permissions: + if context.good: + fg = white + elif context.bad: + fg = red + if context.marked: + attr |= bold | reverse + fg = yellow + if context.message: + if context.bad: + attr |= bold + fg = red + + if context.text: + if context.highlight: + attr |= bold + + if context.in_taskview: + if context.title: + fg = red + + if context.selected: + attr |= normal + + return fg, bg, attr diff --git a/conf.d/ranger/colorschemes/colorful.py b/conf.d/ranger/colorschemes/colorful.py new file mode 100644 index 0000000..d72a60b --- /dev/null +++ b/conf.d/ranger/colorschemes/colorful.py @@ -0,0 +1,115 @@ +from ranger.gui.colorscheme import ColorScheme +from ranger.gui.color import * + +class ColorScheme(ColorScheme): + + def use(self, context): + fg, bg, attr = default_colors + + if context.reset: + return default_colors + + elif context.in_browser: + if context.selected: + attr = reverse + else: + attr = normal + if context.empty or context.error: + fg = 6 + bg = 1 + if context.border: + fg = white + if context.image: + fg = 201 + if context.video: + fg = 13 + if context.audio: + fg = 10 + if context.document: + fg = 12 + if context.container: + attr |= bold + fg = 1 + if context.directory: + attr |= normal + fg = 3 + elif context.executable and not \ + any((context.media, context.container, + context.fifo, context.socket)): + attr |= bold + fg = 2 + if context.socket: + fg = 21 + attr |= bold + if context.fifo or context.device: + fg = 21 + if context.device: + attr |= bold + if context.link: + fg = context.good and 6 or 1 + if context.bad: + fg = 0 + bg = 1 + if context.tag_marker and not context.selected: + attr |= bold + fg = 88 + if not context.selected and (context.cut or context.copied): + attr = reverse + if context.main_column: + if context.selected: + attr |= bold + if context.marked: + attr |= bold + fg = 8 + if context.badinfo: + if attr & reverse: + bg = 1 + else: + fg = 7 + + elif context.in_titlebar: + attr |= bold + if context.hostname: + fg = context.bad and 1 or 5 + elif context.directory: + fg = 5 + elif context.tab: + if context.good: + bg = 2 + + elif context.in_statusbar: + if context.permissions: + if context.good: + fg = 2 + bg = 0 + elif context.bad: + fg = 1 + if context.marked: + attr |= bold | reverse + fg = 88 + if context.message: + if context.bad: + attr |= bold + fg = 9 + if context.loaded: + bg = 1 + + + if context.text: + if context.highlight: + attr |= reverse + + if context.in_taskview: + if context.title: + fg = 4 + + if context.selected: + attr |= reverse + + if context.loaded: + if context.selected: + fg = 1 + else: + bg = 1 + + return fg, bg, attr diff --git a/conf.d/ranger/colorschemes/euphrasia.py b/conf.d/ranger/colorschemes/euphrasia.py new file mode 100644 index 0000000..6934e00 --- /dev/null +++ b/conf.d/ranger/colorschemes/euphrasia.py @@ -0,0 +1,116 @@ +# Copyright (C) 2009, 2010, 2011 Roman Zimbelmann +# This software is distributed under the terms of the GNU GPL version 3. + +from ranger.gui.colorscheme import ColorScheme +from ranger.gui.color import * + +class Default(ColorScheme): + progress_bar_color = 0 + + def use(self, context): + fg, bg, attr = default_colors + + if context.reset: + return default_colors + + elif context.in_browser: + attr = reverse if context.selected else normal + if context.empty or context.error: + attr = bold + fg = red + if context.image: + fg = 11 + if context.video: + fg = magenta + if context.audio: + fg = 13 + if context.document: + fg = yellow + if context.container: + fg = 9 + if context.directory: + attr |= bold + fg = default + elif context.executable and not \ + any((context.media, context.container, + context.fifo, context.socket)): + fg = 10 + if context.socket: + fg = magenta + attr |= bold + if context.fifo or context.device: + fg = blue + attr |= bold + if context.link: + attr |= bold + fg = context.good and cyan or red + if context.tag_marker and not context.selected: + attr |= bold + fg = red + if not context.selected and (context.cut or context.copied): + bg = black + #attr |= bold + if context.main_column: + if context.selected: + if context.marked: + attr = normal | reverse + fg = yellow + elif context.marked: + attr |= reverse + fg = 11 + if context.badinfo: + if attr & reverse: + bg = magenta + else: + fg = magenta + if context.border: + fg = default + + elif context.in_titlebar: + if context.hostname: + fg = context.bad and red or 8 + elif context.directory: + fg = 7 + elif context.tab: + if context.good: + attr |= reverse + elif context.link: + fg = cyan + + elif context.in_statusbar: + if context.permissions: + if context.good: + fg = white + elif context.bad: + fg = red + if context.marked: + attr |= bold | reverse + fg = yellow + if context.message: + if context.bad: + attr |= bold + fg = red + if context.loaded: + bg = self.progress_bar_color + + if context.text: + if context.highlight: + attr |= reverse + + if context.in_taskview: + if context.title: + fg = default + attr |= bold + + if context.selected: + attr |= reverse + + if context.loaded: + if context.selected: + fg = self.progress_bar_color + bg = white + else: + bg = self.progress_bar_color + fg = white + + return fg, bg, attr diff --git a/conf.d/ranger/colorschemes/unix_on_the_rocks.py b/conf.d/ranger/colorschemes/unix_on_the_rocks.py new file mode 100644 index 0000000..98f6b73 --- /dev/null +++ b/conf.d/ranger/colorschemes/unix_on_the_rocks.py @@ -0,0 +1,156 @@ +from ranger.gui.colorscheme import ColorScheme +from ranger.gui.color import * + +class base(ColorScheme): + progress_bar_color = 1 + + def use(self, context): + fg, bg, attr = default_colors + + if context.reset: + return default_colors + + elif context.in_browser: + if context.selected: + attr = reverse + else: + attr = normal + if context.empty or context.error: + fg = 7 + bg = 1 + if context.border: + fg = 238 + if context.image: + fg = 146 + if context.video: + fg = 176 + if context.audio: + fg = 173 + if context.document: + fg = 216 + if context.container: + attr |= bold + fg = 1 + if context.directory: + attr |= bold + fg = 8 + elif context.executable and not \ + any((context.media, context.container, + context.fifo, context.socket)): + attr |= bold + fg = 4 + if context.socket: + fg = 3 + attr |= bold + if context.fifo or context.device: + fg = 10 + if context.device: + attr |= bold + if context.link: + fg = context.good and 7 or 8 + bg = 8 + if context.bad: + fg = 1 + if context.tag_marker and not context.selected: + attr |= bold + if fg in (7, 8): + fg = 1 + else: + fg = 1 + if not context.selected and (context.cut or context.copied): + fg = 15 + bg = 8 + if context.main_column: + if context.selected: + attr |= bold + if context.marked: + attr |= bold + fg = 8 + if context.badinfo: + if attr & reverse: + bg = 1 + else: + fg = 7 + + elif context.in_titlebar: + attr |= bold + if context.hostname: + fg = context.bad and 8 or 7 + elif context.directory: + fg = 8 + elif context.tab: + if context.good: + fg = 1 + elif context.link: + fg = 8 + + elif context.in_statusbar: + if context.permissions: + if context.good: + fg = 7 + elif context.bad: + fg = 8 + if context.marked: + attr |= bold | reverse + fg = 8 + if context.message: + if context.bad: + attr |= bold + fg = 10 + if context.loaded: + bg = self.progress_bar_color + if context.vcsinfo: + fg = 10 + attr &= ~bold + if context.vcscommit: + fg = 5 + attr &= ~bold + + + if context.text: + if context.highlight: + attr |= reverse + + if context.in_taskview: + if context.title: + fg = 8 + + if context.selected: + attr |= reverse + + if context.loaded: + if context.selected: + fg = self.progress_bar_color + else: + bg = self.progress_bar_color + + + if context.vcsfile and not context.selected: + attr &= ~bold + if context.vcsconflict: + fg = 11 + elif context.vcschanged: + fg = 12 + elif context.vcsunknown: + fg = 210 + elif context.vcsstaged: + fg = 216 + elif context.vcssync: + fg = 113 + elif context.vcsignored: + fg = 141 + + elif context.vcsremote and not context.selected: + attr &= ~bold + if context.vcssync: + fg = 12 + elif context.vcsbehind: + fg = 13 + elif context.vcsahead: + fg = 9 + elif context.vcsdiverged: + fg = 10 + elif context.vcsunknown: + fg = 11 + + return fg, bg, attr diff --git a/conf.d/ranger/plugins/compress.py b/conf.d/ranger/plugins/compress.py new file mode 100644 index 0000000..8286ea8 --- /dev/null +++ b/conf.d/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/conf.d/ranger/plugins/devicons.py b/conf.d/ranger/plugins/devicons.py new file mode 100755 index 0000000..a698070 --- /dev/null +++ b/conf.d/ranger/plugins/devicons.py @@ -0,0 +1,322 @@ +#!/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' : '', + 'bat' : '', + 'bmp' : '', + 'bz2' : '', + 'c' : '', + 'c++' : '', + 'cab' : '', + 'cbr' : '', + 'cbz' : '', + 'cc' : '', + 'class' : '', + 'clj' : '', + 'cljc' : '', + 'cljs' : '', + 'cmake' : '', + 'coffee' : '', + 'conf' : '', + 'cp' : '', + 'cpio' : '', + 'cpp' : '', + 'cs' : '', + 'css' : '', + 'cue' : '', + 'cvs' : '', + 'cxx' : '', + 'd' : '', + 'dart' : '', + 'db' : '', + 'deb' : '', + 'diff' : '', + 'dll' : '', + 'doc' : '', + 'docx' : '', + 'dump' : '', + 'edn' : '', + 'efi' : '', + 'ejs' : '', + 'elf' : '', + 'elm' : '', + 'epub' : '', + 'erl' : '', + 'ex' : '', + 'exe' : '', + 'exs' : '', + 'eex' : '', + 'f#' : '', + 'fifo' : '|', + 'fish' : '', + 'flac' : '', + 'flv' : '', + 'fs' : '', + 'fsi' : '', + 'fsscript' : '', + 'fsx' : '', + 'gem' : '', + 'gif' : '', + 'go' : '', + 'gz' : '', + 'gzip' : '', + 'h' : '', + 'hbs' : '', + 'hrl' : '', + 'hs' : '', + 'htaccess' : '', + 'htpasswd' : '', + 'htm' : '', + 'html' : '', + 'ico' : '', + 'img' : '', + 'ini' : '', + 'iso' : '', + 'jar' : '', + 'java' : '', + 'jl' : '', + 'jpeg' : '', + 'jpg' : '', + 'js' : '', + 'json' : '', + 'jsx' : '', + 'key' : '', + 'less' : '', + 'lha' : '', + 'lhs' : '', + 'log' : '', + 'lua' : '', + 'lzh' : '', + 'lzma' : '', + 'm4a' : '', + 'm4v' : '', + 'markdown' : '', + 'md' : '', + 'mkv' : '', + 'ml' : 'λ', + 'mli' : 'λ', + 'mov' : '', + 'mp3' : '', + 'mp4' : '', + 'mpeg' : '', + 'mpg' : '', + 'msi' : '', + 'mustache' : '', + 'o' : '', + 'ogg' : '', + 'pdf' : '', + 'php' : '', + 'pl' : '', + 'pm' : '', + 'png' : '', + 'pub' : '', + 'ppt' : '', + 'pptx' : '', + 'psb' : '', + 'psd' : '', + 'py' : '', + 'pyc' : '', + 'pyd' : '', + 'pyo' : '', + 'rar' : '', + 'rb' : '', + 'rc' : '', + 'rlib' : '', + 'rom' : '', + 'rpm' : '', + 'rs' : '', + 'rss' : '', + 'rtf' : '', + 's' : '', + 'so' : '', + 'scala' : '', + 'scss' : '', + 'sh' : '', + 'slim' : '', + 'sln' : '', + 'sql' : '', + 'styl' : '', + 'suo' : '', + 't' : '', + 'tar' : '', + 'tgz' : '', + 'ts' : '', + 'twig' : '', + 'vim' : '', + 'vimrc' : '', + 'wav' : '', + 'webm' : '', + 'xbps' : '', + 'xhtml' : '', + 'xls' : '', + 'xlsx' : '', + 'xml' : '', + 'xul' : '', + 'xz' : '', + 'yaml' : '', + 'yml' : '', + 'zip' : '', +} + +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 = { + '.Xauthority' : '', + '.Xdefaults' : '', + '.Xresources' : '', + '.bash_aliases' : '', + '.bashprofile' : '', + '.bash_profile' : '', + '.bash_logout' : '', + '.bash_history' : '', + '.bashrc' : '', + '.dmrc' : '', + '.DS_Store' : '', + '.fasd' : '', + '.fehbg' : '', + '.gitconfig' : '', + '.gitattributes' : '', + '.gitignore' : '', + '.inputrc' : '', + '.jack-settings' : '', + '.mime.types' : '', + '.nvidia-settings-rc' : '', + '.pam_environment' : '', + '.profile' : '', + '.recently-used' : '', + '.selected_editor' : '', + '.vim' : '', + '.vimrc' : '', + '.viminfo' : '', + '.xinitrc' : '', + '.xinputrc' : '', + 'config' : '', + 'Dockerfile' : '', + 'docker-compose.yml' : '', + 'dropbox' : '', + 'exact-match-case-sensitive-1.txt' : 'X1', + 'exact-match-case-sensitive-2' : 'X2', + 'favicon.ico' : '', + 'a.out' : '', + 'bspwmrc' : '', + 'sxhkdrc' : '', + 'Makefile' : '', + 'Makefile.in' : '', + 'Makefile.ac' : '', + 'config.mk' : '', + 'config.m4' : '', + 'config.ac' : '', + 'configure' : '', + 'Rakefile' : '', + 'gruntfile.coffee' : '', + 'gruntfile.js' : '', + 'gruntfile.ls' : '', + 'gulpfile.coffee' : '', + 'gulpfile.js' : '', + 'gulpfile.ls' : '', + 'ini' : '', + 'ledger' : '', + 'package.json' : '', + 'package-lock.json' : '', + '.ncmpcpp' : '', + 'playlists' : '', + 'known_hosts' : '', + 'authorized_keys' : '', + 'license' : '', + 'LICENSE.md' : '', + 'LICENSE' : '', + 'LICENSE.txt' : '', + 'mimeapps.list' : '', + 'node_modules' : '', + 'procfile' : '', + 'react.jsx' : '', + 'README.rst' : '', + 'README.md' : '', + 'README.markdown' : '', + 'README' : '', + 'README.txt' : '', + '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(file.relative_path, file_node_extensions.get(file.extension, '')) diff --git a/conf.d/ranger/plugins/devicons_linemode.py b/conf.d/ranger/plugins/devicons_linemode.py new file mode 100755 index 0000000..aeca62b --- /dev/null +++ b/conf.d/ranger/plugins/devicons_linemode.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/conf.d/ranger/plugins/extract.py b/conf.d/ranger/plugins/extract.py new file mode 100644 index 0000000..fc86a86 --- /dev/null +++ b/conf.d/ranger/plugins/extract.py @@ -0,0 +1,85 @@ +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): + fn_wo_ext = os.path.basename(os.path.splitext(fn)[0]) + flags = ['-X', fn_wo_ext] + 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/conf.d/ranger/rc.conf b/conf.d/ranger/rc.conf new file mode 100644 index 0000000..afe6ddd --- /dev/null +++ b/conf.d/ranger/rc.conf @@ -0,0 +1,604 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create the file +# ~/.config/ranger/rc.conf and add your custom commands there. +# +# If you copy this whole file there, you may want to set the environment +# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. +# +# The purpose of this file is mainly to define keybindings and settings. +# For running more complex python code, please create a plugin in "plugins/" or +# a command in "commands.py". +# +# Each line is a command that will be run before the user interface +# is initialized. As a result, you can not use commands which rely +# on the UI such as :delete or :mark. +# =================================================================== + +# =================================================================== +# == Options +# =================================================================== + +# a plugin that adds file glyphs / icon support to Ranger: +# https://github.com/alexanderjeurissen/ranger_devicons +default_linemode devicons + +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + +# How many columns are there, and what are their relative widths? +set column_ratios 1,3,4 + +# Which files should be hidden? (regular expression) +set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ + +# Show hidden files? You can toggle this by typing 'zh' +set show_hidden false + +# Ask for a confirmation when running the "delete" command? +# Valid values are "always", "never", "multiple" (default) +# With "multiple", ranger will ask only if you delete multiple files at once. +set confirm_on_delete multiple + +# Which script is used to generate file previews? +# ranger ships with scope.sh, a script that calls external programs (see +# README.md for dependencies) to preview images, archives, etc. +set preview_script ~/.config/ranger/scope.sh + +# Use the external preview script or display simple plain text or image previews? +set use_preview_script true + +# Automatically count files in the directory, even before entering them? +set automatically_count_files true + +# Open all images in this directory when running certain image viewers +# like feh or sxiv? You can still open selected files by marking them. +set open_all_images true + +# Be aware of version control systems and display information. +set vcs_aware false + +# State of the three backends git, hg, bzr. The possible states are +# disabled, local (only show local info), enabled (show local and remote +# information). +set vcs_backend_git enabled +set vcs_backend_hg disabled +set vcs_backend_bzr disabled + +# Use one of the supported image preview protocols +set preview_images true + +# Set the preview image method. Supported methods: +# +# * w3m (default): +# Preview images in full color with the external command "w3mimgpreview"? +# This requires the console web browser "w3m" and a supported terminal. +# It has been successfully tested with "xterm" and "urxvt" without tmux. +# +# * iterm2: +# Preview images in full color using iTerm2 image previews +# (http://iterm2.com/images.html). This requires using iTerm2 compiled +# with image preview support. +# +# * urxvt: +# Preview images in full color using urxvt image backgrounds. This +# requires using urxvt compiled with pixbuf support. +# +# * urxvt-full: +# The same as urxvt but utilizing not only the preview pane but the +# whole terminal window. +set preview_images_method w3m +# set preview_images_method urxvt + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis false + +# Show dotfiles in the bookmark preview box? +set show_hidden_bookmarks true + +# Which colorscheme to use? These colorschemes are available by default: +# default, jungle, snow, solarized +# set colorscheme default +set colorscheme euphrasia + + +# Preview files on the rightmost column? +# And collapse (shrink) the last column if there is nothing to preview? +set preview_files true +set preview_directories true +set collapse_preview true + +# Save the console history on exit? +set save_console_history true + +# Draw the status bar on top of the browser window (default: bottom) +set status_bar_on_top false + +# Draw a progress bar in the status bar which displays the average state of all +# currently running tasks which support progress bars? +set draw_progress_bar_in_status_bar true + +# Draw borders around columns? +set draw_borders true + +# Display the directory name in tabs? +set dirname_in_tabs true + +# Enable the mouse support? +set mouse_enabled true + +# Display the file size in the main column or status bar? +set display_size_in_main_column true +set display_size_in_status_bar true + +# Display files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? +set update_title false + +# Set the title to "ranger" in the tmux program? +set update_tmux_title false + +# Shorten the title if it gets long? The number defines how many +# directories are displayed at once, 0 turns off this feature. +set shorten_title 3 + +# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? +set tilde_in_titlebar false + +# How many directory-changes or console-commands should be kept in history? +set max_history_size 20 +set max_console_history_size 50 + +# Try to keep so much space between the top/bottom border when scrolling: +set scroll_offset 8 + +# Flush the input after each key hit? (Noticeable when ranger lags) +set flushinput true + +# Padding on the right when there's no preview? +# This allows you to click into the space to run the file. +set padding_right true + +# Save bookmarks (used with mX and `X) instantly? +# This helps to synchronize bookmarks between multiple ranger +# instances but leads to *slight* performance loss. +# When false, bookmarks are saved when ranger is exited. +set autosave_bookmarks true + +# You can display the "real" cumulative size of directories by using the +# command :get_cumulative_size or typing "dc". The size is expensive to +# calculate and will not be updated automatically. You can choose +# to update it automatically though by turning on this option: +set autoupdate_cumulative_size false + +# Turning this on makes sense for screen readers: +set show_cursor false + +# One of: size, natural, basename, atime, ctime, mtime, type, random +set sort natural + +# Additional sorting options +set sort_reverse false +set sort_case_insensitive true +set sort_directories_first true +set sort_unicode false + +# Enable this if key combinations with the Alt Key don't work for you. +# (Especially on xterm) +set xterm_alt_key false + +# Whether to include bookmarks in cd command +set cd_bookmarks true + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# Add the highlighted file to the path in the titlebar +set show_selection_in_titlebar true + +# The delay that ranger idly waits for user input, in milliseconds, with a +# resolution of 100ms. Lower delay reduces lag between directory updates but +# increases CPU load. +set idle_delay 2000 + +# When the metadata manager module looks for metadata, should it only look for +# a ".metadata.json" file in the current directory, or do a deep search and +# check all directories above the current one as well? +set metadata_deep_search false + +# Clear all existing filters when leaving a directory +set clear_filters_on_dir_change false + +# Disable displaying line numbers in main column +set line_numbers false + +# =================================================================== +# == Local Options +# =================================================================== +# You can set local options that only affect a single directory. + +# Examples: +# setlocal path=~/downloads sort mtime + +# =================================================================== +# == Command Aliases in the Console +# =================================================================== + +alias e edit +alias q quit +alias q! quitall +alias qa quitall +alias qall quitall +alias setl setlocal + +alias filter scout -prt +alias find scout -aeit +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefiklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +unmap +unmap +unmap +unmap +unmap n + +map change_mode normal + +map help +map eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map console scout -ftsea%space +map shell $SHELL -c "cd %d; $SHELL" +map reload_cwd + +map move up=1 +map move down=1 +map move left=1 +map move right=1 +map move to=0 +map move to=-1 +map move down=1 pages=True +map move up=1 pages=True +map move right=1 +# map console delete +map shell trash-put %s +map console touch%space + +# Jumping around +map history_go -1 +map history_go 1 +map move_parent 1 +map move_parent -1 +#map } traverse + +map reset +map redraw_window +map abort +map set show_hidden! + +map : console +map ! console shell%space +map cd console cd%space +map ~ set viewmode! +map ? help + +map i display_file +map Q quit! +map q quit +map r chain draw_possible_programs; console -p10 open_with f +map W display_log +map w taskview_open + +# Change the line mode +map Mf linemode filename +map Mi linemode fileinfo +map Mm linemode mtime +map Mp linemode permissions +map Ms linemode sizemtime +map Mt linemode metatitle + +# New +map nf console touch%space +map nd console mkdir%space +map nl console shell ln -s%space + +# Tagging / Marking +map t tag_toggle +map T tag_toggle tag=%any +map mark_files toggle=True +map mark_files all=True toggle=True +#map v mark_files all=True toggle=True +#map uv mark_files all=True val=False +map V toggle_visual_mode +#map uV toggle_visual_mode reverse=True + +# home dir +map gc cd ~/Cours +map gd cd ~/Documents +map gh cd ~ +map gm cd /media/jeff +map gz cd ~/Musique +# global dir +map gE cd /etc +map gU cd /usr +map gD cd /dev +map gL cd -r %f +map gO cd /opt +map gV cd /var +map gM cd /mnt +map gS cd /srv +map gR cd / + +# External Programs +#map E edit +map du shell -p du --max-depth=1 -h --apparent-size +map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh +map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b +map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b +map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b + +# Filesystem Operations +map = console chmod%space + +map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) + +map paste append=True +#map pp paste +#map po paste overwrite=True +#map pP paste append=True +#map pO paste overwrite=True append=True +#map pl paste_symlink relative=False +#map pL paste_symlink relative=True +#map phl paste_hardlink +#map pht paste_hardlinked_subtree + +map dD console delete + +map cut +#map dd cut +#map ud uncut +#map da cut mode=add +#map dr cut mode=remove +#map dt cut mode=toggle + +map copy +#map yy copy +#map yy copy +#map uy uncut +#map ya copy mode=add +#map yr copy mode=remove +#map yt copy mode=toggle + +# Temporary workarounds +#map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) +#map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) +#map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) +#map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) +#map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) +#map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) +#map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) +#map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) + +# Searching +# map / console search%space +# map n search_next +# map N search_next forward=False +#map ct search_next order=tag +#map cs search_next order=size +#map ci search_next order=mimetype +#map cc search_next order=ctime +#map cm search_next order=mtime +#map ca search_next order=atime + +# Tabs +map tab_new ~ +map tab_close +map tab_move 1 +map tab_move -1 +#map tab_move 1 +#map tab_move -1 +#map gt tab_move 1 +#map gT tab_move -1 +#map gn tab_new ~ +#map gc tab_close +#map uq tab_restore +#map tab_open 1 +#map tab_open 2 +#map tab_open 3 +#map tab_open 4 +#map tab_open 5 +#map tab_open 6 +#map tab_open 7 +#map tab_open 8 +#map tab_open 9 + +# Sorting +map or set sort_reverse! +map oz set sort=random +map os chain set sort=size; set sort_reverse=False +map ob chain set sort=basename; set sort_reverse=False +map on chain set sort=natural; set sort_reverse=False +map om chain set sort=mtime; set sort_reverse=False +map oc chain set sort=ctime; set sort_reverse=False +map oa chain set sort=atime; set sort_reverse=False +map ot chain set sort=type; set sort_reverse=False +map oe chain set sort=extension; set sort_reverse=False + +map oS chain set sort=size; set sort_reverse=True +map oB chain set sort=basename; set sort_reverse=True +map oN chain set sort=natural; set sort_reverse=True +map oM chain set sort=mtime; set sort_reverse=True +map oC chain set sort=ctime; set sort_reverse=True +map oA chain set sort=atime; set sort_reverse=True +map oT chain set sort=type; set sort_reverse=True +map oE chain set sort=extension; set sort_reverse=True + +map dc get_cumulative_size + +# Settings +map zc set collapse_preview! +map zd set sort_directories_first! +map zh set show_hidden! +map zI set flushinput! +map zi set preview_images! +map zm set mouse_enabled! +map zp set preview_files! +map zP set preview_directories! +map zs set sort_case_insensitive! +map zu set autoupdate_cumulative_size! +map zv set use_preview_script! +map zf console filter%space + +# Bookmarks +map @ enter_bookmark %any +map m set_bookmark %any +map um unset_bookmark %any +#map m draw_bookmarks +#copymap m um @ + +# Generate all the chmod bindings with some python help: +eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) + +eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) + +# =================================================================== +# == Define keys for the console +# =================================================================== +# Note: Unmapped keys are passed directly to the console. + +# Basic +cmap eval fm.ui.console.tab(1) +cmap eval fm.ui.console.tab(-1) +cmap eval fm.ui.console.close() +cmap eval fm.ui.console.execute() +cmap redraw_window + +copycmap +#copycmap + +# Move around +#cmap eval fm.ui.console.history_move(-1) +#cmap eval fm.ui.console.history_move(1) +#cmap eval fm.ui.console.move(left=1) +#cmap eval fm.ui.console.move(right=1) +#cmap eval fm.ui.console.move(right=0, absolute=True) +#cmap eval fm.ui.console.move(right=-1, absolute=True) +#cmap eval fm.ui.console.move_word(left=1) +#cmap eval fm.ui.console.move_word(right=1) + +# Line Editing +cmap eval fm.ui.console.delete(-1) +cmap eval fm.ui.console.delete(0) +cmap eval fm.ui.console.delete_word() +#cmap eval fm.ui.console.delete_word(backward=False) +#cmap eval fm.ui.console.delete_rest(1) +#cmap eval fm.ui.console.delete_rest(-1) +cmap eval fm.ui.console.paste() + +# And of course the emacs way +#copycmap +#copycmap +#copycmap +#copycmap +#copycmap +#copycmap +#copycmap +#copycmap + +# Note: There are multiple ways to express backspaces. (code 263) +# and (code 127). To be sure, use both. +copycmap + +# This special expression allows typing in numerals: +cmap false + +# =================================================================== +# == Pager Keybindings +# =================================================================== + +# Movement +pmap pager_move down=1 +pmap pager_move up=1 +pmap pager_move left=4 +pmap pager_move right=4 +pmap pager_move to=0 +pmap pager_move to=-1 +pmap pager_move down=1.0 pages=True +pmap pager_move up=1.0 pages=True +#pmap pager_move down=0.5 pages=True +#pmap pager_move up=0.5 pages=True + +#copypmap k +#copypmap j +#copypmap h +#copypmap l +#copypmap g +#copypmap G +#copypmap d +#copypmap u +#copypmap n f +#copypmap p b + +# Basic +pmap redraw_window +pmap pager_close +copypmap q Q i +pmap E edit_file + +# =================================================================== +# == Taskview Keybindings +# =================================================================== + +# Movement +tmap taskview_move up=1 +tmap taskview_move down=1 +tmap taskview_move to=0 +tmap taskview_move to=-1 +tmap taskview_move down=1.0 pages=True +tmap taskview_move up=1.0 pages=True +#tmap taskview_move down=0.5 pages=True +#tmap taskview_move up=0.5 pages=True + +#copytmap k +#copytmap j +#copytmap g +#copytmap G +#copytmap u +#copytmap n f +#copytmap p b + +# Changing priority and deleting tasks +#tmap J eval -q fm.ui.taskview.task_move(-1) +#tmap K eval -q fm.ui.taskview.task_move(0) +#tmap dd eval -q fm.ui.taskview.task_remove() +tmap eval -q fm.ui.taskview.task_move(-1) +tmap eval -q fm.ui.taskview.task_move(0) +tmap eval -q fm.ui.taskview.task_remove() + +# Basic +tmap redraw_window +tmap taskview_close +copytmap q Q w + diff --git a/conf.d/ranger/rifle.conf b/conf.d/ranger/rifle.conf new file mode 100644 index 0000000..894bc5c --- /dev/null +++ b/conf.d/ranger/rifle.conf @@ -0,0 +1,265 @@ +# vim: ft=sh +# +# This is the configuration file of "rifle", ranger's file executor/opener. +# Each line consists of conditions and a command. For each line the conditions +# are checked and if they are met, the respective command is run. +# +# Syntax: +# , , ... = command +# +# The command can contain these environment variables: +# $1-$9 | The n-th selected file +# $@ | All selected files +# +# If you use the special command "ask", rifle will ask you what program to run. +# +# Prefixing a condition with "!" will negate its result. +# These conditions are currently supported: +# match | The regexp matches $1 +# ext | The regexp matches the extension of $1 +# mime | The regexp matches the mime type of $1 +# name | The regexp matches the basename of $1 +# path | The regexp matches the absolute path of $1 +# has | The program is installed (i.e. located in $PATH) +# env | The environment variable "variable" is non-empty +# file | $1 is a file +# directory | $1 is a directory +# number | change the number of this command to n +# terminal | stdin, stderr and stdout are connected to a terminal +# X | $DISPLAY is not empty (i.e. Xorg runs) +# +# There are also pseudo-conditions which have a "side effect": +# flag | Change how the program is run. See below. +# label