# Hooks
# onNoteStored
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn eine Notiz auf der Festplatte gespeichert wird
* Sie können gespeicherte Notizen nicht modifizieren, da es sonst Chaos gäbe, weil
* Sie sie wahrscheinlich gleichzeitig per Hand bearbeiten
*
* @param {NoteApi} note - das Notizobjekt der gespeicherten Notiz
*/
function onNoteStored (note);
2
3
4
5
6
7
8
Vielleicht schauen Sie sich mal das Beispiel auf on-note-opened.qml (opens new window) an.
# noteOpenedHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, nachdem eine Notiz geöffnet wurde
*
* @param {NoteApi} note - das geöffnete Notizobjekt
*/
function noteOpenedHook(note);
2
3
4
5
6
Schauen Sie sich dazu das Beispiel auf on-note-opened.qml (opens new window) an.
# noteDoubleClickedHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, nachdem auf eine Notiz doppelklickt wurde
*
* @param {NoteApi} note - das Notizobjekt, auf das geklickt wurde
*/
function noteDoubleClickedHook(note);
2
3
4
5
6
Schauen Sie sich dazu das Beispiel auf external-note-open.qml (opens new window) an.
# insertMediaHook
Diese Funktion wird aufgerufen, wenn eine Mediendatei in die aktuelle Notiz eingefügt wird.
Wenn diese Funktion in mehreren Skripten definiert ist, gewinnt das erste Skript, das eine nicht leere Zeichenfolge zurückgibt.
# Methodenaufruf und Parameter
/**
* @param fileName string Der Dateipfad der Quellmediendatei, bevor sie in den Medienordner kopiert wurde
* @param markdownText string Der Markdown-Text der Mediendatei, z.B. ![my-image](media/my-image-4101461585.jpg)
* @return string Der neue Markdown-Text der Mediendatei
*/
function insertMediaHook(fileName, markdownText);
2
3
4
5
6
Schauen Sie sich das Beispiel auf example.qml (opens new window) an.
# insertAttachmentHook
Diese Funktion wird aufgerufen, wenn eine Anhangsdatei in die aktuelle Notiz eingefügt wird.
Wenn diese Funktion in mehreren Skripten definiert ist, gewinnt das erste Skript, das eine nicht leere Zeichenfolge zurückgibt.
# Methodenaufruf und Parameter
/**
* @param fileName string Der Dateipfad der Quellanhangsdatei, bevor sie in den Anhangsordner kopiert wurde
* @param markdownText string Der Markdown-Text der Anhangsdatei, z.B. [my-file.txt](attachments/my-file-4245650967.txt)
* @return string der neue Markdown-Text der Anhangsdatei
*/
function insertAttachmentHook(fileName, markdownText);
2
3
4
5
6
Schauen Sie sich dazu ein Beispiel auf example.qml (opens new window) an.
# insertingFromMimeDataHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn HTML oder eine Mediendatei mit "Strg + Umschalt + V" in eine Notiz eingefügt wird
*
* @param text Text des QMimeData-Objekts
* @param html HTML des QMimeData-Objekts
* @gibt die Zeichenfolge zurück, die anstelle des Texts aus dem QMimeData-Objekt eingefügt werden soll
*/
function insertingFromMimeDataHook(text, html);
2
3
4
5
6
7
8
Schauen Sie sich dazu das Beispiel auf example.qml (opens new window), insert-headline-with-link-from-github-url.qml (opens new window) oder note-text-from-5pm-mail.qml (opens new window) an.
# handleNoteTextFileNameHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn eine Notiz auf der Festplatte gespeichert wird, wenn
* "Zulassen, dass der Dateiname der Notiz sich von der Überschrift unterscheidet" in den Einstellungen
* aktiviert ist
*
* Hier können Sie den Namen der Notizdatei ändern
* Denken Sie daran, dass Sie sich selbst um doppelte Namen kümmern müssen!
*
* Geben Sie eine leere Zeichenfolge zurück, wenn der Dateiname der Notiz
* nicht geändert werden soll
*
* @param {NoteApi} note - das Notizobjekt der gespeicherten Notiz
* @return {string} der Dateiname der Notiz
*/
function handleNoteTextFileNameHook(note);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Schauen Sie sich die Beispiele auf example.qml (opens new window) oder use-tag-names-in-filename.qml (opens new window) an.
# handleNoteNameHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn der Notizname für eine Notiz bestimmt wird
*
* Hier können Sie den Namen der angezeigten Notiz ändern
*
* Geben Sie eine leere Zeichenfolge zurück, wenn der Name der Notiz nicht geändert werden soll
*
* @param {NoteApi} note - das Notizobjekt der gespeicherten Notiz
* @return {string} der Name der Notiz
*/
function handleNoteNameHook(note);
2
3
4
5
6
7
8
9
10
11
Schauen Sie sich dazu das Beispiel auf example.qml (opens new window) an.
Es ist möglicherweise keine gute Idee, diesen Hook zu verwenden, wenn die Einstellung zur Verwendung des Dateinamens als Notizname aktiv ist.
# handleNewNoteHeadlineHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, bevor eine Notiz erstellt wird
*
* Sie können damit die Überschrift der Notiz ändern, bevor sie erstellt wird
* Beachten Sie, dass Sie auf einen eindeutigen Notennamen achten müssen, da
* sondst die neue Notiz nicht erstellt wird, sonder nur eine vorhandene in der Notizliste gefunden wird
*
* Sie können diese Funktion zum Erstellen von Notizvorlagen verwenden
*
* @param headline Text, der zum Erstellen der Überschrift verwendet wird
* @return {string} Die Überschrift der Notiz
*/
function handleNewNoteHeadlineHook(headline);
2
3
4
5
6
7
8
9
10
11
12
13
Schauen Sie sich dazu das Beispiel auf custom-new-note-headline.qml (opens new window) an.
# preNoteToMarkdownHtmlHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, bevor das Markdown-HTML einer Notiz generiert wird
*
* Sie können ändern, was an den Markdown-zu-HTML-Konverter übergeben wird
*
* Die Funktion kann zum Beispiel in mehreren Skripten verwendet werden, um Code (wie LaTeX math oder mermaid)
* in seine grafische Darstellung für die Vorschau zu rendern
*
* Die Notiz wird dabei nicht verändert
*
* @param {NoteApi} note - das Notizobjekt
* @param {string} markdown - der Markdown, der gerade in HTML konvertiert wird
* @param {bool} forExport - true, wenn das HTML für einen Export verwendet wird, false für die Vorschau
* @return {string} der geänderte Markdown oder ein leerer String, wenn nichts geändert werden soll
*/
function preNoteToMarkdownHtmlHook(note, markdown, forExport);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Schauen Sie sich dazu das Beispiel auf preview-styling.qml (opens new window) an.
# noteToMarkdownHtmlHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn das Markdown-HTML einer Notiz generiert wird
*
* Damit können Sie den HTML-Code ändern
* Dies wird beispielsweise zuvor von der Notenvorschau aufgerufen
*
* Die Funktion kann in mehreren Skripten verwendet werden, um das HTML der Vorschau zu ändern
*
* @param {NoteApi} note - das Notizobjekt
* @param {string} html - das HTML, das gerendert werden soll
* @param {bool} forExport - true, wenn das HTML für einen Export verwendet wird, false für die Vorschau
* @return {string} der geänderte HTML-Code oder ein leerer String, wenn nichts geändert werden soll
*/
function noteToMarkdownHtmlHook(note, html, forExport);
2
3
4
5
6
7
8
9
10
11
12
13
14
Schauen Sie sich dazu Beispiele auf example.qml (opens new window) oder preview-styling.qml (opens new window) an.
Eine Liste aller unterstützten CSS-Stile finden Sie in der Dokumentation Supported HTML Subset (opens new window).
# encryptionHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn Text ver- oder entschlüsselt werden soll
*
* @param text string Der Text zum ent-/verschlüsseln
* @param password string Das Passwort
* @param decrypt bool false, wenn verschlüsselt werden soll, true wenn Entschlüsseln verlangt wird
* @return der ver-/entschlüsselte Text
*/
function encryptionHook(text, password, decrypt);
2
3
4
5
6
7
8
9
Schauen Sie sich dazu die Beispiele auf encryption-keybase.qml (opens new window), encryption-pgp.qml (opens new window) oder encryption-rot13.qml (opens new window) an.
# noteTaggingHook
Sie können Ihren eigenen Notiz-Schlagwortmechanismus beispielsweise mit speziellem Text in Ihrer Notiz implementieren, z.B. @tag1
, @tag2
, @tag3
.
# Methodenaufruf und Parameter
/ **
* Kümmert sich um Notiz-Schlagworte für eine Notiz
*
* Diese Funktion wird aufgerufen, wenn Schlagworte zu einer Notiz hinzugefügt, entfernt
* oder umbenannt werden, oder die Schlagworte einer Notiz aufgelistet werden sollen
*
* @param note
* @param action kann "add", "remove", "rename" oder "list" sein.
* @param tagName Schlagwortname, der hinzugefügt, entfernt oder umbenannt werden soll
* @param newTagName Schlagwort-Name, in den umbenannt werden soll, wenn action = "rename"
* @return note Text-String oder String-Liste von Schlagwortnamen (wenn action = "list")
*/
function noteTaggingHook(note, action, tagName, newTagName);
2
3
4
5
6
7
8
9
10
11
12
13
- sobald ein Skript aktiviert ist, das die neue Funktion
noteTaggingHook
implementiert, werden die Notiz-Schlagworte von dieser Funktion verarbeitet - die folgenden Funktionen sollten über die QOwnNotes-Benutzeroberfläche funktionieren
- importieren Sie zunächst Schlagworte wie
@tag
aus Ihren Notizen und überschreiben Sie Ihre aktuelle Schlagwort-Zuweisung- Sie werden Ihren Schlagwortbaum nicht verlieren, sondern nur die frühere Zuordnung zu Notizen
- Sie können Schlagwörter weiterhin in andere Schlagwörter verschieben
- wenn mehr als ein Schlagwort denselben Namen in Ihrem Schlagwortbaum hat, wird der erste Treffer zugewiesen
- durch Hinzufügen eines Schlagwortes zu einer Notiz wird das Schlagwort zum Notiztext hinzugefügt
- durch Entfernen eines Schlagwortes aus einer Notiz wird das Schlagwort aus dem Notiztext entfernt
- durch das Entfernen von Schlagwörtern in der Schlagwortliste werden diese Schlagwörter aus Ihren Notizen entfernt
- durch das Umbenennen von Schlagworten in der Schlagwortliste werden diese Schlagwörter in Ihren Notizen umbenannt
- durch Massen-Taggen von Notizen in der Notizliste werden diese Schlagworte zu Ihren Notizen hinzugefügt
- durch das Massenentfernen von Schlagworten aus Notizen in der Notizliste werden diese Schlagworte aus Ihren Notizen entfernt
- die Anwendung löst eine Reihe von
add
- undremove
-Aktionen aus für alle ausgewählten Schlagworte und ihre Unterelemente in allen Notizen, wenn Schlagworte im Schlagwortbedienfeld entfernt werden
- importieren Sie zunächst Schlagworte wie
Schauen Sie sich dazu das Beispiel auf note-tagging.qml (opens new window) an, um eigene Schlagwortmechanismen zu implementieren.
WARNING
Stellen Sie sicher, dass Ihre list
-Aktion sehr schnell ist, da sie bei jedem erneuten Laden des Notizordners für jede Notiz ausgeführt wird!
# noteTaggingByObjectHook
Ähnlich wie bei noteTaggingHook können Sie Ihren eigenen Mechanismus zum Markieren von Notizen implementieren, sind jedoch nicht an Schlagwortnamen in der Schlagwortbaumwurzel gebunden. Auf diese Weise können Sie den gesamten Schlagwortbaum anstelle von nur einer Schlagwortliste verwenden.
Mit noteTaggingByObjectHook
erhalten Sie anstelle eines Schlagwortnamens einTagApi
-Objekt als Parameter. Als Ergebnis für die Aktion list
müssen Sie eine Liste der Schlagwort-IDs bereitstellen.
Dies bedeutet auch, dass Sie fehlende Schlagworte selbst erstellen müssen, um eine Liste bereits vorhandener Schlagwort-IDs für die Aktion list
bereitstellen zu können.
# Methodenaufruf und Parameter
/**
* Kümmert sich um das das Markieren von Notizen für eine Notiz
*
* Diese Funktion wird aufgerufen, wenn Schlagworte in einer Notiz hinzugefügt, entfernt
* oder umbenannt werden oder die Schlagworte einer Notiz aufgelistet werden sollen
*
* @param note
* @param action kann "add", "remove", "rename" oder "list" sein.
* @param Schlagwort, das hinzugefügt, entfernt oder umbenannt werden soll
* @param newTagName Schlagwort-Name, in den umbenannt werden soll, wenn action = "rename"
* @return note Text-string oder string-Liste von Schlagwort-IDs (wenn action = "list")
*/
function noteTaggingByObjectHook(note, action, tag, newTagName);
2
3
4
5
6
7
8
9
10
11
12
13
Schauen Sie sich dazu das Beispiel auf note-tagging-by-object.qml (opens new window) an, wie Sie Ihren eigenen Schlagwort-Mechanismus implementieren können.
# autocompletionHook
Sie können eine Liste von Zeichenfolgen zurückgeben, die der Autovervollständigungsliste hinzugefügt werden sollen, wenn Autovervollständigung aufgerufen wird (z.B. durch Drücken von Strg + Leertaste).
# Methodenaufruf und Parameter
/**
* Ruft die AutocompletionHook-Funktion für alle Skriptkomponenten auf
* Diese Funktion wird aufgerufen, wenn die automatische Vervollständigung in einer Notiz aufgerufen wird
*
* @return QStringListe des Textes für die Autovervollständigungsliste
*/
function callAutocompletionHook ();
2
3
4
5
6
7
Schauen Sie sich dazu das Beispiel auf autocompletion.qml (opens new window) an.
# websocketRawDataHook
Dieser Hook wird aufgerufen, wenn Daten von der QOwnNotes Web Companion-Browsererweiterung über das Kontextmenü des Webbrowsers gesendet werden.
# Methodenaufruf und Parameter
/**
* @param requestType kann "page" oder "selection" sein
* @param pageUrl die URL der Webseite, wo die Anfrage gestellt wurde
* @param pageTitle der Titel der Webseite, wo die Anfrage gestellt wurde
* @param rawData die übertragenen Daten, HTML für requestType "page" oder Klartext für requestType "selection"
* @param screenshotDataUrl die Daten-URL des Screenshots der Webseite, wo die Anfrage gestellt wurde
* @return true wenn Daten durch einen Hook gelaufen sind
*/
function callHandleWebsocketRawDataHook(requestType, pageUrl, pageTitle, rawData, screenshotDataUrl);
2
3
4
5
6
7
8
9
Schauen Sie sich dazu die Beispiele auf websocket-raw-data-new-note.qml (opens new window) und websocket-raw-data-selection-in-note.qml (opens new window) an.
# onDetachedProcessCallback
Dieser Hook wird aufgerufen, wenn ein Skript-Thread von startDetachedProcess ausgeführt wird.
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn ein Skript-Thread fertig ausgeführt wurde.
* Hinweis: thread[1]==0 hilft festzustellen, ob ein Großteil der gestarteten Prozesse für einen bestimmten Identifier fertig ausgeführt wurde.
*
* @param {QString} callbackIdentifier - die beim Aufruf von startDetachedProcess() angegebene ID
* @param {QString} resultSet - das Ergebnis des Prozesses
* @param {QVariantList} cmd - das gesamte Befehlsarray [0-ausführbarer Pfad, 1-Parameter, 2-exitCode]
* @param {QVariantList} thread - das Thread-Informationsarray [0-übergebener CallbackParameter, 1-verbleibende Threads für diesen Bezeichner]
*/
function onDetachedProcessCallback(callbackIdentifier, resultSet, cmd, thread);
2
3
4
5
6
7
8
9
10
Schauen Sie sich dazu das Beispiel auf callback-example.qml (opens new window) an.
# windowStateChangedHook
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, nachdem ein WindowStateChange-Ereignis ausgelöst wurde
*
* @param {QString} windowState - Der neue Fensterstatus; Parameterwert kann "minimized", "maximized", "fullscreen", "active" oder "nostate" sein.
*/
function windowStateChangedHook(windowState);
2
3
4
5
6
Schauen Sie sich dazu das Beispiel auf window-state-changed.qml (opens new window) an.
# workspaceSwitchedHook
Dieser Hook wird aufgerufen, wenn Arbeitsbereiche gewechselt werden.
# Methodenaufruf und Parameter
/**
* Diese Funktion wird aufgerufen, wenn Arbeitsbereiche gewechselt werden
*
* @param oldUuid Alte Arbeitsbereich-UUID
* @param newUuid Neue Arbeitsbereich-UUID
*/
function workspaceSwitchedHook(oldUuid, newUuid);
2
3
4
5
6
7
Schauen Sie sich dazu das Beispiel auf websocket-raw-data-new-note.qml (opens new window) an.
# openAiBackendsHook
This hook is called, when the OpenAI service config is reloaded. For example, this is also done when the script engine is reloaded.
You can use it to provide config for custom OpenAI backends, like your own OpenAI API compatible LLMs.
# Method call and parameters
/**
* This function is called when the OpenAI service config is reloaded
* It returns a list of objects with config parameters for new OpenAI backends
*/
function openAiBackendsHook() {
return [
{
"id": "my-custom-ai",
"name": "My Custom AI",
"baseUrl": "http://localhost:5000",
"apiKey": "kDFJkjk3asdm",
"models": ["gpt-3.5-turbo", "gpt-4.0-turbo"],
},
{
"id": "my-custom-ai2",
"name": "My Custom AI 2",
"baseUrl": "http://localhost:5001",
"apiKey": "lOikf7eNdb9",
"models": ["gpt-3.5-turbo2", "gpt-4.0-turbo2"],
},
];
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TIP
You can use Registering script settings variables to store the OpenAI backend settings in the script settings.
You may want to take a look at the example custom-openai-backends.qml (opens new window).