### The owlconf config file -*- perl -*- ### $Id$ ### !!!!!WARNING!!!!! !!!!!WARNING!!!!! !!!!!WARNING!!!!! !!!!!WARNING!!!!! ### This is an example file intended to demonstrate how to use ### various features of owl. Some of the key bindings, in particular, ### are more for examples than things you may actually want to use. ### Make sure to read through it first and understand it before just using it. ### Don't blame me if anything in here ends up vaporizing your dog. ### !!!!!WARNING!!!!! !!!!!WARNING!!!!! !!!!!WARNING!!!!! !!!!!WARNING!!!!! ### ### This file is interpreted by the perl interpreter. ### If you wish to execute an owl command use the ### function owl::command(). i.e. ### ### owl::command("set zsigproc /mit/kretch/bin/getzsig"); ### ### will set the owl variable zsigproc. Subroutines created with ### the names below will be executed at the specified times: ### ### subroutine name properties ### --------------- ---------- ### owl::startup() run when owl first starts ### owl::shutdown() run when owl exits ### owl::format_msg() run when a new message arrives, the return ### value is used to display the message on the ### screen ### owl::receive_msg() run when a message is received, and after ### it has been added to the message list ### ### ### The following variables will be set each time a message is recevied: ### ### $owl::class, $owl::instance, $owl::recipient, ### $owl::sender, $owl::opcode, $owl::zsig, ### $owl::msg, $owl::time, $owl::host, @owl::fields, $owl::id ### # tokens for sepbar are: # .username = ping # >username = login # 80); sepbartokens_set(); } # trims a sepbartoken from the list also updates the appendtosepbar variable sub sepbartokens_trim { my ($token) = @_; @sepbartokens = map { if ($_ ne $token) { $_; } else { (); } } @sepbartokens; sepbartokens_set(); } # trims a sepbartoken from the list also updates the appendtosepbar variable sub sepbartokens_set { owl::command(sprintf "set -q appendtosepbar \"%s\"", (join " ", @sepbartokens)); } my $restoreview = undef; sub swapview { my $curview = owl::command("getview"); if ($restoreview) { owl::command("view $restoreview"); $restoreview = undef; } else { $restoreview = $curview; owl::command("smartnarrow"); } } my $lastcolored = undef; sub colorthread { if ($lastcolored) { owl::command("filter $lastcolored -c default"); } my $smartfilt = owl::command("smartfilter"); if (!$smartfilt or $smartfilt eq $lastcolored) { owl::command("filter $lastcolored -c default"); $lastcolored = undef; } else { owl::command("filter $smartfilt -c green"); $lastcolored = $smartfilt; } } sub owl::startup { owl::command("set -q logging off"); owl::command("set -q zsigproc /home/nygren/bin/owlzsigs"); owl::command("set -q startuplogin off"); owl::command("set -q shutdownlogout off"); #owl::command("set personalbell on"); owl::command("set -q rxping on"); owl::command("set -q typewinsize 5"); if ($ENV{"DISPLAY"} eq ":0") { owl::command("set -q webbrowser galeon"); } owl::command("filter me recipient ".$ENV{"USER"}); owl::command("filter help class help"); owl::command("filter quiet not ( class ^greed|geek|help|login$ or instance white-magic )"); owl::command("alias z zwrite"); owl::command("alias zc zwrite -c"); # Send zephyrs with "C-c C-c". # Note that this will cause "C-c" to not work... owl::command("bindkey editmulti \"C-c C-c\" command editmulti:done"); # Make "d" ignore current movement direction owl::command("bindkey recv d command ( delete --no-move ; next --skip-deleted )"); # Useful keys for reading and deleting by class/instance owl::command("bindkey recv M-k command ( smartnarrow ; delete view )"); owl::command("bindkey recv M-l command ( expunge ; view all )"); owl::command("bindkey recv M-K command ( smartnarrow ; delete view ; expunge ; view all )"); # Toggle between a view and a smartnarrow with TAB. # Note that you probably want to use something other than TAB as # it will have another binding in a future version of owl. owl::command("alias swapview perl swapview();"); owl::command("bindkey recv C-i command swapview"); # color the current thread owl::command("alias colorthread perl colorthread();"); owl::command("bindkey recv M-c command colorthread"); # Make 'M-s' insert a sequence with a random # number of scritches. owl::command(q(bindkey edit M-s command perl owl::command("edit:insert-text <".("scritch"x int(1+rand(5))).">"))); } sub owl::shutdown { # not doing anything at the moment... } # run to format a message sub owl::format_msg { my $out, $tmp; $owl::sender=~s/\@ATHENA\.MIT\.EDU$//; $owl::sender=~s/\@local-realm$//; if (uc($owl::opcode) eq "PING") { return("\@bold(PING) from \@bold($owl::sender)\n"); } elsif (uc($owl::class) eq "LOGIN") { if (uc($owl::opcode) eq "USER_LOGIN") { $out="\@bold(LOGIN)"; } elsif (uc($owl::opcode) eq "USER_LOGOUT") { $out="\@bold(LOGOUT)"; } else { $out="\@bold(UNKNOWN)"; } $out.=" for \@bold($owl::sender) at $fields[0] on $fields[2]\n"; return($out); } elsif (uc($owl::class) eq "MAIL" and uc($owl::instance) eq "INBOX") { $out = "\@bold(MAIL) "; if ($owl::msg =~ /^From:\s+(.+)\s*$/m) { $out .= "From $1 "; } if ($owl::msg =~ /^To:\s+(.+)\s*$/m) { $out .= "To $1 "; } if ($owl::msg =~ /^Subject:\s+(.+)\s*$/m) { $out .= "Subject $1 "; } return($out."\n"); } $out = sprintf "[mit,%s,%s] / %s / %s", lc($owl::class), lc($owl::instance), $owl::time, lc($owl::host); if ($owl::opcode ne "") {$out.=" op:$owl::opcode";} $out.="\n"; $out.= " \@bold($owl::sender)> "; if ($owl::zsig ne "") { my $zsig = $owl::zsig; $zsig =~ s/(\n.*)+$/ [...]/; if (length($zsig)+5+length($owl::sender) > 70) { $out.="# ..."; } else { $out.="# $zsig"; } } $out.="\n"; # indent it $tmp=$owl::msg; $tmp=~s/^/ /g; $tmp=~s/\n/\n /g; $out.=$tmp; # make personal messages bold if (uc($owl::class) eq "MESSAGE" && uc($owl::instance) eq "PERSONAL") { $out="\@bold{".$out."}"; } return($out."\n"); } # run when a message is received, and after # it has been added to the message list. sub owl::receive_msg() { my $out, $tmp; $owl::sender=~s/\@ATHENA\.MIT\.EDU$//; $owl::sender=~s/\@local-realm$//; if (uc($owl::opcode) eq "PING") { sepbartokens_add(".$owl::sender"); owl::command("delete -id $owl::id"); } elsif (uc($owl::class) eq "LOGIN") { owl::command("delete -id $owl::id"); if (uc($owl::opcode) eq "USER_LOGIN") { sepbartokens_add(">$owl::sender"); sepbartokens_trim("<$owl::sender"); } elsif (uc($owl::opcode) eq "USER_LOGOUT") { sepbartokens_add("<$owl::sender"); sepbartokens_trim(">$owl::sender"); } } elsif (uc($owl::class) eq "MAIL") { owl::command("delete -id $owl::id"); sepbartokens_add("M"); } # make personal messages bold if (uc($owl::class) eq "MESSAGE" && uc($owl::instance) eq "PERSONAL") { sepbartokens_trim(".$owl::sender"); sepbartokens_add(":$owl::sender"); } return 1; }