by yatto » 28 Oct 2011, 21:35
[EDIT: ERROR FIXED. Une variable était modifiée un peu plus haut dans le code, ce qui faussait tout.]J'ai un problème? (Etonnant, non?)
Ce code devrait supprimer la partie sélectionnée.
selx, sely: la position du curseur quand on a commencé la sélection
x,y: la position actuelle du curseur
buffer[x]: la ligne x du texte.
- Code: Select all
if sely<y then
buffer[sely]=buffer[sely]:sub(0,selx) --on supprime dans buffer[sely] ce qu'il y a à droite de selx.
k=sely+1
while k<y do -- tant que la ligne juste après sely est plus petite que y
table.remove(buffer,k) -- on supprime la ligne juste après sely
y=y-1 -- on s'autorise a modifier directement y ici parce que comme ça on modifie directement la position du curseur, pour éviter d'arriver dans le vide. le curseur remonte d'une ligne.
end
buffer[y]=buffer[y]:sub(x+test(x~=0)) -- de la dernière ligne avec le curseur, on ne garde que ce qui est à droite du curseur (test(x~=0)=1 si vrai, =0 si faux)
end
A la place de supprimer tout ce qui est sélectionné, la seule chose qui est supprimée, c'est le caractère en position selx, sely. Pourquoi?
En sachant que, quand on fait la sélection en commençant en bas et en remontant, le code exécuté:
- Code: Select all
if sely>y then
buffer[y]=buffer[y]:sub(0,x)
k=y+1
while k<sely do
sely=sely-1
table.remove(buffer, k)
end
buffer[l]=buffer[l]:sub(selx+test(selx~=0)) -- le +test est juste une sécurité contre une erreur si on fait une sélection vide (meme si personne ne ferait de selection vide, hein!)
end
ca marche, ça, ça marche très bien...
j'ai même fait encore autre chose: j'ai remplacé le code 1 par le code 2, en inversant juste avant les valeurs selx/y et x/y avec: selx, sely, x, y = x, y, selx, sely... Toujours le même résultat.
Où est l'erreur?
[EDIT: ERROR FIXED.]
Last edited by yatto on 29 Oct 2011, 13:37, edited 1 time in total.