# Hooks

# NoteStored에서

# 메서드 호출 및 매개 변수

/**
 * 이 기능은 노트가 디스크에 저장될 때 호출됩니다
 * 저장된 노트는 수정할 수 없습니다. 수작업으로 수정할 가능성이 
 * 높기 때문에 혼란스러울 수 있습니다.
 *
 * @param {NoteApi} note - the note object of the stored note
 */
function onNoteStored(note);
1
2
3
4
5
6
7
8

on-note-opened.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# noteOpenedHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 노트가 열린 후에 호출됩니다
 *
 * @param {NoteApi} note - the note object that was opened
 */
function noteOpenedHook(note);
1
2
3
4
5
6

on-note-opened.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# noteDoubleClickedHook

# 메서드 호출 및 매개 변수

/**
 * 함수는 노트를 더블클릭한 후 호출됩니다
 *
 * @param {NoteApi} note - the note object that was clicked
 */
function noteDoubleClickedHook(note);
1
2
3
4
5
6

external-note-open.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# insertMediaHook

이 기능은 현재 노트에 미디어 파일을 삽입할 때 호출됩니다.

이 함수가 여러 스크립트에 정의된 경우 비어 있지 않은 문자열을 반환하는 첫 번째 스크립트가 승리합니다.

# 메서드 호출 및 매개 변수

/**
 * @param fileName string the file path of the source media file before it was copied to the media folder
 * @param markdownText string the markdown text of the media file, e.g. ![my-image](media/my-image-4101461585.jpg)
 * @return string the new markdown text of the media file
 */
function insertMediaHook(fileName, markdownText);
1
2
3
4
5
6

example.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# insertAttachmentHook

이 기능은 첨부 파일이 현재 노트에 삽입될 때 호출됩니다.

이 함수가 여러 스크립트에 정의된 경우 비어 있지 않은 문자열을 반환하는 첫 번째 스크립트가 승리합니다.

# 메서드 호출 및 매개 변수

/**
 * @param fileName string the file path of the source attachment file before it was copied to the attachment folder
 * @param markdownText string the markdown text of the attachment file, e.g. [my-file.txt](attachments/my-file-4245650967.txt)
 * @return string the new markdown text of the attachment file
 */
function insertAttachmentHook(fileName, markdownText);
1
2
3
4
5
6

example.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# insertingFromMimeDataHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 `Ctrl + Shift + V`를 사용해 노트에 HTML 또는 미디어 파일을 붙여넣을 때 호출됩니다
 *
 * @param text text of the QMimeData object
 * @param html html of the QMimeData object
 * @returns the string that should be inserted instead of the text from the QMimeData object
 */
function insertingFromMimeDataHook(text, html);
1
2
3
4
5
6
7
8

example.qml (opens new window), insert-headline-with-link-from-github-url.qml (opens new window) 또는 note-text-from-5pm-mail.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# handleNoteTextFileNameHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 노트가 디스크에 저장될 때 다음과 같은 경우에 호출됩니다
 * 설정에서 "노트 파일 이름을 제목과 다르게 허용"이 활성화되어
 * 있습니다
 *
 * 노트 파일의 이름을 수정할 수 있습니다
 * 중복된 이름은 직접 관리해야 한다는 점을 명심하세요!
 *
 * 노트의 파일 이름을 수정하지 않아야 하는 경우
 * 빈 문자열 반환
 *
 * @param {NoteApi} note - the note object of the stored note
 * @return {string} the file name of the note
 */
function handleNoteTextFileNameHook(note);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

example.qml (opens new window) 또는 use-tag-names-in-filename.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# handleNoteNameHook

# 메서드 호출 및 매개 변수

/**
 * 이 기능은 노트에 대한 노트 이름이 결정될 때 호출됩니다
 *
 * 표시된 노트의 이름을 수정할 수 있습니다
 *
 * 노트 이름을 수정하지 않아야 하는 경우 빈 문자열 반환
 *
 * @param {NoteApi} note - the note object of the stored note
 * @return {string} the name of the note
 */
