* Added CRLF characters to POP3 and IMAP stuff (should play nicer with
authorBrenden Matthews <brenden1@rty.ca>
Thu, 20 Mar 2008 20:33:31 +0000 (20:33 +0000)
committerBrenden Matthews <brenden1@rty.ca>
Thu, 20 Mar 2008 20:33:31 +0000 (20:33 +0000)
some servers now).
* Added preliminary support for parsing the output of external commands
(via $execp)

git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1019 7f574dfc-610e-0410-a909-a81674777703

ChangeLog
README
doc/conky.1
doc/variables.xml
src/conky.c

index ff531a2..3ffd36e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 # $Id$
 
+2008-03-20
+       * Added CRLF characters to POP3 and IMAP stuff (should play nicer with
+       some servers now).
+       * Added preliminary support for parsing the output of external commands
+       (via $execp)
+
 2008-03-19
        * Fixed a number of small memory leaks.
        * Performed some minor profiling on Conky; introduced
diff --git a/README b/README
index 45e1e8e..234f142 100644 (file)
--- a/README
+++ b/README
@@ -278,8 +278,22 @@ CONFIGURATION SETTINGS
              config file (default is 16384 bytes)
 
 
-       text_buffer_size bytes
-             Size of the standard text buffer (default is 1280 bytes).
+       large_text_buffer_size bytes
+             Size of the standard large text buffer (default is 1024  bytes).
+             This buffer is used for the entirety of Conky's text. Increasing
+             the buffer's size will decrease  performance  and  increase  the
+             memory footprint of Conky, but it will allow for more text to be
+             displayed in Conky.
+
+
+       small_text_buffer_size bytes
+             Size of the standard small text buffer (default is  128  bytes).
+             This  buffer  is  used for intermediary text, such as individual
+             lines, output from $exec vars, and various other variables.  In-
+             creasing  the size of this buffer can drastically reduce Conky's
+             performance, but will allow for more text display per  variable.
+             The size of this buffer cannot be smaller than the default value
+             of 128 bytes.
 
 
        maximum_width pixels
@@ -714,8 +728,17 @@ VARIABLES
              recommend coding wanted behaviour in C and posting a patch.
 
 
+       execp command
+             Executes a shell command and displays the output in conky. warn-
+             ing: this takes a lot more resources than other  variables.  I'd
+             recommend coding wanted behaviour in C and posting a patch. This
+             differs from $exec in that it parses the output of the  command,
+             so  you  can  insert things like ${color red}hi!${color} in your
+             script and have it correctly parsed by Conky.
+
+
        execbar command
-             Same  as  exec,  except if the first value return is a value be-
+             Same as exec, except if the first value return is  a  value  be-
              tween 0-100, it will use that number for a bar. The size for the
              bar is currently fixed, but that may change in the future.
 
@@ -725,7 +748,7 @@ VARIABLES
 
 
        execi interval command
-             Same  as exec but with specific interval. Interval can't be less
+             Same as exec but with specific interval. Interval can't be  less
              than update_interval in configuration. See also $texeci
 
 
@@ -738,36 +761,36 @@ VARIABLES
 
 
        font (font)
-             Specify a different font. This new font will apply to  the  cur-
-             rent  line and everything following. You can use a $font with no
-             arguments to change back to the default  font  (much  like  with
+             Specify  a  different font. This new font will apply to the cur-
+             rent line and everything following. You can use a $font with  no
+             arguments  to  change  back  to the default font (much like with
              $color)
 
 
        freq (n)
-             Returns  CPU  #n's frequency in MHz. CPUs are counted from 1. If
+             Returns CPU #n's frequency in MHz. CPUs are counted from  1.  If
              omitted, the parameter defaults to 1.
 
 
        freq_g (n)
-             Returns CPU #n's frequency in GHz. CPUs are counted from  1.  If
+             Returns  CPU  #n's frequency in GHz. CPUs are counted from 1. If
              omitted, the parameter defaults to 1.
 
 
        freq_dyn
-             Returns  CPU  frequency in MHz, but is calculated by counting to
-             clock cycles to complete  an  instruction.  Only  available  for
+             Returns CPU frequency in MHz, but is calculated by  counting  to
+             clock  cycles  to  complete  an  instruction. Only available for
              x86/amd64.
 
 
        freq_dyn_g
-             Returns  CPU  frequency in GHz, but is calculated by counting to
-             clock cycles to complete  an  instruction.  Only  available  for
+             Returns CPU frequency in GHz, but is calculated by  counting  to
+             clock  cycles  to  complete  an  instruction. Only available for
              x86/amd64.
 
 
        fs_bar (height),(width) fs
-             Bar  that  shows how much space is used on a file system. height
+             Bar that shows how much space is used on a file  system.  height
              is the height in pixels. fs is any file on that file system.
 
 
@@ -795,14 +818,14 @@ VARIABLES
 
 
        hddtemp dev, (host,(port))
-             Displays temperature of a selected hard disk drive  as  reported
-             by  the  hddtemp  daemon  running on host:port.  Default host is
+             Displays  temperature  of a selected hard disk drive as reported
+             by the hddtemp daemon running on  host:port.   Default  host  is
              127.0.0.1, default port is 7634.
 
 
        head logfile lines (interval)
-             Displays first N lines of supplied text text file.  If  interval
-             is  not  supplied,  Conky assumes 2x Conky's interval. Max of 30
+             Displays  first  N lines of supplied text text file. If interval
+             is not supplied, Conky assumes 2x Conky's interval.  Max  of  30
              lines can be displayed, or until the text buffer is filled.
 
 
@@ -811,16 +834,16 @@ VARIABLES
 
 
        hwmon (dev) type n
-             Hwmon sensor from sysfs (Linux 2.6). Parameter dev may be  omit-
-             ted  if you have only one hwmon device. Parameter type is either
-             'in' or 'vol' meaning voltage; 'fan' meaning fan;  'temp'  (Cel-
-             sius)  or  'tempf' (Fahrenheit) meaning temperature. Parameter n
-             is number of the sensor. See  /sys/class/hwmon/  on  your  local
+             Hwmon  sensor from sysfs (Linux 2.6). Parameter dev may be omit-
+             ted if you have only one hwmon device. Parameter type is  either
+             'in'  or  'vol' meaning voltage; 'fan' meaning fan; 'temp' (Cel-
+             sius) or 'tempf' (Fahrenheit) meaning temperature.  Parameter  n
+             is  number  of  the  sensor. See /sys/class/hwmon/ on your local
              computer.
 
 
        iconv_start codeset_from codeset_to
-             Convert  text from one codeset to another using GNU iconv. Needs
+             Convert text from one codeset to another using GNU iconv.  Needs
              to be stopped with iconv_stop.
 
 
@@ -829,75 +852,75 @@ VARIABLES
 
 
        i2c (dev) type n
-             I2C sensor from sysfs (Linux 2.6). Parameter dev may be  omitted
-             if  you  have only one I2C device. Parameter type is either 'in'
+             I2C  sensor from sysfs (Linux 2.6). Parameter dev may be omitted
+             if you have only one I2C device. Parameter type is  either  'in'
              or 'vol' meaning voltage; 'fan' meaning fan; 'temp' (Celsius) or
-             'tempf'  (Fahrenheit) meaning temperature. Parameter n is number
+             'tempf' (Fahrenheit) meaning temperature. Parameter n is  number
              of the sensor. See /sys/bus/i2c/devices/ on your local computer.
 
 
        i8k_ac_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
-             whether ac power is on, as listed in  /proc/i8k  (translated  to
-             human-readable).  Beware  that this is by default not enabled by
+             If running the i8k kernel driver for Inspiron laptops,  displays
+             whether  ac  power  is on, as listed in /proc/i8k (translated to
+             human-readable). Beware that this is by default not  enabled  by
              i8k itself.
 
 
        i8k_bios
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              the bios version as listed in /proc/i8k.
 
 
        i8k_buttons_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the volume buttons status as listed in /proc/i8k.
 
 
        i8k_cpu_temp
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              the cpu temperature in Celsius, as reported by /proc/i8k.
 
 
        i8k_cpu_tempf
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the cpu temperature in Fahrenheit, as reported by /proc/i8k.
 
 
        i8k_left_fan_rpm
-             If running the i8k kernel driver for Inspiron laptops,  displays
-             the  left  fan's  rate of rotation, in revolutions per minute as
+             If  running the i8k kernel driver for Inspiron laptops, displays
+             the left fan's rate of rotation, in revolutions  per  minute  as
              listed in /proc/i8k. Beware, some laptops i8k reports these fans
              in reverse order.
 
 
        i8k_left_fan_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the left fan status as listed in /proc/i8k (translated to human-
-             readable).  Beware,  some  laptops i8k reports these fans in re-
+             readable). Beware, some laptops i8k reports these  fans  in  re-
              verse order.
 
 
        i8k_right_fan_rpm
-             If running the i8k kernel driver for Inspiron laptops,  displays
-             the  right  fan's rate of rotation, in revolutions per minute as
+             If  running the i8k kernel driver for Inspiron laptops, displays
+             the right fan's rate of rotation, in revolutions per  minute  as
              listed in /proc/i8k. Beware, some laptops i8k reports these fans
              in reverse order.
 
 
        i8k_right_fan_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
