parent
6e68bd5251
commit
68e2a23a3c
@ -0,0 +1,70 @@
|
||||
import subprocess
|
||||
import shlex
|
||||
|
||||
from ...plugins import PapersPlugin
|
||||
from ...configs import config
|
||||
from ...papers_cmd import execute
|
||||
|
||||
|
||||
class Alias(object):
|
||||
|
||||
def __init__(self, name, definition):
|
||||
self.name = name
|
||||
self.definition = definition
|
||||
|
||||
def parser(self, parser):
|
||||
self.parser = parser
|
||||
p = parser.add_parser(self.name, help='user defined command')
|
||||
p.add_argument('arguments', nargs='*',
|
||||
help="arguments to be passed to the user defined command")
|
||||
|
||||
def run(self, args):
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def create_alias(cls, name, definition):
|
||||
if len(definition) > 0 and definition[0] == '!':
|
||||
return ShellAlias(name, definition[1:])
|
||||
else:
|
||||
return CommandAlias(name, definition)
|
||||
|
||||
|
||||
class CommandAlias(Alias):
|
||||
"""Default kind of alias.
|
||||
- definition is used as a papers command
|
||||
- other arguments are passed to the command
|
||||
"""
|
||||
|
||||
def run(self, args):
|
||||
raw_args = ([args.prog]
|
||||
+ shlex.split(self.definition
|
||||
+ ' '
|
||||
+ ' '.join(args.arguments)))
|
||||
execute(raw_args)
|
||||
|
||||
|
||||
class ShellAlias(Alias):
|
||||
|
||||
def run(self, args):
|
||||
"""Uses a shell function so that arguments can be used in the command
|
||||
as shell arguments.
|
||||
"""
|
||||
subprocess.call(
|
||||
'papers_alias_fun () {{\n{}\n}}\npapers_alias_fun {}'.format(
|
||||
self.definition, ' '.join(args.arguments)),
|
||||
shell=True)
|
||||
|
||||
|
||||
class AliasPlugin(PapersPlugin):
|
||||
|
||||
name = 'alias'
|
||||
|
||||
def __init__(self):
|
||||
self.aliases = []
|
||||
for name, definition in config('alias').items():
|
||||
self.aliases.append(Alias.create_alias(name, definition))
|
||||
|
||||
def get_commands(self, parser):
|
||||
for a in self.aliases:
|
||||
a.parser(parser)
|
||||
return [(a.name, a.run) for a in self.aliases]
|
Loading…
Reference in new issue