This repository has been archived by the owner on Feb 3, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ADD: extract generation time related information
- Loading branch information
Showing
31 changed files
with
3,891 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# -*- coding: utf-8 -*- | ||
import itertools | ||
import os | ||
import plistlib | ||
import unicodedata | ||
import sys | ||
|
||
from xml.etree.ElementTree import Element, SubElement, tostring | ||
|
||
""" | ||
You should run your script via /bin/bash with all escape options ticked. | ||
The command line should be | ||
python yourscript.py "{query}" arg2 arg3 ... | ||
""" | ||
UNESCAPE_CHARACTERS = u""" ;()""" | ||
|
||
_MAX_RESULTS_DEFAULT = 9 | ||
|
||
preferences = plistlib.readPlist('info.plist') | ||
bundleid = preferences['bundleid'] | ||
|
||
class Item(object): | ||
@classmethod | ||
def unicode(cls, value): | ||
try: | ||
items = value.iteritems() | ||
except AttributeError: | ||
return unicode(value) | ||
else: | ||
return dict(map(unicode, item) for item in items) | ||
|
||
def __init__(self, attributes, title, subtitle, icon=None): | ||
self.attributes = attributes | ||
self.title = title | ||
self.subtitle = subtitle | ||
self.icon = icon | ||
|
||
def __str__(self): | ||
return tostring(self.xml(), encoding='utf-8') | ||
|
||
def xml(self): | ||
item = Element(u'item', self.unicode(self.attributes)) | ||
for attribute in (u'title', u'subtitle', u'icon'): | ||
value = getattr(self, attribute) | ||
if value is None: | ||
continue | ||
try: | ||
(value, attributes) = value | ||
except: | ||
attributes = {} | ||
SubElement(item, attribute, self.unicode(attributes)).text = unicode(value) | ||
return item | ||
|
||
def args(characters=None): | ||
return tuple(unescape(decode(arg), characters) for arg in sys.argv[1:]) | ||
|
||
def config(): | ||
return _create('config') | ||
|
||
def decode(s): | ||
return unicodedata.normalize('NFC', s.decode('utf-8')) | ||
|
||
def uid(uid): | ||
return u'-'.join(map(unicode, (bundleid, uid))) | ||
|
||
def unescape(query, characters=None): | ||
for character in (UNESCAPE_CHARACTERS if (characters is None) else characters): | ||
query = query.replace('\\%s' % character, character) | ||
return query | ||
|
||
def work(volatile): | ||
path = { | ||
True: '~/Library/Caches/com.runningwithcrayons.Alfred-2/Workflow Data', | ||
False: '~/Library/Application Support/Alfred 2/Workflow Data' | ||
}[bool(volatile)] | ||
return _create(os.path.join(os.path.expanduser(path), bundleid)) | ||
|
||
def write(text): | ||
sys.stdout.write(text) | ||
|
||
def xml(items, maxresults=_MAX_RESULTS_DEFAULT): | ||
root = Element('items') | ||
for item in itertools.islice(items, maxresults): | ||
root.append(item.xml()) | ||
return tostring(root, encoding='utf-8') | ||
|
||
def _create(path): | ||
if not os.path.isdir(path): | ||
os.mkdir(path) | ||
if not os.access(path, os.W_OK): | ||
raise IOError('No write access: %s' % path) | ||
return path |
Oops, something went wrong.