-             the right fan status as listed in /proc/i8k (translated  to  hu-
-             man-readable).  Beware,  some  laptops i8k reports these fans in
+             If running the i8k kernel driver for Inspiron laptops,  displays
+             the  right  fan status as listed in /proc/i8k (translated to hu-
+             man-readable). Beware, some laptops i8k reports  these  fans  in
              reverse order.
 
 
        i8k_serial
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              your laptop serial number as listed in /proc/i8k.
 
 
        i8k_version
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the version formatting of /proc/i8k.
 
 
@@ -906,13 +929,13 @@ VARIABLES
 
 
        ibm_temps N
-             If running the IBM ACPI, displays the temperatures from the  IBM
+             If  running the IBM ACPI, displays the temperatures from the IBM
              temperature sensors (N=0..7) Sensor 0 is on the CPU, 3 is on the
              GPU.
 
 
        ibm_volume
-             If running the IBM ACPI,  displays  the  "master"  volume,  con-
+             If  running  the  IBM  ACPI,  displays the "master" volume, con-
              trolled by the volume keys (0-14).
 
 
@@ -922,19 +945,19 @@ VARIABLES
 
 
        if_empty (var)
-             if conky variable  VAR  is  empty,  display  everything  between
+             if  conky  variable  VAR  is  empty,  display everything between
              $if_empty and the matching $endif
 
 
        if_running (process)
-             if  PROCESS  is  running, display everything $if_running and the
+             if PROCESS is running, display everything  $if_running  and  the
              matching $endif
 
 
        if_existing file (string)
-             if FILE exists, display everything between if_existing  and  the
-             matching  $endif.  The optional second paramater checks for FILE
-             containing the specified string and  prints  everything  between
+             if  FILE  exists, display everything between if_existing and the
+             matching $endif. The optional second paramater checks  for  FILE
+             containing  the  specified  string and prints everything between
              $if_existing and the matching $endif.
 
 
@@ -944,8 +967,8 @@ VARIABLES
 
 
        if_smapi_bat_installed (INDEX)
-             when using smapi, if the battery with index INDEX is  installed,
-             display   everything  between  $if_smapi_bat_installed  and  the
+             when  using smapi, if the battery with index INDEX is installed,
+             display  everything  between  $if_smapi_bat_installed  and   the
              matching $endif
 
 
@@ -956,9 +979,9 @@ VARIABLES
 
        imap_messages (args)
              Displays the number of messages in your global IMAP inbox by de-
-             fault. You can define  individual  IMAP  inboxes  seperately  by
+             fault.  You  can  define  individual  IMAP inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i interval] [-p port] [-e command]". Default port is 143,  de-
+             [-i  interval] [-p port] [-e command]". Default port is 143, de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
@@ -967,7 +990,7 @@ VARIABLES
              Displays the number of unseen messages in your global IMAP inbox
              by default. You can define individual IMAP inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i  interval] [-p port] [-e command]". Default port is 143, de-
+             [-i interval] [-p port] [-e command]". Default port is 143,  de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
@@ -985,16 +1008,16 @@ VARIABLES
 
 
        mails (mailbox) (interval)
-             Mail count in the specified mailbox or your mail spool  if  not.
-             Both  mbox and maildir type mailboxes are supported. You can use
-             a program like fetchmail to get mails  from  some  server  using
+             Mail  count  in the specified mailbox or your mail spool if not.
+             Both mbox and maildir type mailboxes are supported. You can  use
+             a  program  like  fetchmail  to get mails from some server using
              your favourite protocol. See also new_mails.
 
 
        mboxscan (-n number of messages to print) (-fw from width) (-sw subject
        width) mbox
