How to make your own theme

From Scriptwiki
Revision as of 17:18, 2 October 2006 by Cail (talk | contribs)

Jump to: navigation, search

Start

We'll start off with some variables, these all need to be set for theme to work

alias setvars {
 ;color of timestamp
 set %color_timestamp 03

 ;color of @-prefix
 set %color_op 10

 ;color of +-prefix
 set %color_voice 11

 ;color of %-prefix
 set %color_hop 06

 ;color of nick 
 set %color_nick 14

 ;color of highlight line
 set %color_highlight 04

 ;color of link
 set %color_link 07

 ;color of left and right delimiters ie: <nick>
 set %color_delimiter 05

 ;color of a system message
 set %color_sysmsg 04

 ;color of system message delimiter ie: !highlight>
 set %color_system_delimiter 05

 ;left delimiter of system messages
 set %delimiter_system_left !

 ;right delimiter of system messages
 set %delimiter_system_right >

 ;left delimiter of timestamp
 set %delimiter_timestamp_left (

 ;right delimiter of timestamp
 set %delimiter_timestamp_right )

 ;left delimiter of nick
 set %delimiter_left (

 ;right delimiter of nick
 set %delimiter_right )
}

Helpful aliases

These aliases are meant to make things easier with the theme

$clr

First we have clr alias (short for color), so we don't have to use ctrl+k in the script, just $clr(control code), ie. $clr(03) is the same as ctrl+k 3

alias clr { return $+($chr(3),$iif($len($1) == 1,$+(0,$1),$1)) }

$urlc

Then an alias which underlines and colors links

alias urlc {
 ;assign $1- into a variable
 var %line = $1-

 ;check with regex if the line includes www. or http://
 if ($regex(%line,(\bwww\.|http:\/\/))) {

   var %x = 1 

   ;loop through the line
   while (%x <= $numtok(%line,32)) { 

     ;check if a link is found
     if ($regex($gettok(%line,%x,32),(www\.|http:\/\/))) { 
       ;put some colors and underline to the link, $chr(31) is the underline
       var %l2 = $+($clr(%color_link),$chr(31),$gettok(%line,%x,32),$chr(31),$clr)

       ;replace the old link with the new, colored one
       %line = $puttok(%line,%l2,%x,32)
     } 
     inc %x 
   }
 }
 return %line
}

$modeprefix

An alias to return colored modeprefix of a nick, usage: $modeprefix($nick,$chan)

alias modeprefix {
 ;we will uset $matchtok to find out if modeprefix is one of @,+ or %
 ;and then replace to color them
 ;if you don't like the space between left delimiter and nick when there's no mode
 ;change the $chr(160) to $chr(32) or leave it blanc

 return $iif( $&
   $matchtok(@.+.%,$left($nick($2,$1).pnick,1),1,46), $&
   $replace($ifmatch, $&
   @,$+($clr(%color_op),@,$clr), $&
   +,$+($clr(%color_voice),+,$clr), $&
   %,$+($clr(%color_hop),%,$clr) $&
   ),$chr(160))
}

$theme_nick

An alias to return nick with modeprefix and delimiters, ie. (@Cail)

alias theme_nick {
 ;this alias return colored timestamp, modeprefix, nick
 ;with custom delimiters

 return $+( $&
   $clr(%color_delimiter),%delimiter_left, $&
   $modeprefix($1,$chan), $&
   $clr(%color_nick),$1, $&
   $clr(%color_delimiter),%delimiter_right, $&
   $clr $&
   )
}

$theme_system

An alias, same as Theme_nick but return system messages, ie. (join) with colors

alias theme_system {
 ;this alias returns colored system messages. ie: highlight, topic, etc.
 ;with custom delimiter

 ;use the mirc event colors for text color
 if ($event) && ($event != text) { var %event_color = $color($event) }

 return $+( $&
   $clr(%color_system_delimiter),%delimiter_system_left, $&
   $clr(%color_sysmsg),$1, $&
   $clr(%color_system_delimiter),%delimiter_system_right, $&
   $clr(%event_color) $&
   )
}

Events

These are the modified events to prevent the mirc default text with haltdef, and echo messages the way we want.

