Editb - aliases favoris dans l'editbox (suggestion, completion)

Description

Ce code mémorise tous les aliases entrés dans l'editbox de chaque fenêtre pour vous les reproposer si vous commencez à taper un alias qui débute de la même façon.
Vous pouvez y ajouter, au choix :
- ceux de mIRC (/kick,/nick,...)
- les aliases contenus dans vos remotes
Vous pouvez très bien choisir d'en ajouter aucun (auquel cas seuls les aliases que vous aurez rentré vous-même apparaîtront).

Il utilise un système de statistiques pour essayer de vous proposer celui qui correspond au mieux au début d'alias que vous avez tapé (bêtement en proposant le plus utilisé).

Par exemple, /echo a été utilisé 15 fois et /ebeeps 9. En commençant la ligne par /e, vous aurez /echo qui va remplacer l'ancien editbox, mais qui va séléctionner la chaîne "cho", vous permettant de continuer à écrire en écrasant la suggestion.

Vous pouvez de plus faire "tourner" les suggestions en utilisant TAB de la même façon que vous le faisiez pour les nicks sur un salon.

Tapez /editb si l'alias ne s'est pas déclenché au début (il s'agit d'un ON START donc si vous avez c/c le code sans le charger, vous devrez le faire).
Tapez /editb.uninstall si vous souhaitez supprimer le fichier Edit.ini qui contient toutes les statistiques.

Source / Exemple :


;************************
;EditB - Aliases Favoris
;      Par ArKanis
; http://www.arkanis.eu
;************************
;v1.3

