Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I'm using a script in Conky in order to display my new gmail on my desktop.

It works beautifully, but is kind of ugly, and I'm not sure how to fix it.

What I've currently got looks like this:

enter image description here

And what I'd like is this:

enter image description here

Any ideas for how to make that happen are much appreciated. Here's the script I'm currently using in its entirety.

#!/usr/bin/perl

use Switch;
use Text::Wrap;

my $what=$ARGV[0];

$user="username"; #username for gmail account
$pass="password"; #password for gmail account
$file="/tmp/gmail.html"; #temporary file to store gmail

#wrap format for subject
$Text::Wrap::columns=65; #Number of columns to wrap subject at
$initial_tab=""; #Tab for first line of subject
$subsequent_tab="\t"; #tab for wrapped lines
$quote="\""; #put quotes around subject

#limit the number of emails to be displayed
$emails=-1; #if -1 display all emails

&passwd; #give password the proper url character encoding

switch($what){ #determine what the user wants
    case "n" {&gmail; print "$new\n";} #print number of new emails
    case "s" { #print $from and $subj for new email
        &gmail;
        if ($new>0){
            my $size=@from;
            if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
            for(my $i=0; $i$emails){print "$emails out of $size new emails displayed\n";}
        }
    }   
    case "e" { #print number of new emails, $from, and $subj
        &gmail;
        if($new==0){print "You have no new emails.\n";}
        else{
            print "You have $new new email(s).\n";
            my $size=@from;
            if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
            for(my $i=0; $i$emails){print "$emails out of $size new emails displayed\n";}
        }
    }
    else {
        print "Usage Error: gmail.pl \n";
        print "\tn displays number of new emails\n";
        print "\ts displays from line and subject line for each new email.\n";
        print "\te displays the number of new emails and from line plus \n";
        print "\t\tsubject line for each new email.\n";
    } #didn't give proper option
}

