#!/usr/bin/env python
"""synaptics-load <dumpfile>

Read a Synaptics parameter dumpfile (synclient -l) and install it.
"""

# stdlib imports
import re
from itertools import imap
from subprocess import *


def parse_synaptics_dump(f):
    return dict(
        mo.groups() for mo in imap(
            lambda l: re.match('\s+([A-Za-z0-9]+)\s+=\s+(.*)\s*$', l),
            f)
        if mo)

def main():
    import optparse
    parser = optparse.OptionParser(__doc__.strip())
    opts, args = parser.parse_args()

    if not args:
        parser.error("You must specific a synaptics dumpfile filename.")
    fn = args[0]

    # Query the current parameters.
    p = Popen(('synclient', '-l'), shell=False, stdout=PIPE)
    out, err = p.communicate()
    current_values = parse_synaptics_dump(out.splitlines())
    file_values = parse_synaptics_dump(open(fn).xreadlines())

    set_current = set(current_values.items())
    set_file = set(file_values.items())
    set_diff = set_file - set_current

    for name, value in set_diff:
        sett = '%s=%s' % (name, value)
        print sett
        call(('synclient', sett), shell=False)

        
if __name__ == '__main__':
    main()

