Ярлык средства запуска единицы для нечисла присвоил значки

Мне действительно нравится средство запуска Единицы, особенно то, что я могу легко переключиться на (или открытый) приложение, которое я знаю с Супер + [0-9] (вместо того, чтобы иметь необходимость к Alt+Tab для всех открытых вкладок, пока я не определяю свое открытое приложение).

Через какое-то время с теми же фиксированными приложениями, каждый добирается для запоминания отлично, которому соответствует число, какое приложение (1 для Файлов, 2 для Браузера, 3 для Терминала, и т.д.) и оно заставляет меня чувствовать себя подобно ниндзя, когда я переключаюсь между ними.

Факт - то, что теперь, используя 10 слотов по умолчанию (от номера 0-9) я, например, хотел бы иметь буквы, присвоенные остальной части значков (те без присвоенного номера):

Letters I would like to have assigned

Я просто задавался вопросом, возможно ли, и раз так где я могу найти некоторую документацию или некоторые инструкции (я ничего не мог найти до сих пор).

Заранее большое спасибо.

PS: жаль о плохой качественной фотографии; я пытался сделать снимок экрана, но числа не сделали появился, в то время как я обрезал область, нажимающую Супер клавишу.

2
задан 28 July 2016 в 18:13

1 ответ

Используйте пронумерованные ярлыки> 10

По умолчанию, Супер + (число) ограничен десять. С небольшим приемом мы можем расширить это. Скрипт ниже может быть запущен с любым числом как аргумент и затем активирует соответствующий значок средства запуска + 10.

Пример на практике:

enter image description here

Как обычно, Супер + 1 активирует первый значок в средстве запуска

  • Теперь, когда я нажимаю Alt Super + 1, 11-й значок активируется
  • Когда я нажимаю Alt Super + 2, 12-й значок активируется

... и так далее

Как это работает

  • Сценарий читает текущее средство запуска с командой:

    gsettings get com.canonical.Unity.Launcher favorites
    
  • Так как каждый значок (если это - значок приложения) представляет a .desktop файл в также /user/share/applications или ~/.local/share/applications, сценарий ищет команду в соответствии .desktop файл. [Эти команды однако могут быть в различных формах, которые я не объясню здесь по причинам простоты.]

  • Впоследствии, сценарий пытается повысить возможные существующие окна приложения. Если это перестало работать, приложение, по-видимому, не работает, и сценарий запускает приложение, подобное поведению обычного Супер + (число) поведение.

Как установить

  1. Потребности сценария wmctrl быть установленным:

    sudo apt-get install wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как numberlaunch.py.

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    
    dir1 = os.path.join(os.environ["HOME"], ".local/share/applications")
    dir2 = "/usr/share/applications"
    
    index = int(sys.argv[1])+9
    
    def get_file(dr, app):
        try:
            return [os.path.join(dr, dt) for dt in os.listdir(dr) if dt in app][0]
        except IndexError:
            pass
    
    def clean_command(cmd):
        for s in ["%U", "%u", "%F", "%f"]:
            cmd = cmd.replace(s, "")
        return (cmd.strip())
    
    def check_windowtype(wid):
        w_data = subprocess.check_output(["xprop", "-id", wid]).decode("utf-8")
        return not "_NET_WM_WINDOW_TYPE_DESKTOP" in w_data
    
    def get_window(appname):
        try:
            pid = subprocess.check_output(["pgrep", appname]).decode("utf-8").strip()
        except subprocess.CalledProcessError:
            return False
        else:
            wlist = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()
            try:
                wmatch = [w.split()[0] for w in wlist if pid in w]
                relevant = [wid for wid in wmatch if check_windowtype(wid) == True][0]            
                subprocess.Popen(["wmctrl", "-ia", relevant])
                return True
            except IndexError:
                return False
    
    def raise_app():
        app = current_launcher()[index]
        f = get_file(dir1, app)
        f = f if f else get_file(dir2, app)
        cmd = [l.strip().split("=")[1] for l in open(f).readlines() if "Exec" in l][0]
        cmd = clean_command(cmd); tryraise = cmd.split()[0]
        tryraise = "soffice.bin" if tryraise == "libreoffice" else tryraise
        if get_window(tryraise)  == False:
            subprocess.Popen(cmd.split())
    
    def current_launcher():
        get_current = subprocess.check_output(["gsettings", "get", "com.canonical.Unity.Launcher", "favorites"]).decode("utf-8")
        return [item for item in eval(get_current) if any([
            "device://" in item, "application://" in item,
            ])]
    
    raise_app()
    
  3. Тестовый прогон сценарий командой:

    python3 /path/to/numberlaunch.py 3
    

    В Вашем изображении в качестве примера это должно повысить или запустить Калеку

  4. Если все хорошо работает, создайте thye после ярлыков, выполнив команду (команды)

    Высокий звук Супер + 1, выполняя команду:

    python3 /path/to/numberlaunch.py 1
    

    Высокий звук Супер + 2, выполняя команду:

    python3 /path/to/numberlaunch.py 2
    

    Высокий звук Супер + 3, выполняя команду:

    python3 /path/to/numberlaunch.py 3
    

    ... и так далее

    N.B. в использовании ярлыков, удостоверьтесь, что не нажали Super перед Высоким звуком. Супер будет иметь приоритет по другим ключам, если Вы сделаете. Если это беспокоит Вас, выберите другие ярлыки, как:

    Ctrl + высокий звук + (число)

Ограничения

К сожалению, существует несколько ограничений:

  • Сценарий только "видит" значки, заблокированные к средству запуска. Не уверенный, если это - проблема для Вас, с тех пор в Вашем примере, средство запуска 11 и далее, кажется, заблокировано к средству запуска.
  • Сценарий не запускает сетевые ярлыки или устройства, заблокированные к средству запуска. Причина состоит в том, что записи сети не передают полезной информации в команде для списка средства запуска (что-то как '-'). Не уверенный, если возможно получить информацию так или иначе, или это кодируется в Единице. Другие устройства могли быть считаны, но так как они, кажется, являются временными в большинстве случаев (флеш-накопители, например) Я не написал код для чтения информации на данный момент.
  • Так как ярлык является пользовательским, он не показывает числа значков для повышения. Как Вы упомянутый, необходимо будет знать их наизусть.

Необходимо будет видеть, имеют ли эти ограничения значение для Вас.

1
ответ дан 2 December 2019 в 04:54

Другие вопросы по тегам:

Похожие вопросы: