Vraag Elke manier om vensters te openen vanuit de Windows-balk met behulp van een snelkoppeling


Elke manier om vensters te openen vanuit de Windows-balk met behulp van een snelkoppeling? om bijvoorbeeld het eerste venster aan de linker Ctrl + 1 te openen, om het tweede venster aan de linker Ctrl + 2 te openen.

Ik gebruik op dit moment xfce4, maar als onder xfce4 niet mogelijk is, is er dan een andere desktopomgeving die dit toelaat?

Omdat ik meerdere vensters open heb voor dezelfde applicatie, zoek ik niet naar sorteerbewerkingen gerelateerd aan de toepassing, maar zoals ik hieronder zeg, naar het venster.


5
2017-12-05 18:09


oorsprong


Bedoel je dat je naar vensters moet schakelen, afhankelijk van hun positie op het scherm? Wat zou dat precies zijn, 4 segmenten (linksboven, linksonder enz.) Of 2 segmenten (links / rechts) ?. Een andere optie: ten opzichte van elkaar? Alles kan worden gedaan. Interessant. - Jacob Vlijm
@JacobVlijm nee, afhankelijk van de positie op de taakbalk, van links naar rechts of omgekeerd. - tirengarfio
Ik snap het. Ik denk dat het kan worden gedaan. - Jacob Vlijm
Ik vraag het ook welke desktop-omgevingen ondersteunen het schakelen tussen vensters met Super + 0..9 - Dan Dascalescu


antwoorden:


Met een klein script en een kleine operatie op uw systeem, kan het precies zo worden opgesteld als u beschrijft.

ingrediënten

  1. wmctrl; het moet mogelijk worden geïnstalleerd.
  2. Het onderstaande script
  3. xprop, om de venstereigenschappen te krijgen. Dit is al op uw systeem geïnstalleerd.
  4. Instellingen wijzigen in xfce paneelinstellingen
  5. Extra sneltoetsen op het toetsenbord

Hoe te installeren

  • Installeren wmctrl:

    sudo apt-get install wmctrl
    
  • Maak een map ~/bin (/home/<yourname>/bin). Kopieer het onderstaande script naar een leeg bestand, sla het op als panel_navigate (geen extensie) in ~/bin en maak het uitvoerbaar.

  • Wijzig paneelinstellingen:
    Ga naar Instellingen Manager> "Paneel"> "Items" (tabblad)> "Venster Knoppen">

    • "Sorteervolgorde"> Kies: tijdstempel
    • "Window Grouping"> Kies: "Never"
    • Zorg ervoor dat "Windows weergeven vanuit alle werkruimten of viewports" is unaangevinkt

    enter image description here

  • Toetsenbord snelkoppelingen toevoegen:
    ga naar Instellingen Manager> "Toetsenbord"> "Applicatiesnelkoppelingen", kies "Toevoegen". Voeg de opdracht toe:

    panel_navigate 1
    

    Stel het in op de toetscombinatie Ctrl+1

    enter image description here

  • Nu kunt u kiezen:

    • om deze procedure te herhalen om toe te voegen panel_navigate 2 onder Ctrl+2 en zo verder (tot 9)

    (opslagoptie) of (als je niet bang bent om configuratiebestanden handmatig te bewerken):

    • je kunt het bestand bewerken:

      ~/.config/xfce4/xfconf/xfce-perchanel-xml/xfce4-keyboard-shortcuts.xml
      

      waarin de sneltoetsen op het toetsenbord (in xfce) zijn opgeslagen. Open het bestand met mousepad en zoek naar een regel als:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      

      Kopieer de regel, plak deze op de volgende regel (insert) en verander beide keren van 1 in 2, zodat je krijgt:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      <property name="&lt;Primary&gt;2" type="string" value="panel_navigate 2"/>
      

    enzovoort..

    Zorg ervoor dat het streepje precies hetzelfde is. Herhaal de procedure tot 9.

Log uit en weer in en het zou moeten werken:

Ctrl+1

enter image description here

Ctrl+3

enter image description here

Enzovoort...

Het script

#!/usr/bin/env python3

import subprocess
import sys

def get_value(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()

def run_command(command):
    subprocess.Popen(["/bin/bash", "-c", command])

current_workspace = [l for l in get_value("wmctrl -d").splitlines() if l.split(" ")[2] == "*"][0][0]
wlist_ids = [item.split()[0:4] for item in get_value("wmctrl -l").splitlines()]
relevant = [item for item in wlist_ids if item[1] == current_workspace]
panel = []
for item in relevant:
    data = get_value("xprop -id "+item[0])
    if ("_TYPE_NORMAL" in data, "TYPE_DIALOG" in data).count(True) == 1:
        panel.append(item)
try:
    window = panel[int(sys.argv[1])-1][0]
    run_command("wmctrl -ia "+window)
except IndexError:
    pass

Uitleg

De oplossing is opportunistisch. Het kwam bij me op dat de vensterlijst, opgeroepen door het commando wmcrl -l, wordt gerangschikt naar de leeftijd van de ramen. Door het xfce-paneel hetzelfde te doen (instellingen), corresponderen beide orders perfect. Wat het script doet, is het maken van een vensterenlijst, het filteren van de "echte", zichtbare vensters (met xprop) en schakel met de opdracht naar een gekozen venster panel_navigate, met het nummer van het venster (van links naar rechts) als een agrument.

problemen

Ik heb één uitzondering opgemerkt: de IDLE-vensters (python-interpreter) hebben pid 0 en hun eigenschappen kunnen niet worden "onderzocht" door xprop. De vensters verschijnen niet in de vensterlijst en worden overgeslagen door het script.

Notitie

Hoewel de toetscombinatie Ctrl+<number> heeft tijdens het testen geen fouten opgeleverd, het kan conflicteren met sommige applicaties. Het kan veiliger zijn om te kiezen (bijvoorbeeld) Ctrl+alt+1


5
2017-12-11 11:27



@tirengarfio, ik heb een belangrijke verbetering gemaakt sinds de laatste update: nu bevat het script alleen vensters van de actueel werkruimte, om verwarring / incorrecte nummering te voorkomen als vensters over werkruimten worden verspreid. Zorg ervoor dat "Vensters tonen van alle werkruimten of viewports" (paneelinstellingen) onleesbaar is. - Jacob Vlijm


Niet zeker voor dezelfde toepassing, maar in Unity je kunt met applicaties schakelen super+number, zoals bijvoorbeeld, super + 1 = eerste item op het opstartprogramma, super + 2 = het tweede item van het opstartprogramma, super + n = het n-de item van het opstartprogramma. Dit helpt ook om elk item op het opstartprogramma te openen, bijvoorbeeld als nautilus het eerste item van het opstartprogramma is, super + 1 zal nautilus bestandsbeheerder openen.


2
2017-12-05 19:16