on *:start:editb
alias editb {
  .timereditb -mo 1 100 editb
  if (!$hget(Editb)) {
    hmake Editb 100
    if ($exists(Edit.ini)) hload -i Editb Edit.ini Commands
    else {
      var %i = 1, %a = $script(0)
      if (!$?!="Souhaitez-vous inclure les aliases contenus dans vos remotes ?") var %a = 0
      while %i <= %a {
        tokenize 32 $script(%i)
        if ($exists($1-)) filter -fkg $qt($1-) editb.ht ^alias [^-l]
        inc %i
      }
      var %l1 = abook ajinvite alias aline ame amsg anick aop auser autojoin avoice $&
        away background ban bcopy beep bread break breplace bset btrunc bunset bwrite channel
      var %l2 = clear clearall cline clipboard close color comclose comopen comreg continue copy creq $&
        ctcpreply ctcps dcc dccserver dde ddeserver debug dec describe dialog did didtok disable
      var %l3 = disconnect dlevel dline dll dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect $&
        drawreplace drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable events
      var %l4 = exit fclose filter findtext finger firewall flash flist flood flush flushini font fopen fseek $&
        fsend fserv fserve fullname fwrite ghide gload gmove gopts goto gplay gpoint gqreq groups gshow
      var %l5 = gsize gstop gtalk gunload guser hadd halt haltdef hdec hdel help hfree hinc hload hmake hop hsave $&
        ial ialclear ialmark identd if ignore iline inc invite iuser join kick linesep links list load
      var %l6 = loadbuf localinfo logmdi me mkdir mnick mode msg nick noop notice notify omsg onotice part partall $&
        pdcc perfom play playctrl pop protect pvoice qme qmsg query queryrn quit raw reload remini remote
      var %l7 = remove rename renwin reseterror resetidle return returnex rlevel rline rmdir run ruser save savebuf $&
        saveini say scid scon server set showmirc signal sline sockaccept sockclose socklist socklisten
      var %l8 = sockmark sockopen sockpause sockread sockrename sockudp sockwrite sound speak splay sreq strip timer $&
        timerstamp titlebar tnick tokenize toolbar topic tray ulist unload unset unsetall updatenl url uwho
      var %l9 = var vcadd vcmd vcrem vol while whois window winhelp write writeini, %i = 1, %m = 9
      if (!$?!="Souhaitez-vous inclure les aliases officiels de mIRC ?") var %m = 0
      while %i <= %m {
        var %l = $($+(%,l,%i),2), %m = $numtok(%l,32), %t = 1
        while %t <= %m {
          editb.ht $gettok(%l,%t,32)
          inc %t
        }
        inc %i
      }
      hsave -i Editb Edit.ini Commands
    }
  }
  scid $activecid
  var %a = $replace($active,$chr(32),_), %o = $hget(EditbAct,%a), %c = $editbox($active), %l = / $readini(mirc.ini,text,commandchar), %i = 1
  tokenize 32 $replace(%c,$chr(91),$chr(165),$chr(93),$chr(166))
  if (!$1) hadd -m EditbAct %a 1
  if (!$istok(%l,$left($1,1),32)) return
  var %l = $addtok(%l,.,32)
  while $istok(%l,$left($1,1),32) {
    tokenize 32 $right($1-,-1)
    inc %i
  }
  hadd -m EditbAct %a $editbox($active).selstart
  if (($len($1) > $calc(%o - %i)) || (!$hget(EditbPro,%a))) {
    if ($hget(Editb,$1) != $null) return
    var %s = $editbox($active).selstart
    if (($len($1) >= 0) && (%s > $calc($len($1) +1))) {
      if ($hget(EditbPro,%a)) hdel EditbPro %a
      if (!$exists(Edit.ini)) return
      var %r = $+($replace($1,.,\.,?,\?,+,\+),.*), %p, %w = 0
      window -h @Editb
      filter -cgfwa Edit.ini @Editb edit.c $+(/^,%r,=[0-9]+/i)
      var %re = $line(@Editb,1), %m = $line(@Editb,0), %d = 2
      while (!$regex(%re,/^([^=]+)=[0-9]+$/i)) {
        var %re = $line(@Editb,%d), %d = %d + 1
        if (%d > %m) break
      }
      if ($regml(1)) {
        var %t = $+($left($editbox($active),$calc(%i -1)),$replace($regml(1),$chr(165),$chr(91),$chr(166),$chr(93)))
        if ($hget(EditbAct,%a) >= %s) dec %i $calc($v1 - $v2)
        editbox $+(-ab,$calc($len($1) + %i),e,$calc($len(%t) +1)) %t $2-

      }
      else var %t = $gettok($editbox($active),1,32)
      hadd -m EditbPro %a %t
      hadd -m EditbAct %a %s
      hadd -m EditbSel %a $left($1,%s)
    }
  }
}
alias -l editba return $editbox($active)
alias editb.uninstall {
  .timereditb* off
  var %l = Editb EditbAct EditbPro EditbSel, %t = 1
  while $gettok(%l,%t,32) {
    if ($hget($v1)) hfree $v1
    inc %t
  }
  if ($exists(Edit.ini)) .remove Edit.ini
  if ($window(@Editb)) window -c $v1
  echo 2 -at * Tapez /load -rs $qt($script) pour décharger le code
}
on *:unload:editb.uninstall
alias -l edit.c {
  var %1 = $gettok($1,2,61), %2 = $gettok($2,2,61)
  if (!%1) return 1
  if (!%2) return -1
  if (%1 > %2) return -1
  else return 1
}
alias -l editb.ht {
  tokenize 32 $1-
  var %m = $replace($iif($2,$2,$1),$chr(91),$chr(165),$chr(93),$chr(166))
  if (!$hget(Editb,%m)) hadd -m Editb %m 0
}
on *:input:*:{
  if ($mouse.key & 2) return
  var %l = / $readini(mirc.ini,text,commandchar), %s
  if (!$istok(%l,$left($1,1),32)) return
  var %l = $addtok(%l,.,32)
  while ($istok(%l,$left($1,1),32))  tokenize 32 $right($1-,-1)
  if ($1 == editb.uninstall) return
  hinc -m Editb $1
  if ($hget(Editb,$1) == 1) var %s = 1
  hinc -m EditbAct C
  var %a = $replace($target,$chr(32),_)
  editb
  if ($hget(EditbPro,%a)) hdel EditbPro %a
  if ($hget(EditbAct,%a)) hdel EditbAct %a
  if (!$calc($hget(EditbAct,C) % 5)) var %s = 1
  if (%s) editb.s
}
alias -l editb.s if ($hget(Editb)) hsave -i Editb Edit.ini Commands
on *:exit:if ($hget(Editb)) hsave -i Editb Edit.ini Commands
raw 421:*:{
  if ($hget(Editb,$2)) hdel Editb $2
  editb.s
}
on *:tabcomp:*:{
  var %l = / $readini(mirc.ini,text,commandchar), %e = 0
  if (!$istok(%l,$left($1,1),32)) return
  var %l = $addtok(%l,.,32)
  while $istok(%l,$left($1,1),32) {
    tokenize 32 $right($1-,-1)
    inc %e
  }
  scid $activecid
  tokenize 32 $replace($1-,$chr(91),$chr(165),$chr(93),$chr(166))
  var %a = $replace($target,$chr(32),_), %s = $editbox($target).selstart
  if (%s > $calc($len($1) + %e +1)) return
  var %p = $1, %q = $left(%p,$calc(%s - %e -1)), %r = $+($replace(%q,.,\.,?,\?,+,\+),.*), %b
  window -h @Editb
  if ($hget(EditbSel,%a) != %q) {
    if (!$exists(Edit.ini)) return
    filter -cgfwa Edit.ini @Editb edit.c $+(/^,%r,=[0-9]+/i)
    hadd -m EditbSel %a %q
  }
  var %f = $fline(@Editb,$+(%p,=*),1)
  if ($+($1,=*) !iswm $line(@Editb,%f)) var %b = 1
  if ($mouse.key & 1) {
    var %i = $calc(%f - 1)
    if ((%b) && (%f)) inc %i
    if (%i <= 0) var %i = $line(@Editb,0)
  }
  else {
    var %i = $calc(%f + 1)
    if ((%b) && (%f)) dec %i
    if (%i > $line(@Editb,0)) var %i = 1
  }
  var %t = $gettok($line(@Editb,%i),1,61)
  if (%t) {
    var %t = $+($left($editbox($target),%e),$replace($+(%q,$right(%t,$calc($len(%t) + %e +1- %s))),$chr(165),$chr(91),$chr(166),$chr(93)))
    editbox $+(-ab,$calc(%s),e,$calc($len(%t) +1)) %t $2-
    hadd -m EditbPro %a %t
  }
  halt
}
;End Of File

Conclusion :


Il a grossièrement la même utilité que l'add-on qu'avait proposé fjxokt, sauf que celui-cç n'affiche pas les suggestions au dessus de l'editbox, mais fonctionne à la manière d'Internet Explorer (7.0 je crois)

Pas de bugs connu (grâce à la participation active de Wims pour les dénicher :D). Merci à lui.

Pour toute question, suggestion, remarque, n'hésitez pas ^^

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.