function handleNoteNameHook(note);
1
2
3
4
5
6
7
8
9
10
11

example.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

파일 이름을 노트 이름으로 사용하도록 설정이 활성화되어 있는 경우, 이 훅을 사용하는 것이 좋지 않을 수 있습니다.

# handleNewNoteHeadlineHook

# 메서드 호출 및 매개 변수

/**
 * 노트를 만들기 전에 이 함수를 호출합니다
 *
 * 노트를 만들기 전에 노트의 헤드라인을 수정할 수 있습니다
 * 고유한 노트 이름에 주의해야 합니다. 그렇지 않으면
 * 새 노트가 생성되지 않고 노트 목록에서만 찾을 수 있습니다
 *
 * 노트 템플릿을 만드는 데 이 기능을 사용할 수 있습니다
 *
 * @param headline text that would be used to create the headline
 * @return {string} the headline of the note
 */
function handleNewNoteHeadlineHook(headline);
1
2
3
4
5
6
7
8
9
10
11
12
13

custom-new-note-headline.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# preNoteToMarkdownHtmlHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 노트의 마크다운 HTML이 생성되기 전에 호출됩니다
 *
 * 마크다운으로 전달되는 내용을 HTML 변환기로 수정할 수 있습니다
 *
 * 예를 들어 이 함수는 여러 스크립트에서 미리보기를 위해 코드 (LaTeX 수학 또는 인어)를
 * 그래픽 표현으로 렌더링하는 데 사용할 수 있습니다
 *
 * 이 과정에서 노트는 변경되지 않습니다
 *
 * @param {NoteApi} note - the note object
 * @param {string} markdown - the markdown that is about to being converted to html
 * @param {bool} forExport - true if the html is used for an export, false for the preview
 * @return {string} the modified markdown or an empty string if nothing should be modified
 */
function preNoteToMarkdownHtmlHook(note, markdown, forExport);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

preview-styling.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

# noteToMarkdownHtmlHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 노트의 마크다운 html이 생성될 때 호출됩니다
 *
 * 이 html을 수정할 수 있습니다
 * 예를 들어 노트 미리 보기에서 이전에 호출됩니다
 *
 * 이 함수는 미리보기의 html을 수정하기 위해 여러 스크립트에서 사용될 수 있습니다
 *
 * @param {NoteApi} note - the note object
 * @param {string} html - the html that is about to being rendered
 * @param {bool} forExport - true if the html is used for an export, false for the preview
 * @return {string} the modified html or an empty string if nothing should be modified
 */
function noteToMarkdownHtmlHook(note, html, forExport);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

example.qml (opens new window) 또는 preview-styling.qml (opens new window) 예제를 살펴보는 것이 좋습니다.

지원되는 모든 css 스타일 목록은 지원되는 HTML 하위 집합 문서 (opens new window)를 참조하세요.

# encryptionHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 텍스트를 암호화하거나 해독해야 할 때 호출됩니다
 *
 * @param text string the text to encrypt or decrypt
 * @param password string the password
 * @param decrypt bool if false encryption is demanded, if true decryption is demanded
 * @return the encrypted decrypted text
 */
function encryptionHook(text, password, decrypt);
1
2
3
4
5
6
7
8
9

encryption-keybase.qml (opens new window), encryption-pgp.qml (opens new window) 또는 encryption-rot13.qml (opens new window)의 예를 살펴볼 수 있습니다.

# noteTaggingHook

예를 들어 노트에 @tag1, @tag2, @tag3와 같은 특수 텍스트를 사용하여 고유한 노트 태그 지정 메커니즘을 구현할 수 있습니다.

# 메서드 호출 및 매개 변수

/**
 * 노트에 대한 노트 태그 지정 처리
 *
 * 이 기능은 노트에 태그가 추가, 제거 또는 이름 변경되거나 노트의 태그가
 * 나열되어야 할 때 호출됩니다
 *
 * @param note
 * @param action can be "add", "remove", "rename" or "list"
 * @param tagName tag name to be added, removed or renamed
 * @param newTagName tag name to be renamed to if action = "rename"
 * @return note text string or string-list of tag names (if action = "list")
 */
