当我激活 Unity Dash 时,它会记住我使用 Dash 访问的最后一个应用程序、文件或文件夹。如果上一项是文件夹,而这次我正在寻找应用程序,则 Dash 无法找到该应用程序。
启动 Dash 后立即按 Esc 键,从而清除之前的搜索词。
我可以将 Dash 配置为忘记之前的搜索词吗?有人知道这是否是预期的行为吗?
简单的解决方案是只需右键单击破折号本身并选择您要搜索的特定类别 - 破折号将自动清除。
我注意到重新打开的 Dash 突出显示了之前的文本。按退格键可以毫无问题地清除并执行新的搜索。如果我们能够自动化地做到这一点就好了。。。好吧,我们可以通过调用应用程序xdotool和一些脚本魔法来实现。
xdotool通过apt-get install xdotool以下脚本安装并保存。它的基本任务是判断活动窗口是否是Dash,并自动按BackSpace键清除Dash。这是为了python script_name.py在用户登录时通过将此脚本添加到启动应用程序来运行并启动。
#!/usr/bin/env python
import dbus,time,subprocess,os
def run_cmd(cmdlist):
""" utility: reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
def get_dbus(bus_type, obj, path, interface, method, arg):
""" utility: executes dbus method on specific interface"""
if bus_type == "session":
bus = dbus.SessionBus()
if bus_type == "system":
bus = dbus.SystemBus()
proxy = bus.get_object(obj, path)
method = proxy.get_dbus_method(method, interface)
try:
if arg:
return method(arg)
else:
return method()
except dbus.exceptions.DBusException:
return None
def active_is_dash():
base = ['session','org.ayatana.bamf']
dbus_call = base + ['/org/ayatana/bamf/matcher', 'org.ayatana.bamf.matcher','ActiveWindow',None]
active_window = str(get_dbus(*dbus_call))
dbus_call = base + [active_window,'org.ayatana.bamf.view','Name',None]
active_name = str(get_dbus(*dbus_call))
if active_name == 'unity-dash': return True
command = 'xdotool key BackSpace'.split()
flag = None
while True:
time.sleep(0.25)
if active_is_dash():
time.sleep(0.25)
if not flag: run_cmd(command)
flag = True
else: flag = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |