如何更改mIRC中链接的颜色?

时间:2011-02-01 19:25:28

标签: colors hyperlink irc mirc

在mIRC中,我希望所有链接看起来像html链接(蓝色带下划线),因此它们会在频道和消息中突出显示。我确定我必须写一个远程脚本,但我不确定代码是什么。

3 个答案:

答案 0 :(得分:2)

更新:这适用于文本中匹配的第一个网址。我无法使用多个链接。

  

请注意,修改通道输出有几个副作用,最值得注意的是多个空格将压缩为一个(类似于HTML中处理空白的方式)。如果您正在使用修改通道输出的任何其他脚本,则可能会干扰甚至覆盖这些脚本。

我之前没有处理过mIRC的RegEx功能,所以可能有更简洁的方法:

on ^*:TEXT:*:#:{
  set -u %tmp.match /((ht|f)tp[s]?:\S+)/i
  if ($regex(links, $1-, %tmp.match) > 0) {
    set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
    echo $timestamp $chan < $+ $nick $+ > %tmp.text
    halt
  }
}

注意: set -u在脚本运行后删除变量,$chr(3)是颜色的控制代码,12是URL Blue的颜色编号, $chr(31)是下划线的控制代码。

答案 1 :(得分:2)

mIRC'捕手'遵循以下规则:

从帮助文件(/ help catcher):

  

mIRC查找以“http://”,“ftp://”,“gopher://”,“www。”和“ftp。”开头的网址。如果地址已经存在,mIRC还会检查以确保地址不会添加到列表中。超过256个字符的地址将被忽略。

如在另一个答案中所述,修改默认行为将导致间距压缩效果,但对于此脚本不应该是太多问题,因为它只会在显示URL时触发。 (另外,我使用&amp;前缀,这将使mIRC禁用该事件,以防另一个脚本执行更早的默认文本更改并执行/ haltdef)

;this is actually needed to bypass mIRC's parsing behavior of strtok(str, ":")
alias urlreg return /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig

;the coloring alias, blue (12), underline (31)
alias urlcolor return $+($chr(3), 12, $chr(31), $1-, $chr(31), $chr(3))

;trigger for the regex event only
on ^&$*:text:$($urlreg):*:{
  ;if we are in a channel, turn nick into @nick if applicable
  var %nick = $iif($chan, $nick($chan, $nick).pnick, $nick)

  ;color all the linkes using the predefined alias above
  var %msgs = $regsubex($1-, $urlreg, $urlcolor(\t))

  ;print the message, default timestamp, highlighting options, and nick coloring
  echo -tcrl normal $iif($chan, $v1, $nick) $+(<, %nick, >) %msgs

  ;prevent mIRC's default echo
  haltdef
}

将转向:

  

&LT; @ FooBar的&GT; a b c www.example.com a b c www.example.com a b c www.example.com

成:

  

&LT; @ FooBar的&GT; a b c ^ 12www.example.com a b c ^ 12www.example.com a b c ^ 12www.example.com

修改

我在原始答案中使用$ target无效,导致了commander_keen描述的问题。现在应该修复它。

答案 2 :(得分:1)

我只是想补充一点,它需要使用// echo才能让文本输出到我正确的频道,否则文本将被发送到状态窗口左右。

此外,我会添加-bf和-m参数将消息视为普通用户消息,并应用默认的闪烁/哔声设置,否则消息将不会使消息表现为好像有新消息。

所以对于jnpcl的脚本总结为//echo -bfmtrl,甚至尊重时间戳设置(即-t

Wiz的解决方案也可能从其中的一些变化中获益。

亲切的问候

PS:jnpcl的脚本滞后于没有http://的www-links的URL突出显示,但在查询窗口中突出显示。最后一个问题当然可以通过在on ^*:TEXT:*:?:{添加第二个//echo -bfmtl $nick < $+ $nick $+ > %tmp.text块来轻松解决,但我想知道是否可以在一个ON:TEXT处理程序中完成。

不幸的是,Wiz的脚本总是在检测到查询中的链接并且查询中的文本保持原样时发送到状态窗口。似乎$target对查询没有预期效果,它使用自己的缺口,但我不知道解决方案。 所以在jnpcl的代码中使用Wiz的正则表达式以及上面提到的改进最终会出现在通道中的以下工作代码和http和www链接等的查询中:

;URL highlighting for channels
    on ^*:TEXT:*:#:{
      set -u %tmp.match /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig
      if ($regex(links, $1-, %tmp.match) > 0) {
        set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
        //echo -bfmtlr $chan < $+ $nick $+ > %tmp.text
        halt
      }
    }

;URL highlighting for queries
    on ^*:TEXT:*:?:{
      set -u %tmp.match /((?:(?:(?:http|ftp|gopher)\72\/\/)|(?:www|ftp)\.)\S+)/Sig
      if ($regex(links, $1-, %tmp.match) > 0) {
        set -u %tmp.text $regsubex(links, $1-, %tmp.match, $chr(31) $+ $chr(3) $+ 12 $+ \t $+ $chr(3) $+ $chr(31))
        //echo -bfmtlr $nick < $+ $nick $+ > %tmp.text
        halt
      }
    }

我很高兴看到Wiz的解决方案也适用于查询。那比我眼中的两个事件块更干净。在此之前,上述代码应该代表两者中的最佳代码。