Et maintenant un peu plus de précisions sur l'algo qui me semble bien pour le copier/coller intelligent :

Admettons que 3 lignes entières soient sélectionnées :

[Tab][Tab]if a is None:

[Tab][Tab][Tab]return

[Tab]print'Hello')


1- Action copier:

Prendre le texte contenu des 3 lignes entières.

Tant que toutes les lignes du texte commencent par une Tab, supprimer une [Tab] en début de chaque ligne.

On supprime donc 1 seul [Tab] dans l'exemple en début de chaque ligne, car au delà, la dernière n'aurait plus de [Tab] à retirer.

Copier le texte ainsi obtenu dans le presse papier.

Dans l'exemple, ça serait :

[Tab]if a is None:

[Tab][Tab]return

print'Hello')


2- Action coller :

Récupérer le texte du presse papier.

Supprimer les [Tab] en tête de la première ligne  puis coller cette ligne à l'endroit du curseur.

Puis coller les lignes suivantes en respectant le delta d'indentation du texte récupéré du presse-papier.


3- Traitement d'autres cas :


Cas 1:

Si la sélection ne démarre pas dès le début de la première ligne, (par exemple début sélection juste avant le if) faire comme si elle démarrait au début malgré tout. En effet, l'algot est basé sur le point d'insertion pour le collage de la 1e ligne et sur les différences d'indentation entre les lignes qui doivent être respectées.


Cas 2:

Si la sélection démarre au milieu du texte de la première ligne, par exemple juste avant le mot "is", faire le même algo de copie en supprimant le texte du début de la ligne non sélectionné, mais pas les [Tab] ! Puis coller de la même manière que l'algo.

Dans cet exemple le presse papier contient donc :

[Tab]is None:

[Tab][Tab]return

print'Hello')


Cas 3 :

Si l'application des delta d'indentation au collage devait provoquer des indentations négatives, on laisse les lignes concernées sans indentation (à la marge). Évidemment, dans ce cas on perd la cohérence de l'indentation mais de toute manière, vu les conditions de la copie ou du collage, il est évident qu'on ne pouvait pas attendre de cohérence dans l'indentation.


Voilà. Quentin et les autres, dîtes-moi ce que vous en pensez. Les 2 idées générales de cet algo sont :

* on garde toujours un même delta d'indentation entre les lignes

* le texte collé ne commence jamais avec un espace ou une [Tab] après le point d'insertion du collage.


Évidemment, il faudrait à terme pouvoir désactiver cette fonctionnalité pour ceux qui traitent plus de texte que de code. Ou mieux encore, pouvoir la configurer en fonction du type de fichier ouvert (fichier code .py, .vbs, etc. vs. fichier .txt, .ini, etc.)


Allez j'arrête là. Dîtes-moi aussi si c'est pas clair du tout !


Bonne soirée.


Cyrille





Le 12/01/2018 à 22:26, Cyrille a écrit :

Je renvoie car pas sûr que le message soit passé.


Cyrille

-------- Message transféré --------
Sujet :         Re: [progliste] Re: Re : Re: C'est parti pour EdPy
Date :  Fri, 12 Jan 2018 18:04:06 +0100
De :    Cyrille <[email protected]>
Pour :  [email protected]



Hello


Juste pour répondre vite fait :

Oui c'est normal que je fasse un Tab de plus après un if en Python.
C'était pas une requête de ma part mais une simple description de mes
actions.

Comme tu dis, c'est la responsabilité du programmeur ou d'un plug-in
spécial Python.


Pour l'algo du copier/coller intelligent, j'ai une idée en tête mais il
faut que j'écrive ça proprement en prenant un peu de temps, donc plus
tard...

L'important est que tu sembles avoir les mêmes vues que moi sur le
sujet, ce qui me rassure.


Bonne soirée.


Cyrille




Le 12/01/2018 à 17:19, QuentinC a écrit :
> Hello,
>
> > 1- Navigation avec Alt+flèches haut ou bas:
> > Eviter de s'arrêter sur les lignes vides ou ne contenant que des > espaces ou tab.
>
> Ce sera corrigé dans la version suivante, je me suis aussi rapidement > rendu compte de ce petit inconvénient.
>
> > 3- Tant qu'on y est, mettre aussi un .txt avec le mail d'Abdel pour > l'installation.
>
> Ca ne sera plus nécessaire je pense, j'ai installé cx_Freeze.
> C'est un utilitaire comparable à Py2Exe, qui compile donc un projet > python dans un beau .exe avec toutes les DLL nécessaires. > Je vous mettrai même le script de compilation comme ça vous pourrez le > compiler vous-mêms si vous voulez.
>
> > 4- Copier / coller intelligent(le plus long pour la fin) :
> > Pour moi il faudrait que quelle que soit la sélection de départ, le > delta d'indentation entre les lignes collées reste le même, ce qui > n'est pas toujours le cas dans la version actuelle.
>
> C'est pourtant bien ce que j'ai prévu.
>
> > Donc si je sélectionne depuis le début de la ligne 3 (donc en > incluant les 2 premières [tab])  ou si je sélectionne à partir de la > 2e [tab] incluse seulement ou si je sélectionne à partir du if (donc > en excluant les 2 [tab] j'aimerais que cela n'ait pas d'impact sur ce > qui est collé.
>
> Par contre ici, tu fais bien de soulever ce point, c'était une de mes > questions en suspens. > FAut-il alors automatiquement corriger la sélection de sorte qu'elle > commence au début de la ligne en incluant toujours les tabs, dès lors > qu'elle s'étend sur plusieurs lignes ? > J'ai peur qu'il y ait des inconvénients dans certaines situations si > on fait ça.
>
> Dans la version actuelle il n'y a pas de correction. Ce qui fait que > le résultat sera effectivement différent si les tabs étaient > sélectionnés ou non lors de la copie.
>
> > Enfin au moment du collage, le if doit être collé juste à l'endroit > du curseur, indépendamment du fait que des [tab] aient été > sélectionnées ou pas sur la ligne d'en-tête.
>
> On reste sur la même question en fait. Ca peut arriver que le if ne > soit pas collé immédiatement derrière le curseur s'il est plus indenté > que les lignes suivantes. > ce n'est effectivement pas très malin, mais je pense qu'en résolvant > le point précédent on résoudra aussi ce cas.
>
> > Donc dans l'exemple, si le curseur est à la fin du fichier, pour > coller et faire un code correct, il faut que je fasse [tab] une fois > puis que je colle (Ctrl+V) afin d'otenir un code bien indenté.
>
> Ca par contre c'est normal. Je ne suis pas censé savoir, et à ce stade > je n'ai pas à le savoir ou essayer de le deviner, que tu passes à la > ligne après un if et que tu veux potentiellement ajouter un tab. > On pourra par contre envisager quelque chose quand on fera un plugin > spécial python, qui pourrait détecter que si on fait enter à la fin > d'une instruction if, il ajoute l'indentation automatiquement.
> J'y réfléchis, mais patience !
> Progliste :
> Pour se d�sinscrire de la liste : > mailto:[email protected]?subject=unsubscribe
>
> Pour voir les archives de la liste :
> http://www.mail-archive.com/[email protected]/
>
> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est > limit� � 2 MO
> Pour acc�der aux fichiers de la liste
> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
> Ou en utilisant la nouvelle page de partage :
> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en > priv�, je vous r�pondrez en priv�.
>
>


Répondre à