sub gmail{
    if(!(-e $file)){ #create file if it does not exists
        `touch $file`;
    } 

    #get new emails
    `wget -O - https://$user:$pass\@mail.google.com/mail/feed/atom --no-check-certificate> $file`;

    open(IN, $file); #open $file

    my $i=0; #initialize count
    $new=0; #initialize new emails to 0

    my $flag=0;

    while(){ #cycle through $file
        if(//){$flag=1;}
        elsif(/(\d+)/){$new=$1;} #grab number of new emails
        elsif($flag==1){ 
            if(/.+/){push(@subj, &msg);} #grab new email titles
            elsif(/(.+)/){push(@from, $1); $flag=0;} #grab new email from lines
        }
    }

    close(IN); #close $file
}

sub passwd{ #change to url escape codes in password
    #URL ESCAPE CODES
    $_=$pass;
    s/\%/\%25/g;
    s/\#/\%23/g;
    s/\$/\%24/g;
    s/\&/\%26/g;
    s/\//\%2F/g;
    s/\:/\%3A/g;
    s/\;/\%3B/g;
    s/\/\%3E/g;
    s/\?/\%3F/g;
    s/\@/\%40/g;
    s/\[/\%5B/g;
    s/\\/\%5C/g;
    s/\]/\%5D/g;
    s/\^/\%5E/g;
    s/\`/\%60/g;
    s/\{/\%7B/g;
    s/\|/\%7C/g;
    s/\}/\%7D/g;
    s/\~/\%7E/g;
    $pass=$_;
}

sub msg{
    #THE HTML CODED CHARACTER SET [ISO-8859-1]
    chomp; s/(.+)/$1/; #get just the subject
    #now replace any special characters
    s/\&\#33\;/!/g;        #Exclamation mark
    s/\&\#34\;/"/g; s/\"\;/"/g;      #Quotation mark
    s/\&\#35\;/#/g;        #Number sign
    s/\&\#36\;/\$/g;        #Dollar sign
    s/\&\#37\;/%/g;        #Percent sign
    s/\&\#38\;/&/g; s/\&\;/&/g;        #Ampersand
    s/\&\#39\;/'/g;        #Apostrophe
    s/\&\#40\;/(/g;        #Left parenthesis
    s/\&\#41\;/)/g;        #Right parenthesis
    s/\&\#42\;/*/g;        #Asterisk
    s/\&\#43\;/+/g;        #Plus sign
    s/\&\#44\;/,/g;        #Comma
    s/\&\#45\;/-/g;        #Hyphen
    s/\&\#46\;/./g;        #Period (fullstop)
    s/\&\#47\;/\//g;        #Solidus (slash)
    s/\&\#58\;/:/g;        #Colon
    s/\&\#59\;/\;/g;        #Semi-colon
    s/\&\#60\;//g; s/\>\;/>/g;        #Greater than
    s/\&\#63\;/\?/g;        #Question mark
    s/\&\#64\;/\@/g;        #Commercial at
    s/\&\#91\;/\[/g;        #Left square bracket
    s/\&\#92\;/\\/g;        #Reverse solidus (backslash)
    s/\&\#93\;/\]/g;        #Right square bracket
    s/\&\#94\;/\^/g;        #Caret
    s/\&\#95\;/_/g;        #Horizontal bar (underscore)
    s/\&\#96\;/\`/g;        #Acute accent
    s/\&\#123\;/\{/g;        #Left curly brace
    s/\&\#124\;/|/g;        #Vertical bar
    s/\&\#125\;/\}/g;        #Right curly brace
    s/\&\#126\;/~/g;        #Tilde
    s/\&\#161\;/¡/g;        #Inverted exclamation
    s/\&\#162\;/¢/g;        #Cent sign
    s/\&\#163\;/£/g;        #Pound sterling
    s/\&\#164\;/¤/g;        #General currency sign
    s/\&\#165\;/¥/g;        #Yen sign
    s/\&\#166\;/¦/g;        #Broken vertical bar
    s/\&\#167\;/§/g;        #Section sign
    s/\&\#168\;/¨/g;        #Umlaut (dieresis)
    s/\&\#169\;/©/g; s/\©\;/©/g;        #Copyright
    s/\&\#170\;/ª/g;        #Feminine ordinal
    s/\&\#171\;/«/g;        #Left angle quote, guillemotleft
    s/\&\#172\;/¬/g;        #Not sign
    s/\&\#174\;/®/g;        #Registered trademark
    s/\&\#175\;/¯/g;        #Macron accent
    s/\&\#176\;/°/g;        #Degree sign
    s/\&\#177\;/±/g;        #Plus or minus
    s/\&\#178\;/²/g;        #Superscript two
    s/\&\#179\;/³/g;        #Superscript three
    s/\&\#180\;/´/g;        #Acute accent
    s/\&\#181\;/µ/g;        #Micro sign
    s/\&\#182\;/¶/g;        #Paragraph sign
    s/\&\#183\;/·/g;        #Middle dot
    s/\&\#184\;/¸/g;        #Cedilla
    s/\&\#185\;/¹/g;        #Superscript one
    s/\&\#186\;/º/g;        #Masculine ordinal
    s/\&\#187\;/»/g;        #Right angle quote, guillemotright
    s/\&\#188\;/¼/g; s/\¼\;/¼/g;       # Fraction one-fourth
    s/\&\#189\;/½/g; s/\½\;/½/g;       # Fraction one-half
    s/\&\#190\;/¾/g; s/\¾\;/¾/g;       # Fraction three-fourths
    s/\&\#191\;/¿/g;        #Inverted question mark
    s/\&\#192\;/À/g;        #Capital A, grave accent
    s/\&\#193\;/Á/g;        #Capital A, acute accent
    s/\&\#194\;/Â/g;        #Capital A, circumflex accent
    s/\&\#195\;/Ã/g;        #Capital A, tilde
    s/\&\#196\;/Ä/g;        #Capital A, dieresis or umlaut mark
    s/\&\#197\;/Å/g;        #Capital A, ring
    s/\&\#198\;/Æ/g;        #Capital AE dipthong (ligature)
    s/\&\#199\;/Ç/g;        #Capital C, cedilla
    s/\&\#200\;/È/g;        #Capital E, grave accent
    s/\&\#201\;/É/g;        #Capital E, acute accent
    s/\&\#202\;/Ê/g;        #Capital E, circumflex accent
    s/\&\#203\;/Ë/g;        #Capital E, dieresis or umlaut mark
    s/\&\#204\;/Ì/g;        #Capital I, grave accent
    s/\&\#205\;/Í/g;        #Capital I, acute accent
    s/\&\#206\;/Î/g;        #Capital I, circumflex accent
    s/\&\#207\;/Ï/g;        #Capital I, dieresis or umlaut mark   
    s/\&\#208\;/Ð/g;        #Capital Eth, Icelandic
    s/\&\#209\;/Ñ/g;        #Capital N, tilde
    s/\&\#210\;/Ò/g;        #Capital O, grave accent
    s/\&\#211\;/Ó/g;        #Capital O, acute accent
    s/\&\#212\;/Ô/g;        #Capital O, circumflex accent
    s/\&\#213\;/Õ/g;        #Capital O, tilde
    s/\&\#214\;/Ö/g;        #Capital O, dieresis or umlaut mark
    s/\&\#215\;/×/g;        #Multiply sign
    s/\&\#216\;/Ø/g;        #Capital O, slash
    s/\&\#217\;/Ù/g;        #Capital U, grave accent
    s/\&\#218\;/Ú/g;        #Capital U, acute accent
    s/\&\#219\;/Û/g;        #Capital U, circumflex accent
    s/\&\#220\;/Ü/g;        #Capital U, dieresis or umlaut mark
    s/\&\#221\;/Ý/g;        #Capital Y, acute accent
    s/\&\#222\;/Þ/g;        #Capital THORN, Icelandic
    s/\&\#223\;/ß/g;        #Small sharp s, German (sz ligature)
    s/\&\#224\;/à/g;        #Small a, grave accent
    s/\&\#225\;/á/g;        #Small a, acute accent
    s/\&\#226\;/â/g;        #Small a, circumflex accent
    s/\&\#227\;/ã/g;        #Small a, tilde
    s/\&\#228\;/ä/g;        #Small a, dieresis or umlaut mark
    s/\&\#229\;/å/g;        #Small a, ring
    s/\&\#230\;/æ/g;        #Small ae dipthong (ligature)
    s/\&\#231\;/ç/g;        #Small c, cedilla
    s/\&\#232\;/è/g;        #Small e, grave accent
    s/\&\#233\;/é/g;        #Small e, acute accent
    s/\&\#234\;/ê/g;        #Small e, circumflex accent
    s/\&\#235\;/ë/g;        #Small e, dieresis or umlaut mark
    s/\&\#236\;/ì/g;        #Small i, grave accent
    s/\&\#237\;/í/g;        #Small i, acute accent
    s/\&\#238\;/î/g;        #Small i, circumflex accent
    s/\&\#239\;/ï/g;        #Small i, dieresis or umlaut mark
    s/\&\#240\;/ð/g;        #Small eth, Icelandic
    s/\&\#241\;/ñ/g;        #Small n, tilde
    s/\&\#242\;/ò/g;        #Small o, grave accent
    s/\&\#243\;/ó/g;        #Small o, acute accent
    s/\&\#244\;/ô/g;        #Small o, circumflex accent
    s/\&\#245\;/õ/g;        #Small o, tilde
    s/\&\#246\;/ö/g;        #Small o, dieresis or umlaut mark
    s/\&\#247\;/÷/g;        #Division sign
    s/\&\#248\;/ø/g;        #Small o, slash
    s/\&\#249\;/ù/g;        #Small u, grave accent
    s/\&\#250\;/ú/g;        #Small u, acute accent
    s/\&\#251\;/û/g;        #Small u, circumflex accent
    s/\&\#252\;/ü/g;        #Small u, dieresis or umlaut mark
    s/\&\#253\;/ý/g;        #Small y, acute accent
    s/\&\#254\;/þ/g;        #Small thorn, Icelandic
    s/\&\#255\;/ÿ/g;        #Small y, dieresis or umlaut mark
    s/^\s+//;
    return $_;
}

After making Ward's changes: enter image description here

share|improve this question
    
Could you take a picture of how it looks on your screen? That seems more clear than the output you wrote down (output you wrote down seems incomplete). –  Ward Muylaert Jan 28 '11 at 21:02
    
Ward - I've added a screenshot for what I've currently got, and what I'd like, above. I'll post the entirety of the code above in a moment - apologies if it's formatted incorrectly; for some reason using the "code" option results in the wrong formatting - someone fixed it the last time, thank you for that. –  begtognen Jan 28 '11 at 22:52
    
Is it possible you made an error copying that snippet? This part for(my $i=0; $i$emails) doesn't seem like valid perl code. –  Ward Muylaert Jan 28 '11 at 23:38
    
As far as I can tell, the script only reports the information. Your .conkyrc file is what determines how it is displayed. –  andrewsomething Jan 29 '11 at 1:56
    
(My apologies for the lack of carriage returns or code tag. Still unsure how to change that.) Ward - The new one has everything in the gmail.pl file. Here's where I found it: art.ubuntuforums.org/showthread.php?t=680265 Andrewsomething - Here's what the conkyrc file says: ${color white} ${color 000000}You have ${color 000000}${texeci 10 perl ~/.scripts/gmail.pl n} ${color 000000}new gmail(s). ${voffset -40}${font sans:style=bold:size=12}${color white}${execi 10 perl ~/.scripts/gmail.pl s} –  begtognen Jan 29 '11 at 12:07

1 Answer 1

up vote 1 down vote accepted

The relevant part to update can be found in this part of the script (taken from the link you provided and with "From:" and quotes edited out):

case "s" { #print $from and $subj for new email
    &gmail;
    if ($new>0){
        my $size=@from;
        if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
        for(my $i=0; $i<$size; ++$i){
            print "$from[$i]\n"; #print from line
            $text=$subj[$i]."\n";
            print wrap($initial_tab, $subsequent_tab, $text); #print subject with word wrap
        }
        $size=@from;
        if ($emails!=-1 && $size >$emails){print "$emails out of $size new emails displayed\n";}
    }
} 

What you want to do here is add a print for hr (conky's horizontal line) and edit the font around the subject using the font variable. Here's an example, note that I haven't been able to test it.

case "s" { #print $from and $subj for new email
    &gmail;
    if ($new>0){
        my $size=@from;
        if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
        for(my $i=0; $i<$size; ++$i){
            print "$from[$i]\n"; #print from line
            $text='${font sans:style=normal:size=10}'.$subj[$i].'${font}'."\n";
            print wrap($initial_tab, $subsequent_tab, $text); #print subject with word wrap
            print '${hr}' . "\n";
        }
        $size=@from;
        if ($emails!=-1 && $size >$emails){print "$emails out of $size new emails displayed\n";}
    }
}   

The ${font} at the end of the subject should return things to the surrounding font as far as I know. If not, you may need to set your bolder font again after the last closure.

share|improve this answer
    
I replaced Case S with your code, and you can see the results above in my original question. It seems like Conky isn't seeing it as code, maybe...? I really appreciate your help, by the way. –  begtognen Jan 29 '11 at 16:51
    
@begtognen Ah, apparently you need to change your .conkyrc accordingly for that. Replace ${execi 10 perl ~/.scripts/gmail.pl s} with ${execpi 10 perl ~/.scripts/gmail.pl s}. See the caveats of execpi at Conky Objects page. –  Ward Muylaert Jan 29 '11 at 17:12
    
Aha! You're absolutely right. Changing it to execpi worked beautifully. I wasn't able to get "hr" to work, but that's no big deal; I just used "_________". Thanks so much for your time and expertise! –  begtognen Jan 29 '11 at 17:29
    
Ah, forgot that the hr has to be a var too, fixed now. –  Ward Muylaert Jan 29 '11 at 17:36
    
Perfect. And yes, I did need to set the bolder font again after the last closure. –  begtognen Jan 29 '11 at 18:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.