From fc1c079170ce7a35bd5c097f6d9fde70ba575be4 Mon Sep 17 00:00:00 2001
From: Adrian Iain Lam <adrianiainlam@gmail.com>
Date: Thu, 25 Aug 2016 04:15:26 +0800
Subject: [PATCH 1/1] Initial commit

---
 README.md                 |  86 +++++++++++++++++++++++++++++++++++++++++
 icon.svg                  |  88 ++++++++++++++++++++++++++++++++++++++++++
 indicator-keyboard-led.py |  96 ++++++++++++++++++++++++++++++++++++++++++++++
 screenshots/sc1.png       | Bin 0 -> 4154 bytes
 screenshots/sc2.png       | Bin 0 -> 6940 bytes
 screenshots/sc3.png       | Bin 0 -> 2312 bytes
 6 files changed, 270 insertions(+)
 create mode 100644 README.md
 create mode 100644 icon.svg
 create mode 100755 indicator-keyboard-led.py
 create mode 100644 screenshots/sc1.png
 create mode 100644 screenshots/sc2.png
 create mode 100644 screenshots/sc3.png

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..86240b9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,86 @@
+# indicator-keyboard-led - simulate keyboard lock keys LED
+
+This is a Unity application indicator designed for keyboards without lock
+keys LED. It allows the user to check the state of the three locks (Caps lock,
+Num lock and Scroll lock) without requiring any mouse or keyboard action. It
+also allows the lock keys to be toggled with mouse clicks, which could be
+useful for keyboards without Scroll lock keys or malfunctioning keyboards.
+
+## Screenshots
+
+![indicator default][sc1]
+Default appearance of the indicator with Num lock on and Caps and Scroll locks
+off.
+
+![indicator menu][sc2]
+Menu of the indicator, shown on click. The locks can be toggled by clicking
+the respective item in the menu.
+
+![indicator short][sc3]
+Alternative (short) appearance of the indicator.
+
+[sc1]: screenshots/sc1.png
+[sc2]: screenshots/sc2.png
+[sc3]: screenshots/sc3.png
+
+## Dependencies
+ - Python 3 (*)
+ - GTK+ 3 (*)
+ - AppIndicator 3 (*)
+ - Python 3 GObject introspection (python3-gi)
+ - xdotool
+
+Those marked with (*) are probably installed by default in recent Ubuntu
+distributions. To install the rest, run:
+
+    sudo apt-get install python3-gi xdotool
+
+## Usage
+
+ 1. Install the dependencies listed above.
+ 2. Clone this repository.
+ 3. Add the script as a startup application. (Use option `--short` for short
+    appearance if desired.)
+ 4. Run the script manually for the first time. (Alternatively, log out
+    and log in again.)
+ 5. The indicator should be shown at the top right corner, with a filled circle
+    representing a lock turned on and an unfilled circle representing a lock
+    turned off.
+ 6. Clicking on the indicator should result in a menu with the three locks.
+    Clicking on the menu item would cause the corresponding lock to toggle.
+
+## License
+
+The program "indicator-keyboard-led.py" is released under the MIT License.
+Please refer to the file for the full text of the license.
+
+The icon "icon.svg" is released to the public domain.
+
+## Credits
+
+I would like to thank [Tobias Schlitt](https://github.com/tobyS), who wrote
+[indicator-chars](https://github.com/tobyS/indicator-chars) which I used
+as a reference when writing this software.
+
+The icon used in the indicator (icon.svg) is modified from the file
+"emblem-readonly.svg" by [Jakub Steiner](http://jimmac.musichall.cz)
+who released it to the public domain for the
+[Tango Icon Library](http://tango.freedesktop.org/Tango_Icon_Library).
+
+---
+
+## Motivation
+
+I was a user of [indicator-keylock][ind-kl], but only one key lock can be shown
+on the panel. I didn't like the Notify OSD events either.
+
+I then came across [lks-indicator][lks] and [indicator-xbdmod][xbdmod], but
+I didn't like the fact that they refresh the indicator on a regular time
+interval (every *x* milliseconds) rather than on state changes (only when
+the locks are toggled).
+
+I also thought it would be fun to be able to toggle the locks on-screen.
+
+[ind-kl]: https://launchpad.net/~tsbarnes/+archive/ubuntu/indicator-keylock
+[lks]: https://github.com/SergKolo/lks-indicator
+[xbdmod]: https://github.com/sneetsher/indicator-xkbmod
diff --git a/icon.svg b/icon.svg
new file mode 100644
index 0000000..d711e58
--- /dev/null
+++ b/icon.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="icon.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:creator>
+          <dc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </dc:Agent>
+        </dc:creator>
+        <dc:contributor>Adrian I Lam</dc:contributor>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+        <dc:title>Caps Lock icon</dc:title>
+        <dc:subject>caps lock</dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#dfdbd2;"
+       d="M 22.9375 3.0058594 C 15.653591 3.2371063 10.824219 6.7870543
+          10.824219 14.107422 L 10.824219 21.578125 L 9.1855469 21.578125 C
+          7.9827519 21.578125 7 22.41744 7 23.46875 L 7 43.109375 C 7 44.160685
+          7.9827519 45.000002 9.1855469 45 L 38.84375 45 C 40.046563 45 41
+          44.160684 41 43.109375 L 41 23.46875 C 41 22.417442 40.046563
+          21.578125 38.84375 21.578125 L 37.175781 21.578125 L 37.205078
+          14.228516 C 37.205078 6.4577795 31.964524 3.1017737 24.03125
+          3.0058594 C 23.661384 3.0013294 23.295735 2.9944354 22.9375 3.0058594
+          z M 23.666016 7.9160156 C 23.79987 7.9129356 23.953309 7.9160156
+          24.091797 7.9160156 C 32.893949 7.9160156 32.217687 14.260075
+          32.347656 16.150391 L 32.347656 21.578125 L 15.773438 21.578125 L
+          15.773438 16.181641 C 15.742128 14.306334 15.227932 8.1089033
+          23.666016 7.9160156 z M 22.21875 24 L 25.75 24 C 26.442384 25.281385
+          27.114759 26.580467 27.767578 27.896484 C 28.420397 29.212502
+          29.073744 30.598189 29.726562 32.052734 C 30.399164 33.50728
+          31.083007 35.048076 31.775391 36.675781 C 32.487557 38.303487
+          33.228487 40.077922 34 42 L 29.964844 42 C 29.68789 41.290043
+          29.400252 40.589125 29.103516 39.896484 C 28.80678 39.203844
+          28.521094 38.492898 28.244141 37.765625 L 19.578125 37.765625 C
+          19.301171 38.492898 19.015486 39.211918 18.71875 39.921875 L
+          17.886719 42 L 14 42 C 14.771513 40.077922 15.502929 38.303487
+          16.195312 36.675781 C 16.887696 35.048076 17.560072 33.50728
+          18.212891 32.052734 C 18.885492 30.598189 19.548353 29.212502
+          20.201172 27.896484 C 20.853991 26.580467 21.526366 25.281385
+          22.21875 24 z M 23.910156 27.480469 C 23.455161 28.398218 22.931362
+          29.516014 22.337891 30.832031 C 21.764201 32.148049 21.16038
+          33.576062 20.527344 35.117188 L 27.292969 35.117188 C 26.659932
+          33.576062 26.046597 32.138021 25.453125 30.804688 C 24.859653
+          29.471354 24.345369 28.363586 23.910156 27.480469 z "
+       id="path2086" />
+  </g>
+</svg>
diff --git a/indicator-keyboard-led.py b/indicator-keyboard-led.py
new file mode 100755
index 0000000..44e02a0
--- /dev/null
+++ b/indicator-keyboard-led.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# indicator-keyboard-led - simulate keyboard lock keys LED
+# Copyright (c) 2016 Adrian I Lam <adrianiainlam@gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHOR OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+# I would like to thank Tobias Schlitt <toby@php.net>, who wrote
+# indicator-chars <https://github.com/tobyS/indicator-chars> which I used
+# as a reference when writing this software.
+
+import signal
+import subprocess
+from os import path
+import argparse
+import gi
+gi.require_version('Gdk', '3.0')
+gi.require_version('Gtk', '3.0')
+gi.require_version('AppIndicator3', '0.1')
+from gi.repository import Gdk, Gtk, AppIndicator3
+
+class IndicatorKeyboardLED:
+    locks = { 'caps': 'Caps', 'num': 'Num', 'scr': 'Scroll' }
+    
+    def __init__(self, short=False):
+        self.indicator = AppIndicator3.Indicator.new(
+            'indicator-keyboard-led',
+            path.join(path.dirname(path.realpath(__file__)), 'icon.svg'),
+            AppIndicator3.IndicatorCategory.APPLICATION_STATUS)
+        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
+        
+        if short:
+            self.locks = { 'caps': 'C', 'num': 'N', 'scr': 'S' }
+
+        keymap = Gdk.Keymap.get_default()
+        keymap.connect('state-changed', self.update_indicator)
+        self.update_indicator(keymap)
+
+        menu = Gtk.Menu()
+        items = {
+            'caps' : Gtk.MenuItem.new_with_label('Caps Lock'),
+            'num'  : Gtk.MenuItem.new_with_label('Num Lock'),
+            'scr'  : Gtk.MenuItem.new_with_label('Scroll Lock')
+        }
+        menu.append(items['caps'])
+        menu.append(items['num'])
+        menu.append(items['scr'])
+
+        items['caps'].connect('activate', self.send_keypress, 'Caps_Lock')
+        items['num' ].connect('activate', self.send_keypress, 'Num_Lock')
+        items['scr' ].connect('activate', self.send_keypress, 'Scroll_Lock')
+
+        self.indicator.set_menu(menu)
+        menu.show_all()
+
+    def update_indicator(self, keymap):
+        label = '⚫' if keymap.get_caps_lock_state() else '⚪'
+        label += self.locks['caps'] + ' '
+        label += '⚫' if keymap.get_num_lock_state() else '⚪'
+        label += self.locks['num'] + ' '
+        label += '⚫' if keymap.get_scroll_lock_state() else '⚪'
+        label += self.locks['scr']
+        self.indicator.set_label(label, '')
+
+    def send_keypress(self, menuitem, keystroke):
+        subprocess.call(['xdotool', 'key', keystroke])
+
+if __name__ == '__main__':
+    signal.signal(signal.SIGINT, lambda signum, frame: Gtk.main_quit())
+    
+    parser = argparse.ArgumentParser(
+        description='indicator-keyboard-led - simulate keyboard lock keys LED')
+    parser.add_argument('-s', '--short', dest='short', action='store_true',
+        help='use short label, i.e. ⚫C ⚫N ⚫S instead of ⚫Caps ⚫Num ⚫Scroll',
+        required=False)
+    args = parser.parse_args()
+    
+    IndicatorKeyboardLED(short=args.short)
+    Gtk.main()
diff --git a/screenshots/sc1.png b/screenshots/sc1.png
new file mode 100644
index 0000000000000000000000000000000000000000..394422e20c28d876d7e37578fa9eac9bbb074c2e
GIT binary patch
literal 4154
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
Ef`Y;6hyVZp

literal 0
HcmV?d00001

diff --git a/screenshots/sc2.png b/screenshots/sc2.png
new file mode 100644
index 0000000000000000000000000000000000000000..da9d3b56a4748263a1a9b1fa891f1d5aeb4f12b9
GIT binary patch
literal 6940
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

literal 0
HcmV?d00001

diff --git a/screenshots/sc3.png b/screenshots/sc3.png
new file mode 100644
index 0000000000000000000000000000000000000000..2424054bb61b2306c55d0b107ee705b2b4757ed5
GIT binary patch
literal 2312
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

literal 0
HcmV?d00001

-- 
2.7.4