Der Makro-Code ist in der Datei macros.cfg abgespeichert. Die Datei befindet sich im Profil-Verzeichnis. (Normalerweise im Programm-Verzeichnis von K-Meleon), z.B. unter C:\Programme\K-Meleon\Profiles\default\x.slt
In dieser Datei können Makros definiert werden, die dann ins Menü eingebunden werden können und (oder) über Tastenkombinationen aufgerufen werden können.
Die Makrobefehle stehen auch als Kurzübersicht zur Verfügung.
Ein Makro besteht grundsätzlich aus dem Makro-Namen und einem geschweiftem Klammerpaar, das die Befehle und Anweisugen einschließt. Jede Anweisung schließt mit einem Semikolon ab. Es können mehrere Anweisungen in einer Zeile stehen. Innerhalb einer Makro-Anweisung darf keine Zeilenschaltung vorkommen:
google {menu="Google"; openbg("http://www.google.de"); }
Es gibt einige Makros, die automatisch von K-Meleon aufgerufen werden, wenn bestimmte Ereignisse eintreten:
| Makroname | Ereignis |
| OnStartup | Wenn K-Meleon gestartet wird |
| OnOpenWindow | Wenn ein neues Fenster (oder Register) geöffnet wird |
| OnCloseWindow | Wenn ein Fenster oder Register geschlossen wird |
| OnLoad | Wenn eine Seite geladen wird |
| OnQuit | Wenn K-Meleon beendet wird. |
Damit stehen die o.a. Makronamen natürlich nicht mehr für eigene Makros zur Verfügung.
Das folgende Beispiel ruft ein Makro auf, wenn in der URL 'makro=' vorkommt. (Wenn also z.B. file://c:/seite.htm?makro=test aufgerufen wird, startet das Makro 'test').
OnLoad {
$pos=index($URL, "?makro="); macros($pos == -1 ? "ende" : "makro_onload"); }
makro_onload {$posi=index($URL, "=")+1; macros(substr($URL, $posi)); }
ende {}
Eine Zeile, die mit # beginnt, wird als Komentar interpretiert und wird für die Definition ignoriert. Beispiel:
# Dies ist eine Kommentarzeile
Dies ist keine Kommentarzeile
Zur Definition von Funktionsargumenten und Variablen stehen folgende Ausdrücke zur Verfügung:
+ Addition $x = 7 + 3; 10
- Subtraktion $x = 7 - 3; 4
* Multiplikation $x = 7 * 3; 21
/ Division $x = 7 / 3; 2
% Rest $x = 7 % 3; 1 (Rest der Divison)
== Gleich $x = 7 == 3; false
!= Ungleich $x = 7 != 3; true
. Verkettung $x = 7 . 3; 73
? : Bedingungen $x = $y==1 ? 2:3; 2 (wenn y gleich 1 dann 2 sonst 3)
Um die Berechnungsreihenfolge zu beeinflussen, können Klammern benutzt werden:
Variablen sind beliebige Namen, die mit einem $-Zeichen beginnen. Der Variablenname darf Zahlen enthalten (z.B. Wert1), darf aber nicht mit einer Zahl beginnen. Außerdem darf der Name natürlich nicht mit einer der Systemvariablen identisch sein.
$wert = "true"
$x = 5
$y = "Text"
Variablen können mittels Operatoren definiert oder verändert werden:
$x = 5 * 2
$x = $x + 1
$schrift = getpref(INT, "font.size.variable.x-western")-1
Variablen können in Kommandos anstelle von Text als Argument verwendet werden.
setpref(INT, "font.size.variable.x-western", $schrift)
Ebenso ist die Kombination mit Text möglich. Dann muß allerdings ein Punkt ('.') als Trennzeichen verwendet werden.
statusbar("Schrift vergrößert auf " . $schrift . "px");
Folgende Systemvariablen stehen zur Verfügung:
Text wird in Anführungszeichen gesetzt. Ein Backslash wird als Einleitung zu Sonderzeichen interpretiert:
\\ Backslash
\n Neue Zeile
\r carrige return
\" Anführungszeichen
Eine Windows-Pfadangabe in einem Text muß also immer einen doppelten Backslash haben:
$datei="c:\\Programme\\k-meleon";
Jedes Kommando wird mit einem Semikolon abgeschlossen. Argumente, die als Text angegeben werden, müssen in Anführungszeichen eingeschlossen sein. Es sind mehrere Kommandos pro Zeile möglich. Ein Kommando darf sich jedoch nicht über 2 Zeilen erstrecken.
menu = "name";Name ist der Text, der angezeigt wird, wenn das Makro in das Menü eingebunden wird.
menu = "Schrift vergrößern";
Dieser Text kann in der Menüdefinition verändert werden.
ICON = EXCLAIM | INFO | STOP | QUESTION
Zeigt ein Dialogfeld an, mit Titel in der Titelzeile, Text im Dialogfenster, einem Icon und einer OK-Schaltfläche, die betätigt werden muß. Das Dialogfeld hat keinen Rückgabewert. Nachfolgendes Beispiel zeigt den Inhalt der Zwischenablage an:
alert(getclipboard(), "Inhalt der Zwischenablage", INFO);
Führt ein externes Kommando (Programm) mit den angegebenen Parametern aus.
exec("notepad c:\\programme\\k-meleon\\license.txt");
Die Doppelten umgekehrten Schrägstiche (\\) in der Pfadangabe sind wichtig, weil der Backslash (\) ein Sonderzeichen eileitet. Siehe auch Text.
Führt ein ID-Kommando aus.)
id(ID_NAV_RELOAD);
Führt das Makro 'Makroname' aus.
macros("beispiel");
open(url);
Öffnet die URL im gleichen Browser-Fenster
open("http://www.google.de");
opennew(url)
Öffnet die URL in einem neuen Fenster
opennew("file:///d:/programme/k-meleon/hilfe/index.htm");
openbg(url)
Öffnet die URL in einem neuen Fenster im Hintergrund, d.h. das neue Fenster wird nicht in den Vordergrund geholt.
openbg("http://www.google.de")
Führt ein Plugin-Kommando aus
plugin("bookmarks", "Add");
pluginmsg(pluginname, command, Argument1, Argument2)
Führt ein Plugin-Kommando aus
pluginmsg("favorites", "AddLink", $URL, $TITLE);
Zeigt einen Text in der Statusleiste an.
statusbar("Java-Script wurde ausgeschaltet");
Verändert eine Grundeinstellung. 'Type' kann sein: BOOL (Boolean=Bool'sche Variable true oder false), INT (Integer=Ganzzahl), oder STRING (Text), je nach Erfordernis der Einstellung, die verändert werden soll. Siehe auch Liste der Grundeinstellungen
setpref(string, "kmeleon.general.searchEngine", "http://www.google.de/search?q=)"
togglepref(typ, pref, werte...)
Schaltet nacheinander die angegebenen Grundeinstellungs-Werte um und beginnt am Ende wieder mit dem ersten. Wenn Bool'sche Werte umgeschaltet werden sollen, dürfen keine Werte angegeben werden.
togglepref(INT, "font.size.variable.x-western",16,18,20,22,24,26)
togglepref(BOOL, "network.cookie.warnAboutCookies")
Schiebt 'text' in die Zwischenablage. Siehe auch getclipboard.
setclipboard($temp);
basename( Name [, Erweiterung] );
Liefert den Namen ohne den vorangehenden Pfad. Ist eine 'Erweiterung' angegeben, wird sie ebenfalls entfernt.
alert(basename($URL), "basename(".$URL.")");
# liefert den Dateinamen der Adresse
alert(basename($URL, "htm"), "basename(".$URL.")");
# liefert den Dateinamen der Adresse ohne Erweiterung
# aber nur, wenn die Erweiterung 'htm' ist.
confirm(Text [,Titel] [,BUTTONS] [ICONS]);
BUTTONS = RETRYCANCEL | YESNO | YESNOCANCEL | ABORTRETRYIGNORE
ICON = EXCLAIM | INFO | STOP | QUESTION
RESULT = OK | YES | NO |ABORT | RETRY | IGNORE | 0
Zeigt ein Dialogfeld an, mit Titel in der Titelzeile, Text im Dialogfenster, einem Icon und den entsprchenden Schaltflächen. Nach dem Betätigen einer Schaltfläche wird der entsprechende Rückgabewert geliefert. Wenn BUTTONS nicht angegeben wird, stehen OK und Abbrechen zur Verfügung.
$ergebnis=confirm("Wollen Sie die Funktion wirklich ausführen?", "Sicherheitsfrage");
$ergebnis=confirm("Wollen Sie die Funktion ausführen?", "Sicherheitsfrage", YESNO, QUESTION);
Das Ergebnis der Abfrage kann mit einer Bedingung ausgewertet werden
Das Kommando confirm ist aber nicht nur mit Bedingungen einsetzbar, sondern auch in Verbiundung mit exec() oder macro() sinnvoll. Mit letzterem kann eine einfache bedingte Verzweigung realisiert werden:
zwab {
menu="Zwischenablage anzeigen";
$goto=confirm("Soll der Inhalt der Zwischenablage angezeigt werden?", "Frage");
macros("zwab".$goto);
}
zwabOK {
alert(getclipboard(), "Inhalt der Zwischenablage");
}
zwab0 {
alert("Zwischenablabe wird nicht angezeigt.", "Inhalt der Zwischenablage");
}
Liefert das übergeordnete Verzeichnis zurück:
open(dirname($URL));
gensub(Alt, Neu, Modus, Zieltext);
Sucht im 'Zieltext' den Textteil 'Alt' und ersetzt ihn durch den Textteil 'Neu'.
Der Rückgabewert von gensub ist der modifizierte Text:
$text="Dieser alte Text ist mit anderen alten Texten nicht vergleichbar.";
alert(gensub("alt", "neu", "g", $text), "gensub(".$text.")");
# ergibt: Dieser neue Text ist mit anderen neuen Texten nicht vergleichbar.
Jedes Vorkommen von 'Alt' in 'Text' wird durch 'Neu' ersetzt. Rückgabewert ist der modifizierte Text.
$text="Dieser alte Text ist mit anderen alten Texten nicht vergleichbar.";
alert(gsub("alt", "neu", $text), "gsub(".$text.")");
# ergibt: Dieser neue Text ist mit anderen neuen Texten nicht vergleichbar.
Liest den Inhalt der Zwischenablage. Siehe auch setclipboard.
$temp=getclipboard();
Liest eine Grundeinstellung. 'Type' kann sein: BOOL (Boolean=Bool'sche Variable true oder false), INT (Integer=Ganzzahl), oder STRING (Text), je nach Erfordernis der Einstellung, die verändert werden soll. Siehe auch Liste der Grundeinstellungen
getpref(INT, "font.size.variable.x-western")
Liefert den Hostnamen der URL zurück:
open(dirname($URL));
Liefert die Zeichenposition von 'Teil' im 'Text', beginnend bei Position 0. Wenn 'Teil' nicht vorkommt, wird -1 zurückgeliefert.
$text="0123456789";
alert(index($text,"5"), "index(".$text.")");
Liefert die Länge (Anzahl Zeichen) des Textes:
alert(length("Text"));
pluginmsgex(pluginname, command, argument, Typ)
Führt ein Plugin-Kommando aus
$url = pluginmsgex( "hotlist", "FindNick", $nickname, STRING );
prompt(Text [,Titel [,Vorgabe]]);
Öffnet eine Dialogbox, in die Text eingetragen werden kann und liefert diesen zurück.
$eingabe=prompt("Bitte Text eingeben","Texteingabe", "Textvorgabe");
Das erste Vorkommen von 'Alt' in 'Text' wird durch 'Neu' ersetzt. Rückgabewert ist der modifizierte Text.
$text="Dieser alte Text ist mit anderen alten Texten nicht vergleichbar.";
alert(gsub("alt", "neu", $text), "gsub(".$text.")");
# ergibt: Dieser neue Text ist mit anderen alten Texten nicht vergleichbar.
substr(Text, Beginn [, Anzahl] );
Liefert 'Anzahl' Zeichen von 'Text', beginnend mit 'Beginn'. Das erste Zeichen hat die Position 0. Wenn 'Anzahl fehlt, werden alle Zeichen von 'Text' ab 'Beginn' geliefert.
alert(substr("K-Meleon", 2));
Ein Makro besteht aus dem Namen und den Kommandos zwischen geschweiften Klammern:
Beispiele
Schriftgroesser {
# Der Text, der im Menü angezeigt wird
menu = Schrift vergrößern
$newsize = getpref(INT, "font.size.variable.x-western") + 1;
setpref(INT, "font.size.variable.x-western", $newsize);
setpref(INT, "font.size.fixed.x-western", $newsize);
statusbar("Schrift vergrößert auf " . $newsize);
}
javascriptaus {
menu = "Java-Script aus (besondere Seiten ein)";
setpref(STRING, "capability.policy.default.javascript.enabled", "noAccess");
setpref(STRING, "capability.policy.jsok.javascript.enabled", "allAccess");
id(ID_NAV_RELOAD)
statusbar("Java-Script wurde ausgeschaltet, außer für besondere Seiten");
}
Mit KEY = macros(name) wird das Makro einer Tastenkombination zugeordnet. Die Definition erfolgt in der Datei accel.cfg im entsprechenden Profil.
Beispiel
CTRL VK_UP = macros(schriftgroesser)
CTRL VK_DOWN = macros(schriftkleiner)
Mit dem Kommando macros(name) wird das Makro als Menüpunkt dargestellt. Name ist der Name des Makros. Die Definition erfolgt in der Datei menu.cfg im entsprechenden Profil.
Schrift {
macros(schriftgroesser)
macros(schriftkleiner)
}
Alternativ können Sie einen anderen Text zuordnen. Dann gilt die Syntax, die auch für andere Plugins gilt. Das ist nützlich, wenn Sie beispielsweise dem Makro eine Tastenkombination zugeordnet haben und diese im Menü anzeigen wollen:
Schrift {
macros(schriftgroesser, Schrift vergößern\t Ctrl+Pfeil oben)
macros(schriftkleiner, Schrift verkleinern\t Ctrl+Pfeil unten)
}
Der Task, in dem ein Makro ausgeführt wird, ist das Browserfenster, in dem es gestartet wurde. Ein Makro wird nicht in einem anderen Browserfenster fortgeführt, selbst wenn mit id(ID_WINDOW_NEXT) der Focus an ein anderes Browserfenster übergeben wird. Alle Makrobefehle beziehen sich dann immer noch auf das Fenster, in dem Sie sich befunden haben, als das Makro aufgerufen wurde. Das gilt auch für verkettete Makros, die mit macros(name) aufgerufen werden. Das ist entscheidend, für Befehle, die sich auf Inhalte der angezeigten Seite beziehen, z.B. id(ID_EDIT_COPY).