Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hilfe bei Skript benötigt

0 views
Skip to first unread message

Thomas Schwarzer

unread,
May 27, 2022, 8:47:37 AM5/27/22
to
Hallo zusammen,

ich wollte mir ein einfaches Skript zusammenstellen, welche alle
beobachteten Artikel auf ungelesen setzt.
Die Idee war, auf eine entsprechende Ansicht zu wechseln, welche
besobachtete Artikel filtert, die auf ungelesen zu setzen und dann wieder
auf die Standardansicht zu wechseln.
Mein Ansatz mit

ADo('HeaderlistPane');
ADo('View2');
ADo('MarkAllUnread');
ADo('View1');

funktioniert, wenn ich das Skript aus der Verwaltung starte (allerdings
auch nicht immer). Wenn ich es mit einem Tastaturkürzel starte, dann
wechseln zwar die Ansichten, aber die Markierung 'Ungelesen' wird nicht
gesetzt.
Kann mir jemand auf die Sprünge helfen, wo mein Denkfehler liegt?

Wenn es eine Möglichkeit gibt, das Ganze nicht nur gruppenbezogen, sondern
per Skript für den gesamten Artikelbestand von Dialog durchzuführen, wäre
ich für entsprechende Hinweise oder Beispielskripte natürlich auch dankbar.

Gruß

Thomas

Bernd Rose

unread,
May 27, 2022, 2:04:40 PM5/27/22
to
Am Fr, 27. Mai 2022 14:47:36 +0200, schrieb Thomas Schwarzer:

> Mein Ansatz mit
>
> ADo('HeaderlistPane');
> ADo('View2');
> ADo('MarkAllUnread');
> ADo('View1');
>
> funktioniert, wenn ich das Skript aus der Verwaltung starte (allerdings
> auch nicht immer). Wenn ich es mit einem Tastaturkürzel starte, dann
> wechseln zwar die Ansichten, aber die Markierung 'Ungelesen' wird nicht
> gesetzt.
> Kann mir jemand auf die Sprünge helfen, wo mein Denkfehler liegt?

Setze die beiden letzten ADo auf ADoLater.

> Wenn es eine Möglichkeit gibt, das Ganze nicht nur gruppenbezogen, sondern
> per Skript für den gesamten Artikelbestand von Dialog durchzuführen, wäre
> ich für entsprechende Hinweise oder Beispielskripte natürlich auch dankbar.

Außenschleife für das Skript erzeugen, welches die Gruppenliste aktiviert,
dort per PostKey an die oberste Stelle springt und dann nach und nach mit
PostKey durch alle Gruppen scrollt.

Eventuell mit AddMarker vorher die aktuelle Position sichern und dann über
GoToPreviousMarker dorthin zurückspringen und mit ClearMarkerList aufräumen.

Schönen Gruß
Bernd

Thomas Schwarzer

unread,
May 28, 2022, 2:09:22 AM5/28/22
to
Am Fri, 27 May 2022 20:04:39 +0200 schrieb Bernd Rose:

> Am Fr, 27. Mai 2022 14:47:36 +0200, schrieb Thomas Schwarzer:
>
>> Mein Ansatz mit
>>
>> ADo('HeaderlistPane');
>> ADo('View2');
>> ADo('MarkAllUnread');
>> ADo('View1');
>>
>> funktioniert, wenn ich das Skript aus der Verwaltung starte (allerdings
>> auch nicht immer). Wenn ich es mit einem Tastaturkürzel starte, dann
>> wechseln zwar die Ansichten, aber die Markierung 'Ungelesen' wird nicht
>> gesetzt.
>> Kann mir jemand auf die Sprünge helfen, wo mein Denkfehler liegt?
>
> Setze die beiden letzten ADo auf ADoLater.

Super, funktioniert!
Da ich im Netz nichts gefunden habe: Kannst Du noch ein/zwei Sätze zur
genauen Wirkweise von ADoLater sagen (oder mir einen Link nennen)?