On Start

For on start event, i only set the timestamp at this point.

on *:start:{ 
 ;we'll set this timestamp everytime when you start mirc, so the colors won't disappear

 .timestamp -f $+( $&
   $clr(%color_timestamp),%delimiter_timestamp_left, $&
   HHnn ss, $&
   %delimiter_timestamp_right, $&
   $clr) 
}

On Input

Replacing our own input.

on *:INPUT:*: {
 ;we will check that ctrl wasn't pressed while pressing enter, and that it's not a command
 if ($left($1,1) === $readini(mirc.ini,text,commandchar)) && (!$ctrlenter) { return }

 ;halt the default actions
 haltdef
 ;we'll put the line into a variable, in case we want to modify it for the echo
 ;in this case i have an alias called urlc, that underlines and colors links
 var %line = $urlc($1-)

 ;here is the part what we send as msg, we want to send $1- and not the variable
 .msg $target $1-

 ;then we have the echo, where i'm also using my own alias theme_nick, which returns
 ;modeprefix, and the brackets around the nick
 echo -at $theme_nick($nick) %line 
}

On Text (channel)

Replacing incoming text from a channel.

on ^*:TEXT:*:#: {
 ;again halt the default actions and assign $1- into a variable
 haltdef
 var %line = $urlc($1-)

 ;a regular expression to check if the line contains your nick
 ;triggers for Cail, Caili, Cail:, basically nick + 1 character
 if ($regex($1-,$+(/\b,$me,.?\b/i))) {

   ;if the active window isn't the same as the window where the highlight was; echo it to the active
   if ($active != $chan) { echo -at $theme_system(highlight) $+($clr(4),$chan,/,$nick,:) %line }

   echo -mt $chan $theme_nick($nick) $+($clr(%color_highlight),%line)
 }
 else {
   echo -mt $chan $theme_nick($nick) %line
 }
} 

On Text (query)

Replacing incoming text from query.

on ^*:TEXT:*:?: {
 ;halt default actions, and set  $1- into a variable
 haltdef
 var %line = $urlc($1-)

 echo -mt $nick $theme_nick($nick) %line
}

On Action

Replacing action texts.

on ^*:ACTION:*:*: {
 haltdef

 ;if you like to see actions like: timestamp * nick does stuff, you can add ; infront of the 1st line and
 ;take it off from the 2nd

 echo -mt $iif($chan,$chan,$nick) $theme_system(action) $nick $1-
 ;echo -mt $iif($chan,$chan,$nick) $+($clr($color(Action text)),*) $nick $1-
}

On Join

Replacing join events.

on ^*:JOIN:#: { 
 haltdef

 ;if it's you who joins the chan, echo "You have entered #channel"
 if ($nick == $me) {
   echo -t $chan $theme_system(join) You have entered $chan
 }

 ;else if the nick has quit setting usermode +x
 ;show "Nick sets usermode +x" instead of quit and join
 elseif ($($+($(%registered.,0),$cid,.,$nick),2)) {
   echo -t $chan $theme_system(usermode) $nick sets usermode +x
 } 

 ;else show the normal join
 else {
   echo -t $chan $theme_system(join) $nick $site 
 }
}

On Part

Replacing part events (! means it won't trigger if you part).

on !^*:PART:#: {
 ;this event only triggers if someone else parts
 haltdef
 var %message = $1-
 echo -t $chan $theme_system(part) $nick $site %message
}

On Quit

Replacing quit events, "Registered quits" aren't shown.

on ^*:QUIT: {
 haltdef

 ;check if the quit message is "registered", this means the user is setting usermode +x
 ;we don't show the quit here, we only show "Nick sets usermode +x" when the user joins back

 if ($1 == registered) { 
   set -u5 $($+($(%registered.,0),$cid,.,$nick),1) $true
 } 
 ;else the quit is normal, and is looped through $comchans
 ;and echoed into each channel

 else { 
   var %message = $1-
   var %x = 1
   while ($comchan($nick,%x)) {
     echo -t $comchan($nick,%x) $theme_system(quit) $nick $site %message 
     inc %x 
   }
 }
}