π
<-

[PROJET]LuaCS: l'éditeur du programmeur Lua sur calculatrice

Pour TI-Nspire OS 3.0 ou ultérieur.

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby yatto » 21 Oct 2011, 20:48

Comme demandé, je poste mon programme (enfin la jeune pousse de programme) LuaCS.
C'est un lien depuis ma dropbox, si le lien meurt un jour (ce qui arrivera probablement) envoyez moi simplement un MP et je restorerai le lien.

Télécharger LuaCS-Work In Progress (Archive avec le code et le fichier compilé)

Pour information, je code avec PSPad comme éditeur de texte, avec le fichier texte en ANSI, et je compile avec Luna0.2a de ExtendeD.

----------------------------------------------------------

J'ai encore des questions: peut-on faire en sorte qu'une fonction soit appelée lorse DEUX évènements sont appelés? Par exemple, une fonction qui serait appelée lorsque on.mouseMove ET on.tabKey sont appelés? Avec cela je pourrai utiliser le trackpad de la calto pour défiler dans l'éditeur de texte, ce qui serait vraiment pratique.

Autre chose: peut-on créer une seconde application (modélisée par les fenêtres 1.1, 1.2...) et y lancer un code en Lua? Ou alors, doit-on créer la 2e application déjà dans le fichier TNS et y inclure le code Lua qu'elle doit exécuter?

A défaut de créer une nouvelle application, peut-on faire en sorte de basculer automatiquement vers l'application d'à côté? J'aurais aimé mettre dans le menu une option: "compiler-exécuter" avec OClua, et lorsqu'on sélectionne l'option, on passe automatiquement sur la fenêtre d'à côté, la fenêtre d'à côté exécute le code avec OClua, et on peut rebasculer manuellement vers l'éditeur après...
Last edited by yatto on 25 Oct 2011, 15:26, edited 1 time in total.
User avatar
yattoPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 11.7%
 
Posts: 104
Images: 1
Joined: 05 Oct 2011, 12:46
Location: IDF
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes - Mécatronique (1A)

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby Loulou 54 » 22 Oct 2011, 14:14

J'ai pas tout suivi/tout lu, mais j'ai vu qu'il y a des caractères accentués dans les commentaires de ton code. Je sais qu'avec le TI Nspire scripting tool, ça pose tout de suite problème.. Avec Luna, le classeur peut marcher en présence de caractères accentués, mais bizarement parfois.. D'où l'explication possible des caractères chinois.
Ainsi, il vaut mieux que tu enlèves tous les accents. (utilise la fonction chercher/remplacer de ton éditeur)
Si cependant tu veux afficher des accents dans une chaîne de caractères, tu peux par exemple te créer des variables globales du genre ee=string.uchar(233) que tu concatènes dans tes chaînes à la place du "é"..
a+ :)
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby Chockosta » 22 Oct 2011, 21:51

Ça peut être très intéressant...
As-tu implémenté les fonction undo/redo ?

Très bon travail, en tous cas !
User avatar
ChockostaPremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 2.2%
 
Posts: 213
Joined: 24 Feb 2011, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: Math sup

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby yatto » 23 Oct 2011, 11:10

Quelques petites choses:

1- implémenter des fonctions undo-redo ce serait particulièrement lourd, je pense, parce que chaque action significative (entree, delete, et chaque touche espace, mettons) doit être enregistrée dans une table, et ensuite, pour y revenir ça sera la grande débacle... ou alors enregistrer absolument chaque action, mais ce serait trop lourd je pense. Donc pour les Undo-Redo, ce sera dans une autre vie (ou alors simplement plus tard)

2- Je pense plutôt implémenter un système de rechercher/remplacer, ça m'a l'air pas trop compliqué à faire et CA MANQUE ENORMEMENT à l'éditeur TI.

3- Personne n'a répondu, ou alors personne ne sait: peut-on récupérer deux évènements pour une fonction? Une fonction qui se déclencherait avec deux évènements, somme toute. Par exemple, un évènement peut-être utilisé comme une valeur (booléenne / réélle) pour être testée dans une condition?

4- J'ai des soucis avec mon Windows, LuaCS a donc un développement ralenti pour les prochains jours/prochaines semaines. Je verrai ce que je pourrai faire. Quoi qu'il en soit, le développement n'est pas (encore, je l'espère) interrompu.
User avatar
yattoPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 11.7%
 
Posts: 104
Images: 1
Joined: 05 Oct 2011, 12:46
Location: IDF
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes - Mécatronique (1A)

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby ExtendeD » 23 Oct 2011, 13:21

Luna devrait supporter n'importe quel caractère spécial du moment que le fichier .lua est correctement encodé en UTF-8.
yatto, si tu as toujours des soucis avec les caractères spéciaux, peux-tu poster un cours exemple de script posant problème (pas plus de quelques lignes) ?
User avatar
ExtendeDPremium
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 64.1%
 
Posts: 204
Joined: 30 Dec 2004, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: N/A

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby Chockosta » 23 Oct 2011, 13:42

