annotate config/ranger/commands.py @ 254:731b2964b8fd

Add mapping to compile latex
author zegervdv <zegervdv@me.com>
date Tue, 03 Mar 2015 21:10:25 +0100
parents ca66a7fd5cc9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
245
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
2 # Copyright (C) 2009-2013 Roman Zimbelmann <[email protected]>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
3 # This configuration file is licensed under the same terms as ranger.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
4 # ===================================================================
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
5 # This file contains ranger's commands.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
6 # It's all in python; lines beginning with # are comments.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
7 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
8 # Note that additional commands are automatically generated from the methods
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
9 # of the class ranger.core.actions.Actions.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
10 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
11 # You can customize commands in the file ~/.config/ranger/commands.py.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
12 # It has the same syntax as this file. In fact, you can just copy this
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
13 # file there with `ranger --copy-config=commands' and make your modifications.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
14 # But make sure you update your configs when you update ranger.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
15 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
16 # ===================================================================
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
17 # Every class defined here which is a subclass of `Command' will be used as a
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
18 # command in ranger. Several methods are defined to interface with ranger:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
19 # execute(): called when the command is executed.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
20 # cancel(): called when closing the console.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
21 # tab(): called when <TAB> is pressed.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
22 # quick(): called after each keypress.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
23 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
24 # The return values for tab() can be either:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
25 # None: There is no tab completion
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
26 # A string: Change the console to this string
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
27 # A list/tuple/generator: cycle through every item in it
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
28 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
29 # The return value for quick() can be:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
30 # False: Nothing happens
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
31 # True: Execute the command afterwards
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
32 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
33 # The return value for execute() and cancel() doesn't matter.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
34 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
35 # ===================================================================
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
36 # Commands have certain attributes and methods that facilitate parsing of
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
37 # the arguments:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
38 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
39 # self.line: The whole line that was written in the console.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
40 # self.args: A list of all (space-separated) arguments to the command.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
41 # self.quantifier: If this command was mapped to the key "X" and
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
42 # the user pressed 6X, self.quantifier will be 6.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
43 # self.arg(n): The n-th argument, or an empty string if it doesn't exist.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
44 # self.rest(n): The n-th argument plus everything that followed. For example,
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
45 # If the command was "search foo bar a b c", rest(2) will be "bar a b c"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
46 # self.start(n): The n-th argument and anything before it. For example,
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
47 # If the command was "search foo bar a b c", rest(2) will be "bar a b c"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
48 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
49 # ===================================================================
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
50 # And this is a little reference for common ranger functions and objects:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
51 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
52 # self.fm: A reference to the "fm" object which contains most information
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
53 # about ranger.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
54 # self.fm.notify(string): Print the given string on the screen.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
55 # self.fm.notify(string, bad=True): Print the given string in RED.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
56 # self.fm.reload_cwd(): Reload the current working directory.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
57 # self.fm.thisdir: The current working directory. (A File object.)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
58 # self.fm.thisfile: The current file. (A File object too.)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
59 # self.fm.thistab.get_selection(): A list of all selected files.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
60 # self.fm.execute_console(string): Execute the string as a ranger command.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
61 # self.fm.open_console(string): Open the console with the given string
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
62 # already typed in for you.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
63 # self.fm.move(direction): Moves the cursor in the given direction, which
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
64 # can be something like down=3, up=5, right=1, left=1, to=6, ...
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
65 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
66 # File objects (for example self.fm.thisfile) have these useful attributes and
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
67 # methods:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
68 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
69 # cf.path: The path to the file.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
70 # cf.basename: The base name only.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
71 # cf.load_content(): Force a loading of the directories content (which
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
72 # obviously works with directories only)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
73 # cf.is_directory: True/False depending on whether it's a directory.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
74 #
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
75 # For advanced commands it is unavoidable to dive a bit into the source code
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
76 # of ranger.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
77 # ===================================================================
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
78
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
79 import os
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
80 from ranger.api.commands import *
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
81 from ranger.core.loader import CommandLoader
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
82
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
83 class alias(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
84 """:alias <newcommand> <oldcommand>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
85
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
86 Copies the oldcommand as newcommand.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
87 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
88
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
89 context = 'browser'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
90 resolve_macros = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
91
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
92 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
93 if not self.arg(1) or not self.arg(2):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
94 self.fm.notify('Syntax: alias <newcommand> <oldcommand>', bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
95 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
96 self.fm.commands.alias(self.arg(1), self.rest(2))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
97
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
98 class cd(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
99 """:cd [-r] <dirname>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
100
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
101 The cd command changes the directory.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
102 The command 'cd -' is equivalent to typing ``.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
103 Using the option "-r" will get you to the real path.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
104 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
105
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
106 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
107 import os.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
108 if self.arg(1) == '-r':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
109 self.shift()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
110 destination = os.path.realpath(self.rest(1))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
111 if os.path.isfile(destination):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
112 destination = os.path.dirname(destination)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
113 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
114 destination = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
115
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
116 if not destination:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
117 destination = '~'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
118
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
119 if destination == '-':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
120 self.fm.enter_bookmark('`')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
121 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
122 self.fm.cd(destination)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
123
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
124 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
125 import os
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
126 from os.path import dirname, basename, expanduser, join
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
127
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
128 cwd = self.fm.thisdir.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
129 rel_dest = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
130
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
131 bookmarks = [v.path for v in self.fm.bookmarks.dct.values()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
132 if rel_dest in v.path ]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
133
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
134 # expand the tilde into the user directory
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
135 if rel_dest.startswith('~'):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
136 rel_dest = expanduser(rel_dest)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
137
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
138 # define some shortcuts
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
139 abs_dest = join(cwd, rel_dest)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
140 abs_dirname = dirname(abs_dest)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
141 rel_basename = basename(rel_dest)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
142 rel_dirname = dirname(rel_dest)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
143
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
144 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
145 # are we at the end of a directory?
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
146 if rel_dest.endswith('/') or rel_dest == '':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
147 _, dirnames, _ = next(os.walk(abs_dest))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
148
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
149 # are we in the middle of the filename?
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
150 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
151 _, dirnames, _ = next(os.walk(abs_dirname))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
152 dirnames = [dn for dn in dirnames \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
153 if dn.startswith(rel_basename)]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
154 except (OSError, StopIteration):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
155 # os.walk found nothing
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
156 pass
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
157 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
158 dirnames.sort()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
159 dirnames = bookmarks + dirnames
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
160
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
161 # no results, return None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
162 if len(dirnames) == 0:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
163 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
164
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
165 # one result. since it must be a directory, append a slash.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
166 if len(dirnames) == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
167 return self.start(1) + join(rel_dirname, dirnames[0]) + '/'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
168
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
169 # more than one result. append no slash, so the user can
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
170 # manually type in the slash to advance into that directory
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
171 return (self.start(1) + join(rel_dirname, dirname) for dirname in dirnames)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
172
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
173
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
174 class chain(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
175 """:chain <command1>; <command2>; ...
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
176
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
177 Calls multiple commands at once, separated by semicolons.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
178 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
179 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
180 for command in self.rest(1).split(";"):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
181 self.fm.execute_console(command)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
182
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
183
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
184 class shell(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
185 escape_macros_for_shell = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
186
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
187 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
188 if self.arg(1) and self.arg(1)[0] == '-':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
189 flags = self.arg(1)[1:]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
190 command = self.rest(2)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
191 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
192 flags = ''
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
193 command = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
194
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
195 if not command and 'p' in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
196 command = 'cat %f'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
197 if command:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
198 if '%' in command:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
199 command = self.fm.substitute_macros(command, escape=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
200 self.fm.execute_command(command, flags=flags)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
201
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
202 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
203 from ranger.ext.get_executables import get_executables
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
204 if self.arg(1) and self.arg(1)[0] == '-':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
205 command = self.rest(2)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
206 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
207 command = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
208 start = self.line[0:len(self.line) - len(command)]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
209
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
210 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
211 position_of_last_space = command.rindex(" ")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
212 except ValueError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
213 return (start + program + ' ' for program \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
214 in get_executables() if program.startswith(command))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
215 if position_of_last_space == len(command) - 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
216 selection = self.fm.thistab.get_selection()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
217 if len(selection) == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
218 return self.line + selection[0].shell_escaped_basename + ' '
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
219 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
220 return self.line + '%s '
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
221 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
222 before_word, start_of_word = self.line.rsplit(' ', 1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
223 return (before_word + ' ' + file.shell_escaped_basename \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
224 for file in self.fm.thisdir.files \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
225 if file.shell_escaped_basename.startswith(start_of_word))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
226
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
227 class open_with(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
228 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
229 app, flags, mode = self._get_app_flags_mode(self.rest(1))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
230 self.fm.execute_file(
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
231 files = [f for f in self.fm.thistab.get_selection()],
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
232 app = app,
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
233 flags = flags,
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
234 mode = mode)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
235
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
236 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
237 return self._tab_through_executables()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
238
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
239 def _get_app_flags_mode(self, string):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
240 """Extracts the application, flags and mode from a string.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
241
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
242 examples:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
243 "mplayer f 1" => ("mplayer", "f", 1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
244 "aunpack 4" => ("aunpack", "", 4)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
245 "p" => ("", "p", 0)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
246 "" => None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
247 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
248
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
249 app = ''
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
250 flags = ''
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
251 mode = 0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
252 split = string.split()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
253
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
254 if len(split) == 0:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
255 pass
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
256
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
257 elif len(split) == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
258 part = split[0]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
259 if self._is_app(part):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
260 app = part
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
261 elif self._is_flags(part):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
262 flags = part
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
263 elif self._is_mode(part):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
264 mode = part
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
265
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
266 elif len(split) == 2:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
267 part0 = split[0]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
268 part1 = split[1]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
269
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
270 if self._is_app(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
271 app = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
272 if self._is_flags(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
273 flags = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
274 elif self._is_mode(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
275 mode = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
276 elif self._is_flags(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
277 flags = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
278 if self._is_mode(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
279 mode = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
280 elif self._is_mode(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
281 mode = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
282 if self._is_flags(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
283 flags = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
284
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
285 elif len(split) >= 3:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
286 part0 = split[0]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
287 part1 = split[1]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
288 part2 = split[2]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
289
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
290 if self._is_app(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
291 app = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
292 if self._is_flags(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
293 flags = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
294 if self._is_mode(part2):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
295 mode = part2
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
296 elif self._is_mode(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
297 mode = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
298 if self._is_flags(part2):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
299 flags = part2
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
300 elif self._is_flags(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
301 flags = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
302 if self._is_mode(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
303 mode = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
304 elif self._is_mode(part0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
305 mode = part0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
306 if self._is_flags(part1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
307 flags = part1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
308
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
309 return app, flags, int(mode)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
310
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
311 def _is_app(self, arg):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
312 return not self._is_flags(arg) and not arg.isdigit()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
313
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
314 def _is_flags(self, arg):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
315 from ranger.core.runner import ALLOWED_FLAGS
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
316 return all(x in ALLOWED_FLAGS for x in arg)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
317
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
318 def _is_mode(self, arg):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
319 return all(x in '0123456789' for x in arg)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
320
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
321
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
322 class set_(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
323 """:set <option name>=<python expression>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
324
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
325 Gives an option a new value.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
326 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
327 name = 'set' # don't override the builtin set class
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
328 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
329 name = self.arg(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
330 name, value, _ = self.parse_setting_line()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
331 self.fm.set_option_from_string(name, value)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
332
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
333 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
334 name, value, name_done = self.parse_setting_line()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
335 settings = self.fm.settings
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
336 if not name:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
337 return sorted(self.firstpart + setting for setting in settings)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
338 if not value and not name_done:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
339 return (self.firstpart + setting for setting in settings \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
340 if setting.startswith(name))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
341 if not value:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
342 return self.firstpart + str(settings[name])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
343 if bool in settings.types_of(name):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
344 if 'true'.startswith(value.lower()):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
345 return self.firstpart + 'True'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
346 if 'false'.startswith(value.lower()):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
347 return self.firstpart + 'False'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
348
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
349
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
350 class setlocal(set_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
351 """:setlocal path=<python string> <option name>=<python expression>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
352
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
353 Gives an option a new value.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
354 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
355 PATH_RE = re.compile(r'^\s*path="?(.*?)"?\s*$')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
356 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
357 import os.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
358 match = self.PATH_RE.match(self.arg(1))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
359 if match:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
360 path = os.path.normpath(os.path.expanduser(match.group(1)))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
361 self.shift()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
362 elif self.fm.thisdir:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
363 path = self.fm.thisdir.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
364 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
365 path = None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
366
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
367 if path:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
368 name = self.arg(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
369 name, value, _ = self.parse_setting_line()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
370 self.fm.set_option_from_string(name, value, localpath=path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
371
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
372
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
373 class setintag(setlocal):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
374 """:setintag <tag or tags> <option name>=<option value>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
375
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
376 Sets an option for directories that are tagged with a specific tag.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
377 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
378 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
379 tags = self.arg(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
380 self.shift()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
381 name, value, _ = self.parse_setting_line()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
382 self.fm.set_option_from_string(name, value, tags=tags)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
383
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
384
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
385 class quit(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
386 """:quit
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
387
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
388 Closes the current tab. If there is only one tab, quit the program.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
389 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
390
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
391 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
392 if len(self.fm.tabs) <= 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
393 self.fm.exit()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
394 self.fm.tab_close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
395
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
396
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
397 class quitall(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
398 """:quitall
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
399
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
400 Quits the program immediately.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
401 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
402
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
403 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
404 self.fm.exit()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
405
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
406
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
407 class quit_bang(quitall):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
408 """:quit!
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
409
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
410 Quits the program immediately.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
411 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
412 name = 'quit!'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
413 allow_abbrev = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
414
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
415
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
416 class terminal(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
417 """:terminal
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
418
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
419 Spawns an "x-terminal-emulator" starting in the current directory.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
420 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
421 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
422 import os
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
423 from ranger.ext.get_executables import get_executables
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
424 command = os.environ.get('TERMCMD', os.environ.get('TERM'))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
425 if command not in get_executables():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
426 command = 'x-terminal-emulator'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
427 if command not in get_executables():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
428 command = 'xterm'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
429 self.fm.run(command, flags='f')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
430
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
431
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
432 class delete(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
433 """:delete
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
434
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
435 Tries to delete the selection.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
436
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
437 "Selection" is defined as all the "marked files" (by default, you
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
438 can mark files with space or v). If there are no marked files,
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
439 use the "current file" (where the cursor is)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
440
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
441 When attempting to delete non-empty directories or multiple
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
442 marked files, it will require a confirmation.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
443 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
444
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
445 allow_abbrev = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
446
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
447 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
448 import os
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
449 if self.rest(1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
450 self.fm.notify("Error: delete takes no arguments! It deletes "
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
451 "the selected file(s).", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
452 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
453
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
454 cwd = self.fm.thisdir
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
455 cf = self.fm.thisfile
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
456 if not cwd or not cf:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
457 self.fm.notify("Error: no file selected for deletion!", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
458 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
459
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
460 confirm = self.fm.settings.confirm_on_delete
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
461 many_files = (cwd.marked_items or (cf.is_directory and not cf.is_link \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
462 and len(os.listdir(cf.path)) > 0))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
463
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
464 if confirm != 'never' and (confirm != 'multiple' or many_files):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
465 self.fm.ui.console.ask("Confirm deletion of: %s (y/N)" %
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
466 ', '.join(f.basename for f in self.fm.thistab.get_selection()),
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
467 self._question_callback, ('n', 'N', 'y', 'Y'))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
468 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
469 # no need for a confirmation, just delete
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
470 self.fm.delete()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
471
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
472 def _question_callback(self, answer):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
473 if answer == 'y' or answer == 'Y':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
474 self.fm.delete()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
475
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
476
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
477 class mark_tag(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
478 """:mark_tag [<tags>]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
479
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
480 Mark all tags that are tagged with either of the given tags.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
481 When leaving out the tag argument, all tagged files are marked.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
482 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
483 do_mark = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
484
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
485 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
486 cwd = self.fm.thisdir
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
487 tags = self.rest(1).replace(" ","")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
488 if not self.fm.tags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
489 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
490 for fileobj in cwd.files:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
491 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
492 tag = self.fm.tags.tags[fileobj.realpath]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
493 except KeyError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
494 continue
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
495 if not tags or tag in tags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
496 cwd.mark_item(fileobj, val=self.do_mark)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
497 self.fm.ui.status.need_redraw = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
498 self.fm.ui.need_redraw = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
499
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
500
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
501 class console(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
502 """:console <command>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
503
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
504 Open the console with the given command.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
505 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
506 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
507 position = None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
508 if self.arg(1)[0:2] == '-p':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
509 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
510 position = int(self.arg(1)[2:])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
511 self.shift()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
512 except:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
513 pass
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
514 self.fm.open_console(self.rest(1), position=position)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
515
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
516
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
517 class load_copy_buffer(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
518 """:load_copy_buffer
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
519
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
520 Load the copy buffer from confdir/copy_buffer
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
521 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
522 copy_buffer_filename = 'copy_buffer'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
523 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
524 from ranger.container.file import File
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
525 from os.path import exists
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
526 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
527 fname = self.fm.confpath(self.copy_buffer_filename)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
528 f = open(fname, 'r')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
529 except:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
530 return self.fm.notify("Cannot open %s" % \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
531 (fname or self.copy_buffer_filename), bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
532 self.fm.copy_buffer = set(File(g) \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
533 for g in f.read().split("\n") if exists(g))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
534 f.close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
535 self.fm.ui.redraw_main_column()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
536
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
537
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
538 class save_copy_buffer(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
539 """:save_copy_buffer
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
540
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
541 Save the copy buffer to confdir/copy_buffer
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
542 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
543 copy_buffer_filename = 'copy_buffer'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
544 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
545 fname = None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
546 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
547 fname = self.fm.confpath(self.copy_buffer_filename)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
548 f = open(fname, 'w')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
549 except:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
550 return self.fm.notify("Cannot open %s" % \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
551 (fname or self.copy_buffer_filename), bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
552 f.write("\n".join(f.path for f in self.fm.copy_buffer))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
553 f.close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
554
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
555
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
556 class unmark_tag(mark_tag):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
557 """:unmark_tag [<tags>]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
558
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
559 Unmark all tags that are tagged with either of the given tags.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
560 When leaving out the tag argument, all tagged files are unmarked.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
561 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
562 do_mark = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
563
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
564
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
565 class mkdir(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
566 """:mkdir <dirname>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
567
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
568 Creates a directory with the name <dirname>.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
569 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
570
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
571 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
572 from os.path import join, expanduser, lexists
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
573 from os import mkdir
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
574
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
575 dirname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
576 if not lexists(dirname):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
577 mkdir(dirname)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
578 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
579 self.fm.notify("file/directory exists!", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
580
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
581 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
582 return self._tab_directory_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
583
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
584
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
585 class touch(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
586 """:touch <fname>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
587
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
588 Creates a file with the name <fname>.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
589 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
590
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
591 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
592 from os.path import join, expanduser, lexists
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
593
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
594 fname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
595 if not lexists(fname):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
596 open(fname, 'a').close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
597 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
598 self.fm.notify("file/directory exists!", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
599
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
600 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
601 return self._tab_directory_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
602
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
603
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
604 class edit(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
605 """:edit <filename>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
606
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
607 Opens the specified file in vim
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
608 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
609
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
610 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
611 if not self.arg(1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
612 self.fm.edit_file(self.fm.thisfile.path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
613 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
614 self.fm.edit_file(self.rest(1))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
615
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
616 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
617 return self._tab_directory_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
618
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
619
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
620 class eval_(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
621 """:eval [-q] <python code>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
622
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
623 Evaluates the python code.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
624 `fm' is a reference to the FM instance.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
625 To display text, use the function `p'.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
626
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
627 Examples:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
628 :eval fm
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
629 :eval len(fm.directories)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
630 :eval p("Hello World!")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
631 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
632 name = 'eval'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
633 resolve_macros = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
634
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
635 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
636 if self.arg(1) == '-q':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
637 code = self.rest(2)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
638 quiet = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
639 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
640 code = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
641 quiet = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
642 import ranger
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
643 global cmd, fm, p, quantifier
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
644 fm = self.fm
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
645 cmd = self.fm.execute_console
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
646 p = fm.notify
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
647 quantifier = self.quantifier
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
648 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
649 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
650 result = eval(code)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
651 except SyntaxError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
652 exec(code)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
653 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
654 if result and not quiet:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
655 p(result)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
656 except Exception as err:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
657 p(err)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
658
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
659
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
660 class rename(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
661 """:rename <newname>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
662
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
663 Changes the name of the currently highlighted file to <newname>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
664 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
665
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
666 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
667 from ranger.container.file import File
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
668 from os import access
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
669
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
670 new_name = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
671
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
672 if not new_name:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
673 return self.fm.notify('Syntax: rename <newname>', bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
674
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
675 if new_name == self.fm.thisfile.basename:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
676 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
677
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
678 if access(new_name, os.F_OK):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
679 return self.fm.notify("Can't rename: file already exists!", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
680
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
681 self.fm.rename(self.fm.thisfile, new_name)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
682 f = File(new_name)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
683 self.fm.thisdir.pointed_obj = f
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
684 self.fm.thisfile = f
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
685
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
686 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
687 return self._tab_directory_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
688
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
689
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
690 class chmod(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
691 """:chmod <octal number>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
692
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
693 Sets the permissions of the selection to the octal number.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
694
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
695 The octal number is between 0 and 777. The digits specify the
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
696 permissions for the user, the group and others.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
697
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
698 A 1 permits execution, a 2 permits writing, a 4 permits reading.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
699 Add those numbers to combine them. So a 7 permits everything.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
700 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
701
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
702 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
703 mode = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
704 if not mode:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
705 mode = str(self.quantifier)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
706
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
707 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
708 mode = int(mode, 8)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
709 if mode < 0 or mode > 0o777:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
710 raise ValueError
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
711 except ValueError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
712 self.fm.notify("Need an octal number between 0 and 777!", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
713 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
714
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
715 for file in self.fm.thistab.get_selection():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
716 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
717 os.chmod(file.path, mode)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
718 except Exception as ex:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
719 self.fm.notify(ex)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
720
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
721 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
722 # reloading directory. maybe its better to reload the selected
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
723 # files only.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
724 self.fm.thisdir.load_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
725 except:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
726 pass
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
727
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
728
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
729 class bulkrename(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
730 """:bulkrename
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
731
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
732 This command opens a list of selected files in an external editor.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
733 After you edit and save the file, it will generate a shell script
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
734 which does bulk renaming according to the changes you did in the file.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
735
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
736 This shell script is opened in an editor for you to review.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
737 After you close it, it will be executed.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
738 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
739 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
740 import sys
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
741 import tempfile
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
742 from ranger.container.file import File
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
743 from ranger.ext.shell_escape import shell_escape as esc
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
744 py3 = sys.version > "3"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
745
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
746 # Create and edit the file list
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
747 filenames = [f.basename for f in self.fm.thistab.get_selection()]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
748 listfile = tempfile.NamedTemporaryFile()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
749
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
750 if py3:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
751 listfile.write("\n".join(filenames).encode("utf-8"))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
752 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
753 listfile.write("\n".join(filenames))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
754 listfile.flush()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
755 self.fm.execute_file([File(listfile.name)], app='editor')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
756 listfile.seek(0)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
757 if py3:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
758 new_filenames = listfile.read().decode("utf-8").split("\n")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
759 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
760 new_filenames = listfile.read().split("\n")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
761 listfile.close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
762 if all(a == b for a, b in zip(filenames, new_filenames)):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
763 self.fm.notify("No renaming to be done!")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
764 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
765
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
766 # Generate and execute script
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
767 cmdfile = tempfile.NamedTemporaryFile()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
768 cmdfile.write(b"# This file will be executed when you close the editor.\n")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
769 cmdfile.write(b"# Please double-check everything, clear the file to abort.\n")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
770 if py3:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
771 cmdfile.write("\n".join("mv -vi -- " + esc(old) + " " + esc(new) \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
772 for old, new in zip(filenames, new_filenames) \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
773 if old != new).encode("utf-8"))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
774 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
775 cmdfile.write("\n".join("mv -vi -- " + esc(old) + " " + esc(new) \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
776 for old, new in zip(filenames, new_filenames) if old != new))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
777 cmdfile.flush()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
778 self.fm.execute_file([File(cmdfile.name)], app='editor')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
779 self.fm.run(['/bin/sh', cmdfile.name], flags='w')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
780 cmdfile.close()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
781
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
782
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
783 class relink(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
784 """:relink <newpath>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
785
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
786 Changes the linked path of the currently highlighted symlink to <newpath>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
787 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
788
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
789 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
790 from ranger.container.file import File
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
791
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
792 new_path = self.rest(1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
793 cf = self.fm.thisfile
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
794
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
795 if not new_path:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
796 return self.fm.notify('Syntax: relink <newpath>', bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
797
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
798 if not cf.is_link:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
799 return self.fm.notify('%s is not a symlink!' % cf.basename, bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
800
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
801 if new_path == os.readlink(cf.path):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
802 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
803
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
804 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
805 os.remove(cf.path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
806 os.symlink(new_path, cf.path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
807 except OSError as err:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
808 self.fm.notify(err)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
809
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
810 self.fm.reset()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
811 self.fm.thisdir.pointed_obj = cf
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
812 self.fm.thisfile = cf
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
813
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
814 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
815 if not self.rest(1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
816 return self.line+os.readlink(self.fm.thisfile.path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
817 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
818 return self._tab_directory_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
819
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
820
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
821 class help_(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
822 """:help
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
823
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
824 Display ranger's manual page.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
825 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
826 name = 'help'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
827 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
828 if self.quantifier == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
829 self.fm.dump_keybindings()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
830 elif self.quantifier == 2:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
831 self.fm.dump_commands()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
832 elif self.quantifier == 3:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
833 self.fm.dump_settings()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
834 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
835 self.fm.display_help()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
836
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
837
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
838 class copymap(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
839 """:copymap <keys> <newkeys1> [<newkeys2>...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
840
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
841 Copies a "browser" keybinding from <keys> to <newkeys>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
842 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
843 context = 'browser'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
844
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
845 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
846 if not self.arg(1) or not self.arg(2):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
847 return self.fm.notify("Not enough arguments", bad=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
848
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
849 for arg in self.args[2:]:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
850 self.fm.ui.keymaps.copy(self.context, self.arg(1), arg)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
851
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
852
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
853 class copypmap(copymap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
854 """:copypmap <keys> <newkeys1> [<newkeys2>...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
855
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
856 Copies a "pager" keybinding from <keys> to <newkeys>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
857 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
858 context = 'pager'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
859
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
860
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
861 class copycmap(copymap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
862 """:copycmap <keys> <newkeys1> [<newkeys2>...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
863
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
864 Copies a "console" keybinding from <keys> to <newkeys>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
865 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
866 context = 'console'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
867
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
868
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
869 class copytmap(copymap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
870 """:copycmap <keys> <newkeys1> [<newkeys2>...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
871
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
872 Copies a "taskview" keybinding from <keys> to <newkeys>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
873 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
874 context = 'taskview'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
875
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
876
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
877 class unmap(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
878 """:unmap <keys> [<keys2>, ...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
879
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
880 Remove the given "browser" mappings
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
881 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
882 context = 'browser'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
883
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
884 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
885 for arg in self.args[1:]:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
886 self.fm.ui.keymaps.unbind(self.context, arg)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
887
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
888
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
889 class cunmap(unmap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
890 """:cunmap <keys> [<keys2>, ...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
891
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
892 Remove the given "console" mappings
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
893 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
894 context = 'browser'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
895
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
896
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
897 class punmap(unmap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
898 """:punmap <keys> [<keys2>, ...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
899
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
900 Remove the given "pager" mappings
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
901 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
902 context = 'pager'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
903
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
904
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
905 class tunmap(unmap):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
906 """:tunmap <keys> [<keys2>, ...]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
907
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
908 Remove the given "taskview" mappings
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
909 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
910 context = 'taskview'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
911
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
912
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
913 class map_(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
914 """:map <keysequence> <command>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
915
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
916 Maps a command to a keysequence in the "browser" context.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
917
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
918 Example:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
919 map j move down
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
920 map J move down 10
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
921 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
922 name = 'map'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
923 context = 'browser'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
924 resolve_macros = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
925
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
926 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
927 self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
928
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
929
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
930 class cmap(map_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
931 """:cmap <keysequence> <command>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
932
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
933 Maps a command to a keysequence in the "console" context.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
934
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
935 Example:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
936 cmap <ESC> console_close
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
937 cmap <C-x> console_type test
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
938 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
939 context = 'console'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
940
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
941
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
942 class tmap(map_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
943 """:tmap <keysequence> <command>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
944
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
945 Maps a command to a keysequence in the "taskview" context.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
946 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
947 context = 'taskview'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
948
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
949
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
950 class pmap(map_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
951 """:pmap <keysequence> <command>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
952
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
953 Maps a command to a keysequence in the "pager" context.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
954 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
955 context = 'pager'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
956
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
957
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
958 class scout(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
959 """:scout [-FLAGS] <pattern>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
960
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
961 Swiss army knife command for searching, traveling and filtering files.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
962 The command takes various flags as arguments which can be used to
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
963 influence its behaviour:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
964
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
965 -a = automatically open a file on unambiguous match
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
966 -e = open the selected file when pressing enter
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
967 -f = filter files that match the current search pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
968 -g = interpret pattern as a glob pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
969 -i = ignore the letter case of the files
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
970 -k = keep the console open when changing a directory with the command
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
971 -l = letter skipping; e.g. allow "rdme" to match the file "readme"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
972 -m = mark the matching files after pressing enter
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
973 -M = unmark the matching files after pressing enter
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
974 -p = permanent filter: hide non-matching files after pressing enter
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
975 -s = smart case; like -i unless pattern contains upper case letters
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
976 -t = apply filter and search pattern as you type
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
977 -v = inverts the match
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
978
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
979 Multiple flags can be combined. For example, ":scout -gpt" would create
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
980 a :filter-like command using globbing.
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
981 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
982 AUTO_OPEN = 'a'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
983 OPEN_ON_ENTER = 'e'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
984 FILTER = 'f'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
985 SM_GLOB = 'g'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
986 IGNORE_CASE = 'i'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
987 KEEP_OPEN = 'k'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
988 SM_LETTERSKIP = 'l'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
989 MARK = 'm'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
990 UNMARK = 'M'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
991 PERM_FILTER = 'p'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
992 SM_REGEX = 'r'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
993 SMART_CASE = 's'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
994 AS_YOU_TYPE = 't'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
995 INVERT = 'v'
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
996
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
997 def __init__(self, *args, **kws):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
998 Command.__init__(self, *args, **kws)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
999 self._regex = None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1000 self.flags, self.pattern = self.parse_flags()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1001
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1002 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1003 thisdir = self.fm.thisdir
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1004 flags = self.flags
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1005 pattern = self.pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1006 regex = self._build_regex()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1007 count = self._count(move=True)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1008
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1009 self.fm.thistab.last_search = regex
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1010 self.fm.set_search_method(order="search")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1011
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1012 if self.MARK in flags or self.UNMARK in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1013 value = flags.find(self.MARK) > flags.find(self.UNMARK)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1014 if self.FILTER in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1015 for f in thisdir.files:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1016 thisdir.mark_item(f, value)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1017 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1018 for f in thisdir.files:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1019 if regex.search(f.basename):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1020 thisdir.mark_item(f, value)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1021
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1022 if self.PERM_FILTER in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1023 thisdir.filter = regex if pattern else None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1024
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1025 # clean up:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1026 self.cancel()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1027
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1028 if self.OPEN_ON_ENTER in flags or \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1029 self.AUTO_OPEN in flags and count == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1030 if os.path.exists(pattern):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1031 self.fm.cd(pattern)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1032 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1033 self.fm.move(right=1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1034
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1035 if self.KEEP_OPEN in flags and thisdir != self.fm.thisdir:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1036 # reopen the console:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1037 self.fm.open_console(self.line[0:-len(pattern)])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1038
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1039 if thisdir != self.fm.thisdir and pattern != "..":
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1040 self.fm.block_input(0.5)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1041
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1042 def cancel(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1043 self.fm.thisdir.temporary_filter = None
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1044 self.fm.thisdir.refilter()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1045
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1046 def quick(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1047 asyoutype = self.AS_YOU_TYPE in self.flags
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1048 if self.FILTER in self.flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1049 self.fm.thisdir.temporary_filter = self._build_regex()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1050 if self.PERM_FILTER in self.flags and asyoutype:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1051 self.fm.thisdir.filter = self._build_regex()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1052 if self.FILTER in self.flags or self.PERM_FILTER in self.flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1053 self.fm.thisdir.refilter()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1054 if self._count(move=asyoutype) == 1 and self.AUTO_OPEN in self.flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1055 return True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1056 return False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1057
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1058 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1059 self._count(move=True, offset=1)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1060
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1061 def _build_regex(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1062 if self._regex is not None:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1063 return self._regex
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1064
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1065 frmat = "%s"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1066 flags = self.flags
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1067 pattern = self.pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1068
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1069 if pattern == ".":
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1070 return re.compile("")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1071
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1072 # Handle carets at start and dollar signs at end separately
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1073 if pattern.startswith('^'):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1074 pattern = pattern[1:]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1075 frmat = "^" + frmat
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1076 if pattern.endswith('$'):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1077 pattern = pattern[:-1]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1078 frmat += "$"
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1079
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1080 # Apply one of the search methods
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1081 if self.SM_REGEX in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1082 regex = pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1083 elif self.SM_GLOB in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1084 regex = re.escape(pattern).replace("\\*", ".*").replace("\\?", ".")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1085 elif self.SM_LETTERSKIP in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1086 regex = ".*".join(re.escape(c) for c in pattern)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1087 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1088 regex = re.escape(pattern)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1089
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1090 regex = frmat % regex
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1091
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1092 # Invert regular expression if necessary
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1093 if self.INVERT in flags:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1094 regex = "^(?:(?!%s).)*$" % regex
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1095
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1096 # Compile Regular Expression
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1097 options = re.LOCALE | re.UNICODE
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1098 if self.IGNORE_CASE in flags or self.SMART_CASE in flags and \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1099 pattern.islower():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1100 options |= re.IGNORECASE
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1101 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1102 self._regex = re.compile(regex, options)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1103 except:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1104 self._regex = re.compile("")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1105 return self._regex
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1106
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1107 def _count(self, move=False, offset=0):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1108 count = 0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1109 cwd = self.fm.thisdir
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1110 pattern = self.pattern
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1111
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1112 if not pattern:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1113 return 0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1114 if pattern == '.':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1115 return 0
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1116 if pattern == '..':
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1117 return 1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1118
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1119 deq = deque(cwd.files)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1120 deq.rotate(-cwd.pointer - offset)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1121 i = offset
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1122 regex = self._build_regex()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1123 for fsobj in deq:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1124 if regex.search(fsobj.basename):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1125 count += 1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1126 if move and count == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1127 cwd.move(to=(cwd.pointer + i) % len(cwd.files))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1128 self.fm.thisfile = cwd.pointed_obj
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1129 if count > 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1130 return count
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1131 i += 1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1132
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1133 return count == 1
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1134
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1135
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1136 class grep(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1137 """:grep <string>
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1138
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1139 Looks for a string in all marked files or directories
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1140 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1141
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1142 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1143 if self.rest(1):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1144 action = ['grep', '--line-number']
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1145 action.extend(['-e', self.rest(1), '-r'])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1146 action.extend(f.path for f in self.fm.thistab.get_selection())
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1147 self.fm.execute_command(action, flags='p')
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1148
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1149
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1150 # Version control commands
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1151 # --------------------------------
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1152 class stage(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1153 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1154 :stage
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1155
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1156 Stage selected files for the corresponding version control system
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1157 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1158 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1159 from ranger.ext.vcs import VcsError
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1160
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1161 filelist = [f.path for f in self.fm.thistab.get_selection()]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1162 self.fm.thisdir.vcs_outdated = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1163 # for f in self.fm.thistab.get_selection():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1164 # f.vcs_outdated = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1165
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1166 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1167 self.fm.thisdir.vcs.add(filelist)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1168 except VcsError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1169 self.fm.notify("Could not stage files.")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1170
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1171 self.fm.reload_cwd()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1172
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1173
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1174 class unstage(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1175 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1176 :unstage
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1177
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1178 Unstage selected files for the corresponding version control system
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1179 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1180 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1181 from ranger.ext.vcs import VcsError
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1182
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1183 filelist = [f.path for f in self.fm.thistab.get_selection()]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1184 self.fm.thisdir.vcs_outdated = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1185 # for f in self.fm.thistab.get_selection():
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1186 # f.vcs_outdated = True
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1187
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1188 try:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1189 self.fm.thisdir.vcs.reset(filelist)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1190 except VcsError:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1191 self.fm.notify("Could not unstage files.")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1192
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1193 self.fm.reload_cwd()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1194
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1195
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1196 class diff(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1197 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1198 :diff
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1199
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1200 Displays a diff of selected files against last last commited version
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1201 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1202 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1203 from ranger.ext.vcs import VcsError
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1204 import tempfile
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1205
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1206 L = self.fm.thistab.get_selection()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1207 if len(L) == 0: return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1208
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1209 filelist = [f.path for f in L]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1210 vcs = L[0].vcs
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1211
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1212 diff = vcs.get_raw_diff(filelist=filelist)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1213 if len(diff.strip()) > 0:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1214 tmp = tempfile.NamedTemporaryFile()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1215 tmp.write(diff.encode('utf-8'))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1216 tmp.flush()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1217
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1218 pager = os.environ.get('PAGER', ranger.DEFAULT_PAGER)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1219 self.fm.run([pager, tmp.name])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1220 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1221 raise Exception("diff is empty")
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1222
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1223
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1224 class log(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1225 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1226 :log
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1227
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1228 Displays the log of the current repo or files
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1229 """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1230 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1231 from ranger.ext.vcs import VcsError
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1232 import tempfile
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1233
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1234 L = self.fm.thistab.get_selection()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1235 if len(L) == 0: return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1236
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1237 filelist = [f.path for f in L]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1238 vcs = L[0].vcs
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1239
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1240 log = vcs.get_raw_log(filelist=filelist)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1241 tmp = tempfile.NamedTemporaryFile()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1242 tmp.write(log.encode('utf-8'))
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1243 tmp.flush()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1244
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1245 pager = os.environ.get('PAGER', ranger.DEFAULT_PAGER)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1246 self.fm.run([pager, tmp.name])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1247
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1248 class extracthere(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1249 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1250 """ Extract copied files to current directory """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1251 copied_files = tuple(self.fm.env.copy)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1252
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1253 if not copied_files:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1254 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1255
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1256 def refresh(_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1257 cwd = self.fm.env.get_directory(original_path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1258 cwd.load_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1259
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1260 one_file = copied_files[0]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1261 cwd = self.fm.env.cwd
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1262 original_path = cwd.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1263 au_flags = ['-X', cwd.path]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1264 au_flags += self.line.split()[1:]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1265 au_flags += ['-e']
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1266
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1267 self.fm.env.copy.clear()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1268 self.fm.env.cut = False
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1269 if len(copied_files) == 1:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1270 descr = "extracting: " + os.path.basename(one_file.path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1271 else:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1272 descr = "extracting files from: " + os.path.basename(one_file.dirname)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1273 obj = CommandLoader(args=['aunpack'] + au_flags \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1274 + [f.path for f in copied_files], descr=descr)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1275
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1276 obj.signal_bind('after', refresh)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1277 self.fm.loader.add(obj)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1278
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1279 class compress(Command):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1280 def execute(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1281 """ Compress marked files to current directory """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1282 cwd = self.fm.env.cwd
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1283 marked_files = cwd.get_selection()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1284
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1285 if not marked_files:
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1286 return
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1287
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1288 def refresh(_):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1289 cwd = self.fm.env.get_directory(original_path)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1290 cwd.load_content()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1291
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1292 original_path = cwd.path
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1293 parts = self.line.split()
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1294 au_flags = parts[1:]
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1295
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1296 descr = "compressing files in: " + os.path.basename(parts[1])
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1297 obj = CommandLoader(args=['apack'] + au_flags + \
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1298 [os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1299
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1300 obj.signal_bind('after', refresh)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1301 self.fm.loader.add(obj)
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1302
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1303 def tab(self):
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1304 """ Complete with current folder name """
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1305
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1306 extension = ['.zip', '.tar.gz', '.rar', '.7z']
ca66a7fd5cc9 Add ranger configs
zegervdv <zegervdv@me.com>
parents:
diff changeset
1307 return ['compress ' + os.path.basename(self.fm.env.cwd.path) + ext for ext in extension]