2

mIRCでは、すべてのリンクをhtmlリンク(下線付きの青)のように見せて、チャネルやメッセージで目立つようにします。リモートスクリプトを作成する必要があることは確かですが、コードがどうなるかはわかりません。

4

3 に答える 3

2

更新:これは、テキストで一致した最初のURLで機能します。複数のリンクでうまく機能させることができませんでした。

チャネル出力の変更にはいくつかの副作用があることに注意してください。特に、複数のスペースが1つに凝縮されることです(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)の制御コード、12URL青の色番号、および$chr(31)下線の制御コードです。

于 2011-03-17T18:41:06.530 に答える
2

mIRCの「キャッチャー」は次のルールに従います。

ヘルプファイル(/ help catcher)から:

mIRCは、「http://」、「ftp://」、「gopher://」、「www。」、および「ftp。」で始まるURLを検索します。mIRCは、アドレスがすでに存在する場合、それらがリストに追加されていないことも確認します。256文字を超えるアドレスは無視されます。

他の回答で述べたように、デフォルトの動作を変更すると、間隔の圧縮効果が発生しますが、URLが表示されたときにのみトリガーされるため、このスクリプトではそれほど問題にはなりません。(さらに、別のスクリプトが以前のデフォルトのテキスト変更を実行して/ haltdefを実行した場合に、mIRCがイベントを無効にする&プレフィックスを使用しました)

;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の問題が説明されていました。これは修正されているはずです。

于 2011-05-20T11:12:44.970 に答える
1

テキスト出力を正しいチャネルに取得するには//echoを使用する必要があることを追加したかっただけです。そうしないと、テキストがステータスウィンドウなどに送信されます。

さらに、-bfおよび-mパラメータを追加して、メッセージを通常のユーザーメッセージとして扱い、デフォルトの点滅/ビープ設定を適用します。そうしないと、メッセージによってチャネルが新しいメッセージがあるかのように動作しなくなります。

つまり、//echo -bfmtrljnpclのスクリプトについては、タイムスタンプの設定を尊重していても、それは要約されます(これは-t

Wizのソリューションは、これらの変更のいくつかからも利益を得る可能性があります。

敬具

PS:jnpclのスクリプトは、http://のないwwwリンクのURL強調表示よりも遅れており、クエリウィンドウで強調表示されます。on ^*:TEXT:*:?:{もちろん、最後の問題は、で2番目のブロックを追加することで簡単に解決できますが、1つのハンドラー//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のソリューションがクエリでも機能するのを見てうれしいです。それは私の目には2つのイベントブロックよりもクリーンです。それまでは、上記のコードは両方の長所を表すはずです。

于 2011-05-22T18:42:05.513 に答える