如何禁用GtkFileChooserDialog搜索?


24

如果我想在gtk3应用程序(例如firefox)中打开或保存文件,则在输入字符后会得到不需要的搜索功能。

古老而富有成效的行为:输入d会给我第一个文件d,而输入de会给我第一个文件de

新的和有害的行为:键入会d启动搜索过程,并/home/myuser/Downloads/somestuff/DETLEFF在系统中的某个位置给我或其他文件。

例: Gtk3FileChooser

我该如何回到过去的生产性行为?

我的系统:archliux64,Gtk3:3.18.6,windowmanager:fluxbox

Answers:


18

您要查找的功能称为“ typeahead”,在中已禁用GtkFileChooserDialoggtk3-typeahead从AUR恢复以前的行为。

该软件包的作者说,禁用预输入是在GTK +中硬编码的,并且在一个错误报告中指出:“这不是错误;删除预输入搜索是非常有意的。”

请注意,现在在“名称/地址”字段中有一些(部分损坏的)制表符补全模仿了外壳的行为。


6

更新的答案:

从2019年开始,我一直希望使用Arch的AUR存储库(但仍在我的Debian系统上)。现在,我还在FreeBSD上使用小的(有些微不足道的)补丁进行了此操作。这不是“切换到拱门”的答案。

起初设置起来有点困难,但要点是,您实际上可以编译Arch的makepkg程序,并使用它在Debian上编译AUR存储库。我这样做是这样的(尽管我可能已经忘记了一些依赖):

我的老答案仍然存在于底部附近的分隔符之后。

1)建筑物makepkg

sudo apt-get install bsdtar # pacman depends on bsdtar (libarchive) these days
git clone git://projects.archlinux.org/pacman.git
cd pacman
./configure --sysconfdir=/etc --localstatedir=/var --prefix=/opt/arch # Put built program outside of the usual '/usr/local' when installed to avoid conflicts
make
sudo make install # Install pacman/makepkg

# Make a directory pacman expects to exist to dodge makepkg errors
sudo mkdir -p /var/cache/pacman/pkg

2)准备编译GTK3源码:

现在,构建并安装gtk3-typeahead。要获得所有(debian)构建依赖关系,这些依赖关系与Arch的依赖关系或多或少相同,您必须首先deb-src在sources.list中包含一行,这样apt-get build-dep才能成功获取必要的-dev软件包。

我的sources.list包含以下行来执行此操作。根据您的发行版和最近的服务器来更改行。

deb-src http://ftp.us.debian.org/debian/ sid main contrib

3)建筑物gtk3-typeahead

然后,您可以运行以下命令进行构建gtk3-typeahead

sudo apt-get update
sudo apt-get build-dep 'gtk+3.0' # install gtk3 build dependencies

mkdir /path/to/put/arch/git/repo/into
cd /path/to/put/arch/git/repo/into
git clone https://aur.archlinux.org/gtk3-typeahead.git gtk3-typeahead
cd gtk3-typeahead

# Tack onto configure script arguments so that libraries overwrite the official
# Debian ones in /usr/lib/x86_64-linux-gnu, instead of installing to /usr/lib. 
# CHANGE THIS APPROPRIATELY IF RUNNING 32-BIT (or some other architecture like POWER/MIPS)
sed '/\-\-sysconfdir=/a\
        --libdir=/usr/lib/x86_64-linux-gnu \\' PKGBUILD > PKGBUILD2
mv PKGBUILD2 PKGBUILD

# temporarily add archlinux programs to PATH so we can use 'makepkg'
PATH="/opt/arch/bin:""$PATH"

# Don't check pacman dependencies, since our dependency libraries weren't
# installed via pacman like makepkg expects!
makepkg --nodeps

完成此操作后,二进制文件将打包.tar.gz到git树上方一级的归档文件中。在我的示例中,这将是into目录。

要安装它:

TARBALLPATH="$(readlink -f gtk3-typeahead-*.tar.gz | sort | tail -n 1)" # get full path to tarball of most recent build, if multiple are available
cd /
bsdtar xf "$TARBALLPATH"

以我的拙见,这是高度可脚本化的,并且比处理我的旧脚本要少一些技巧。它也不再依赖于debian。


原始答案:

一年过去了,这仍然让我感到烦恼,因为GTK3的人们决定硬编码这种行为,而无需重新编译就无法还原。

但是,在Ubuntu中分发时,typeahead已修补回gtk3。

Ubuntu还使文件选择器需要双击才能选择文件,而不是仅需单击一下即可选择文件。如果您可以修补gtk3源代码,那么我已经制作了一个修补程序,该修补程序从gtk + 3.22.7起可以结合ubuntu修补程序并将其更新为最新版本的GTK。

另外,为我的debian系统制作了一个脚本该脚本会自动在软件包管理器中下载最新版本的源代码,然后对其进行修补和编译。在Debian Sid上可以正确运行,并且也可以在其他Debian发行版上正常工作。


3

在Debian不稳定版上,您可以通过ctrl-l在打开窗口时按来获得预输入功能(l为预行),但仅用于文件打开对话框,而不用于文件保存对话框。对于文件保存对话框,ctrl-l将仅突出显示要保存的文件的名称。为了以更智能的方式浏览,你可以输入~/.在正确的组合,让你的主目录,当前目录,或从根目录路径。同样按下返回箭头键可以取消选择名称,并将光标保留在框中,这样您就不会丢失当前名称(就像在“另存为”操作中那样)。

看来旧的行为要好得多:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.