function noteTaggingHook(note, action, tagName, newTagName);
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 새 기능을 구현하는 스크립트가 활성화되는 즉시 noteTaggingHook후크 노트 태그 지정은 해당 기능으로 처리됩니다
  • 다음 기능은 QOwnNotes 사용자 인터페이스를 통해 작동해야 합니다
    • 처음에 노트에서 @tag 와 같은 태그를 가져오고 현재 태그 할당을 덮어씁니다
      • 태그 트리를 잃지 않고 노트에 대한 이전 할당만 손실됩니다
      • 여전히 태그를 다른 태그로 이동할 수 있습니다
      • 태그 트리에 같은 이름의 태그가 둘 이상 있는 경우 첫 번째 히트가 할당됩니다
    • 노트에 태그를 추가하면 노트 텍스트에 태그가 추가됩니다
    • 노트에서 태그를 제거하면 노트 텍스트에서 태그가 제거됩니다
    • 태그 목록에서 태그를 제거하면 노트에서 해당 태그가 제거됩니다
    • 태그 목록의 태그 이름을 바꾸면 노트의 태그 이름이 바뀝니다
    • 노트 목록에 있는 노트에 대량 태그를 지정하면 해당 태그가 노트에 추가됩니다
    • 노트 목록의 노트에서 태그를 대량으로 제거하면 노트에서 태그가 제거됩니다
    • 태그 패널에서 태그가 이동된 경우 응용 프로그램은 선택한 모든 태그와 모든 노트의 하위 태그에 대해 일련의 추가제거 작업을 트리거합니다

note-tagging.qml (opens new window) 예제를 보고 자체 태그 메커니즘을 구현할 수 있습니다.

::: 경고 노트 폴더를 다시 로드할 때마다 모든 노트에 대해 목록 작업이 실행되므로 목록 작업이 매우 빠릅니다! :::

# noteTaggingByObjectHook

noteTaggingHook과 유사하게 자신만의 노트 태그 지정 메커니즘을 구현할 수 있지만, 태그 트리 루트의 이름에 태그를 지정할 필요는 없습니다. 이렇게 하면 태그 목록만 사용하는 대신 전체 태그 트리를 사용할 수 있습니다.

noteTaggingByObjectHook을 사용하면 태그 이름 대신 TagApi 개체를 매개 변수로 얻을 수 있습니다. 따라서 목록 작업의 경우 태그 Id 목록을 제공해야 합니다.

또한 목록 작업에 대해 이미 존재하는 태그 Id 목록을 제공하려면 누락된 태그를 직접 만들어야 합니다.

# 메서드 호출 및 매개 변수

/**
 * 노트에 대한 노트 태그 지정 처리
 *
 * 이 기능은 노트에 태그가 추가, 제거 또는 이름 변경되거나 노트의 태그가
 * 나열되어야 할 때 호출됩니다
 *
 * @param note
 * @param action can be "add", "remove", "rename" or "list"
 * @param tag to be added, removed or renamed
 * @param newTagName tag name to be renamed to if action = "rename"
 * @return note text string or string-list of tag ids (if action = "list")
 */
function noteTaggingByObjectHook(note, action, tag, newTagName);
1
2
3
4
5
6
7
8
9
10
11
12
13

고유한 태그 지정 메커니즘을 구현하기 위해 note-tagging-by-object.qml (opens new window) 예제를 살펴볼 수 있습니다.

# autocompletionHook

자동 완성이 호출될 때 자동 완성 목록에 추가할 문자열 목록을 반환할 수 있습니다 (예를들면 Ctrl + 스페이스 누르기).

# 메서드 호출 및 매개 변수

/**
 * 자동 완성을 호출합니다모든 스크립트 구성 요소에 대한 후크 기능
 * 이 함수는 노트에서 자동 완성이 호출될 때 호출됩니다
 *
 * @return QStringList of text for the autocomplete list
 */
function callAutocompletionHook();
1
2
3
4
5
6
7

