Come disabilitare la ricerca GtkFileChooserDialog?


24

Se voglio aprire o salvare un file in un'app gtk3 (ad es. Firefox) ottengo una funzione di ricerca indesiderata dopo aver lasciato la mancia a un carattere.

Comportamento vecchio e produttivo: la digitazione dmi dà il primo file che inizia con d, la digitazione demi dà il primo file con de.

Comportamento nuovo e indesiderato: la digitazione davvia un processo di ricerca e fornisce me /home/myuser/Downloads/somestuff/DETLEFFo qualche altro file da qualche parte nel sistema.

Esempio: Gtk3FileChooser

Come posso tornare al vecchio e produttivo comportamento?

Il mio sistema: archliux64, Gtk3: 3.18.6, windowmanager: fluxbox

Risposte:


18

La funzione che stai cercando si chiama "typeahead" ed è disabilitata in GtkFileChooserDialog. gtk3-typeaheaddall'AUR ripristina il comportamento precedente.

L'autore del pacchetto afferma che la disabilitazione di typeahead è hardcoded in GTK + e in una segnalazione di bug è stato dichiarato: "Non è un bug; la rimozione della ricerca in anticipo è stata molto intenzionale".

Nota che ora c'è un po 'di completamento (parzialmente interrotto) nel campo nome / indirizzo che imita il comportamento della shell.


6

Risposta aggiornata:

A partire dal 2019, da allora sono passato all'utilizzo del repository AUR di Arch (ma ancora sul mio sistema Debian ). L'ho fatto anche su FreeBSD, ora, con una piccola (piuttosto banale) patch. Questa NON è una risposta "passa ad Arch".

Inizialmente è stato un po 'difficile da configurare, ma l'essenza è che puoi effettivamente compilare il makepkgprogramma Arch e usarlo per compilare repository AUR su Debian. L'ho fatto in questo modo (anche se potrei aver dimenticato alcune dipendenze):

La mia vecchia risposta è ancora presente dopo il separatore vicino al fondo.

1) Edificio 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) Preparazione alla compilazione delle fonti GTK3:

Ora, per compilare e installare gtk3-typeahead. Per ottenere tutte le dipendenze di compilazione (debian), che sono più o meno le stesse di quelle di Arch, devi prima avere una deb-srcriga nel tuo sources.list in modo da apt-get build-deprecuperare con successo i -devpacchetti necessari .

My sources.listcontiene la seguente riga per farlo. Modificare la riga in base alla versione e al server più vicino.

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

3) Edificio gtk3-typeahead:

Quindi, è possibile eseguire quanto segue per compilare 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

Dopo aver fatto ciò, i binari saranno raggruppati in un .tar.gzarchivio a un livello sopra l'albero git. Nel mio esempio, questa sarebbe la intodirectory.

Per installarlo:

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"

Questo è altamente scrivibile, e un po 'meno raffinato rispetto a gestire i miei vecchi script secondo la mia modesta opinione. Inoltre, non dipende più da Debian.


Risposta originale:

È passato un anno e questo mi infastidisce ancora, dal momento che la gente della GTK3 ha deciso di codificare questo comportamento, senza alcun modo per ripristinarlo senza ricompilare.

Tuttavia, typeahead è stato ripristinato a gtk3 come distribuito in Ubuntu.

Ubuntu ha anche richiesto al selettore di file di richiedere un doppio clic per scegliere un file, invece di richiedere un solo clic se il file era già selezionato. Se stai bene con l'applicazione di patch al codice sorgente gtk3, ho creato una patch che funziona da gtk + 3.22.7 combinando le patch di Ubuntu e aggiornandole con una versione più attuale di GTK.

Inoltre, ho creato uno script per il mio sistema debian che scarica automaticamente l'origine dell'ultima versione nel gestore pacchetti, lo aggiusta e lo compila. Funziona correttamente su Debian Sid e dovrebbe funzionare bene anche per altre distribuzioni Debian.


3

Su Debian unstable, puoi ottenere la funzionalità typeahead premendo ctrl-lquando la finestra è aperta (l per lookahead), ma solo per i dialoghi di apertura dei file, non per i dialoghi di salvataggio dei file. Per i dialoghi di salvataggio dei file, ctrl-levidenzierà solo il nome del file da salvare. Per navigare in modo più intelligente, è possibile digitare ~, /, .nelle combinazioni giuste per ottenere la vostra home directory, directory corrente, o un percorso di directory dalla radice. Inoltre, premendo il tasto freccia indietro è possibile deselezionare il nome e mantenere il cursore nella casella in modo da non perdere il nome corrente (come accadrebbe in un'operazione "Salva con nome").

Sembra che il vecchio comportamento fosse molto meglio :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.