-             Print  a  summary  of recent messages in an mbox format mailbox.
-             mbox parameter is the filename of the mailbox (can  be  encapsu-
+             Print a summary of recent messages in an  mbox  format  mailbox.
+             mbox  parameter  is the filename of the mailbox (can be encapsu-
              lated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"}
 
 
@@ -1092,26 +1115,26 @@ VARIABLES
 
        pb_battery item
              If running on Apple powerbook/ibook, display information on bat-
-             tery status. The item parameter specifies, what  information  to
+             tery  status.  The item parameter specifies, what information to
              display. Exactly one item must be specified. Valid items are:
 
              status: Display if battery is fully charged, charging, discharg-
              ing or absent (running on AC)
-             percent: Display charge of battery in percent,  if  charging  or
-             discharging.  Nothing  will  be  displayed,  if battery is fully
+             percent:  Display  charge  of battery in percent, if charging or
+             discharging. Nothing will be  displayed,  if  battery  is  fully
              charged or absent.
              time: Display the time remaining until the battery will be fully
-             charged  or discharged at current rate. Nothing is displayed, if
-             battery is absent or if it's present but fully charged  and  not
+             charged or discharged at current rate. Nothing is displayed,  if
+             battery  is  absent or if it's present but fully charged and not
              discharging.
 
 
        platform (dev) type n
-             Platform  sensor  from  sysfs  (Linux 2.6). Parameter dev may be
-             omitted if you have only one platform device. Platform  type  is
-             either  'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp'
+             Platform sensor from sysfs (Linux 2.6).  Parameter  dev  may  be
+             omitted  if  you have only one platform device. Platform type is
+             either 'in' or 'vol' meaning voltage; 'fan' meaning fan;  'temp'
              (Celsius) or 'tempf' (Fahrenheit) meaning temperature. Parameter
-             n  is  number  of  the sensor. See /sys/bus/platform/devices/ on
+             n is number of the  sensor.  See  /sys/bus/platform/devices/  on
              your local computer.
 
 
@@ -1119,17 +1142,17 @@ VARIABLES
              Displays the number of unseen messages in your global POP3 inbox
              by default. You can define individual POP3 inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i  interval] [-p port] [-e command]". Default port is 110, de-
+             [-i interval] [-p port] [-e command]". Default port is 110,  de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
 
        pop3_used (args)
-             Displays  the amount of space (in MiB, 2^20) used in your global
-             POP3 inbox by default. You can define  individual  POP3  inboxes
-             seperately  by  passing arguments to this object. Arguments are:
-             "host user pass [-i interval] [-p port] [-e  command]".  Default
-             port  is  110, default interval is 5 minutes. If the password is
+             Displays the amount of space (in MiB, 2^20) used in your  global
+             POP3  inbox  by  default. You can define individual POP3 inboxes
+             seperately by passing arguments to this object.  Arguments  are:
+             "host  user  pass [-i interval] [-p port] [-e command]". Default
+             port is 110, default interval is 5 minutes. If the  password  is
              supplied as '*', you will be prompted to enter the password when
              Conky starts.
 
@@ -1152,21 +1175,21 @@ VARIABLES
 
 
        smapi (ARGS)
-             when using smapi, display  contents  of  the  /sys/devices/plat-
-             form/smapi  directory. ARGS are either '(FILENAME)' or 'bat (IN-
-             DEX) (FILENAME)' to display the  corresponding  files'  content.
-             This  is  a  very raw method of accessing the smapi values. When
+             when  using  smapi,  display  contents of the /sys/devices/plat-
+             form/smapi directory. ARGS are either '(FILENAME)' or 'bat  (IN-
+             DEX)  (FILENAME)'  to  display the corresponding files' content.
+             This is a very raw method of accessing the  smapi  values.  When
              available, better use one of the smapi_* variables instead.
 
 
        smapi_bat_perc (INDEX)
-             when using smapi, display the remaining capacity in  percent  of
-             the  battery  with  index INDEX. This is a separate variable be-
+             when  using  smapi, display the remaining capacity in percent of
+             the battery with index INDEX. This is a  separate  variable  be-
              cause it supports the 'use_spacer' configuration option.
 
 
        smapi_bat_bar (INDEX),(height),(width)
-             when using smapi, display the remaining capacity of the  battery
+             when  using smapi, display the remaining capacity of the battery
              with index INDEX as a bar.
 
 
@@ -1210,36 +1233,36 @@ VARIABLES
              The connection index provides you with access to each connection
              in the port monitor. The monitor will return information for in-
              dex values from 0 to n-1 connections. Values higher than n-1 are
-             simply  ignored. For the "count" item, the connection index must
+             simply ignored. For the "count" item, the connection index  must
              be omitted. It is required for all other items.
 
              Examples:
-             ${tcp_portmon 6881 6999 count} - displays the number of  connec-
+             ${tcp_portmon  6881 6999 count} - displays the number of connec-
              tions in the bittorrent port range
-             ${tcp_portmon  22 22 rip 0} - displays the remote host ip of the
+             ${tcp_portmon 22 22 rip 0} - displays the remote host ip of  the
              first sshd connection
-             ${tcp_portmon 22 22 rip 9} - displays the remote host ip of  the
+             ${tcp_portmon  22 22 rip 9} - displays the remote host ip of the
              tenth sshd connection
              ${tcp_portmon 1 1024 rhost 0} - displays the remote host name of
              the first connection on a privileged port
              ${tcp_portmon 1 1024 rport 4} - displays the remote host port of
              the fifth connection on a privileged port