Je pense pas qu'un undo/redo soit compliqué...
Quand une modification est faite, tu sauvegardes le texte précédant l'action dans un tableau et puis c'est tout.

Enfin bon, c'est toi qui vois.
Mais sans undo/redo, je continuerai à utiliser l'éditeur standard de TI.
User avatar
ChockostaPremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 2.2%
 
Posts: 213
Joined: 24 Feb 2011, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: Math sup

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby Levak » 23 Oct 2011, 14:41

3- Personne n'a répondu, ou alors personne ne sait: peut-on récupérer deux évènements pour une fonction? Une fonction qui se déclencherait avec deux évènements, somme toute. Par exemple, un évènement peut-être utilisé comme une valeur (booléenne / réélle) pour être testée dans une condition?


Pas compris :o

1- implémenter des fonctions undo-redo ce serait particulièrement lourd, je pense, parce que chaque action significative (entree, delete, et chaque touche espace, mettons) doit être enregistrée dans une table, et ensuite, pour y revenir ça sera la grande débacle... ou alors enregistrer absolument chaque action, mais ce serait trop lourd je pense. Donc pour les Undo-Redo, ce sera dans une autre vie (ou alors simplement plus tard)


Un système d'undo est implémentable sous forme de pile.
Rappels :
  • Une pile :
    P = pile-vide : []
    empiler "c" dans P : ["c"]
    empiler "a" dans P : ["c", "a"]
    tête de P : "a"
    dépiler P : ["c"]
  • Une file :
    F = file-vide : []
    enfiler "c" dans F : ["c"]
    enfiler "a" dans F : ["c", "a"]
    tête de F : "c"
    défiler F : ["c"]
Quoi enfiler/empiler ? une sorte de fonction qui ferait l'inverse de l'action réalisée :
appuie de la touche "a"
-> incrément du buffer avec le charactère "a"
-> empiler la fonction deleteChar(cursorPos, "a") dans la pile des Undo
Undo
-> appeler tête(Undo) ce qui va en fait appeler deleteChar(cursorPos)
-> déplacer l'index de tête de Undo de -1 (donc sans supprimer la donnée)
-> empiler la fonction addChar(cursorPos, "a") dans la pile des Redo (extrait de la tête de Undo)
Redo
-> appeler tête(Redo) ce qui va en fait appeler addChar(cursorPos, "a")
-> dépiler Redo

Dans ce cas on peut très bien utiliser la puissance du Lua, c'est à dire faire des key-value-pair avec des fonctions :
Je te rappelle que :
Code: Select all
function add(t, x) table.insert(x) end
function del(t, i) table.remove(i) end
t = {[add]=del}
t2 = {1, 2, 3}
add(t2, 4, 0} ---- t2 = {4, 1, 2, 3}
t[add](t2, 0} ---- t2 = {1, 2, 3}

Fonctionne (normalement)
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby yatto » 23 Oct 2011, 15:21

1- Je tiens à rappeler que LuaCS est mon tout premier programme (un peu sérieux) en Lua. Avant d'avoir acheté ma Nspire, je n'ai jamais codé en Lua. Je n'ai donc quasiment aucune notion un peu avancée en Lua. J'avais fait du C, à une époque, ça aide pour l'algorithmie, et encore...

C'est quoi les key-value-pair? J'ai un peu compris ton exemple de code. Mais pas ton explication sur comment on peut coder le "undo-redo"... c'est un peu flou pour moi, tout ça ^^

Déjà avec la méthode de Chockosta, ça ferait des une table avec des valeurs faramineuses, non? c'est énorme de sauvegarder tout le texte à chaque fois. Ta méthode, Levak, me semble mieux (d'après ce que j'ai compris) mais je n'y ai pas compris grand chose...



2- Je me réexplique pour ma question:
Peut-on faire en sorte qu'une fonction soit appelée par deux évènements? Par exemple, l'évènement on.escapeKey et l'évènement on.mouseMove(mx, my) (exemple, hein) ?

Ou alors, si on ne peut pas, est-ce qu'un évènement peut être utilisé comme valeur booléenne, par exemple, dans une fonction: if on.enterKey=true then... ?

Je sais que j'ai des idées un peu bizarres (quoique) mais ça m'aiderait bien, ce truc.


EDIT: 3- Je bloque sur la recherche d'une chaîne dans le fichier... comment faire qu'on capte le texte dans une chaîne spécifique, pour définir le texte qu'on doit chercher ^^" ?
User avatar
yattoPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 11.7%
 
Posts: 104
Images: 1
Joined: 05 Oct 2011, 12:46
Location: IDF
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes - Mécatronique (1A)

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby Levak » 23 Oct 2011, 16:32

yatto wrote:1- Je tiens à rappeler que LuaCS est mon tout premier programme (un peu sérieux) en Lua. Avant d'avoir acheté ma Nspire, je n'ai jamais codé en Lua. Je n'ai donc quasiment aucune notion un peu avancée en Lua. J'avais fait du C, à une époque, ça aide pour l'algorithmie, et encore...

