diff options
-rwxr-xr-x | ranger/config/commands.py | 60 | ||||
-rw-r--r-- | ranger/config/rc.conf | 7 | ||||
-rw-r--r-- | ranger/config/rifle.conf | 1 | ||||
-rw-r--r-- | ranger/core/main.py | 22 |
4 files changed, 73 insertions, 17 deletions
diff --git a/ranger/config/commands.py b/ranger/config/commands.py index 502e6f61..f28b5553 100755 --- a/ranger/config/commands.py +++ b/ranger/config/commands.py @@ -1686,3 +1686,63 @@ class linemode(default_linemode): # Ask the browsercolumns to redraw for col in self.fm.ui.browser.columns: col.need_redraw = True + + +class yank(Command): + """:yank [name|dir|path] + + Copies the file's name (default), directory or path into both the primary X + selection and the clipboard. + """ + + modes = { + '': 'basename', + 'name': 'basename', + 'dir': 'dirname', + 'path': 'path', + } + + def execute(self): + import subprocess + + def clipboards(): + from ranger.ext.get_executables import get_executables + clipboard_managers = { + 'xclip': [ + ['xclip'], + ['xclip', '-selection', 'clipboard'], + ], + 'xsel': [ + ['xsel'], + ['xsel', '-b'], + ], + 'pbcopy': [ + ['pbcopy'], + ], + } + ordered_managers = ['pbcopy', 'xclip', 'xsel'] + executables = get_executables() + for manager in ordered_managers: + if manager in executables: + return clipboard_managers[manager] + return [] + + clipboard_commands = clipboards() + + selection = self.get_selection_attr(self.modes[self.arg(1)]) + new_clipboard_contents = "\n".join(selection) + for command in clipboard_commands: + process = subprocess.Popen(command, universal_newlines=True, + stdin=subprocess.PIPE) + process.communicate(input=new_clipboard_contents) + + def get_selection_attr(self, attr): + return [getattr(item, attr) for item in + self.fm.thistab.get_selection()] + + def tab(self, tabnum): + return ( + self.start(1) + mode for mode + in sorted(self.modes.keys()) + if mode + ) diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index 9af5a953..0561f23d 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -375,10 +375,9 @@ map g? cd /usr/share/doc/ranger 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 -map ys shell -f printf '%%s\n' %s | xsel -i && xsel -o | xsel -i -b +map yp yank path +map yd yank dir +map yn yank name # Filesystem Operations map = chmod diff --git a/ranger/config/rifle.conf b/ranger/config/rifle.conf index 39dee7e9..a0b46a40 100644 --- a/ranger/config/rifle.conf +++ b/ranger/config/rifle.conf @@ -175,6 +175,7 @@ mime ^image, has mirage, X, flag f = mirage -- "$@" mime ^image, has ristretto, X, flag f = ristretto "$@" mime ^image, has eog, X, flag f = eog -- "$@" mime ^image, has eom, X, flag f = eom -- "$@" +mime ^image, has nomacs, X, flag f = nomacs -- "$@" mime ^image, has gimp, X, flag f = gimp -- "$@" ext xcf, X, flag f = gimp -- "$@" diff --git a/ranger/core/main.py b/ranger/core/main.py index 38513970..9a0fe59f 100644 --- a/ranger/core/main.py +++ b/ranger/core/main.py @@ -350,19 +350,6 @@ def load_settings( # pylint: disable=too-many-locals,too-many-branches,too-many LOG.debug("Loaded custom commands from '%s'", custom_comm_path) sys.dont_write_bytecode = old_bytecode_setting - allow_access_to_confdir(ranger.args.confdir, False) - - # Load rc.conf - custom_conf = fm.confpath('rc.conf') - default_conf = fm.relpath('config', 'rc.conf') - - if os.environ.get('RANGER_LOAD_DEFAULT_RC', 'TRUE').upper() != 'FALSE': - fm.source(default_conf) - if os.access(custom_conf, os.R_OK): - fm.source(custom_conf) - - allow_access_to_confdir(ranger.args.confdir, True) - # XXX Load plugins (experimental) plugindir = fm.confpath('plugins') try: @@ -399,6 +386,15 @@ def load_settings( # pylint: disable=too-many-locals,too-many-branches,too-many ranger.fm = None allow_access_to_confdir(ranger.args.confdir, False) + # Load rc.conf + custom_conf = fm.confpath('rc.conf') + default_conf = fm.relpath('config', 'rc.conf') + + if os.environ.get('RANGER_LOAD_DEFAULT_RC', 'TRUE').upper() != 'FALSE': + fm.source(default_conf) + if os.access(custom_conf, os.R_OK): + fm.source(custom_conf) + else: fm.source(fm.relpath('config', 'rc.conf')) |