-             ${tcp_portmon  1 65535 lservice 14} - displays the local service
+             ${tcp_portmon 1 65535 lservice 14} - displays the local  service
              name of the fifteenth connection in the range of all ports
 
              Note that port monitor variables which share the same port range
              actually refer to the same monitor, so many references to a sin-
              gle port range for different items and different indexes all use
-             the  same monitor internally. In other words, the program avoids
+             the same monitor internally. In other words, the program  avoids
              creating redundant monitors.
 
        texeci interval command
-             Runs a command at an interval inside a thread and  displays  the
-             output.  Same  as  $execi,  except  the  command is run inside a
-             thread. Use this if you have a slow script to keep Conky  updat-
-             ing.  You should make the interval slightly longer then the time
-             it takes your script to execute. For  example,  if  you  have  a
-             script  that  take 5 seconds to execute, you should make the in-
+             Runs  a  command at an interval inside a thread and displays the
+             output. Same as $execi, except  the  command  is  run  inside  a
+             thread.  Use this if you have a slow script to keep Conky updat-
+             ing. You should make the interval slightly longer then the  time
+             it  takes  your  script  to  execute. For example, if you have a
+             script that take 5 seconds to execute, you should make  the  in-
              terval at least 6 seconds. See also $execi.
 
 
@@ -1248,8 +1271,8 @@ VARIABLES
 
 
        rss url delay_in_minutes action item_num
