From 8aff87af7f28c0b0016a5510ed26326bf9c62bca Mon Sep 17 00:00:00 2001 From: nate-parrott Date: Mon, 10 Nov 2014 13:07:09 -0500 Subject: [PATCH] use info.json, not info.plist, for plugins. add plugin usage example field --- FlashlightApp/EasySIMBL/Flashlight-Info.plist | 2 +- .../EasySIMBL/PluginListController.m | 7 ++- FlashlightApp/EasySIMBL/PluginModel.h | 2 +- FlashlightApp/EasySIMBL/PluginModel.m | 40 +++++++++++------- PluginDirectory/generate_index.py | 5 +-- PluginDirectory/index.json | 2 +- PluginDirectory/piglatin.bundle/Info.plist | 10 ----- PluginDirectory/piglatin.bundle/info.json | 6 +++ PluginDirectory/piglatin.bundle/plugin.pyc | Bin 2159 -> 2159 bytes PluginDirectory/piglatin.zip | Bin 10581 -> 10419 bytes PluginDirectory/say.bundle/Info.plist | 10 ----- PluginDirectory/say.bundle/info.json | 6 +++ PluginDirectory/say.bundle/plugin.pyc | Bin 706 -> 706 bytes PluginDirectory/say.zip | Bin 8075 -> 7864 bytes PluginDirectory/terminal.bundle/info.json | 6 +++ PluginDirectory/terminal.zip | Bin 11861 -> 12201 bytes PluginDirectory/weather.bundle/Info.plist | 10 ----- PluginDirectory/weather.bundle/info.json | 6 +++ PluginDirectory/weather.zip | Bin 199420 -> 199264 bytes PluginDirectory/websearch.bundle/examples.txt | 12 ++++++ PluginDirectory/websearch.bundle/info.json | 5 +++ PluginDirectory/websearch.bundle/plugin.py | 18 ++++++++ PluginDirectory/websearch.bundle/plugin.pyc | Bin 0 -> 1124 bytes PluginDirectory/websearch.zip | Bin 0 -> 9118 bytes .../wolfram-alpha.bundle/Info.plist | 10 ----- .../wolfram-alpha.bundle/examples.txt | 2 + .../wolfram-alpha.bundle/info.json | 5 +++ PluginDirectory/wolfram-alpha.zip | Bin 74000 -> 73906 bytes README.md | 7 ++- 29 files changed, 106 insertions(+), 65 deletions(-) delete mode 100644 PluginDirectory/piglatin.bundle/Info.plist create mode 100644 PluginDirectory/piglatin.bundle/info.json delete mode 100644 PluginDirectory/say.bundle/Info.plist create mode 100644 PluginDirectory/say.bundle/info.json create mode 100644 PluginDirectory/terminal.bundle/info.json delete mode 100644 PluginDirectory/weather.bundle/Info.plist create mode 100644 PluginDirectory/weather.bundle/info.json create mode 100644 PluginDirectory/websearch.bundle/examples.txt create mode 100644 PluginDirectory/websearch.bundle/info.json create mode 100644 PluginDirectory/websearch.bundle/plugin.py create mode 100644 PluginDirectory/websearch.bundle/plugin.pyc create mode 100644 PluginDirectory/websearch.zip delete mode 100644 PluginDirectory/wolfram-alpha.bundle/Info.plist create mode 100644 PluginDirectory/wolfram-alpha.bundle/info.json diff --git a/FlashlightApp/EasySIMBL/Flashlight-Info.plist b/FlashlightApp/EasySIMBL/Flashlight-Info.plist index 6f4e7ec7..890c42b2 100755 --- a/FlashlightApp/EasySIMBL/Flashlight-Info.plist +++ b/FlashlightApp/EasySIMBL/Flashlight-Info.plist @@ -32,7 +32,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.21 + 0.22 CFBundleSignature ???? CFBundleVersion diff --git a/FlashlightApp/EasySIMBL/PluginListController.m b/FlashlightApp/EasySIMBL/PluginListController.m index f0ad2dd9..2d81533e 100644 --- a/FlashlightApp/EasySIMBL/PluginListController.m +++ b/FlashlightApp/EasySIMBL/PluginListController.m @@ -58,7 +58,7 @@ - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row { CGFloat topInset = 7; CGFloat bottomInset = 7; CGFloat rightInset = 65; - return [[[self.arrayController.arrangedObjects objectAtIndex:row] attributedString] boundingRectWithSize:CGSizeMake(tableView.bounds.size.width-leftInset-rightInset, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin].size.height + topInset + bottomInset; + return [[[self.arrayController.arrangedObjects objectAtIndex:row] attributedString] boundingRectWithSize:CGSizeMake(tableView.bounds.size.width-leftInset-rightInset, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin].size.height + topInset + bottomInset + 4; } - (NSIndexSet *)tableView:(NSTableView *)tableView @@ -163,7 +163,10 @@ - (void)reloadFromDisk { NSMutableArray *models = [NSMutableArray new]; for (NSString *itemName in contents) { if ([[itemName pathExtension] isEqualToString:@"bundle"]) { - [models addObject:[PluginModel fromPath:[[self localPluginsPath] stringByAppendingPathComponent:itemName]]]; + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:[[[self localPluginsPath] stringByAppendingPathComponent:itemName] stringByAppendingPathComponent:@"info.json"]] options:0 error:nil]; + PluginModel *model = [PluginModel fromJson:json baseURL:nil]; + model.installed = YES; + [models addObject:model]; } } self.installedPlugins = models; diff --git a/FlashlightApp/EasySIMBL/PluginModel.h b/FlashlightApp/EasySIMBL/PluginModel.h index a395d2db..ebfe0e90 100644 --- a/FlashlightApp/EasySIMBL/PluginModel.h +++ b/FlashlightApp/EasySIMBL/PluginModel.h @@ -11,11 +11,11 @@ @interface PluginModel : NSObject @property (nonatomic) NSString *name, *displayName, *pluginDescription; +@property (nonatomic) NSArray *examples; @property (nonatomic) BOOL installed; @property (nonatomic) BOOL installing; @property (nonatomic) NSURL *zipURL; -+ (PluginModel *)fromPath:(NSString *)path; + (PluginModel *)fromJson:(NSDictionary *)json baseURL:(NSURL *)url; + (NSArray *)mergeDuplicates:(NSArray *)models; diff --git a/FlashlightApp/EasySIMBL/PluginModel.m b/FlashlightApp/EasySIMBL/PluginModel.m index d8c532b5..5bd65ee9 100644 --- a/FlashlightApp/EasySIMBL/PluginModel.m +++ b/FlashlightApp/EasySIMBL/PluginModel.m @@ -17,24 +17,16 @@ - (id)copyWithZone:(NSZone *)zone { p.pluginDescription = self.pluginDescription; p.installed = self.installed; p.installing = self.installing; + p.examples = self.examples; return p; } -+ (PluginModel *)fromPath:(NSString *)path { - NSBundle *bundle = [NSBundle bundleWithPath:path]; - PluginModel *model = [PluginModel new]; - model.name = [path lastPathComponent].stringByDeletingPathExtension; - model.displayName = [bundle infoDictionary][@"CFBundleDisplayName"]; - model.pluginDescription = [bundle infoDictionary][@"Description"]; - model.installed = YES; - return model; -} - + (PluginModel *)fromJson:(NSDictionary *)json baseURL:(NSURL *)url { PluginModel *model = [PluginModel new]; model.name = json[@"name"]; - model.displayName = json[@"CFBundleDisplayName"]; - model.pluginDescription = json[@"Description"]; + model.displayName = json[@"displayName"]; + model.pluginDescription = json[@"description"]; + model.examples = json[@"examples"]; model.installed = NO; model.zipURL = [NSURL URLWithString:json[@"zip_url"] relativeToURL:url]; return model; @@ -61,9 +53,27 @@ - (PluginModel *)mergeWith:(PluginModel *)other { } - (NSAttributedString *)attributedString { - NSMutableAttributedString* s = [NSMutableAttributedString new]; - [s appendAttributedString:[[NSAttributedString alloc] initWithString:[self.displayName stringByAppendingString:@"\n"] attributes:@{NSFontAttributeName: [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]}]]; - [s appendAttributedString:[[NSAttributedString alloc] initWithString:self.pluginDescription attributes:@{NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]}]]; + NSMutableArray *stringsToJoin = [NSMutableArray new]; + [stringsToJoin addObject:[[NSAttributedString alloc] initWithString:self.displayName attributes:@{NSFontAttributeName: [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]}]]; + if (self.pluginDescription.length) { + [stringsToJoin addObject:[[NSAttributedString alloc] initWithString:self.pluginDescription attributes:@{NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]}]]; + } + if (self.examples.count) { + NSMutableParagraphStyle *para = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; + NSFont *font = [[NSFontManager sharedFontManager] convertFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]] toHaveTrait:NSItalicFontMask]; + NSColor *color = [NSColor grayColor]; + NSDictionary *attrs = @{NSFontAttributeName: font, NSForegroundColorAttributeName: color, NSParagraphStyleAttributeName: para}; + NSAttributedString *s = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\"%@\"", [self.examples componentsJoinedByString:@"\" \""]] attributes:attrs]; + [stringsToJoin addObject:s]; + } + + NSMutableAttributedString *s = [NSMutableAttributedString new]; + for (NSAttributedString *a in stringsToJoin) { + [s appendAttributedString:a]; + if (a != stringsToJoin.lastObject) { + [s appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]]; + } + } return s; } diff --git a/PluginDirectory/generate_index.py b/PluginDirectory/generate_index.py index a2ef4952..980f19c3 100644 --- a/PluginDirectory/generate_index.py +++ b/PluginDirectory/generate_index.py @@ -2,7 +2,7 @@ Zips up all the bundles and adds them to `index.json`. """ -import plistlib, zipfile, json, os +import zipfile, json, os index = [] for filename in os.listdir('.'): @@ -13,8 +13,7 @@ for f in files: zipped.write(os.path.join(dir, f), os.path.join(dir, f)) zipped.close() - info = plistlib.readPlist(os.path.join(filename, 'Info.plist')) - info['name'] = name + info = json.load(open(os.path.join(filename, 'info.json'))) info['zip_url'] = name + ".zip" index.append(info) comment = "This index is automatically generated by generate_index.py" diff --git a/PluginDirectory/index.json b/PluginDirectory/index.json index 7172b6cf..02b58e80 100644 --- a/PluginDirectory/index.json +++ b/PluginDirectory/index.json @@ -1 +1 @@ -{"comment": "This index is automatically generated by generate_index.py", "plugins": [{"CFBundleDisplayName": "Pig latin ", "zip_url": "piglatin.zip", "Description": "Translates your message into Pig Latin.", "name": "piglatin"}, {"CFBundleDisplayName": "Say ", "zip_url": "say.zip", "Description": "Speaks your message out-loud.", "name": "say"}, {"CFBundleDisplayName": "Terminal", "zip_url": "terminal.zip", "Description": "Run a terminal command.", "IconPath": "/Applications/Utilities/Terminal.app/Contents/Resources/Terminal.icns", "name": "terminal"}, {"CFBundleDisplayName": "Weather ", "zip_url": "weather.zip", "Description": "Today's weather.", "name": "weather"}, {"CFBundleDisplayName": "Ask Wolfram Alpha ", "zip_url": "wolfram-alpha.zip", "Description": "Search Wolfram|Alpha.", "name": "wolfram-alpha"}]} \ No newline at end of file +{"comment": "This index is automatically generated by generate_index.py", "plugins": [{"examples": ["translate hello world into pig latin", "pig latin hello world"], "zip_url": "piglatin.zip", "displayName": "Pig Latin", "name": "piglatin", "description": "Translate a message into Pig Latin"}, {"examples": ["say good morning"], "zip_url": "say.zip", "displayName": "Say", "name": "say", "description": "Speak a message out loud."}, {"examples": ["rm -f *.py", "git push", "$ ping google.com"], "zip_url": "terminal.zip", "displayName": "Terminal", "name": "terminal", "description": "Run Terminal commands. If Finder is open, commands are run in the current folder."}, {"examples": ["weather brooklyn", "how's the weather in houston?"], "zip_url": "weather.zip", "displayName": "Weather", "name": "weather", "description": "View the forecast in Spotlight."}, {"zip_url": "websearch.zip", "displayName": "Web Search", "name": "websearch", "examples": ["google Apple stock", "g Apple stock", "search duck duck go for Flashlight", "ddg Flashlight", "image search for rubber ducks"]}, {"zip_url": "wolfram-alpha.zip", "displayName": "Wolfram|Alpha Search", "name": "wolfram-alpha", "examples": ["ask wolfram alpha 1 + 1", "wa first 10 prime numbers", "population of india"]}]} \ No newline at end of file diff --git a/PluginDirectory/piglatin.bundle/Info.plist b/PluginDirectory/piglatin.bundle/Info.plist deleted file mode 100644 index 6121259b..00000000 --- a/PluginDirectory/piglatin.bundle/Info.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - CFBundleDisplayName - Pig latin <message> - Description - Translates your message into Pig Latin. - - diff --git a/PluginDirectory/piglatin.bundle/info.json b/PluginDirectory/piglatin.bundle/info.json new file mode 100644 index 00000000..16af85af --- /dev/null +++ b/PluginDirectory/piglatin.bundle/info.json @@ -0,0 +1,6 @@ +{ + "name": "piglatin", + "displayName": "Pig Latin", + "description": "Translate a message into Pig Latin", + "examples": ["translate hello world into pig latin", "pig latin hello world"] +} \ No newline at end of file diff --git a/PluginDirectory/piglatin.bundle/plugin.pyc b/PluginDirectory/piglatin.bundle/plugin.pyc index dc6fac2d17ce3d431d6337e6ac3cd57ba6fc04d8..cb0e16ef4749d3ddc79461c098ff1958a18add3b 100644 GIT binary patch delta 16 XcmaDa@LqtO`7 zOn^wH7AF^F7L;V>=Ycea6eZ>r1IXc%+YEeSK)hqomf^GvmWRIFj&&qF9*>w*-n#}E1i*n J!Au<_0{~IShmZgO delta 598 zcmdlScr}POz?+#xgaHJMOHw!TT1YTwwxv$?kk}^(%_i;6Sz^K6w2^$e60QuC7YQ!?|?ZIwbp+;lCJ?CrR06kYtC zLm~rQ6~MX_0z#d9Je?JkboKQe3kq^l_4QpsToeL)JcC0NfM)3HyZR|9C}otC6jPQj($svfDVfP7c3hk` z*{PLw&TdYnc_}%mE}6vzIf<2iiMgpZ`XC9Qd~rz;(A{~PQlUX>@8d6;sp6)4} zyiiVyxwA8B^EtT^4rXA4O?Fjx0Y_kux;vH#e4?%>iHN`eZ$>5&W=P}%t(h#VAtm3*VRFS02;=xtpET3 diff --git a/PluginDirectory/say.bundle/Info.plist b/PluginDirectory/say.bundle/Info.plist deleted file mode 100644 index 4301b1ac..00000000 --- a/PluginDirectory/say.bundle/Info.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - CFBundleDisplayName - Say <message> - Description - Speaks your message out-loud. - - diff --git a/PluginDirectory/say.bundle/info.json b/PluginDirectory/say.bundle/info.json new file mode 100644 index 00000000..eed54064 --- /dev/null +++ b/PluginDirectory/say.bundle/info.json @@ -0,0 +1,6 @@ +{ + "name": "say", + "displayName": "Say", + "description": "Speak a message out loud.", + "examples": ["say good morning"] +} \ No newline at end of file diff --git a/PluginDirectory/say.bundle/plugin.pyc b/PluginDirectory/say.bundle/plugin.pyc index 6f12c49993ff52b130ccd34aa33c21f432f79b7a..c9b712244dac5465bf11927dce44154adde29a61 100644 GIT binary patch delta 16 XcmX@adWe;s`7B&(W*>^Jm05Kv3&;S4c diff --git a/PluginDirectory/say.zip b/PluginDirectory/say.zip index ac9435f0865832d286a77cd0cf11b70c6309d2c3..28cdebda8149b2206fbdf1fc8f96fa44181a7c84 100644 GIT binary patch delta 406 zcmeCS-(kxe;LXe;!T4CA`6lL0Eb>=2><{9 delta 591 zcmZ`%Jx{_=6fM+2Np#W#A&}=YGD)At#Yia;3JFTIMoj!#YWu`WX=~p@>_jAPjGf#} z)E{7UaB*>Q@E7=Rd@UGb)SKKp+>dk5&AHF{eqmf$=SL>Fz?wb%VSFjh^9J@y@zd@u z#bs&hKIfLVlA9fu(zxh?~xR^6@xhS5c+ya53`q10JH zsMF~PYS1QVb}Q&4NO5fkyVR>O4p}xK=v0Sn&j9`hAC}b(jY_dGv57sYR4Il>$Odst z)!R^8SVTdA)d_VOZ)v-$dLU!cTniJTHgKjvb0QiRhcGfGnrk?eo&9Uv!D^EL&u+V5 zhyd(1&6;*w7rt>sG@vD-khB#0mV;0A@Z-VsL}WC1h0EH`?{fNk{W)5$1E_|-H7UwdDp92a=-0AF@@ SxtR3(>DkyO`;1IFNPhyg3#!Hd diff --git a/PluginDirectory/terminal.bundle/info.json b/PluginDirectory/terminal.bundle/info.json new file mode 100644 index 00000000..701921ac --- /dev/null +++ b/PluginDirectory/terminal.bundle/info.json @@ -0,0 +1,6 @@ +{ + "name": "terminal", + "displayName": "Terminal", + "description": "Run Terminal commands. If Finder is open, commands are run in the current folder.", + "examples": ["rm -f *.py", "git push", "$ ping google.com"] +} \ No newline at end of file diff --git a/PluginDirectory/terminal.zip b/PluginDirectory/terminal.zip index 9a0876345112d3b2f327705a6fad3444ac9b5252..1e1ed2b244dab9651ec9de976847123e5d032ae1 100644 GIT binary patch delta 360 zcmY+AKTE_w5XINn#6x1Ef}&(xR8TG{Eo{W%4ke%>3I{40l1*-p>>qX$@Q_38ZDef) z3mdHjKZ{rSNvur79NbjH{NCfu%-8wb<;SV({E%Mj`L6RmL7yL-E`g{}itro~k(CDjZv%22GMN!wMx0^Az)N7$mwns>oYEX* zp}SST3X<{^QX$fe_+>o4Xbe6Bcf(m8KOCWj@&R?dnn!PLX7q=nV8WW6G>7iubgg)~ i?|^yo+SV2}-(Jfatec0mC9~t(j*V=zXCV}LmG~F$f@}By delta 61 zcmZ1(e>G-9sQl(61$n;7C-mf)yyYjq&~szbRGe&}@5)r53Z$gPlLNe2*%*L;9S9kj K7#QqyKs*3F@(qLl diff --git a/PluginDirectory/weather.bundle/Info.plist b/PluginDirectory/weather.bundle/Info.plist deleted file mode 100644 index 458f0f5e..00000000 --- a/PluginDirectory/weather.bundle/Info.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - CFBundleDisplayName - Weather <location> - Description - Today's weather. - - diff --git a/PluginDirectory/weather.bundle/info.json b/PluginDirectory/weather.bundle/info.json new file mode 100644 index 00000000..bfd18ead --- /dev/null +++ b/PluginDirectory/weather.bundle/info.json @@ -0,0 +1,6 @@ +{ + "name": "weather", + "displayName": "Weather", + "description": "View the forecast in Spotlight.", + "examples": ["weather brooklyn", "how's the weather in houston?"] +} \ No newline at end of file diff --git a/PluginDirectory/weather.zip b/PluginDirectory/weather.zip index 3a2d1465e281efb6975c243777c590847d39ca76..7824e1ee700d055dfd3fb4d735d0e1491c75da1d 100644 GIT binary patch delta 309 zcmew}mFK|}o`x32Elh>W>$y_0To>xEI=6y>fdPaifVez0u_Pn4NH3{0FC`~cKQk{a zUoWdTKd+jLQzK?$lxNe3vFl384klUV5ol?sPwhe)LsCl_TFlw{`Tfpmps zrj{!J%~nXuFG@{LEG{uo$jnm+F32y*$xP2E(F5yAtw_u*$Vn{*YKVr}qmWdTpP!vm znWvH5SH`62CxDV%)l3Ww=h>NoK>`3k`(qCP delta 495 zcmZWmze>YE9KPlpOz0xGC=O?a3PN+biA_^%lR~v_& z2XSQF5330J8XTKsB?Evji1xDiz}@Xm{QHGujE6`VHlO5qIM01NB)2@AP9k>6Tqid? gta8VX$tMpr_}$}@ZjYNuRt1<9PB{P$#vz;X1KT{D+5i9m diff --git a/PluginDirectory/websearch.bundle/examples.txt b/PluginDirectory/websearch.bundle/examples.txt new file mode 100644 index 00000000..c2aa93cc --- /dev/null +++ b/PluginDirectory/websearch.bundle/examples.txt @@ -0,0 +1,12 @@ +duck duck go search ~duckduckgoquery(query here) +search duck duck go for ~duckduckgoquery(query here) +ddg ~duckduckgoquery(query here) + +google search ~googlequery(query here) +search the web for ~googlequery(query here) +g ~googlequery(query here) + +image search for ~googleimagequery(query here) +show me images of ~googleimagequery(query here) +show me a picture of ~googleimagequery(query here) +gi ~googleimagequery(query here) diff --git a/PluginDirectory/websearch.bundle/info.json b/PluginDirectory/websearch.bundle/info.json new file mode 100644 index 00000000..cda6cc39 --- /dev/null +++ b/PluginDirectory/websearch.bundle/info.json @@ -0,0 +1,5 @@ +{ + "name": "websearch", + "displayName": "Web Search", + "examples": ["google Apple stock", "g Apple stock", "search duck duck go for Flashlight", "ddg Flashlight", "image search for rubber ducks"] +} \ No newline at end of file diff --git a/PluginDirectory/websearch.bundle/plugin.py b/PluginDirectory/websearch.bundle/plugin.py new file mode 100644 index 00000000..3f8ec408 --- /dev/null +++ b/PluginDirectory/websearch.bundle/plugin.py @@ -0,0 +1,18 @@ +import urllib + +def results(parsed, original_query): + search_specs = [ + ["Google", "~googlequery", "https://www.google.com/search?q="], + ["Duck Duck Go", "~duckduckgoquery", "https://duckduckgo.com/?q="], + ["Google Images", "~googleimagequery", "https://www.google.com/search?tbm=isch&q="] + ] + for name, key, url in search_specs: + if key in parsed: + return { + "title": "Search {0} for '{1}'".format(name, parsed[key]), + "run_args": [url + urllib.quote_plus(parsed[key])] + } + +def run(url): + import os + os.system('open "{0}"'.format(url)) diff --git a/PluginDirectory/websearch.bundle/plugin.pyc b/PluginDirectory/websearch.bundle/plugin.pyc new file mode 100644 index 0000000000000000000000000000000000000000..401a9b516999c03d65a92d8b2a947f7c1d6593c0 GIT binary patch literal 1124 zcmcIiOK;Oa5FR^8pD8aPDmYm^wBZudOAm+wQY)%TD1ropK%n5*TgUA>PIlG`Q4=oZ z#E<2|4}fph743l|SnJu@d3-bb?bLp5tR4UO{3fQ$&&U28KW{-KSRQGj4^Vvi2F0VK z<`iFCy;dDz*)M#ZSW=fR{{!s&9RfkfL{3_xq)thLk|n1vQ?f$Is_0k?pT4}Oxlf0m zUeiaMvFfyF(7aA_qO&D3yOaTFjZTT?H8H|<{{p6U+M74XdUWdlF?+O`qH>e=dXrsx zhl})D8)&CvrNg75NVVc7)UT=2C#5no4qzBsJLbn>IGs-0m9HHadB`d<@$lJX-(?+^ z@mb)+QNgzaCV@r%w5XsST!XsuIVb^;tB`Flrpknd+4 z54VAO7tuY}XmI{$5u6kz*g4-_?AQhzHnUpU6=ZM zby5~q^~bv8mIOKXI5MmfdjsdfWN9{vbl^)u5`;9+aa*s}SA6(H_t2 zGO&!|Qd^dS?perhdQI<+e-EkIbn=97xnQgv=<(m@hnO4R5tirX zM{+uD)>+so#%dI7f#F!bquPT$sLObEUuB)z` gy7DyLn-Ev!|2_XJz<-h#NvYLSq1iRk^j9~20}2Hb1ONa4 literal 0 HcmV?d00001 diff --git a/PluginDirectory/websearch.zip b/PluginDirectory/websearch.zip new file mode 100644 index 0000000000000000000000000000000000000000..a6c52a1f997d0fba49d3ab063110e11e6559ab3d GIT binary patch literal 9118 zcmeHN&2Jk;6rZ(|Hr}RCP@#Nl*hAuo$R-l%p=u$tNkdf>g&0&ph|=}$X1&SU>+H-b zi5f$yA|$wQ;9uwg^~SX)KE(fk#Q(qrt|TGwaRD z&EnX3Mq#SBwfM{0@86C+#~9HIDBJbw!n0$iQK=^_H}tBNh1y0WKzIAuTb$LC}#f$!u0G)A z74wD{doyO*=9t`O6hB_bb^XUTF#Raey_KT z7F9l^+eWm@n;uuyf=8QO)hD#Kc{^}q5_>0$_`wM}`-}V)7Wt2#e|Y#47MEz~2cn?0 z8CAAK)VgDqtd`yMtV`VLLBX0usT+uPXzwqlmA7Efn)=A3YP%?b+?tgx&)aR_h6@=v z+tw_%eEvwmC~#a4ZP5q=zadGC&~UtDU^(KXUiV@JOku5?o&My{Z)`0-_-66p3=Sru zp_6Zii668o?fszHj$+A^I1GcjX}aDfk3EruQk2_vEIfCXM{$6*cDSLIeddx`(zDnQ zZO;+>3STozC757IA(Y0Sg%#x+QntmVYIS#ax1tSIaiV5bt9fhZinR`FlZpj$HWe*J zN)dSxQR-+}W&J9pEUQM3gx??xi_C!fV9Y8SJ}OynUI~QLn4;mCB|PK>gp*mm?d{K! z$#~F89a7r@rYQxRR82M7epFV9Jz%`Wfiwh51~OD=(_rFvUhgPJoxU^InYJqEr)kTw z?n*0JgUa<8G7`k&q_ttkz98JuAYMyXud;vo>0PLvw| zWc(tH#~o+xDV09W+zIBED2=C6V0$03g92Mve~*2PJf1Pu8D|G$?0~WDQ!Jii0Th{R zi?M?u6{70-dnh`?E*^|CX|SzAuh?K0eDplYF4lJD*ey(?Rz8d2EK3@phM<^4GV2Y3 zqu?ZWP*TbZRJ0Tc`km*|Lr0KfcU28KgP^e-a|H1eY0>`I_XIJMQFEdz2>Jp)47PF{ z6$;prZo^%Smg%)y8APL6B>^aGHqt~@2C`%|RjnZ}pFsZj)+5Q9*}X>+G{{dRbpsz! z9O~)gx%z_6#1c}~4}=$sYRi@$l*f^j)pvt>Y{&c6{x-X!wnS0w9Rc0{Bk literal 0 HcmV?d00001 diff --git a/PluginDirectory/wolfram-alpha.bundle/Info.plist b/PluginDirectory/wolfram-alpha.bundle/Info.plist deleted file mode 100644 index 958e5779..00000000 --- a/PluginDirectory/wolfram-alpha.bundle/Info.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - CFBundleDisplayName - Ask Wolfram Alpha <a question> - Description - Search Wolfram|Alpha. - - diff --git a/PluginDirectory/wolfram-alpha.bundle/examples.txt b/PluginDirectory/wolfram-alpha.bundle/examples.txt index a87d38fc..172549f7 100644 --- a/PluginDirectory/wolfram-alpha.bundle/examples.txt +++ b/PluginDirectory/wolfram-alpha.bundle/examples.txt @@ -4,3 +4,5 @@ walpha wa_query(population of india) wa_query(what is the population of china) wa_query(how many calories in a bagel) ? wa_query(how far is it from bristol to liverpool) wolfram alpha +ask wolfram alpha for wa_query(the size of alaska) ? +wa wa_query(100th prime number) diff --git a/PluginDirectory/wolfram-alpha.bundle/info.json b/PluginDirectory/wolfram-alpha.bundle/info.json new file mode 100644 index 00000000..7269c573 --- /dev/null +++ b/PluginDirectory/wolfram-alpha.bundle/info.json @@ -0,0 +1,5 @@ +{ + "name": "wolfram-alpha", + "displayName": "Wolfram|Alpha Search", + "examples": ["ask wolfram alpha 1 + 1", "wa first 10 prime numbers", "population of india"] +} \ No newline at end of file diff --git a/PluginDirectory/wolfram-alpha.zip b/PluginDirectory/wolfram-alpha.zip index f064d5f824c9b128853188e02dfd8082659e458f..a90ed545ca1808923da57bbaef21da61f3736cd5 100644 GIT binary patch delta 470 zcmbPmh-K43mJMDKf)7)&TsP19WKzq>zyQLE(QBT*qOzeu4xF}|=gwWv~~BqLR!II}8MAwLZ$4OE<{sbJ4lo`_IkXkbv1 zp-@ninVYJRSDKrYTBOMp;LXf3{k%M*)aIj-yZ#8Wre?Wz?)GwA#K6D+!g63o)Mw_U zD5k`7QNC9}97C$Z8GsvsQV*cwN$V}nx@i;^?I z>QXBba|?1(i-D#@D`9%eP(fS4P)P@91JH|^Ma3mL3Wf$K?k)z&7UUO{<|LM6=I4RD zoSB!BnWz-YRlA*4g0YdE7bQ5SPnKs)VEQ9DeIh7Gc@-Fi2A#L2264lAK%ZYo_@L(FLH9_&bYR I7TG3z1Co@a!T