Coucou Seb !


Très malin en effet ! C'est quand on lit ce code qu'on se rend compte que 
c'était 
évident, et qu'on se demande pourquoi on n'y avait pas pensé. Si on part du 
principe que la première ligne de la sélection est unique, ou même dans le 
cas contraire, on peut soit-même ajoutter un élément qui le rende unique, 
ton script est plus pratique que le mien.

Et de plus, il fonctionne sur les pages web contrairement au mien. J'ai 
compris pourquoi : c'est parce que j'avais restreint l'exécution au pc 
cursor.





Je me suis permis de tester ton code dans plusieurs environnements. Le 
résultat est globalement satisfaisant ; mais j'ai rencontré cependant 
quelques problèmes. A savoir :



* Dans certains éditeurs, ne sélectionne pas la première ligne, si cette 
dernière se trouve au début du document ;

* Ne fonctionne pas dans l'éditeur de code du Visual studio 2008 ;

* Ne fonctionne pas dans l'éditeur de code du vb6;



Raison pour laquelle, entre autres,  je me suis aussi permis d'apporter 
quelques modifications à ton code que voici :



* Tout d'abord, intégrer le contenu de la fonction  FinDeSelection2  au 
script FinDeSelection2. Je n'ai pas vu l'utilité de l'appeler par un 
schedule alors qu'on pouvait simplement l'exécuter directement.

* Ensuite, enlever les instruction pour copier et couper le texte 
sélectionné, parce que je trouve cela superflux. On peut le faire soit même 
après la sélection et, n'oublions pas que certains environnement n'admettent 
pas le coupage de texte.

* Enlever la variable String Sposition2 parmi les variables globales, car 
elle n'est utilisée qu'à l'intérieur d'une seule fonction.

* Une idée que j'ai eu, et que je trouve géniale. Dans le script 
DebutDeSelection2 au lieu de se servir de la ligne sous le curseur comme 
repère de fin de sélection, faire en sorte que le programme détermine s'il y 
a un texte déjà sélectionné sous le curseur, si oui, le prend comme texte de 
repère. Ce qui induit,  dans l'optique d'avoir plus de chance d'obtenir un 
texte de repère unique que plusieurs lignes préalablement sélectionné 
puissent être considérés comme texte de repère ; sinon, retient comme texte 
de repèr  le texte à partir de l'emplacement du curseur jusqu'à la fin de la 
ligne plutôt que la ligne toute entière.

* Améliorer la méthode de sélection en ajouttant l'instruction 
SelectFromStartOfLine () pour s'assurer que la sélection est bien réalisée 
jusqu'au début de la ligne. Et puis, ne plus vérifier la présence du texte 
de repère dans GetLine() mais dans GetSelectedText() pour pouvoir tester la 
présence de plusieurs lignes à la fois, et pour l'amener à fonctionner avec 
plus d'éditeurs.

* Affiner la sélection pour que ne soient inclus que le texte à partir du 
point de départ jusqu'au point d'arrivée. Et plus du tout les lignes 
entières.

* Ajoutter des instructions d'avertissement de l'évolution de la sélection ; 
cela pour qu'on sache où on en est lors de sélections longues.

* Et enfin, je n'ai pû m'empêcher de rajoutter un delay de 1 dixième de 
seconde pour permettre à tous les éditeurs, toutes les machines de suivre le 
rythme de la sélection. Vous pourrez toujours l'enlever si vous désirez plus 
de rapidité.



Hoaah, putain que c'est génial !





Voici les scripts :



Globals

string  Sposition



Script DebutDeSelection2 ()

; "ctrl+Maj+windows+origine"

; Script retenant en mémoire la position du texte de début de sélection.

var string s



; seulement si curseur pc ou curseur virtuel

if IsPCCursor () || IsVirtualPCCursor () then

SpeechOff ()

let s = GetSelectedText ()

; s'il y a un texte sélectionné sous le curseur

if StringLength (s) > 0 then

; on prend ce texte sélectionné comme repère de position de début de 
sélection.

let Sposition = s

