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

Soyez le premier à donner votre avis sur cette source.

Vue 7 448 fois - Téléchargée 88 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

Ajouter un commentaire Commentaires
Messages postés
38
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
17 février 2009

Ah ;) J'avou que ce script la ( pour une fois ) est utile mon cher ArKanis ... c'est bien le premier (a).
Je plaisante. Plutot utile et le coté pratique y est très ... appréciable . A quand une nouvelle idée de génie ? (euréka).
Messages postés
16
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
3 septembre 2007

Bien coder, utile. j'ai envie de dire comme pas mal ici bravo :) c'est très bien penser, il ne me reste plus qu'à tester!
Messages postés
1052
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
30 novembre 2009
2
Oh :o

Voilà une idée qu'elle est bonne !

Tu devrais faire ça avec tout les mots de la langue française, et PAF le T9 !

Bravo en tout cas :)
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

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 :)
Messages postés
149
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
25 janvier 2011

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"?)
Afficher les 8 commentaires

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.