[Lua] Text-Editor für die Kamera

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Text-Editor für die Kamera

Beitragvon naddel » 03.12.2009, 00:37

Update Ver 0.2 Fehler in der Suchfunktion

Da die virtuelle Tastatur auf sich warten lässt habe ich die Texteingabe zu einem kleinen Texteditor erweitert um kleine Änderungen an Skripten ohne PC durchführen zu können.

Die Darstellungsmöglichkeiten auf der Konsole sind leider sehr beschränkt.
So gliedert sich die Anzeige in
eine Statuszeile
eine Menüzeile
und drei Textzeilen
Als Makierung werden Keile verwendet.
Zum Einen für das Menü zum Andern für den Text.

Der Textcursor kann vollständig über Menübefehle gesteuert werden um eine
Grundfunktionalität auf möglichst vielen Modellen zu gewährleisten.
Er ist immer in der gleichen Zeile, die durch den Parameter #editline eingestellt werden kann.

Da man eigentlich 16 Tasten braucht um sich in Menu und Text in Einzelschritten und in Sprüngen zu bewegen
sind 2 Umschalttasten definiert.
1. [DISP] schaltet zwischen Menü und Text um.
ist Text aktiv wird in der Menüzeile eine zusätzliche Textzeile angezeigt.
2. [MENU] schaltet zwischen Einzelschritt und Sprung.

Sobald eine ZOOM-Taste benutzt wurde erfolgen die
Horizontalen Sprünge über ZOOM die die
Vertikalen im Textbereich über [SET] und [MENU]

Bei Modellen mit einer [FLASH] Taste kann durch halten der FLASH-Taste in den
Textbereich umgeschaltet werden. Dabei wird keine zusätzliche Textzeile angezeigt.

Ist eine Taste [ERASE] vorhanden kann damit das aktuelle Zeichen gelöscht werden.

Im Menü kann über auf ab zwischen verschieden Auswahlzeilen umgeschaltet werden.

Befehle
Großbuchstaben
Kleinbuchstaben
Zahlen und Sonderzeichen.

Das Menü kann weitgehend frei definiert werden um Anpassungen an andere Zeichensätze zu ermöglichen.
Ich habe Win1252 eingestellt und die Umlaute stammen aus dieser Seite.
Als Beispiel sind im 3. über Parameter einstellbaren Menü 2 Zeilen mit einem Kyrillischen-Alphabet das
nur mit Codepage Win1251 als solches angezeigt wird. Dort kann man auch sehen wie man häufig verwendete Worte in das Menü integrieren kann.
Welche Zeichen dargestellt werden können kann mit show chars bzw. Zeichentabelle unter Datei nachgeschaut werden.

Die Kommandos sind möglichst kurz gehalten.
Nur Großbuchstaben sind allgemein

Cursorbewegung im Text
U up
D down
L left
R right
für Sprünge Verdoppelt zu UU DD LL RR
hier sind aber Pfeile und > für diese Kommandos eingesetzt
TM (T)oggle (M)ode schaltet zwischen Einfüge- und Überschreibmodus
TA schreibt einen Tabulator (Tabulatoren werden nicht expandiert sondern als Tab-Zeichen angezeigt)
BS (B)ack(S)pace löscht das Zeichen vor dem Cursor
LF (L)ine(F)eed macht an der aktuellen Schreibposition einen Zeilenumbruch
Src Suche: ein einmal eingstelltes Suchwort bleibt für Wiederhohlungen erhalten.
das Wort unter der Schreibmake wird aber im Ziffernmenü angeboten.
Ln entspricht einem LF an Position 1, ist also entbehrlich.

Die übrigen Kommandos beziehen sich auf Zeichen(gruppen) und sind aus einem Großbuchstaben
(C)haracter (W)ord (L)ine
(B)uchstabe (W)ort (Z)eile
und einem Kleinbuchstaben für die Aktion zusammengesetzt
(d)elete (c)ut (i)nsert (p)aste (n)ew
(l)öschen (a)usschneiden (e)einfügen (h)inzufügen (n)eu
d und c löschen das Objekt bei c wird es aber in einen Speicher übernommen aus dem es mit
i und p wieder entnommen werden kann bei i wird es aus dem Speicher gelöscht bei p nicht.
Die Speicher funktionieren nach den Last in First out Prinzip und werden beim Laden eines
anderen Textes nicht gelöscht.

Statusanzeigen:
Code: Alles auswählen
    Textlänge in Zeilen
    |  aktuelle Zeile
    |  |  aktuelle Spalte (kann bei kürzeren Zeilen
    |  |  |                    beim scrollen abweichen)
    |  |  |  aktive Menüzeile
    |  |  |  | aktuelle Position in der Menüzeile
    |  |  |  | |  (O)verwrite oder (I)nsert Modus
    |  |  |  | |   |Sprünge (Z)oom (J)ump (S)ingle
    |  |  |  | |   ||    Dateiname mit * wenn Text geändert
    |  |  |  | |   ||    |        aktuelle Menüauswahl
    |  |  |  | |   ||    |        |
  +--------------------------------+
  |tt:zz:xx ml-mp  OZ (*)name     Z|
  |                                |
 