else ; aucun texte sélectionné sous le curseur.

; on prend comme repère de position de début de sélection le texte

; à partir du curseur jusqu'à la fin de la ligne courante.

SelectToEndOfLine ()

Let Sposition=GetSelectedText ()

EndIf

; Traitement d'un cas particulier dans microsoft word qui,

; nous a donné du fil à retordre.

if GetWindowClass (GetFocus ()) == "_WwG" then

; word ajoutte un caractère spécial à la fin du texte sélectionné,

; et on va l'enlever.

let Sposition = SubString (Sposition, 1, StringLength (Sposition)-1)

EndIf ; fin traitement cas particulier microsoft word

SpeechOn ()

SayString ("Début de sélection")

SayString (Sposition) ; pour qu'on sache ce qui a été retenu

EndIf ; fin si pc cursor ou virtual pc cursor

EndScript



Script FinDeSelection2 ()

; "ctrl+Maj+windows+fin"

; Script de lancement de la sélection jusqu'au texte marqué comme repère de 
début de sélection.

var

string s,

int i,

int j



; seulement si curseur pc ou curseur virtuel

if IsPCCursor () || IsVirtualPCCursor () then

; vérification si point de début de sélection existe

if Sposition == "" then

SayFormattedMessage (ot_error, "Echec de sélection. Vous n'avez pas indiqué 
un point de début de sélection. Utilisez ctrl+maj+windows+origine pour le 
faire")

return

EndIf

; annonce de début de procédure de sélection.

SayString ("Procédure de sélection")

SayString ("Veuillez patienter")

SpeechOff ()

; sélection partielle ou totale de la ligne en cours.

SelectFromStartOfLine ()

Let s =GetSelectedText ()

let i = 1

while (! StringContains (s, Sposition))

Delay (1)

SelectPriorLine ()

SelectFromStartOfLine ()

; incrémentation de la sélection.

Let s = GetSelectedText ()

let i = i+1

; si i est un multiple de 10

if i == (i/10)*10 then

SpeechOn ()

SayString (IntToString (i)+" lignes")

SpeechOff ()

endif

; si une touche quelconque du clavier est pressée entre temps,

; annulation de la procédure

if IsKeyWaiting () == true then

SpeechOn ()

SayString (IntToString (i)+" lignes")

SayString ("Arrêt de la procédure de sélection")

return

endif

Endwhile

; affinement de la sélection si toute la première ligne n'est pas requise.

let j = StringContains (s, Sposition)

while (j > 1)

PerformScript SelectNextCharacter()

; qui ici, sert à désélectionner.

let j = j-1

EndWhile

SpeechOn ()

; messages de succès.

SayString ("Fin de sélection")

SayString (IntToString (i)+" lignes sélectionnées")

Saystring (GetSelectedText ())

EndIf ; fin si pc cursor ou virtual pc cursor

EndScript



Depuis cette nuit je les ai testé, c'est tout simplement génial. Ça semble 
fonctionner dans tous  les logiciels qui permettent la sélection de texte.

Puisse tout cela vous plaire autant qu'à moi. Et encore Merci Seb !



Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.



----- Original Message ----- 
From: "Seb" <s...@blindsensation.com>
To: <progliste@ml.free.fr>
Sent: Sunday, January 15, 2012 3:30 AM
Subject: [progliste] Re: Script jaws de sélection de texte utile pour les 
refacto risation


> Coucou Yannick.
> Effectivement si on sait exactement jusqu'où sélectionner ton script est
> très bien. Par contre dans le cas contraire j'ai fait quelque chose
> différent qui me semble plus astucieux. Le principe, on se place sur la
> première ligne de la partie à sélectionner et on exécute un premier
> raccourci,puis on va à la fin et on exécute un second raccourci. Tout ce
> qui se trouve entre les deux est sélectionné et mis dans le presse papier.
>
> Globals
> string  Sposition,
> String Sposition2
>
> Script DebutDeSelection2 ()
> ;ctrl+Maj+windows+origine
> Let Sposition=GetLine ()
> SayString ("Début de sélection")
> EndScript
>
> Script FinDeSelection2 ()
> ;ctrl+Maj+windows+fin
> ScheduleFunction ("FinDeSelection2", 5)
> EndScript
>
> Void Function FinDeSelection2 ()
> Let Sposition2=GetLine ()
> SpeechOff ()
> ;If iposition2 > iposition Then
>  While (Sposition2 != Sposition) && !IsKeyWaiting ()
> Let Sposition2= GetLine ()
> SelectPriorLine ()
> Endwhile
> SelectNextLine ()
>
> If IsSameScript ()  == 0 Then
> PerformScript CopySelectedTextToClipboard ()
> EndIf
> If IsSameScript ()  == 1 Then
> PerformScript AppendSelectedTextToClipboard ()
> Endif
> SpeechOn ()
> Saystring (GetSelectedText ())
> EndFunction
>
> J'ai fait l'équivalent (en plus perfectionné), pour le web et pour
> l'explorateur de Windows. Je mettrai le tout sur le site de jawsscript.
>
>
> Seb
>
> Le 14.01.12 18:39, Yannick Youalé a écrit :
>>
>> Salut à tous !
>>
>> En temps que programmeurs, il vous arrive souvent de refactoriser vos 
>> codes. C'est-à-dire de les épurer, en déplacer des parties à d'autres 
>> endroits, les formatter, etc.
>>
>> Lors de ces manoeuvres, vous devez sélectionner de plus ou moins grandes 
>> portions de code. Et le faire avec jaws est tout simplement chiant, 
>> puisqu'il faille le faire ligne par ligne dans la plupart des éditeurs. 
>> Et là, gare au faux mouvement qui nous oblige à tout recommencer, ou 
>> alors au fait que jaws ne nous dise pas exactement ce qui est réellement 
>> sélectionné.
>>
>> C'est pourquoi je vous propose ce scripts de jaws pour lancer de grosses 
>> sélections sans avoir de crampe de doigts.
>>
>> En voici le principe:
>>
>> En réalité, il s'agit de script qui sélectionne le texte ligne par ligne, 
>> jusqu'à ce qu'il rencontre  une expression qui va arrêter la sélection.
>>
>> Par exemple, en visual basic, sachant qu'une procédure commence toujours 
>> par l'instruction "sub" et se termine par "End Sub", pour pouvoir 
>> sélectionner toute une procédure sans se soucier de combien de ligne elle 
>> fait, vous devrez:
>>
>> 1. Vous positionner à l'endroit où devrait commencer la sélection. C'est 
>> à dire au début de la ligne d'en-tête de la procédure.
>>
>> 2. Puis, faire "ctrl+alt+retour arrière" pour appeller le script de 
>> sélection. Une boîte de dialogue s'ouvre alors, vous demandant de taper 
>> l'expression qui, si elle est rencontrée, arrêtera la sélection.
>>
>> 3. Pour notre exemple, vous taperez alors l'expression "End Sub"; puisque 
>> nous voulons sélectionner de l'endroit où nous sommes jusqu'à la fin de 
>> la procédure visual basic. Attention ! Faire gaffe à la cass, la 
>> recherche est sensible aux majuscules et minuscules.
>>
>> 4. Vous faites "entrer", et la sélection selance après qu'un message de 
>> jaws vous ait demandé de patienter. Ici, pour quon ait une idée de la 
>> progression de la sélection, j'ai prévu que jaws vous avertisse toutes 
>> les dix lignes.
>>
>> 5. Normalement, si l'expression tapée dans la boîte de dialogue est 
>> trouvée, la sélection s'arrête, signalé par un message de jaws. Et vous 
>> n'aurez plus qu'à soit supprimer, copier ou couper la portion de texte 
>> sélectionnée.
>>
>> Autres informations:
>>
>> * Une sélection lancée peut être arrêtée à tout moment en appuyant sur 
>> n'importe quelle touche du clavier. Moi, par prudence je préfère la 
>> touche "échap".
>>
>> * Si contrairement à l'exemple évoqué plus haut vous n'avez pas au départ 
>> l'expression jusqu'à laquelle la sélection doit se faire, vous devrez 
>> vous rendre là où elle doit s'arrêté et taper vous-même une expression. 
>> Moi, j'ai l'habitude de taper par exemple "/rep" comme repère de fin de 
>> sélection.
>>
>> * Cette méthode est employable
>> dans tous les éditeurs de texte qu'il m'a été donné d'utiliser. Donc, 
>> qu'il s'agisse de programmation ou non, elle peut vous permettre de 
>> faciliter la sélection de texte en général.
>> Cependant, j'ai malheureusement constaté qu'elle ne fonctionne pas dans 
>> les pages web.
>>
>> En définitive, il s'agit d'une méthode qui m'a grandement facilité mes 
>> taches de refactorisation (quel que soit le langage), et de sélection en 
>> général.
>>
>>
>> Maintenant le script
>>
>> Je le place dans le fichier "default.jss" pour que cette méthode de 
>> sélection soit accessible dans tous mes éditeurs de texte.
>>
>> Script SelectUntilString ()
>>
>> ; "ctrl+alt+BackSpace"
>>
>> ; Lance une sélection jusqu'à une expression indiquée.
>>
>> var
>>
>> string s,
>>
>> int i
>>
>> if IsPCCursor ()
>>
>> &&  ! MenusActive ()
>>
>> then
>>
>> InputBox ("Tapez le texte jusqu'auquel la sélection doit s'arrêter. 
>> Attention, respectez la cass.", "Sélectionner jusqu'à", s)
>>
>> if s == "" then
>>
>> return
>>
>> endif
>>
>> SayString ("Veuillez patienter pendant la sélection")
>>
>> SpeechOff ()
>>
>> SelectNextLine ()
>>
>> SelectToEndOfLine ()
>>
>> while (! StringContains (GetSelectedText (), s))
>>
>> Delay (1)
>>
>> SelectNextLine ()
>>
>> SelectToEndOfLine ()
>>
>> let i=i+1
>>
>> ; si i est un multiple de 10
>>
>> if i == (i/10)*10 then
>>
>> ; alors on fait part de l'évolution
>>
>> SpeechOn ()
>>
>> SayString (IntToString (i)+" lignes")
>>
>> SpeechOff ()
>>
>> endif
>>
>> ; si une touche quelconque du clavier est pressée entre temps,
>>
>> ; annulation de la procédure
>>
>> if IsKeyWaiting () == true then
>>
>> SpeechOn ()
>>
>> SayString (IntToString (i)+" lignes")
>>
>> SayString ("Arrêt de la procédure de sélection")
>>
>> return
>>
>> endif
>>
>> endwhile
>>
>> ; le texte d'arrêt a été trouvé et sélectionné
>>
>> SpeechOn ()
>>
>> SayString ("Fin de sélection")
>>
>> SayString (IntToString (i)+" lignes")
>>
>> endif ; fin si pc cursor
>>
>> EndScript
>>
>>
>> Puisse cela vous être utile.
>>
>> Yannick Daniel Youalé
>> La programmation est une religion. Aimez-la, ou quittez-la.
>> Progliste :
>> Pour se désinscrire de la liste : 
>> mailto:progliste-requ...@ml.free.fr?subject=unsubscribe
>>
>> Pour voir les archives de la liste :
>> http://www.mail-archive.com/progliste@ml.free.fr/
>>
>> Pour accéder aux fichiers de la liste
>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, 
>> je vous répondrez en privé.
>>
>
> Progliste :
> Pour se désinscrire de la liste : 
> mailto:progliste-requ...@ml.free.fr?subject=unsubscribe
>
> Pour voir les archives de la liste :
> http://www.mail-archive.com/progliste@ml.free.fr/
>
> Pour accéder aux fichiers de la liste
> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, 
> je vous répondrez en privé.
> 


Progliste :
Pour se désinscrire de la liste : 
mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/       

Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je 
vous répondrez en privé.

Répondre à