配置 Unity Dash 以忘记上一个命令

配置 Unity Dash 以忘记上一个命令

问题

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

如何重现

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

解决方法

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

问题

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

答案1

简单的解决方案就是右键单击 Dash 本身并选择您想要搜索的特定类别 - 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

答案2

我发现通过

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

大大改善了 Dash 的性能和行为。它并没有完全解决我遇到的问题,但确实减少了发生这种情况的次数。例如,在步骤 5 中,如果我输入“fire”,然后暂停一秒钟(让 Dash 完成搜索),然后再输入“fox”,那么应用程序就会被找到。

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

相关内容