[ offtopic ] warum krieg ich kein html hin? Ein pre wäre hier sehr hilfreich [ /offtopic ]

Die Tastaturwiederholung kann über Param keydelay angepasst werden.

Beschränkungen:
Es können nur gängige Textformate mit den Dateiendungen
.TXT .BAS .LUA .LOG .GRD .LST
und einer Größe < 30KB
bearbeit werden.
Es können keine neuen Dateien angelegt werden.
Wird mit speichern unter ein neuer Dateiname vergeben erfolgt die
Speicherung im selben Verzeichniss wie die Ursprungsdatei.

Bei diesem Skript handelt es sich um eine höchstens beta Version.
!! Die Dateifunktionen sind leider nicht sehr sicher.
!! Vorsicht beim ausprobieren und keine Wichtigen Dateien dazu benutzen.
!! Die Benutzung erfolgt auf eigenes Risiko
Bei Fehlern und Vorschlägen bitte Rückmeldung

Bei der DE-Version ab Changeset 175 kann die Konsolengröße über die Parameter
conheight und conwidth eingestellt werden. Hier kommen die neunen Konsolenbefehle von
CHDKLover zum Einsatz und können getestet werden. Danke! Ältere Versionen ergeben Fehler.
Wenn man die Parameter bei der Normalversion verwenden will muß zuvor mit entsprechenden Anpassungen in script.c kompiliert werden.

Gruß naddel
Dateianhänge
editderd.lua
Testversion mit Console_redraw
(27.31 KiB) 426-mal heruntergeladen
editor.lua
Mini Editor
(27.02 KiB) 829-mal heruntergeladen
editde.lua
(27.24 KiB) 938-mal heruntergeladen
Zuletzt geändert von naddel am 11.12.2009, 16:21, insgesamt 8-mal geändert.
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 04.12.2009, 15:08

Hallo naddel,

tolles Skript - nein tolles Programm, ein Skript ist das nicht mehr. :D =D> \:D/ =D> :D

Dieser Editor kann wirklich hilfreich sein, wenn man mal irgendwo in der Pampa steht und unbedingt eine kleine Veränderung an einem Skript braucht. Beispielsweise, um beim Skript TagMe eine neue Kategorie einzufügen.

Ich beziehe mich jetzt ausdrücklich nur auf die CHDK-DE-Version. Ich habe als Konsolen-Größe 30 x 10 eingestellt. So lässt sich ganz gut arbeiten.

Die Bedienung ist etwas gewöhnungsbedürftig. Ich denke aber, dass man nach ein paar Versuchen damit klarkommt.

Noch immer (wir hatten schon in vorläufigen test darüber gesprochen) gibt es Probleme beim Navigieren. Ein Rücksprung mit [..] führt zum Skript-Abbruch mit der Fehlermeldung: :350: attempt to perform arithmetic on field 'size' (a nil value)

Ich würde mir wünschen, dass die Navigation im Wurzelverzeichnis beginnt.

Weitere Hinweise werden sich sicherlich noch bei längerem Gebrauch ergeben.

Klasse Arbeit.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Update Editor

Beitragvon naddel » 04.12.2009, 18:11

Kleines Update

Fehler bei der Suche nach eckigen Klammern.
Ob das .. Problem besser oder schlechter geworden ist kann ich nicht sagen, da ich den Fehler einfach
nicht reproduzieren kann.

@msl
- ein Verzeichnis darf an der Zeile 350 gar nicht vorbei kommen. Wo da der Wurm steckt?
- gewöhnungsbedürftig? Wie könnte man es besser machen? Ich hab versucht mich auf die
Tasten zu beschränken, die meistens da sind. Das Tastenlayout der Kamera ist eine andere Sache.
auf meiner IxusII wäre es kaum zu gebrauchen allenfalls 2 händig wenn die Tasten nicht so streng wären.
Auf der S2 sind sie so logisch aber da ist der Flasch auch viel bequemer. Shoot-half ist immer ein Gefummel
und jedes 3. mal steig ich dabei aus versehen aus.

Wäre schön wenn sich jemand mit einer Ixus meldet, ob ich da völlig daneben liege. Bequem ist es sicher nicht aber es ist ja hauptsächlich dazu gedacht zur Not mal eine Konstante ändern zu können.

Gruß naddel
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 06.12.2009, 12:42

Hallo,