-             Download and parse RSS feeds. Action may be one of  the  follow-
-             ing:  feed_title, item_title (with num par), item_desc (with num
+             Download  and  parse RSS feeds. Action may be one of the follow-
+             ing: feed_title, item_title (with num par), item_desc (with  num
              par) and item_titles.
 
 
@@ -1264,7 +1287,7 @@ VARIABLES
 
 
        time (format)
-             Local  time, see man strftime to get more information about for-
+             Local time, see man strftime to get more information about  for-
              mat
 
 
@@ -1273,23 +1296,23 @@ VARIABLES
 
 
        tztime (timezone) (format)
-             Local time for specified timezone, see man strftime to get  more
-             information  about format. The timezone argument is specified in
-             similar fashion as TZ environment variable. For hints,  look  in
+             Local  time for specified timezone, see man strftime to get more
+             information about format. The timezone argument is specified  in
+             similar  fashion  as TZ environment variable. For hints, look in
              /usr/share/zoneinfo. e.g. US/Pacific, Europe/Zurich, etc.
 
 
        totaldown net
-             Total  download, overflows at 4 GB on Linux with 32-bit arch and
+             Total download, overflows at 4 GB on Linux with 32-bit arch  and
              there doesn't seem to be a way to know how many times it has al-
              ready done that before conky has started.
 
 
        top type, num
-             This  takes arguments in the form:top (name) (number) Basically,
-             processes are ranked from highest to lowest in terms of cpu  us-
-             age,  which  is  what  (num)  represents. The types are: "name",
-             "pid", "cpu", "mem", and "time". There can be a max of  10  pro-
+             This takes arguments in the form:top (name) (number)  Basically,
+             processes  are ranked from highest to lowest in terms of cpu us-
+             age, which is what (num)  represents.  The  types  are:  "name",
+             "pid",  "cpu",  "mem", and "time". There can be a max of 10 pro-
              cesses listed.
 
 
@@ -1313,9 +1336,9 @@ VARIABLES
              Upload speed in kilobytes with one decimal
 
 
-       upspeedgraph  net (height),(width) (gradient colour 1) (gradient colour
+       upspeedgraph net (height),(width) (gradient colour 1) (gradient colour
        2) (scale)
-             Upload  speed  graph,  colours  defined  in hex, minus the #. If
+             Upload speed graph, colours defined in  hex,  minus  the  #.  If
              scale is non-zero, it becomes the scale for the graph.
 
 
@@ -1343,12 +1366,12 @@ VARIABLES
 
 
        voffset (pixels)
-             Change vertical offset by N pixels. Negative values  will  cause
+             Change  vertical  offset by N pixels. Negative values will cause
              text to overlap. See also $offset.
 
 
        voltage_mv (n)
-             Returns  CPU  #n's  voltage  in  mV. CPUs are counted from 1. If
+             Returns CPU #n's voltage in mV. CPUs  are  counted  from  1.  If
              omitted, the parameter defaults to 1.
 
 
@@ -1476,11 +1499,11 @@ FILES
 BUGS
        Drawing to root or some other desktop window directly doesn't work with
        all window managers. Especially doesn't work well with Gnome and it has
-       been  reported  that  it         doesn't work with KDE either. Nautilus can be
-       disabled from drawing to desktop         with  program  gconf-editor.  Uncheck
-       show_desktop  in         /apps/nautilus/preferences/.  There  is  -w switch in
-       Conky to set some specific window id. You  might         find  xwininfo  -tree
-       useful  to  find         the  window  to draw to. You can also use -o argument
+       been reported that it doesn't work with KDE  either.  Nautilus  can  be
+       disabled         from  drawing  to  desktop with program gconf-editor. Uncheck
+       show_desktop in /apps/nautilus/preferences/.  There  is -w  switch  in
+       Conky  to  set  some  specific window id. You might find xwininfo -tree
+       useful to find the window to draw to. You  can  also  use  -o  argument
        which makes Conky to create its own window.
 
 SEE ALSO
index 7cda6ae..5764eea 100644 (file)
@@ -267,8 +267,12 @@ Maximum size of user text buffer, i.e. layout below TEXT line in config file
 (default is 16384 bytes)
 
 .TP 
-\fB\*(T<\fBtext_buffer_size\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> 
-Size of the standard text buffer (default is 1280 bytes).
+\fB\*(T<\fBlarge_text_buffer_size\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> 
+Size of the standard large text buffer (default is 1024 bytes). This buffer is used for the entirety of Conky's text. Increasing the buffer's size will decrease performance and increase the memory footprint of Conky, but it will allow for more text to be displayed in Conky.
+
+.TP 
+\fB\*(T<\fBsmall_text_buffer_size\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> 
+Size of the standard small text buffer (default is 128 bytes). This buffer is used for intermediary text, such as individual lines, output from $exec vars, and various other variables. Increasing the size of this buffer can drastically reduce Conky's performance, but will allow for more text display per variable. The size of this buffer cannot be smaller than the default value of 128 bytes.
 
 .TP 
 \fB\*(T<\fBmaximum_width\fR\*(T>\fR \*(T<\fBpixels\fR\*(T> 
@@ -676,6 +680,10 @@ Total size of system entropy pool for crypto freaks
 Executes a shell command and displays the output in conky. warning: this takes a lot more resources than other variables. I'd recommend coding wanted behaviour in C and posting a patch.
 
 .TP 
+\fB\*(T<\fBexecp\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> 
+Executes a shell command and displays the output in conky. warning: this takes a lot more resources than other variables. I'd recommend coding wanted behaviour in C and posting a patch. This differs from $exec in that it parses the output of the command, so you can insert things like ${color red}hi!${color} in your script and have it correctly parsed by Conky.
+
+.TP 
 \fB\*(T<\fBexecbar\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> 
 Same as exec, except if the first value return is a value between 0-100, it will use that number for a bar. The size for the bar is currently fixed, but that may change in the future.
 
index 6ae2355..ef422ae 100644 (file)
        <para></para></listitem>
 </varlistentry>
 
-
 <varlistentry>
        <term>
                <command><option>exec</option></command>
 
 <varlistentry>
        <term>
+               <command><option>execp</option></command>
+       <option>command</option>
+       </term>
+       <listitem>
+               Executes a shell command and displays the output in conky. warning: this takes a lot more resources than other variables. I'd recommend coding wanted behaviour in C and posting a patch.  This differs from $exec in that it parses the output of the command, so you can insert things like ${color red}hi!${color} in your script and have it correctly parsed by Conky.
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term>
                <command><option>execbar</option></command>
        <option>command</option>
        </term>
index d01d40d..4631fe3 100644 (file)
@@ -1096,6 +1096,7 @@ enum text_object_type {
        OBJ_endif,
        OBJ_image,
        OBJ_exec,
+       OBJ_execp,
        OBJ_execi,
        OBJ_texeci,
        OBJ_execbar,
@@ -1599,7 +1600,7 @@ void *imap_thread(struct mail_s *mail)
                strncat(sendbuf, mail->user, MAXDATASIZE - strlen(sendbuf) - 1);
                strncat(sendbuf, " ", MAXDATASIZE - strlen(sendbuf) - 1);
                strncat(sendbuf, mail->pass, MAXDATASIZE - strlen(sendbuf) - 1);
-               strncat(sendbuf, "\n", MAXDATASIZE - strlen(sendbuf) - 1);
+               strncat(sendbuf, "\r\n", MAXDATASIZE - strlen(sendbuf) - 1);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send a1");
                        fail++;
@@ -1625,7 +1626,7 @@ void *imap_thread(struct mail_s *mail)
                }
                strncpy(sendbuf, "a2 STATUS ", MAXDATASIZE);
                strncat(sendbuf, mail->folder, MAXDATASIZE - strlen(sendbuf) - 1);
-               strncat(sendbuf, " (MESSAGES UNSEEN)\n",
+               strncat(sendbuf, " (MESSAGES UNSEEN)\r\n",
                        MAXDATASIZE - strlen(sendbuf) - 1);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send a2");
@@ -1664,7 +1665,7 @@ void *imap_thread(struct mail_s *mail)
                                &mail->unseen);
                        timed_thread_unlock(mail->p_timed_thread);
                }
-               strncpy(sendbuf, "a3 logout\n", MAXDATASIZE);
+               strncpy(sendbuf, "a3 logout\r\n", MAXDATASIZE);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send a3");
                        fail++;
@@ -1781,7 +1782,7 @@ void *pop3_thread(struct mail_s *mail)
                }
                strncpy(sendbuf, "USER ", MAXDATASIZE);
                strncat(sendbuf, mail->user, MAXDATASIZE - strlen(sendbuf) - 1);
-               strncat(sendbuf, "\n", MAXDATASIZE - strlen(sendbuf) - 1);
+               strncat(sendbuf, "\r\n", MAXDATASIZE - strlen(sendbuf) - 1);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send USER");
                        fail++;
@@ -1807,7 +1808,7 @@ void *pop3_thread(struct mail_s *mail)
                }
                strncpy(sendbuf, "PASS ", MAXDATASIZE);
                strncat(sendbuf, mail->pass, MAXDATASIZE - strlen(sendbuf) - 1);
-               strncat(sendbuf, "\n", MAXDATASIZE - strlen(sendbuf) - 1);
+               strncat(sendbuf, "\r\n", MAXDATASIZE - strlen(sendbuf) - 1);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send PASS");
                        fail++;
@@ -1831,7 +1832,7 @@ void *pop3_thread(struct mail_s *mail)
                        fail++;
                        goto next_iteration;
                }
-               strncpy(sendbuf, "STAT\n", MAXDATASIZE);
+               strncpy(sendbuf, "STAT\r\n", MAXDATASIZE);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send STAT");
                        fail++;
@@ -1866,7 +1867,7 @@ void *pop3_thread(struct mail_s *mail)
                        sscanf(reply, "%lu %lu", &mail->unseen, &mail->used);
                        timed_thread_unlock(mail->p_timed_thread);
                }
-               strncpy(sendbuf, "QUIT\n", MAXDATASIZE);
+               strncpy(sendbuf, "QUIT\r\n", MAXDATASIZE);
                if (send(sockfd, sendbuf, strlen(sendbuf), 0) == -1) {
                        perror("send QUIT");
                        fail++;
@@ -2027,17 +2028,10 @@ static void free_text_objects(unsigned int count, struct text_object *objs)
                                break;
                        case OBJ_text:
                        case OBJ_font:
-                               free(objs[i].data.s);
-                               break;
                        case OBJ_image:
-                               free(objs[i].data.s);
-                               break;
                        case OBJ_exec:
-                               free(objs[i].data.s);
-                               break;
+                       case OBJ_execp:
                        case OBJ_execbar:
-                               free(objs[i].data.s);
-                               break;
                        case OBJ_execgraph:
                                free(objs[i].data.s);
                                break;
@@ -2201,26 +2195,34 @@ static void free_text_objects(unsigned int count, struct text_object *objs)
                                        info.users.times = 0;
                                }
                                break;
+#ifdef MPD
+                       case OBJ_mpd_title:
+                       case OBJ_mpd_artist:
+                       case OBJ_mpd_album:
+                       case OBJ_mpd_random:
+                       case OBJ_mpd_repeat:
+                       case OBJ_mpd_vol:
+                       case OBJ_mpd_bitrate:
+                       case OBJ_mpd_status:
+                       case OBJ_mpd_host:
+                       case OBJ_mpd_port:
+                       case OBJ_mpd_password:
+                       case OBJ_mpd_bar:
+                       case OBJ_mpd_elapsed:
+                       case OBJ_mpd_length:
+                       case OBJ_mpd_track:
+                       case OBJ_mpd_name:
+                       case OBJ_mpd_file:
+                       case OBJ_mpd_percent:
+                       case OBJ_mpd_smart:
+                               free_mpd_vars(&info);
+                               break;
+#endif
                }
        }
        free(objs);
-#ifdef MPD
-       free_mpd_vars(&info);
-#endif
        /* text_objects = NULL;
           text_object_count = 0; */
-       if (tmpstring1) {
-               free(tmpstring1);
-               tmpstring1 = 0;
-       }
-       if (tmpstring2) {
-               free(tmpstring2);
-               tmpstring2 = 0;
-       }
-       if (text_buffer) {
-               free(text_buffer);
-               text_buffer = 0;
-       }
 }
 
 void scan_mixer_bar(const char *arg, int *a, int *w, int *h)
@@ -2653,6 +2655,8 @@ static struct text_object *construct_text_object(const char *s,
 #ifdef HAVE_POPEN
        END OBJ(exec, 0)
                obj->data.s = strdup(arg ? arg : "");
+       END OBJ(execp, 0)
+               obj->data.s = strdup(arg ? arg : "");
        END OBJ(execbar, 0)
                obj->data.s = strdup(arg ? arg : "");
        END OBJ(execgraph, 0)
@@ -3904,6 +3908,18 @@ static void extract_variable_text(const char *p)
        struct text_object_list *list;
 
        free_text_objects(text_object_count, text_objects);
+       if (tmpstring1) {
+               free(tmpstring1);
+               tmpstring1 = 0;
+       }
+       if (tmpstring2) {
+               free(tmpstring2);
+               tmpstring2 = 0;
+       }
+       if (text_buffer) {
+               free(text_buffer);
+               text_buffer = 0;
+       }
        text_object_count = 0;
        text_objects = NULL;
 
@@ -3914,14 +3930,14 @@ static void extract_variable_text(const char *p)
        free(list);
 }
 
-void parse_conky_vars(char *text, char *p, struct information *cur)
+struct text_object_list *parse_conky_vars(char *text, char *p, struct information *cur)
 {
        struct text_object_list *object_list =
                extract_variable_text_internal(text);
 
        generate_text_internal(p, p_p_max_size, object_list->text_objects,
                object_list->text_object_count, cur);
-       free(object_list);
+       return object_list;
 }
 
 /* Allows reading from a FIFO (i.e., /dev/xconsole).
@@ -4525,15 +4541,33 @@ static void generate_text_internal(char *p, int p_max_size,
                                int length = fread(p, 1, p_max_size, fp);
 
                                pclose(fp);
-                               /* output[length] = '\0';
-                               if (length > 0 && output[length - 1] == '\n') {
-                                       output[length - 1] = '\0';
-                               } */
+                               
                                p[length] = '\0';
                                if (length > 0 && p[length - 1] == '\n') {
                                        p[length - 1] = '\0';
                                }
-                               // parse_conky_vars(output, p, cur);
+                       }
+                       OBJ(execp) {
+                               FILE *fp = popen(obj->data.s, "r");
+                               fread(p, 1, p_max_size, fp);
+
+                               pclose(fp);
+                               
+                               struct information *my_info =
+                                       malloc(sizeof(struct information));
+                               memcpy(my_info, cur, sizeof(struct information));
+                               struct text_object_list *text_objects = parse_conky_vars(p, p, my_info);
+
+                               int length = strlen(p);
+                               
+                               p[length] = '\0';
+                               if (length > 0 && p[length - 1] == '\n') {
+                                       p[length - 1] = '\0';
+                               }
+                               
+                               free_text_objects(text_objects->text_object_count, text_objects->text_objects);
+                               free(text_objects);
+                               free(my_info);
                        }
                        OBJ(execbar) {
                                char *p2 = p;
@@ -5129,7 +5163,7 @@ static void generate_text_internal(char *p, int p_max_size,
                                        malloc(sizeof(struct information));
 
                                memcpy(my_info, cur, sizeof(struct information));
-                               parse_conky_vars(obj->data.ifblock.s, p, my_info);
+                               struct text_object_list *text_objects = parse_conky_vars(obj->data.ifblock.s, p, my_info);
                                if (strlen(p) != 0) {
                                        i = obj->data.ifblock.pos;
                                        if_jumped = 1;
@@ -5137,6 +5171,8 @@ static void generate_text_internal(char *p, int p_max_size,
                                        if_jumped = 0;
                                }
                                p[0] = '\0';
+                               free_text_objects(text_objects->text_object_count, text_objects->text_objects);
+                               free(text_objects);
                                free(my_info);
                        }
                        OBJ(if_existing) {
@@ -7357,6 +7393,18 @@ void clean_up(void)
 #endif /* X11 */
 
        free_text_objects(text_object_count, text_objects);
+       if (tmpstring1) {
+               free(tmpstring1);
+               tmpstring1 = 0;
+       }
+       if (tmpstring2) {
+               free(tmpstring2);
+               tmpstring2 = 0;
+       }
+       if (text_buffer) {
+               free(text_buffer);
+               text_buffer = 0;
+       }
        text_object_count = 0;
        text_objects = NULL;