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

Soyez le premier à donner votre avis sur cette source.

Vue 7 793 fois - Téléchargée 108 fois

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

Ajouter un commentaire Commentaires
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
23 août 2007 à 23:18
Khaled Mardam-Bey ne t'a jamais demandé de travailler avec lui ?
c'est vraiment une idée géniale (peut-etre que ca existait deja, je sais pas ^^)
faut absolument que je teste ca (et je te préviendrai s'il y a des beugs, ce qui m'étonne).
Ai-je besoin de te dire "bonne continuation" ?
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
24 août 2007 à 02:45
et pourtant, il y en a encore (cf changelog)
A chacune des mises à jour, il devrait néanmoins y en avoir de moins en moins (enfin je l'espère !)

En tout cas ton commentaire me fait vraiment plaisir, merci :)
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
24 août 2007 à 15:01
l'idée est vraiment super sympa, et en plus c'est utile. fin bref j'kiff :). j'v tester ca.
doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011
25 août 2007 à 14:18
Voila le genre de code qu'on aimerais voir plus souvent, novateur et bien codé. Très bon travail (ai-je le droit de dire "comme d'habitude" et "j'ai hate de voir ta nouvelle source"?)
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
26 août 2007 à 01:34
Un bug vient d'être trouvé (concernant les [ ] sur le ON INPUT).
Il semblerait bien que ce soit le dernier !

A titre d'information, si vous souhaitez consulter quels sont les aliases que vous utilisez le plus souvent, vous pouvez taper / dans l'editbox (sans valider) et vous rendre sur l'onglet Window, fenêtre @Editb (c'est déjà classé)

Merci encore pour tous les messages d'encouragement :)

Je ne pense pas toucher à ce code prochainement, à moins que vous ayez des idées interessantes pour l'améliorer :)

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.