Как изменить цвет ссылок в mIRC?

В mIRC я ​​хочу, чтобы все ссылки выглядели как ссылки html (синие с подчеркиванием), чтобы они выделялись в каналах и сообщениях. Я уверен, что мне нужно написать удаленный скрипт, но я не уверен, каким будет код.

3 ответа

Решение

Обновление: работает с первым URL-адресом в тексте. Я не мог заставить его работать с несколькими ссылками.

Обратите внимание, что изменение выходных данных канала имеет несколько побочных эффектов, наиболее заметным из которых является то, что несколько пробелов будут сжаты до одного (аналогично тому, как пробелы обрабатываются в HTML). Если вы используете любые другие сценарии, которые изменяют вывод канала, это может помешать или даже переопределить эти сценарии.

Я раньше не имел дело с функциями RegEx в mIRC, поэтому может быть более чистый способ сделать это:

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-адреса синий, и $chr(31) контрольный код для подчеркивания

MIRC "ловец" следует следующим правилам:

Из файла справки (/ help catcher):

mIRC ищет URL-адреса, начинающиеся с "http://", "ftp://", "gopher://", "www." и "ftp.". mIRC также проверяет, чтобы адреса не добавлялись в список, если они уже существуют. Адреса длиннее 256 символов игнорируются.

Как указано в другом ответе, изменение поведения по умолчанию вызовет эффект сжатия интервалов, но это не должно быть слишком большой проблемой для этого сценария, поскольку он будет срабатывать только при отображении URL-адреса. (Кроме того, я использовал префикс &, который заставит 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
}

получится:

<@FooBar> abc www.example.com abc www.example.com abc www.example.com

в:

<@FooBar> abc ^ 12www.example.com abc ^ 12www.example.com abc ^ 12www.example.com

Редактировать:

Мое использование $target было недействительным в моем первоначальном ответе, что привело к описанной проблеме commander_keen. Теперь это должно быть исправлено.

Я просто хотел добавить, что он требует использования //echo для получения вывода текста на правильный канал для меня, в противном случае текст будет отправлен в окно состояния или около того.

Кроме того, я бы добавил параметры -bf и -m для обработки сообщения как обычного пользовательского сообщения и применения настроек по умолчанию для мигания / звукового сигнала, в противном случае сообщение не заставит канал работать так, как если бы появилось новое сообщение.

Так что это подведет итог //echo -bfmtrl для сценария jnpcl, даже с учетом установки меток времени (это -t)

Решение Wiz может также извлечь выгоду из нескольких таких изменений.

С уважением

PS: скрипт jnpcl откладывает подсветку URL для www-ссылок без http:// и пока не выделяется в окнах запросов. Последняя проблема, конечно, может быть легко решена путем добавления второго on ^*:TEXT:*:?:{ блокировать с //echo -bfmtl $nick < $+ $nick $+ > %tmp.textИнтересно, можно ли это сделать за один ON:TEXT Handler.

Сценарий Wiz, к сожалению, всегда заканчивается отправкой в ​​окно состояния, когда обнаружена ссылка в запросе, а текст в запросе остается без изменений. Похоже на $target не работает должным образом для запросов, он использует собственный ник, но я не знаю решения для этого. Таким образом, использование регулярного выражения Wiz в коде jnpcl с упомянутыми выше улучшениями заканчивается на следующем рабочем коде в каналах AND, запросах на ссылки 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 работает и с запросами. Это было бы чище, чем два блока событий в моих глазах. До этого приведенный выше код должен представлять собой лучшее из обоих.

Другие вопросы по тегам