bumblebee-status/thirdparty/xkbgroup/__main__.py

104 lines
2.9 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
import codecs
import os
import sys
from argparse import ArgumentParser
from .core import XKeyboard
from .version import print_version
GET_CHOICES = ["num", "name", "symbol", "variant", "current_data",
"count", "names", "symbols", "variants", "all_data"]
SET_CHOICES = ["num", "name", "symbol"]
DATA_DEFAULT_FORMAT = "{num}: {symbol} - {name} - \"{variant}\""
def format_group_data(group_data):
return DATA_DEFAULT_FORMAT.format(
num=group_data.num,
name=group_data.name,
symbol=group_data.symbol,
variant=group_data.variant)
def xkb_get(args, xkb):
attrmap = {
"num": "group_num",
"name": "group_name",
"symbol": "group_symbol",
"variant": "group_variant",
"current_data": "group_data",
"count": "groups_count",
"names": "groups_names",
"symbols": "groups_symbols",
"variants": "groups_variants",
"all_data": "groups_data",
}
value = getattr(xkb, attrmap[args.attribute])
if args.attribute == "all_data":
value = [format_group_data(data) for data in value]
elif args.attribute == "current_data":
value = format_group_data(value)
value = "\n".join(value) if isinstance(value, list) else value
print(value)
def xkb_set(args, xkb):
value = int(args.value) if args.attribute == "num" else args.value
attrmap = {
"num": "group_num",
"name": "group_name",
"symbol": "group_symbol",
}
setattr(xkb, attrmap[args.attribute], value)
def xkb_format(args, xkb):
unescaped_format_str = codecs.decode(args.format_string, "unicode_escape")
print(xkb.format(unescaped_format_str), end="")
def create_argument_parser():
parser = ArgumentParser()
parser.add_argument("-V", "--version", action="store_true")
subparsers = parser.add_subparsers(title="actions", dest="cmd")
parser_get = subparsers.add_parser("get")
parser_get.set_defaults(func=xkb_get)
parser_get.add_argument("attribute", choices=GET_CHOICES)
parser_set = subparsers.add_parser("set")
parser_set.set_defaults(func=xkb_set)
parser_set.add_argument("attribute", choices=SET_CHOICES)
parser_set.add_argument("value")
parser_format = subparsers.add_parser("format")
parser_format.set_defaults(func=xkb_format)
parser_format.add_argument("format_string")
return parser
def main():
xkb = XKeyboard()
progname = os.path.basename(sys.argv[0])
parser = create_argument_parser()
args = parser.parse_args()
if args.version:
print_version(progname)
elif args.cmd:
args.func(args, xkb)
else:
parser.print_usage(sys.stderr)
parser.exit(2, "{prog}: error: {message}\n".format(
prog=progname,
message="the following arguments are required: cmd"))
if __name__ == '__main__':
main()