ich weiß nicht nicht, was verändert wurde. Jedenfalls funktioniert die Ordner/Datei-Navigation jetzt auch mit Rücksprung.Bild

Das "gewöhnungsbedürftig" war nicht negativ gemeint. Bedingt durch das Tastatur-Layout der Kameras und die Darstellungsmöglichkeiten ist die Bedienung schon optimal. Ich wüsste nicht, was man da besser machen könnte. Es erinnert mich etwas an alte Dos-Word-Zeiten. :D

Deshalb muss man sich ein wenig an die Bedienung gewöhnen. Das sollte aber kein Problem sein.

Ein anderes Problem ist eher die Testbereitschaft hier! Dazu ist aber schon alles gesagt. :cry:

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon CHDKLover » 06.12.2009, 15:03

Hallo naddel,
das ist wirklich ein klasse Skript!!! =D>
Ich hab schon des öfteren das Problem gehabt, dass ich nur den Wert einer Variable verändern wollte, aber keinen Rechner in der nähe hatte. Mit dem Script währe es ein leichtes gewesen.

Mach weiter so, CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Verzeichniswechsel

Beitragvon naddel » 06.12.2009, 19:46

Hallo msl,

msl hat geschrieben:ich weiß nicht nicht, was verändert wurde. Jedenfalls funktioniert die Ordner/Datei-Navigation jetzt auch mit Rücksprung.

Ich leider auch nichtmehr.
EDIT
Habs doch noch gefunden attribut is_dir wird bei .. manuell gesetzt und das von os.stat gelieferte ignoriert.

Die meisten meiner Probleme scheinen wirklich mit os.listdir(name,true) zusammen zu hängen.
Ich dachte man bräuchte das true um Unterverzeichnisse uberhaupt anzeigen zu können.
Ich lese immer das ganze Verzeichnis und sortiere dann nach os.status aus.

reyalp in loslib.c hat geschrieben:/*
syntax
t=os.listdir("name",[showall])
returns array of filenames, or nil, strerror, errno
if showall is true, t includes ".", ".." and deleted entries
NOTE except for the root directory, names ending in / will not work
*/


Der Unterschied scheint mir in der Implementation der Betriebssysteme zu liegen.

Da bei meiner Abfrage nur Einträge mit entweder .is_dir oder .is_file durchkommen und im Restebehälter
Volume und ähnliches noch nie etwas angekommen ist. Komme ich zu folgendem vorläufigen Schluß.

Altes VxWorks (meines) liefert für
. und .. reale Werte zurück d.h. man kann auch eine Statusabfrage machen und erhält is_dir
gelöschte Dateien $$$-irgendwas.ext hab ich noch nie gesehen vielleich räum ich zu wenig auf oder das geht bei VxWorks einfach nicht.

Neueres VxWorks (pterozaurus) liefert
. und .. zurück status ist aber nil (. und .. emuliert ?) is_dir=nil
gelöschte Dateien liefern ebenfalls nil, wahrscheinlich sind sie für os.stat nicht sichtbar.

DryOs (altes neues?) liefert
. und .. zurück os.stat liefert auch etwas aber is_dir ist nicht gesetzt.

Ich bekomme also für alle mit Listdir erhaltenen Einträge auch gültige os.stat Abfragen.
sonst liefern . .. und gelöschte entweder keinen status os.stat()=nil oder unvollständigen Status
os.stat().is_dir = nil.

Möglich wäre auch noch, daß es mit all dem nichts zu tun hat und z.B vom Dateisystem FAT16/32 abhängt.

Deine Fehlermeldung mit Zeile 350 kann ich nur dadurch erklären, daß zwar ein Staus geliefert
wurde aber weder is_dir noch is_file gesetzt waren. Dann dürfte .. aber auch keine <dir> Markierung gehabt haben.

Könntest Du oder jemand anderes mit DryOS, am besten altes und neues
mal mit der im Link unten eingestellte listcurv, die Ausgabe für den .. Eintrag rückmelden.

Also listdir(name,true) meiden und für .. in jedem Fall eine Sonderbehandlung vorsehen,
was wegen der Nichtbehandlung von Pfaden wie irgrndwas/.. sowieso nötig ist.


http://forum.chdk-treff.de/viewtopic.php?p=13654#13654

Gruß naddel
Zuletzt geändert von naddel am 07.12.2009, 02:22, insgesamt 1-mal geändert.
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 06.12.2009, 23:41

Hallo naddel,

sorry, hatte es fast vergessen, hier war noch ein Test offen.

listcurv -> .. nil nil nil

Wenn ich mich nicht irre, ist bei os.listdir(name,true) true nicht notwendig, um (Unter)Verzeichnisse zu schreiben. Du musst Dir dann nur etwas einfallen lassen, was Du als Rücksprung aus den Unterverzeichnissen benutzen kannst, da dann auch .. fehlt.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste