Date: Tue, 15 Feb 2000 13:50:27 +0100
   From: Aaron Optimizer Digulla <[EMAIL PROTECTED]>

   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

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.

   *** 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);

Reply via email to