C'est quoi les key-value-pair? J'ai un peu compris ton exemple de code. Mais pas ton explication sur comment on peut coder le "undo-redo"... c'est un peu flou pour moi, tout ça ^^

Déjà avec la méthode de Chockosta, ça ferait des une table avec des valeurs faramineuses, non? c'est énorme de sauvegarder tout le texte à chaque fois. Ta méthode, Levak, me semble mieux (d'après ce que j'ai compris) mais je n'y ai pas compris grand chose...

C'est normal et je m'en doutais un peu. J'ai répondu très rapidement avec des termes pas forcément explicite, donc j'ai essayé de donner un exemple de code. Ces notions je les ai apprises l'année dernière en cours d'algo (école d'info).

Les principes de pile et file sont abstrait, et en Lua ça se traduit par des table.insert(t, x, 0) et table.remove(t, 0) (on ajoute et on retire toujours en tête, en "poussant" les autres valeurs, et ce n'est pas consommateur en Lua car les tables sont dynamiques - structure chainée). Après il faut bien gérer les cas particuliers, Undo, Redo, Undo (qu'est-on sensé faire ?). D'où mon idée d'index (mais ce n'était qu'un exemple, que normalement tu retrouves si tu te poses la question)

2- Je me réexplique pour ma question:
Peut-on faire en sorte qu'une fonction soit appelée par deux évènements? Par exemple, l'évènement on.escapeKey et l'évènement on.mouseMove(mx, my) (exemple, hein) ?

Ou alors, si on ne peut pas, est-ce qu'un évènement peut être utilisé comme valeur booléenne, par exemple, dans une fonction: if on.enterKey=true then... ?

Je sais que j'ai des idées un peu bizarres (quoique) mais ça m'aiderait bien, ce truc.

Officiellement on ne peut pas, tout simplement parce que c'est un lien évènementiel explicite. On définit des fonctions qui seront appelées, ou non, par un seul appel qu'on ne contrôle pas (côté framework). Dans d'autres procédés évènementiels, c'est l'utilisateur qui défini quelles fonctions appeler en fonction des évènements. En Qt4 par exemple c'est avec connect(); - on "connecte" la fonction à l'évènement.

Tu peux toujours te servir d'un booléen et dun timer.
Code: Select all
e = false
function on.enterKey()
  e = true
  timer.start(0.1)
end

function on.charIn(ch)
  if ch == "e" and e == true then
    -- do something
  end
end

function on.timer()
  timer.stop()
  e = false
end




EDIT: 3- Je bloque sur la recherche d'une chaîne dans le fichier... comment faire qu'on capte le texte dans une chaîne spécifique, pour définir le texte qu'on doit chercher ^^" ?


http://lua-users.org/wiki/PatternsTutorial

Attention : comme tu le verras, string.fing utilise les regex. Donc certains caractères spéciaux sont considérés comme des mots clés. Par exemple "." veut dire n'importe quel caractère.
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: [PROJET]LuaCS: l'éditeur du programmeur Lua sur calculat

Unread postby yatto » 23 Oct 2011, 17:25

L'undo-redo, je plancherai dessus plus tard, avec du papier (je peux être assez consommateur en papier quand je fais un programme...) En fait, l'idée, ce serait de faire une table qui contiendrait toutes les actions faites à la suite, et une autre, toutes les actions annulées? Un peu comme ça?:
Code: Select all
action={
[1]="a"
[2]="b"
...
[n]=5

}

undo={}

function undoit()
if action[n]=5 then --par exemple
--supprimer le saut de ligne
unevariable=5
end
if ...
...

table.insert(undo,table.getn(undo), unevariable)
end

function redoit()
if undo[n]=5 then --par exemple
--refaire le saut de ligne en même position (comment? mystère...)
unevariable=5
end
if ...
...

table.remove(undo,table.getn(undo))
end




L'idée du booléen et du timer, c'est chouette, surtout que ça peut régler mon 3e problème... d'ailleurs, je crois que tu as mal compris mon problème: je ne sais pas comment faire en sorte que on.charIn redirige le texte tapé non pas dans l'éditeur, mais dans une chaîne spécifique, chaîne qui contiendrait l'expression à retrouver.


Avec un booléen, c'est peut-être faisable: on lance la fonction capterMot, qui active un booléen, le booléen indique aux autres fonctions qu'on travaille non pas avec le texte de l'éditeur mais avec une autre chaîne, et une fois qu'on appuie sur Enter, une autre fonction est appelée, elle remet le booléen à false, puis recherche dans le buffer. j'ai été clair? mmh, pas trop, non? En tout cas, avec ça, je peux faire une fonctionnalité de rechercher/remplacement.
User avatar
yattoPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 11.7%
 
Posts: 104
Images: 1
Joined: 05 Oct 2011, 12:46
Location: IDF
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes - Mécatronique (1A)

PreviousNext

Return to Nspire-Lua

Who is online

Users browsing this forum: ClaudeBot [spider] and 1 guest

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1352 utilisateurs:
>1341 invités
>3 membres
>8 robots
Record simultané (sur 6 mois):
29271 utilisateurs (le 11/07/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)