From: Adrian Iain Lam Date: Sun, 5 Feb 2023 05:44:37 +0000 (+0000) Subject: Merge branch 'master' into debian X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=e99f9780ee954d88a03bed6adf8d97d797647c35;hp=228d7326630123d0fcafcd21e5069f5961e4983a;p=indicator-keyboard-led.git Merge branch 'master' into debian --- diff --git a/README.md b/README.md index 6f3c04f..cf90a7b 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,6 @@ off. 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. - ## Installation from Ubuntu PPA sudo add-apt-repository ppa:adrianiainlam/indicator-keyboard-led @@ -28,14 +25,6 @@ Alternative (short) appearance of the indicator. After installation the postinst script will prompt you for preferences configuration. These config are explained here: -### Short label - -The default appearance of the indicator has long labels: -![⚫Num ⚫Caps ⚫Scroll][sc1] - -On small displays it may be preferable to use short labels: -![⚫N ⚫C ⚫S][sc3] - ### Order This option allows you to reorder the locks and also to hide @@ -45,24 +34,18 @@ Use a string consisting of zero or one occurrence of the characters 'N', 'C' and 'S' to set this option. For exampe, the default order is "Num Caps Scroll". -![⚫Num ⚫Caps ⚫Scroll][sc1] +![Num Caps Scroll][sc1] **CNS** changes this to "Caps Num Scroll". -![⚫Caps ⚫Num ⚫Scroll][sc4] +![Caps Num Scroll][sc4] **NC** hides Scroll lock from the default appearance. -![⚫Num ⚫Caps][sc5] - -**C**, combined with the previous *short* option, -would give a very compact Caps lock indicator. -![⚫C][sc6] +![Num Caps][sc5] [sc1]: screenshots/sc1.png [sc2]: screenshots/sc2.png -[sc3]: screenshots/sc3.png [sc4]: screenshots/sc4.png [sc5]: screenshots/sc5.png -[sc6]: screenshots/sc6.png ### xdotool @@ -96,13 +79,17 @@ Clicking on the menu item would cause the corresponding lock to toggle. ## Known bugs / Troubleshooting +### Indicator label does not show on Xfce / XUbuntu + +See [#6](https://github.com/adrianiainlam/indicator-keyboard-led/issues/6). + ### Pressing Scroll Lock does nothing It seems to be a common problem that Scroll Lock is not usable in Ubuntu. To solve this, do the following (assuming US keyboard): > # backup your symbols file - > sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} + > sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} > > Add the following line in the `xkb_symbols "basic" {` section. Do not worry > if that second line is not there, it is only there for some languages and @@ -110,7 +97,7 @@ To solve this, do the following (assuming US keyboard): > > ... > modifier_map Mod3 { Scroll_Lock }; <==<< Add this line - > + > > include "level3(ralt_switch)" <==<< before this line > }; > @@ -149,13 +136,26 @@ is correct and is an executable regular file. ## Localization -As motivated by Issue #1, this script has been localized to French (with -the assistance of Wikipedia and Google Translate). Corrections to the -translation, as well as translations to other languages, are welcome. -Feel free to create a pull request or open an issue. +Unfortunately, in order to work-around labels not being shown on newer +non-Unity-based Ubuntus, I have re-designed the indicators to be based +purely on icons instead. This means there will no longer be labels to +localize, and I instead have hardcoded icons. + +The icons are SVGs so you can still manually edit them if you want. +Look for the `` tag at the end of the SVGs. + +The menu items shown on click are still localized. + +I have included a screenshot below to show the old design (version 1.1) +which you can still install manually if you wish. -![indicator default, French locale][sc7] -Default appearance in a French locale. +> As motivated by Issue #1, this script has been localized to French (with +> the assistance of Wikipedia and Google Translate). Corrections to the +> translation, as well as translations to other languages, are welcome. +> Feel free to create a pull request or open an issue. +> +> ![indicator default, French locale][sc7] +> Default appearance in a French locale. [sc7]: screenshots/sc7.png @@ -164,7 +164,7 @@ Default appearance in a French locale. 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 "indicator-keyboard-led.svg" is released to the public domain. +The icons "indicator-keyboard-led*.svg" are released to the public domain. ## Credits @@ -172,7 +172,7 @@ 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 (indicator-keyboard-led.svg) is modified +The icons used in the indicator (indicator-keyboard-led*.svg) are modified from the file "emblem-readonly.svg" by [Jakub Steiner](http://jimmac.musichall.cz) who released it to the public domain for the diff --git a/indicator-keyboard-led-C-off.svg b/indicator-keyboard-led-C-off.svg new file mode 100644 index 0000000..1b43e12 --- /dev/null +++ b/indicator-keyboard-led-C-off.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + + caps lock + + + + + + + + + + + C + + diff --git a/indicator-keyboard-led-C-on.svg b/indicator-keyboard-led-C-on.svg new file mode 100644 index 0000000..3ce14c4 --- /dev/null +++ b/indicator-keyboard-led-C-on.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + + caps lock + + + + + + + + + + + C + + diff --git a/indicator-keyboard-led-N-off.svg b/indicator-keyboard-led-N-off.svg new file mode 100644 index 0000000..9dc6a25 --- /dev/null +++ b/indicator-keyboard-led-N-off.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + Caps Lock icon + caps lock + + + + + + + + + + + N + + diff --git a/indicator-keyboard-led-N-on.svg b/indicator-keyboard-led-N-on.svg new file mode 100644 index 0000000..d5dec65 --- /dev/null +++ b/indicator-keyboard-led-N-on.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + Caps Lock icon + caps lock + + + + + + + + + + + N + + diff --git a/indicator-keyboard-led-S-off.svg b/indicator-keyboard-led-S-off.svg new file mode 100644 index 0000000..0261b04 --- /dev/null +++ b/indicator-keyboard-led-S-off.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + + caps lock + + + + + + + + + + + S + + diff --git a/indicator-keyboard-led-S-on.svg b/indicator-keyboard-led-S-on.svg new file mode 100644 index 0000000..c06a5a2 --- /dev/null +++ b/indicator-keyboard-led-S-on.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + Adrian I Lam + http://jimmac.musichall.cz + + + caps lock + + + + + + + + + + + S + + diff --git a/indicator-keyboard-led.desktop b/indicator-keyboard-led.desktop index 78c9958..4eb3401 100755 --- a/indicator-keyboard-led.desktop +++ b/indicator-keyboard-led.desktop @@ -4,7 +4,7 @@ Name=indicator-keyboard-led Type=Application Exec=/usr/bin/indicator-keyboard-led.py -Icon=indicator-keyboard-led +Icon=indicator-keyboard-led-C-on Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true diff --git a/indicator-keyboard-led.py b/indicator-keyboard-led.py index 9213a83..73c897b 100755 --- a/indicator-keyboard-led.py +++ b/indicator-keyboard-led.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # indicator-keyboard-led - simulate keyboard lock keys LED -# Copyright (c) 2017 Adrian I Lam +# Copyright (c) 2017-2023 Adrian I Lam s/spam/me/ # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -10,10 +10,10 @@ # 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 @@ -38,26 +38,28 @@ gi.require_version('AppIndicator3', '0.1') from gi.repository import Gdk, Gtk, AppIndicator3 APP_NAME = 'indicator-keyboard-led' -APP_VERSION = '1.1' +APP_VERSION = '1.2' -ICON_LOCATION = '/usr/share/icons/hicolor/scalable/apps/' + APP_NAME + '.svg' +ICON_FOLDER = '/usr/share/icons/hicolor/scalable/apps/' import gettext t = gettext.translation(APP_NAME, '/usr/share/locale') _ = t.gettext class IndicatorKeyboardLED: - def __init__(self, short=False, order='NCS', xdotool=None): + def __init__(self, order='NCS', xdotool=None): self.validate_order(order) - self.indicator = AppIndicator3.Indicator.new( - APP_NAME, ICON_LOCATION, - AppIndicator3.IndicatorCategory.APPLICATION_STATUS) - self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) + self.indicators = {} - if short: - self.locks = { 'N': _('N'), 'C': _('C'), 'S': _('S') } - else: - self.locks = { 'N': _('Num'), 'C': _('Caps'), 'S': _('Scroll') } + count = 0 + for i in order: + self.indicators[i] = AppIndicator3.Indicator.new( + '-'.join([APP_NAME, str(count), i]), + os.path.join(ICON_FOLDER, '-'.join([APP_NAME, i, 'off.svg'])), + AppIndicator3.IndicatorCategory.APPLICATION_STATUS) + self.indicators[i].set_status(AppIndicator3.IndicatorStatus.ACTIVE) + + count += 1 keymap = Gdk.Keymap.get_default() keymap.connect('state-changed', self.update_indicator, order) @@ -65,38 +67,37 @@ class IndicatorKeyboardLED: self.create_menu(xdotool, order) def create_menu(self, xdotool, order): - menu = Gtk.Menu() xdotool = xdotool or shutil.which('xdotool') - if xdotool and os.access(xdotool, os.X_OK) and os.path.isfile(xdotool): - def send_keypress(menuitem, keystroke): - subprocess.call([xdotool, 'key', keystroke]) - def new_menu_item(itemtype): - if itemtype == 'N': - item = Gtk.MenuItem.new_with_label(_('Num Lock')) - item.connect('activate', send_keypress, 'Num_Lock') - elif itemtype == 'C': - item = Gtk.MenuItem.new_with_label(_('Caps Lock')) - item.connect('activate', send_keypress, 'Caps_Lock') - elif itemtype == 'S': - item = Gtk.MenuItem.new_with_label(_('Scroll Lock')) - item.connect('activate', send_keypress, 'Scroll_Lock') - else: - raise ValueError('Invalid itemtype') - return item - - for i in order: + def send_keypress(menuitem, keystroke): + subprocess.call([xdotool, 'key', keystroke]) + def new_menu_item(itemtype): + if itemtype == 'N': + item = Gtk.MenuItem.new_with_label(_('Num Lock')) + item.connect('activate', send_keypress, 'Num_Lock') + elif itemtype == 'C': + item = Gtk.MenuItem.new_with_label(_('Caps Lock')) + item.connect('activate', send_keypress, 'Caps_Lock') + elif itemtype == 'S': + item = Gtk.MenuItem.new_with_label(_('Scroll Lock')) + item.connect('activate', send_keypress, 'Scroll_Lock') + else: + raise ValueError('Invalid itemtype') + return item + + for i in order: + menu = Gtk.Menu() + + if xdotool and os.access(xdotool, os.X_OK) and os.path.isfile(xdotool): menu.append(new_menu_item(i)) - menu.append(Gtk.SeparatorMenuItem()) - quit_item = Gtk.MenuItem.new_with_label(_('Quit')) - menu.append(quit_item) - quit_item.connect('activate', Gtk.main_quit) + quit_item = Gtk.MenuItem.new_with_label(_('Quit')) + menu.append(quit_item) + quit_item.connect('activate', Gtk.main_quit) - self.indicator.set_menu(menu) - menu.show_all() + self.indicators[i].set_menu(menu) + menu.show_all() def update_indicator(self, keymap, order): - labels = [] for i in order: if i == 'N': state = keymap.get_num_lock_state() @@ -106,8 +107,10 @@ class IndicatorKeyboardLED: state = keymap.get_scroll_lock_state() else: raise ValueError('Invalid value in ORDER') - labels += [('⚫' if state else '⚪') + self.locks[i]] - self.indicator.set_label(' '.join(labels), '') + + icon = os.path.join(ICON_FOLDER, '-'.join([APP_NAME, i, 'on.svg' if state else 'off.svg'])) + self.indicators[i].set_icon(icon) + def validate_order(self, order): order = order.upper() @@ -129,17 +132,15 @@ if __name__ == '__main__': parser = argparse.ArgumentParser( description='indicator-keyboard-led - simulate keyboard lock keys LED', formatter_class=argparse.ArgumentDefaultsHelpFormatter) - parser.add_argument('-s', '--short', required=False, action='store_true', - help='use short label, i.e. ⚫N ⚫C ⚫S instead of ⚫Num ⚫Caps ⚫Scroll') parser.add_argument('-o', '--order', required=False, default='NCS', help='specify the order of the locks displayed, e.g. CSN for ' - '⚫Caps ⚫Scroll ⚫Num, or NC for ⚫Num ⚫Caps without Scroll lock') + 'Caps Scroll Num, or NC for Num Caps without Scroll lock') parser.add_argument('-x', '--xdotool', required=False, help='provide full path to xdotool executable, ' 'e.g. "/usr/bin/xdotool"; ' 'if not specified, search in PATH') args = parser.parse_args() - IndicatorKeyboardLED(short=args.short, order=args.order, + IndicatorKeyboardLED(order=args.order, xdotool=args.xdotool) Gtk.main() diff --git a/indicator-keyboard-led.svg b/indicator-keyboard-led.svg deleted file mode 100644 index d711e58..0000000 --- a/indicator-keyboard-led.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - image/svg+xml - - - - Jakub Steiner - - - Adrian I Lam - http://jimmac.musichall.cz - - Caps Lock icon - caps lock - - - - - - - - - - - - diff --git a/screenshots/sc1.png b/screenshots/sc1.png index 6acfa23..4b0e17e 100644 Binary files a/screenshots/sc1.png and b/screenshots/sc1.png differ diff --git a/screenshots/sc2.png b/screenshots/sc2.png index 228adee..ac4fab1 100644 Binary files a/screenshots/sc2.png and b/screenshots/sc2.png differ diff --git a/screenshots/sc3.png b/screenshots/sc3.png deleted file mode 100644 index aee6cb9..0000000 Binary files a/screenshots/sc3.png and /dev/null differ diff --git a/screenshots/sc4.png b/screenshots/sc4.png index 8852e62..42805b4 100644 Binary files a/screenshots/sc4.png and b/screenshots/sc4.png differ diff --git a/screenshots/sc5.png b/screenshots/sc5.png index ca10484..0d7ff8e 100644 Binary files a/screenshots/sc5.png and b/screenshots/sc5.png differ diff --git a/screenshots/sc6.png b/screenshots/sc6.png deleted file mode 100644 index b7db313..0000000 Binary files a/screenshots/sc6.png and /dev/null differ