autocompletion.qml (opens new window) 예제를 살펴볼 수 있습니다.

# websocketRawDataHook

이 후크는 웹 브라우저의 상황에 맞는 메뉴를 통해 QOwnNotes Web Companion 브라우저 확장에서 데이터를 전송할 때 호출됩니다.

# 메서드 호출 및 매개 변수

/**
 * @param requestType은 "page" 또는 "selection"일 수 있습니다
 * @param page요청이 이루어진 웹페이지의 Url
 * @param page요청이 이루어진 웹페이지의 페이지 제목
 * @paramrawData 전송된 데이터, request용 html "page" 또는 request용 평문Type "selection"
 * @param screenshotDataUrl 요청이 이루어진 웹 페이지의 스크린샷의 데이터 Url
 * @후크에 의해 데이터가 처리된 경우 true를 반환합니다
 */
function callHandleWebsocketRawDataHook(requestType, pageUrl, pageTitle, rawData, screenshotDataUrl);
1
2
3
4
5
6
7
8
9

websocket-raw-data-new-note.qml (opens new window)websocket-raw-data-selection-in-note.qml (opens new window)의 예를 살펴볼 수 있습니다.

# onDetachedProcessCallback

startDetachedProcess의 스크립트 스레드 실행이 완료되면 이 후크가 호출됩니다.

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 스크립트 스레드 실행이 완료되면 호출됩니다.
 힌트: thread[1]==0은 특정 식별자에 대해 시작된 프로세스의 대부분이 수행되었는지 여부를 확인하는 데 도움이 됩니다.
 *
 * @param {QString} callbackIdentifier - the provided id when calling startDetachedProcess()
 * @param {QString} resultSet - the result of the process
 * @param {QVariantList} cmd - the entire command array [0-executablePath, 1-parameters, 2-exitCode]
 * @param {QVariantList} thread - the thread information array [0-passed callbackParameter, 1-remaining threads for this identifier]
 */
function onDetachedProcessCallback(callbackIdentifier, resultSet, cmd, thread);
1
2
3
4
5
6
7
8
9
10

callback-example.qml (opens new window) 예제를 살펴볼 수 있습니다.

# windowStateChangedHook

# 메서드 호출 및 매개 변수

/**
 * 이 함수는 WindowStateChange 이벤트가 트리거된 후 호출됩니다
 *
 * @param {QString} windowState - the new window state, parameter value can be "minimized", "maximized", "fullscreen", "active" or "nostate"
 */
function windowStateChangedHook(windowState);
1
2
3
4
5
6

window-state-changed.qml (opens new window) 예제를 살펴볼 수 있습니다.

# workspaceSwitchedHook

이 후크는 작업 공간이 전환될 때 호출됩니다.

# 메서드 호출 및 매개 변수

/**
 * 이 기능은 작업 공간이 전환될 때 호출됩니다
 *
 * @param oldUuid old uuid of workspace
 * @param newUuid new uuid of workspace
 */
function workspaceSwitchedHook(oldUuid, newUuid);
1
2
3
4
5
6
7

websocket-raw-data-new-note.qml (opens new window) 예제를 살펴볼 수 있습니다.

# openAiBackendsHook

이 후크는 OpenAI 서비스 구성이 다시 로드될 때 호출됩니다. 예를들면, 이 작업은 스크립트 엔진이 다시 로드될 때도 수행됩니다.

사용자의 OpenAI API 호환 LLM과 같이 사용자 정의 OpenAI 백엔드에 대한 구성을 제공할 수 있습니다.

# 메소드 호출 및 매개변수

/**
* 이 함수는 OpenAI 서비스 구성을 다시 로드할 때 호출됩니다
* 새 OpenAI 백엔드에 대한 구성 매개 변수가 있는 개체 목록을 반환합니다
 */
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"],
        },
    ];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

::: 팁 스크립트 설정 변수 등록하기를 사용할 수 있습니다 OpenAI 백엔드 설정을 스크립트 설정에 저장합니다. :::

예제를 살펴보실 수 있습니다 custom-openai-backends.qml (opens new window).