Date: Tue, 15 Feb 2000 13:50:27 +0100 From: Aaron Optimizer Digulla <dia@xxxxxxxxxxxx> 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);