ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gtkbfc/README
Revision: 1.5
Committed: Tue Sep 30 02:30:37 2008 UTC (17 years, 11 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 GTK+ BASH FILE CHOOSER
2    
3 root 1.2 Gtk+ is a nice toolkit, but ever since the new file chooser was introduced
4     in version 2, it became less and less usable. Not only is tab completion
5     gone (at least in a useful form), quickly entering a path has become
6     impossible due to many extra keys one has to press and due to the extreme
7     slowness of the file chooser itself.
8    
9     As an example, when firefox finds a new filetype (e.g. a pdf) and I use
10     its file chooser to select F</usr/bin/xpdf>, here is what happens: After
11     typing F</usr/bin> the app freezes for around 40 seconds. Then it has
12     loaded F</usr/bin> (this is on a typical debian install, F<ls -l /usr/bin>
13     is much faster). Then after pressing return to select it, the window
14     again freezes for about 30 seconds. In the gtk+ 1.0 file selector this
15     took less than a second. As another example, when I save an image in
16     the GIMP to F</tmp>, I can actually see the Gtk+ file chooser accessing
17     other, automounted, paths such as F</fs/cdrom>, or F</fs/doom>, which
18     are my dvd drive and an nfs fs on anoher machine. Mounting those takes
19     additional time to the time required scanning F</tmp> (which again is
20     about a minute).
21    
22     Clearly, this makes the Gtk+ file chooser completely
23     unusable. Unfortunately, despite many people having opened bug reports
24     about these problems, they are either getting ignored, or fixed in an
25     half-assed attempt just to come back in the next gtk+ release.
26    
27 root 1.1 B<gtkbfc> is a hack that replaces the dreaded, slow and hard-to-use GTK+
28 root 1.4 file chooser by an rxvt-unicode window with a little script that lets you use
29 root 1.1 readline tab-completion to enter filenames.
30    
31 root 1.5 Again, it's a dire hack and will not work with all programs. It does work
32 root 1.2 for gimp, firefox, gedit at least, though. Most importantly, it does work
33     for me, which really is all that counts.
34    
35 root 1.1
36 root 1.4 =head2 DEPENDENCIES
37    
38     The default helper requires F<rxvt-unicode> for terminal input. Other
39     terminals won't do because they close all extra filehandles (and also do
40     not support the less important --transient-for switch). As the helper is
41     just a shell script you could rewrite it to use another mechanism to fetch
42     the filename (such as a temporary file). Anything goes as long as the
43     helper outputs an absolute pathname on stdout and exits.
44    
45     The default helper also requires F<bash>, as it has a F<read> built-in
46     that is readline-enabled. Again, you can easily modify the helper script
47     to use another hsell, or another mechanism.
48    
49    
50 root 1.1 =head2 INSTALLATION
51    
52     Install rxvt-unicode. Then copy the F<gtkbfc-helper> to F</etc/> and make
53 root 1.5 sure it's executable and opens a window where you can enter a filename when
54 root 1.1 executed as F</etc/gtkbfc-helper>, which will then be echod to stdout.
55    
56     Then run F<make>, this will create a F<gtkbfc.so> shared object. You
57     have to specify this shared object as LD_PRELOAD when running gtk
58     programs. Either manually:
59    
60     LD_PRELOAD=/path/to/gtkbfc.so gimp
61    
62     Via an alias:
63    
64     alias gimp='LD_PRELOAD=/path/to/gtkbfc.so gimp'
65    
66     Or by putting it into your F</etc/ld.so.preload> (not really recommended
67     for performance reasons).
68    
69 root 1.2
70 root 1.3 =head2 HOW DOES IT WORK
71    
72     B<gtkbfc> works by overriding the constructor for the GtkFileChooserWidget
73     which is used in most file chooser applications. That is actually the
74     clean part. The unclean part simply replaces some of the file chooser
75     methods by methods that either do nothing or return the filename from the
76     last invocation of the gtkbfc helper program.
77    
78     The original file chooser is kept in the background but is disabled, and
79     is generally nonfunctional. To avoid minutes of file system scanning,
80     B<gtkbfc> redirects the gtk+ file chooser to an empty file in an otherwise
81     empty directory in F</tmp>.
82    
83    
84 root 1.2 =head2 BUGS
85    
86     You want to use readline, so you are some kind of guru anyways, so if you
87     have a bug report, better attach a patch or a very thorough analysis of
88     what goes wrong to your e-mail. Thank you very much.
89    
90    
91 root 1.1 =head2 AUTHOR
92    
93     Marc Lehmann <gtkbfc@schmorp.de>.