My dotfiles for my Linux rice managed with stow and make
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 108 lines 4.2 KiB Raw Permalink Blame History

 # This is a sample commands.py. You can add your own commands here. # # Please refer to commands_full.py for all the default commands and a complete # documentation. Do NOT add them all here, or you may end up with defunct # commands when upgrading ranger.   # You always need to import ranger.api.commands here to get the Command class: from ranger.api.commands import *   # A simple command for demonstration purposes follows. # -----------------------------------------------------------------------------   # You can import any python module as needed. import os   # Any class that is a subclass of "Command" will be integrated into ranger as a # command. Try typing ":my_edit" in ranger!     class my_edit(Command):  # The so-called doc-string of the class will be visible in the built-in  # help that is accessible by typing "?c" inside ranger.  """:my_edit   A sample command for demonstration purposes that opens a file in an editor.  """    # The execute method is called when you run this command in ranger.  def execute(self):  # self.arg(1) is the first (space-separated) argument to the function.  # This way you can write ":my_edit somefilename".  if self.arg(1):  # self.rest(1) contains self.arg(1) and everything that follows  target_filename = self.rest(1)  else:  # self.fm is a ranger.core.filemanager.FileManager object and gives  # you access to internals of ranger.  # self.fm.thisfile is a ranger.container.file.File object and is a  # reference to the currently selected file.  target_filename = self.fm.thisfile.path    # This is a generic function to print text in ranger.  self.fm.notify("Let's edit the file " + target_filename + "!")    # Using bad=True in fm.notify allows you to print error messages:  if not os.path.exists(target_filename):  self.fm.notify("The given file does not exist!", bad=True)  return    # This executes a function from ranger.core.acitons, a module with a  # variety of subroutines that can help you construct commands.  # Check out the source, or run "pydoc ranger.core.actions" for a list.  self.fm.edit_file(target_filename)    # The tab method is called when you press tab, and should return a list of  # suggestions that the user will tab through.  # tabnum is 1 for and -1 for by default  def tab(self, tabnum):  # This is a generic tab-completion function that iterates through the  # content of the current directory.  return self._tab_directory_content()   class fzf_select(Command):  """  :fzf_select  Find a file using fzf.  With a prefix argument select only directories.  See: https://github.com/junegunn/fzf  """  def execute(self):  import subprocess  import os.path  if self.quantifier:  # match only directories  command="find -L . $-path '*/\.*' -o -fstype 'dev' -o -fstype 'proc'$ -prune \  -o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"  else:  # match files and directories  command="find -L . $-path '*/\.*' -o -fstype 'dev' -o -fstype 'proc'$ -prune \  -o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"  fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)  stdout, stderr = fzf.communicate()  if fzf.returncode == 0:  fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n'))  if os.path.isdir(fzf_file):  self.fm.cd(fzf_file)  else:  self.fm.select_file(fzf_file)   class pingo(Command):  """  :pingo  My custom directory pinning system  """  def execute(self):  import subprocess  import os.path  command="cat $XDG_CONFIG_HOME/pins|fzf -n 1|awk '{print$1 \":\" \$2}'"  fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)  stdout, stderr = fzf.communicate()  if fzf.returncode == 0:  name, folder = stdout.decode('utf-8').rstrip('\n').split(":")  fzf_folder = os.path.abspath(folder)  self.fm.cd(fzf_folder)