如何禁用 GtkFileChooserDialog 搜索?

gj1*_*j13 32 linux firefox gtk arch-linux

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

旧的和高效的行为:打字d给我第一个以.开头的文件d,打字de给我第一个文件de.

新的和不需要的行为:打字d开始搜索过程,并/home/myuser/Downloads/somestuff/DETLEFF在系统中的某处提供我或其他一些文件。

例子: Gtk3文件选择器

我怎样才能改回旧的和富有成效的行为?

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

Mar*_*kus 22

您正在寻找的功能称为“typeahead”,它在GtkFileChooserDialog. gtk3-typeahead从 AUR 恢复以前的行为。

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

请注意,名称/地址字段中现在有一些(部分损坏的)制表符完成功能,以模仿 shell 的行为。


Wya*_*ard 7

更新的答案:

从 2019 年开始,我开始使用Arch 的 AUR 存储库(但仍在我的 Debian 系统上)。我也在 FreeBSD 上做了这个,现在,有一个小的(有点微不足道的)补丁。这不是“切换到 Arch”的答案。

起初设置有点困难,但它的要点是您实际上可以编译 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

3)建筑gtk3-typeahead

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

deb-src http://ftp.us.debian.org/debian/ sid main contrib
Run Code Online (Sandbox Code Playgroud)

执行此操作后,二进制文件将打包在.tar.gzgit 树上一级的存档中。在我的示例中,这将是into目录。

要安装它:

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
Run Code Online (Sandbox Code Playgroud)

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


原答案:

一年过去了,这仍然让我很恼火,因为 GTK3 的人决定硬编码这种行为,如果不重新编译就无法恢复它。

但是,在 Ubuntu 中分发的 typeahead 被修补回 gtk3。

Ubuntu 还让文件选择器需要双击才能选择文件,而不是在文件已经被选择的情况下只需要单击一次。如果您可以修补 gtk3 源代码,我已经制作了一个从 gtk+ 3.22.7 开始工作的补丁,结合了 ubuntu 补丁并将它们更新到更新的 GTK 版本。

此外,为我的 debian 系统制作了一个脚本,它会自动在包管理器中下载最新版本的源代码、修补它并编译它。可以在 Debian Sid 上正确运行,也应该适用于其他 Debian 发行版。


小智 5

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

似乎旧的行为要好得多:)