Comment désactiver la recherche GtkFileChooserDialog?

24

Si je veux ouvrir ou enregistrer un fichier dans une application gtk3 (par exemple firefox), j'obtiens une fonction de recherche indésirable après avoir donné un pourboire à un personnage.

Comportement ancien et productif: la frappe dme donne le premier fichier commençant par d, la frappe deme donne le premier fichier avec de.

Comportement nouveau et indésirable: la frappe ddémarre un processus de recherche et me donne, /home/myuser/Downloads/somestuff/DETLEFFou un autre fichier, quelque part dans le système.

Exemple: Gtk3FileChooser

Comment puis-je revenir à l'ancien comportement productif?

Mon système: archliux64, Gtk3: 3.18.6, windowmanager: fluxbox

gj13
la source

Réponses:

18

La fonctionnalité que vous recherchez est appelée "typeahead" et elle est désactivée dans GtkFileChooserDialog. gtk3-typeaheadde l'AUR restaure le comportement précédent.

L'auteur du package indique que la désactivation de typeahead est codée en dur dans GTK + et dans un rapport de bogue, il était indiqué: "Ce n'est pas un bogue; la suppression de la recherche de saisie anticipée était très intentionnelle."

Notez qu'il y a maintenant une tabulation (partiellement cassée) dans le champ nom / adresse imitant le comportement du shell.

Markus
la source
6

Réponse mise à jour:

Depuis 2019, j'ai depuis utilisé le référentiel AUR d'Arch (mais toujours sur mon système Debian ). J'ai également fait cela sur FreeBSD, maintenant, avec un petit patch (quelque peu trivial). Ce n'est PAS une réponse "passer à Arch".

C'était un peu difficile à configurer au début, mais l'essentiel est que vous pouvez en fait compiler le makepkgprogramme d'Arch et l'utiliser pour compiler des dépôts AUR sur Debian. Je l'ai fait comme ça (même si j'ai peut-être oublié certaines dépendances):

Mon ancienne réponse est toujours présente après le séparateur près du bas.

1) Bâtiment 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) Préparation à la compilation des sources GTK3:

Maintenant, pour construire et installer gtk3-typeahead. Pour obtenir toutes les dépendances de construction (debian), qui sont plus ou moins les mêmes que celles d'Arch, vous devez d'abord avoir une deb-srcligne dans votre sources.list afin de pouvoir apt-get build-deprécupérer avec succès les informations nécessaires.-dev paquets .

My sources.listcontient la ligne suivante pour ce faire. Modifiez la ligne en fonction de votre version et du serveur le plus proche.

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

3) Bâtiment gtk3-typeahead:

Ensuite, vous pouvez exécuter ce qui suit pour générer 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

Après cela, les binaires seront emballés dans une .tar.gzarchive un niveau au-dessus de l'arbre git. Dans mon exemple, ce serait le intorépertoire.

Pour l'installer:

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"

C'est hautement scriptable, et un peu moins finnicky que de traiter mes anciens scripts à mon humble avis. Cela ne dépend plus non plus de Debian.


Réponse originale:

Cela fait un an et cela m'ennuie toujours, car les gens de GTK3 ont décidé de coder en dur ce comportement, sans aucun moyen de le rétablir sans recompiler.

Cependant, typeahead a été corrigé dans gtk3 tel que distribué dans Ubuntu.

Ubuntu a également fait que le sélecteur de fichiers nécessite un double-clic pour choisir un fichier, au lieu de ne nécessiter qu'un seul clic si le fichier a déjà été sélectionné. Si vous êtes d'accord pour patcher le code source de gtk3, j'ai fait un patch qui fonctionne à partir de gtk + 3.22.7 en combinant les patchs ubuntu et en les mettant à jour vers une version plus récente de GTK.

De plus, j'ai créé un script pour mon système Debian qui télécharge automatiquement la source de la dernière version dans le gestionnaire de paquets, la corrige et la compile. Fonctionne correctement sur Debian Sid et devrait également fonctionner correctement pour les autres distributions Debian.

Wyatt8740
la source
3

Sur Debian unstable, vous pouvez obtenir la fonctionnalité de frappe en appuyant sur ctrl-llorsque la fenêtre est ouverte (l pour lookahead), mais uniquement pour les dialogues d'ouverture de fichier, pas pour les dialogues d'enregistrement de fichier. Pour les boîtes de dialogue d'enregistrement de fichier, ctrl-lne mettra en surbrillance que le nom du fichier à enregistrer. Pour naviguer d'une manière plus intelligente, vous pouvez taper ~, /,. dans les bonnes combinaisons pour obtenir votre répertoire, le répertoire courant, ou un chemin de répertoire de la racine. Si vous appuyez également sur la touche fléchée vers l'arrière, vous pouvez désélectionner le nom et conserver le curseur dans la zone afin de ne pas perdre le nom actuel (comme cela se produirait dans une opération "Enregistrer sous").

Il semble que l'ancien comportement était bien meilleur :)

Andrew Olney
la source