On Tue, Feb 15, 2000 at 08:09:37AM -0500, Robert L Krawitz wrote:
> Here is a patch for the print plugin. The patch fixes an anoyance
> with the print dialog: If you have lots of printers (we have about
> 50 here), it takes *several minutes* to open. Fix: Just use lpstat
> -d -v (just list the names of the printers instead of checking if
> they are enabled; the information is discarded anyway). Later, when
> it becomes clear that we can use that info, we can reenable it
> again (including some kind of caching and a progress report which
> shows that Gimp is still doing something).
>
> That patch AS IS isn't going to work. On my system (using
> PrintPro/CUPS), lpstat -d -v prints out in a slightly different
> format:
>
> $ lpstat -d -v
> system default destination: epson
> device for epson: parallel:/dev/lp0
> device for epson-big: parallel:/dev/lp0
> device for foo: /tmp/out
> device for null: /dev/null
Ok, then only the second word (for) seems to be stable (the third always seems
to be the printer name). Any other systems around ?
> Note that it uses "device" rather than "system". If you want to
> figure out how to make it work in general, go ahead -- it's a
> reasonable idea for 3.0.
>
> In the intermediate term, we're considering getting rid of all of this
> stuff and using some kind of printer definition dialog, partly because
> we haven't found any robust programmatic way of determining the list
> of printers on the system and partly because it's reasonable for users
> to want to define virtual printers with different combinations of
> settings. Something like that's likely to make it into 3.2 (after
> having been in 3.1 for a while) as part of a general overhaul of the
> UI.
>
> In the longer run, a more general solution to the printing problem is
> needed.
I agree. But the patch should be included nonetheless because it makes
printing with Gimp possible :-)
> *** gimp-1.1.16/plug-ins/print/print.c~ Mon Jan 31 03:32:25 2000
> --- gimp-1.1.16/plug-ins/print/print.c Tue Feb 8 15:51:56 2000
> ***************
> *** 3146,3152 ****
> #endif /* LPC_COMMAND */
>
> #ifdef LPSTAT_COMMAND
> ! if ((pfile = popen(LPSTAT_COMMAND " -d -p", "r")) != NULL)
> {
> char name[17];
>
> --- 3146,3152 ----
> #endif /* LPC_COMMAND */
>
> #ifdef LPSTAT_COMMAND
> ! if ((pfile = popen(LPSTAT_COMMAND " -v -d", "r")) != NULL)
> {
> char name[17];
>
> ***************
> *** 3153,3159 ****
> while (fgets(line, sizeof(line), pfile) != NULL &&
> plist_count < MAX_PLIST)
> {
> ! if (sscanf(line, "printer %s", name) == 1)
> {
> strcpy(plist[plist_count].name, name);
> sprintf(plist[plist_count].v.output_to, LP_COMMAND " -s -d%s", name);
> --- 3153,3159 ----
> while (fgets(line, sizeof(line), pfile) != NULL &&
> plist_count < MAX_PLIST)
> {
> ! if (sscanf(line, "system for %[^:]s:", name) == 1)
> {
> strcpy(plist[plist_count].name, name);
> sprintf(plist[plist_count].v.output_to, LP_COMMAND " -s -d%s", name);
--
Dipl. Inf. (FH) Aaron "Optimizer" Digulla
"(to) optimize: Make a program faster by
improving the algorithms rather than by
buying a faster machine."