Как изменить цвет ссылок в 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 работает и с запросами. Это было бы чище, чем два блока событий в моих глазах. До этого приведенный выше код должен представлять собой лучшее из обоих.