#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File : command.py # Author : Jeff LANCE # Date : 12.05.2021 # Last Modified Date: 12.05.2021 # Last Modified By : Jeff LANCE import os from ranger.core.loader import CommandLoader from ranger_udisk_menu.mounter import mount class extract_here(Command): def execute(self): """extract selected files to current directory.""" cwd = self.fm.thisdir marked_files = tuple(cwd.get_selection()) def refresh(_): cwd = self.fm.get_directory(original_path) cwd.load_content() one_file = marked_files[0] cwd = self.fm.thisdir original_path = cwd.path au_flags = ["-x", cwd.path] au_flags += self.line.split()[1:] au_flags += ["-e"] self.fm.copy_buffer.clear() self.fm.cut_buffer = False if len(marked_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"] + au_flags + [f.path for f in marked_files], descr=descr, read=True, ) obj.signal_bind("after", refresh) self.fm.loader.add(obj) 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 parts = self.line.split() au_flags = parts[1:] descr = "compressing files in: " + os.path.basename(parts[1]) 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 ] class mkcd(Command): """ :mkcd Creates a directory with the name and enters it. """ def execute(self): from os.path import join, expanduser, lexists from os import makedirs import re dirname = join(self.fm.thisdir.path, expanduser(self.rest(1))) if not lexists(dirname): makedirs(dirname) match = re.search("^/|^~[^/]*/", dirname) if match: self.fm.cd(match.group(0)) dirname = dirname[match.end(0) :] for m in re.finditer("[^/]+", dirname): s = m.group(0) if s == ".." or ( s.startswith(".") and not self.fm.settings["show_hidden"] ): self.fm.cd(s) else: ## We force ranger to load content before calling `scout`. self.fm.thisdir.load_content(schedule=False) self.fm.execute_console("scout -ae ^{}$".format(s)) else: self.fm.notify("file/directory exists!", bad=True)