source: rgbkbd/trunk/rgbkbd/modes/secretnotesmode.py @ 71

Last change on this file since 71 was 71, checked in by retracile, 9 years ago

Initial import of source code

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/usr/bin/python
2import os
3import time
4
5from rgbkbd.core import Monochrome, KeyboardMode
6from rgbkbd.color import Colors
7from rgbkbd.animation import RandomAnimation
8
9
10class SecretNotesMode(KeyboardMode):
11    """A KeyboardMode that will unbind all keys so the OS does not see what is
12    typed, but it saves what is typed to a file in the user's home directory
13    called .secret-<unixepochtime>.  In other words, this gives a discrete
14    note-taking application.
15    """
16    # A mapping to give more readable output for the note taking files
17    key_maps = {
18        "common": { # same shift or no shift
19            "enter": "\n",
20            "numenter": "\n",
21            "space": " ",
22            "tab": "\t",
23            "bspace": "\b",
24        },
25        False: { # no shift
26            "bslash": "\\",
27            "colon": ";",
28            "comma": ",",
29            "dot": ".",
30            "equal": "=",
31            "grave": "`",
32            "lbrace": "[",
33            "minus": "-",
34            "quote": "'",
35            "rbrace": "]",
36            "slash": "/",
37        },
38        True: { # shift
39            "bslash": "|",
40            "colon": ":",
41            "comma": "<",
42            "dot": ">",
43            "equal": "+",
44            "grave": "~",
45            "lbrace": "{",
46            "minus": "_",
47            "quote": "\"",
48            "rbrace": "}",
49            "slash": "?",
50        },
51    }
52    for c in "abcdefghijklmnopqrstuvwxyz":
53        key_maps[False][c] = c
54        key_maps[True][c] = c.upper()
55    for n, c in zip("1234567890", "!@#$%^&*()"):
56        key_maps[False][n] = n
57        key_maps[True][n] = c
58
59    def __init__(self, manager, keyboard):
60        super(SecretNotesMode, self).__init__(manager, keyboard,
61            static_lighting=Monochrome(keyboard, color=Colors.BLACK),
62            animations=[
63                RandomAnimation(foreground=Colors.GREEN, background=Colors.BLACK, keyboard=keyboard),
64            ])
65        self.out = None
66        self.state = {
67            "shift": False,
68        }
69
70    def start(self, previous_mode=None):
71        """Initialize the keyboard mode"""
72        super(SecretNotesMode, self).start()
73        # disable all keys so the OS doesn't see the keypresses
74        self.keyboard.unbind()
75        filename = os.path.expanduser("~/.secret-%s" % int(time.time()))
76        self.out = open(filename, 'a')
77
78    def event(self, key, state):
79        """Handle key events"""
80        if key in ["lshift", "rshift"]:
81            self.state["shift"] = (state == '+')
82        elif state == '+':
83            # Translate key presses into characters to output.
84            try:
85                value = self.key_maps["common"][key]
86            except KeyError:
87                value  = self.key_maps[self.state["shift"]].get(key, "<%s>" % key)
88            self.out.write(value)
89            self.out.flush()
Note: See TracBrowser for help on using the repository browser.