diff --git a/proposals/minerobber/README.md b/proposals/minerobber/README.md new file mode 100644 index 0000000..c2c41d6 --- /dev/null +++ b/proposals/minerobber/README.md @@ -0,0 +1,43 @@ +# `tilde` - A tilde-launcher proposal in Python + +This is my proposal for the tilde town program launcher. Here are the features that make it compliant with the specs: + + - It has a help menu that, while not meeting the format of the specs, gives an example usage string and description. + - It implements the contrib system beautifully (IMO) + +Here are the things I have left to make before this proposal can be considered a true answer to the specs: + + - [ ] Implement submit process + - [ ] Implement other commands shown in help example (see below) + - [ ] Polish some rough logic + +## Top-level commands + + - [X] help - complete + - [X] contrib - complete + - [X] chat - complete + - [ ] mail - just need to write this one + - [ ] page - see Questions section below + - [ ] poetry - just need to write this one to work with prosaic (I assume) + - [ ] submit - probably can use the same mechanic as page (unless a volunteer admin could be tasked with this, in which case, this would submit to the volunteer portal + - [ ] toot and tweet - just need to write these + - [ ] wiki - not gonna lie, just going to wrap the wiki tool as it exists on this one; you want thin, you got it + +## Questions + +### `tilde page` + + - How should this be accomplished? + - Is this supposed to be only for vilmibm or for an admin in general to help? + - If the answer to the previous question is the latter, how should this be accomplished? + +### `tilde submit` + +Same as above. + +## Requirements + +In `/tilde/special`, put: + + - `chat` - launches IRC (however you want to do it) + - `list` - see list program in this directory diff --git a/proposals/minerobber/list b/proposals/minerobber/list new file mode 100755 index 0000000..230d84f --- /dev/null +++ b/proposals/minerobber/list @@ -0,0 +1,4 @@ +#!/bin/bash + +cd /tilde/bin +ls | tr '\t' '\n' diff --git a/proposals/minerobber/tilde b/proposals/minerobber/tilde new file mode 100755 index 0000000..4f85d09 --- /dev/null +++ b/proposals/minerobber/tilde @@ -0,0 +1,74 @@ +#!/usr/bin/python2 +import argparse,sys,os,subprocess + +class TildeContrib(object): + def __init__(self,progdir): + self.progdir=progdir + pass + + def __getattr__(self,k): + if k in ("list","bootstrap"): + return object.__getattr__(self,k) + return lambda x: os.system("/tilde/bin/{} {}".format(k," ".join(x))) + + def list(self, x, inc=True): + cs = filter(None,subprocess.check_output(['/tilde/special/list']).split("\n")) + f = " ".join(x) if len(x)>0 else "" + ret = [] + for c in cs: + if f in c: + ret.append(c) + if inc: + ret.extend(["list","bootstrap"]) + return ret + +class TildeLauncher: + + COMMANDS = ["help","contrib","chat"] + + USAGE = dict(help="\n Displays this menu",contrib=" \n Your gateway to programs made by townies,\n for townies!",chat="\n An IRC chatroom.") + + def __init__(self,prog_dir): + self.progdir = prog_dir + self.tc = TildeContrib(prog_dir) + + def base(self): + print """ Welcome to tilde.town :) this program is your gateway to town-specific + commands and features. Run tilde help to see the sort of things you can do.""" + + def help(self,argv): + commands_to_display = [] + if len(argv)==0: + commands_to_display = self.COMMANDS + else: + commands_to_display = [i for i in argv if i in self.COMMANDS] + for cmd in commands_to_display: + print "tilde {}{}".format(cmd,self.USAGE[cmd]) + + def contrib(self,argv): + if not argv: + argv = ["list"] # default to listing + if argv[0]=="list": + print "Commands:" + for c in self.tc.list(argv[1:]): + print " tilde contrib "+c + elif argv[0]=="bootstrap": + for c in self.tc.list([],False): + print("alias {0}=\"tilde contrib {0}\"".format(c)) + else: + getattr(self.tc,argv[0])(argv[1:]) + + def chat(self,argv): + os.system("/tilde/special/chat") + +if __name__=="__main__": + tl = TildeLauncher("/tilde/bin") + argv = sys.argv[1:] + if len(argv)==0: + tl.base() + else: + if not hasattr(tl,argv[0]): + print " Unknown command %s!" + tl.help([]) + + getattr(tl,argv[0])(argv[1:])