我经常需要进入“活动概述”并打开许多应用程序,因此,如果每次我单击打开一个应用程序时,我都会离开 AO 并进入该应用程序,那就相当烦人了,尽管这在某些情况下很有用,但我更愿意留在 AO 中以及我所在的任何部分。
可以这样做吗?也许有扩展可以实现这一点?我更希望能够SHIFT单击应用程序上的某个东西来打开它,但不会将我带出 AO,这样当我不需要它时会更容易。
我正在运行带有 GNOME 3.20 的 Ubuntu GNOME 16.04。
答案1
稍微修改过的版本这个脚本允许一次选择多个应用程序:
剧本
#!/usr/bin/env python3
import subprocess
import os
dr = "/usr/share/applications"
apps = []
for f in [f for f in os.listdir(dr) if f.endswith(".desktop")]:
try:
content = open(dr+"/"+f).read()
if not "NoDisplay=true" in content:
lines = content.splitlines()
name = [l for l in lines if l.startswith("Name=")][0].replace("Name=", "")
command = [l for l in lines if l.startswith("Exec=")][0].replace("Exec=", "")
comment = [l for l in lines if l.startswith("Comment=")]
comment = comment[0].replace("Comment=", "") if comment else "No description"
apps.append([name, command, comment])
except:
pass
apps.sort(key=lambda x: x[0]); apps = sum(apps, [])
displ_list = '"'+'" "'.join(apps)+'"'
try:
chosen = subprocess.check_output([
"/bin/bash",
"-c",
'zenity --list '+\
'--multiple '+\
'--column="Applications" '+\
'--column="commands" '+\
'--column="Description" '+\
'--hide-column=2 --height 450 '+\
'--width 500 '+\
'--print-column=2 '+displ_list
]).decode("utf-8").split("|")
for item in chosen:
item = item.strip()
item = item[:item.rfind(" ")] if "%" in item else item
subprocess.Popen([
"/bin/bash", "-c", item
])
except subprocess.CalledProcessError:
pass
使用
- 将以下脚本复制到一个空文件中,并将其另存为
list_apps.py
通过命令测试运行它(打开一个终端窗口,输入命令并按Return):
python3 /path/to/list_apps.py
如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:
python3 /pat/to/list_apps.py
为您喜欢的快捷键组合。
解释
该脚本列出了.desktop
中的所有文件/usr/share/applications
,并检查文件中是否存在该行NoDisplay=true
(这意味着它不打算用作 GUI)。然后,它会查看文件,查找应用程序名称和运行它的命令。
与链接答案的区别主要在于 zenity 窗口设置为允许多项选择。
答案2
已经有这样的功能可以做到这一点,只需在活动概述中CTRL+CLICK一个项目(例如:应用程序、文件等)即可打开它,但不能关闭 AO。