配置 Unity Dash 以忘记最后一条命令

Ant*_*ple 7 unity unity-dash

问题

当我激活 Unity Dash 时,它会记住我使用 Dash 访问的最后一个应用程序、文件或文件夹。如果上一项是文件夹,而这次我正在寻找应用程序,则 Dash 无法找到该应用程序。

如何繁殖

  1. 按“超级”键启动 Dash
  2. 输入您的用户名以查找您的主文件夹(其他文件夹名称也可以)
  3. 按“输入”启动文件
  4. 再次启动 Dash
  5. 键入“firefox”或任何其他应用程序(无需先按“escape”)

解决方法

启动 Dash 后立即按 Esc 键,从而清除之前的搜索词。

问题

我可以将 Dash 配置为忘记之前的搜索词吗?有人知道这是否是预期的行为吗?

Ser*_*nyy 3

简单的解决方案是只需右键单击破折号本身并选择您要搜索的特定类别 - 破折号将自动清除。

在此输入图像描述

我注意到重新打开的 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)


Ant*_*ple 0

我发现通过清除我的使用数据

设置 > 安全和隐私 > 文件和应用程序

极大地改善了 Dash 的性能和行为。它并没有完全解决我遇到的问题,但确实减少了它发生的次数。例如,在步骤 5 中,如果我输入“fire”,然后在输入“fox”之前暂停一秒钟(允许 Dash 完成搜索),则会找到该应用程序。

我还发现了一个看似相关的错误报告