diff options
Diffstat (limited to 'examples/data/plugins')
-rw-r--r-- | examples/data/plugins/bind.py | 4 | ||||
-rw-r--r-- | examples/data/plugins/cookies.py | 56 | ||||
-rw-r--r-- | examples/data/plugins/history.py | 129 | ||||
-rw-r--r-- | examples/data/plugins/keycmd.py | 5 |
4 files changed, 174 insertions, 20 deletions
diff --git a/examples/data/plugins/bind.py b/examples/data/plugins/bind.py index 5b13476..41f96c5 100644 --- a/examples/data/plugins/bind.py +++ b/examples/data/plugins/bind.py @@ -379,7 +379,6 @@ def mode_changed(uzbl, mode): if mode != 'stack': uzbl.bindlet.reset() - uzbl.clear_keycmd() def match_and_exec(uzbl, bind, depth, keylet, bindlet): @@ -421,7 +420,6 @@ def match_and_exec(uzbl, bind, depth, keylet, bindlet): if not has_args or on_exec: del uzbl.config['mode'] bindlet.reset() - uzbl.clear_current() return True @@ -469,3 +467,5 @@ def init(uzbl): 'mode_bind': mode_bind, 'bindlet': Bindlet(uzbl), }) + +# vi: set et ts=4: diff --git a/examples/data/plugins/cookies.py b/examples/data/plugins/cookies.py index c9fe2c3..6ee8798 100644 --- a/examples/data/plugins/cookies.py +++ b/examples/data/plugins/cookies.py @@ -38,24 +38,38 @@ class TextStore(object): self.filename = filename def as_event(self, cookie): + """Convert cookie.txt row to uzbls cookie event format""" + scheme = { + 'TRUE' : 'https', + 'FALSE' : 'http' + } if cookie[0].startswith("#HttpOnly_"): domain = cookie[0][len("#HttpOnly_"):] elif cookie[0].startswith('#'): return None else: domain = cookie[0] - return (domain, - cookie[2], - cookie[5], - cookie[6], - 'https' if cookie[3] == 'TRUE' else 'http', - cookie[4]) + try: + return (domain, + cookie[2], + cookie[5], + cookie[6], + scheme[cookie[3]], + cookie[4]) + except (KeyError,IndexError): + # Let malformed rows pass through like comments + return None def as_file(self, cookie): + """Convert cookie event to cookie.txt row""" + secure = { + 'https' : 'TRUE', + 'http' : 'FALSE' + } return (cookie[0], 'TRUE' if cookie[0].startswith('.') else 'FALSE', cookie[1], - 'TRUE' if cookie[4] == 'https' else 'FALSE', + secure[cookie[4]], cookie[5], cookie[2], cookie[3]) @@ -92,8 +106,11 @@ DefaultStore = TextStore(os.path.join(xdg_data_home, 'uzbl/cookies.txt')) SessionStore = TextStore(os.path.join(xdg_data_home, 'uzbl/session-cookies.txt')) def match_list(_list, cookie): - for component, match in _list: - if match(cookie[component]) is not None: + for matcher in _list: + for component, match in matcher: + if match(cookie[component]) is None: + break + else: return True return False @@ -144,18 +161,21 @@ def delete_cookie(uzbl, cookie): store.delete_cookie(cookie, splitted) # add a cookie matcher to a whitelist or a blacklist. -# a matcher is a (component, re) tuple that matches a cookie when the +# a matcher is a list of (component, re) tuples that matches a cookie when the # "component" part of the cookie matches the regular expression "re". # "component" is one of the keys defined in the variable "symbolic" above, # or the index of a component of a cookie tuple. def add_cookie_matcher(_list, arg): - component, regexp = splitquoted(arg) - try: - component = symbolic[component] - except KeyError: - component = int(component) - assert component <= 5 - _list.append((component, re.compile(regexp).search)) + args = splitquoted(arg) + mlist = [] + for (component, regexp) in zip(args[0::2], args[1::2]): + try: + component = symbolic[component] + except KeyError: + component = int(component) + assert component <= 5 + mlist.append((component, re.compile(regexp).search)) + _list.append(mlist) def blacklist(uzbl, arg): add_cookie_matcher(uzbl.cookie_blacklist, arg) @@ -174,3 +194,5 @@ def init(uzbl): 'cookie_blacklist' : [], 'cookie_whitelist' : [] }) + +# vi: set et ts=4: diff --git a/examples/data/plugins/history.py b/examples/data/plugins/history.py new file mode 100644 index 0000000..5e9e4e1 --- /dev/null +++ b/examples/data/plugins/history.py @@ -0,0 +1,129 @@ +import random + +shared_history = {'':[]} + +class History(object): + def __init__(self, uzbl): + self.uzbl = uzbl + self._temporary = [] + self.prompt = '' + self.cursor = None + self.__temp_tail = False + self.search_key = None + + def prev(self): + if self.cursor is None: + self.cursor = len(self) - 1 + else: + self.cursor -= 1 + + if self.search_key: + while self.cursor >= 0 and self.search_key not in self[self.cursor]: + self.cursor -= 1 + + if self.cursor < 0 or len(self) == 0: + self.cursor = -1 + return random.choice(end_messages) + + return self[self.cursor] + + def next(self): + if self.cursor is None: + return '' + + self.cursor += 1 + + if self.search_key: + while self.cursor < len(self) and self.search_key not in self[self.cursor]: + self.cursor += 1 + + if self.cursor >= len(shared_history[self.prompt]): + self.cursor = None + self.search_key = None + + if self._temporary: + return self._temporary.pop() + return '' + + return self[self.cursor] + + def change_prompt(self, prompt): + self.prompt = prompt + self._temporary = [] + self.__temp_tail = False + if prompt not in shared_history: + shared_history[prompt] = [] + + def search(self, key): + self.search_key = key + self.cursor = None + + def add(self, cmd): + if self._temporary: + self._temporary.pop() + + shared_history[self.prompt].append(cmd) + self.cursor = None + self.search_key = None + + def add_temporary(self, cmd): + assert not self._temporary + + self._temporary.append(cmd) + self.cursor = len(self) - 1 + + def __getitem__(self, i): + if i < len(shared_history[self.prompt]): + return shared_history[self.prompt][i] + return self._temporary[i-len(shared_history)+1] + + def __len__(self): + return len(shared_history[self.prompt]) + len(self._temporary) + + def __str__(self): + return "(History %s, %s)" % (self.cursor, self.prompt) + +def keycmd_exec(uzbl, keylet): + cmd = keylet.get_keycmd() + if cmd: + uzbl.history.add(cmd) + +def history_prev(uzbl, _x): + cmd = uzbl.keylet.get_keycmd() + if uzbl.history.cursor is None and cmd: + uzbl.history.add_temporary(cmd) + + uzbl.set_keycmd(uzbl.history.prev()) + uzbl.logger.debug('PREV %s' % uzbl.history) + +def history_next(uzbl, _x): + cmd = uzbl.keylet.get_keycmd() + + uzbl.set_keycmd(uzbl.history.next()) + uzbl.logger.debug('NEXT %s' % uzbl.history) + +def history_search(uzbl, key): + uzbl.history.search(key) + uzbl.send('event HISTORY_PREV') + uzbl.logger.debug('SEARCH %s %s' % (key, uzbl.history)) + +end_messages = ('Look behind you, A three-headed monkey!', 'error #4: static from nylon underwear.', 'error #5: static from plastic slide rules.', 'error #6: global warming.', 'error #9: doppler effect.', 'error #16: somebody was calculating pi on the server.', 'error #19: floating point processor overflow.', 'error #21: POSIX compliance problem.', 'error #25: Decreasing electron flux.', 'error #26: first Saturday after first full moon in Winter.', 'error #64: CPU needs recalibration.', 'error #116: the real ttys became pseudo ttys and vice-versa.', 'error #229: wrong polarity of neutron flow.', 'error #330: quantum decoherence.', 'error #388: Bad user karma.', 'error #407: Route flapping at the NAP.', 'error #435: Internet shut down due to maintenance.') + +# plugin init hook +def init(uzbl): + connect_dict(uzbl, { + 'KEYCMD_EXEC': keycmd_exec, + 'HISTORY_PREV': history_prev, + 'HISTORY_NEXT': history_next, + 'HISTORY_SEARCH': history_search + }) + + export_dict(uzbl, { + 'history' : History(uzbl) + }) + +# plugin after hook +def after(uzbl): + uzbl.on_set('keycmd_prompt', lambda uzbl, k, v: uzbl.history.change_prompt(v)) + +# vi: set et ts=4: diff --git a/examples/data/plugins/keycmd.py b/examples/data/plugins/keycmd.py index 2fb2283..928c597 100644 --- a/examples/data/plugins/keycmd.py +++ b/examples/data/plugins/keycmd.py @@ -210,7 +210,7 @@ def modkey_addition_parse(uzbl, modkeys): add_modkey_addition(uzbl, keys[:-1], keys[-1]) -def clear_keycmd(uzbl): +def clear_keycmd(uzbl, *args): '''Clear the keycmd for this uzbl instance.''' k = uzbl.keylet @@ -493,6 +493,7 @@ def init(uzbl): 'KEYCMD_DELETE': keycmd_delete, 'KEYCMD_EXEC_CURRENT': keycmd_exec_current, 'KEYCMD_STRIP_WORD': keycmd_strip_word, + 'KEYCMD_CLEAR': clear_keycmd, 'KEY_PRESS': key_press, 'KEY_RELEASE': key_release, 'MODKEY_ADDITION': modkey_addition_parse, @@ -514,3 +515,5 @@ def init(uzbl): 'set_cursor_pos': set_cursor_pos, 'set_keycmd': set_keycmd, }) + +# vi: set et ts=4: |