Ich hatte schon mit ADoLater und sleep() experimentiert, weil ich als
Fehler vermutet hatte, dass der Command abgesetzt wird, wenn der vorige
noch nicht fertig ausgeführt ist. Ich hatte das erste ADoLater aber zu früh
gesetzt :-(

>> Wenn es eine Möglichkeit gibt, das Ganze nicht nur gruppenbezogen, sondern
>> per Skript für den gesamten Artikelbestand von Dialog durchzuführen, wäre
>> ich für entsprechende Hinweise oder Beispielskripte natürlich auch dankbar.
>
> Außenschleife für das Skript erzeugen, welches die Gruppenliste aktiviert,
> dort per PostKey an die oberste Stelle springt und dann nach und nach mit
> PostKey durch alle Gruppen scrollt.
>
> Eventuell mit AddMarker vorher die aktuelle Position sichern und dann über
> GoToPreviousMarker dorthin zurückspringen und mit ClearMarkerList aufräumen.

Danke auch dafür.
Da werde ich mich mal etwas eingehender mit beschäftigen müssen :-)

Gruß Thomas

Bernd Rose

unread,
May 28, 2022, 5:11:04 AM5/28/22
to
Am Sa, 28. Mai 2022 07:33:57 +0200, schrieb Thomas Schwarzer:

> Da ich im Netz nichts gefunden habe: Kannst Du noch ein/zwei Sätze zur
> genauen Wirkweise von ADoLater sagen (oder mir einen Link nennen)?

Eine einfache Frage ohne einfache Antwort. ADoLater wurde mit der Beta 37
eingeführt und ist "undokumentiert". Es gab damals einige Informationen
im Bug-Tracker für 40tude Dialog (eine Mantis-Instanz). Der ist aber seit
über 15 Jahren nicht mehr zugänglich und nirgends archiviert. (Marcus hat
die Inhalte vermutlich noch. - Aber das hilft nicht wirklich weiter...)

Sowohl ADo als auch ADoLater rufen Befehle jeweils als eigenen Thread auf.
Das funktioniert, als hätte man den betreffenden Befehl direkt im Menü aus
der GUI gestartet. Während der Befehl durch den Thread ausgeführt wird,
könnte man theoretisch normal weiterarbeiten. (Ausnahme: Befehle, die ein
eigenes Unterfenster öffnen. Hier wird auch bei ADo in Skripten gewartet,
bis das Unterfenster wieder geschlossen ist.)

Durch die potenzielle Parallelbearbeitung entstehen u. U. Konflikte oder
fehlerhafte/unerwünschte Ergebnisse.

Bei Skripten ist diese Gefahr besonders groß, da das Starten des Threads
für den Nachfolgebefehl regelmäßig schneller geht, als die Abarbeitung
des Threads vom Vorbefehl, wenn dieser z. B. auf die Artikeldatenbank
zugreifen muss.

Erschwerend kommt hinzu, dass einzelne Befehle während ihrer Abarbeitung
zeitweise den Fokus vom Hauptfenster lösen. Nachfolgend gestartete Befehle
sind dann u. U. ins Nirwana gerichtet.

ADoLater verschiebt den Start von Befehlen in einen eigenen Wrapper-Thread,
der unabhängig vom Haupt-Thread der Skriptabarbeitung ausgeführt wird. Er
startet (/ohne/ feste Zeitvorgabe) leicht verzögert und damit üblicherweise
erst nach dem Ende des Haupt-Threads. (Jedoch nicht zwingend.)

Ziel war v. a., Befehle aus Skripten aufrufen zu können, die bei linearer
Abarbeitung zu Problemen führen. So können z. B. /nach/ dem Aufruf eines
ADoLater, welches ein eigenes Unterfenster öffnet, mittels PostKey im
Haupt-Thread Tastendrücke im Tastaturpuffer abgelegt werden, welche sich
auf das - per separatem Thread gestartete - Unterfenster auswirken.

Da weder ADo noch ADoLater zwingend zu einer sequenziellen Abarbeitung der
Skriptbefehle führen und viele Randbedingungen (z. B. der aktuelle Fokus)
Einfluss auf das Ergebnis haben, hilft oft nur Experimentieren.

Schönen Gruß
Bernd

Thomas Schwarzer

unread,
May 28, 2022, 7:42:46 AM5/28/22
to
Am Sat, 28 May 2022 11:11:02 +0200 schrieb Bernd Rose:

> Am Sa, 28. Mai 2022 07:33:57 +0200, schrieb Thomas Schwarzer:
>
>> Da ich im Netz nichts gefunden habe: Kannst Du noch ein/zwei Sätze zur
>> genauen Wirkweise von ADoLater sagen (oder mir einen Link nennen)?
>
> Eine einfache Frage ohne einfache Antwort. [...]

Das ist ja meistens so :-)

Danke für die ausführliche Antwort.

Gruß Thomas

0 new messages