Как изменить цвет ссылок в mIRC? - PullRequest
2 голосов
/ 01 февраля 2011

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

Ответы [ 3 ]

2 голосов
/ 20 мая 2011

MIRC 'catcher' следует следующим правилам:

Из файла справки (/ 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.Теперь это должно быть исправлено.

2 голосов
/ 17 марта 2011

Обновление: Это работает для первого 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) - это элемент управления. Код для подчеркивания.

1 голос
/ 22 мая 2011

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

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

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

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

с уважением

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

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

...