web-dev-qa-db-fra.com

Existe-t-il un raccourci pour rouvrir un programme récemment fermé?

J'ai trouvé cette question demande récemment fermée de KDE Open question et c'est exactement ce que je voudrais faire, mais je suis sur Ubuntu. La seule réponse à cette question est la partie "récemment utilisée" du lanceur, mais la liste récemment utilisée n'inclut pas les applications verrouillées au lanceur.

Normalement, je passe la plupart des choses à travers le terminal, mais comme dans les navigateurs, je vais courir depuis le lanceur. Parfois, je les ferme accidentellement.

En bref : J'aimerais la fonctionnalité 'ctrl-shift-t' de la plupart des navigateurs pour les onglets appliqués aux programmes dans Ubuntu.

Si cela se présente sous la forme d'un script, c'est bien; Je n'ai pas beaucoup d'expérience en écriture de scripts bash, donc une explication ou des liens vers des documents sont appréciés.

Existe-t-il une liste des programmes récemment fermés stockés quelque part sur le disque? Je sais que ce serait probablement les journaux, mais ce serait un problème pour comprendre comment analyser, je pense? J'imagine que j'espère qu'il y a un joli petit fichier journal quelque part qui conserve un enregistrement des applications fermées/ouvertes et du chemin d'accès au programme qui les exécute/les démarre. Aussi: si je voulais que Ubuntu crée un fichier journal comme celui-ci, comment pourrais-je le faire?

2
Mxt

Comme demandé dans les commentaires, une réponse conceptuelle, pas de script prêt à l'emploi.

Explication sur le concept; comment enregistrer l'application la plus récemment fermée


Introduction

À partir d'une liste de processus et de pids, il est difficile de déterminer lequel appartient à une application ou à un autre processus. Puisque vous parlez d’applications graphiques, nous pouvons enregistrer des fenêtres , ce qui nous donne toutes les informations nécessaires pour choisir l’application la plus récente.

Utilisation de wmctrl pour répertorier les applications en cours d'exécution

wmctrl (pas sur votre système par défaut) est un outil de ligne de commande qui peut vous donner des informations sur les fenêtres existantes. La commande:

wmctrl -lp

produit une liste de fenêtres, ressemblant à:

---
0x02c0000c  0 23772  jacob-System-Product-Name Hud
0x02e0000a -1 23877  jacob-System-Product-Name Desktop
0x0480001d  0 28367  jacob-System-Product-Name Ask Ubuntu General Room | chat.stackexchange.com - Mozilla Firefox
0x05200007  0 26724  jacob-System-Product-Name System Monitor
0x05800084  0 27183  jacob-System-Product-Name *Untitled Document 1 - gedit
---

Dans la deuxième colonne de la liste, vous pouvez voir les pids des fenêtres actuellement ouvertes, telles que: 23877, 28367

A partir de ces pids, nous pouvons récupérer le processus (application) qui possède la fenêtre, en utilisant la commande:

ps -o cmd= <pid>

par exemple.:

$ ps -o cmd= 27183
gedit

Il suffit ensuite de lancer une boucle de quelques secondes, en comparant la liste (unique) des processus possédant une fenêtre (= applications) avec la liste d’il ya quelques secondes. Si un processus "a quitté" la liste, c'est la dernière fenêtre fermée. En bref:

Vue d'ensemble (conceptuelle) de la boucle (style python)

applications1 = get_applications()
while True:
    time.sleep(3)
    applications2 = get_applications()
    closed = [app for app in applications1 if not app in applications2]
    if closed:
        most_recent = closed[0]
        # store the process in a file, to be available to run as most recently closed
        open(f, "wt").write(most_recent)
    application1 = application2

où f est le chemin d'accès à un fichier dans lequel l'application la plus récente est écrite. Ensuite, un autre processus/commande lance l'application dans le fichier et l'installation est terminée.

La langue?

Nul doute que cela peut être fait dans à peu près tous les langages de script. Pour moi, python semble tout à fait approprié pour produire facilement des scripts comme celui-ci ...

Remarque

Notez que le code schématique ci-dessus est juste pour exemple, pas de code testé!

2
Jacob Vlijm