Difference between revisions of "How to make your own theme"

From Scriptwiki
Jump to: navigation, search
m (Creating new tutorial on crating themes, stub page)
 
m
Line 1: Line 1:
Making your own theme...
+
== 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 <nowiki>www. or http://</nowiki>
 +
  if ($regex(%line,(<nowiki>\bwww\.|http:\/\/</nowiki>))) {
 +
 +
    var %x = 1
 +
 +
    ;loop through the line
 +
    while (%x <= $numtok(%line,32)) {
 +
 +
      ;check if a link is found
 +
      if ($regex($gettok(%line,%x,32),(<nowiki>www\.|http:\/\/</nowiki>))) {
 +
        ;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
 +
    }
 +
  }
 +
}
 +
 
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]

Revision as of 17:18, 2 October 2006

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 
   }
 }
}