EmEditor v23.1.0 veröffentlicht (einschließlich technischem Review)

Heute veröffentlichen wir EmEditor v23.1.0.

In der vorherigen Version (v23.0) haben wir gezeigt, wie Sie mit Makros und dem integrierten Webbrowser von EmEditor auf die Webseite der generativen KI zugreifen und verschiedene Informationen und Dienste abrufen. Kunden, die einen kostenpflichtigen API-Schlüssel für die Website der generativen KI besitzen, können jedoch schnellere, hochwertigere Dienste mit stabilerem Betrieb erhalten, indem sie die API direkt aufrufen. Dazu wird die fetch-Funktion in JavaScript verwendet. Da diese Funktion asynchron arbeitet, kann der Rückgabewert der Funktion möglicherweise nicht mehr abgerufen werden, bevor das Makro endet. Tatsächlich war es bereits in v23.0 möglich, diese Methode zu verwenden, wenn der integrierte Webbrowser in EmEditor angezeigt wurde, aber es gab das Problem, dass asynchrone Funktionen nicht verwendet werden konnten, wenn der Webbrowser nicht angezeigt wurde. In dieser neuen Version (v23.1) ist es durch die Verwendung der KeepRunning-Eigenschaft nun möglich, auf den Abschluss der asynchronen Funktion zu warten, ohne das Makro zu beenden (nur EmEditor Professional). Geben Sie vor dem Aufruf der asynchronen Funktion die KeepRunning-Eigenschaft wie folgt an.

shell.KeepRunning = true;

Dadurch bleibt das Makro ausgeführt, sodass Sie den Rückgabewert der asynchronen Funktion abrufen können. Um das Makro nach dem Abrufen des Rückgabewerts der asynchronen Funktion zu beenden, können Sie Folgendes angeben:

shell.KeepRunning = false;

Dies entspricht nahezu Quit(), wenn auf den Abschluss asynchroner Funktionen gewartet wird, und das Makro endet sofort.

Nachfolgend finden Sie ein Beispielmakro, das die fetch-Funktion verwendet, um die OpenAI API zu nutzen. Um dieses Beispielmakro auszuführen, müssen Sie {your-API-key} durch Ihren API-Schlüssel ersetzen. Wenn Sie das folgende Makro ausführen, wird die Frage „How are you?“ an die OpenAI API gesendet und die Antwort in der Ausgabieleiste angezeigt.

#language="v8"

const apiKey = "{your-API-key}";

/**
 * Sends prompt to OpenAI and returns the response.
 * Docs: https://platform.openai.com/docs/guides/text-generation/chat-completions-api?lang=curl
 * @param {string} endpoint URL for request
 * @param {string} apiKey API key
 * @param {string} messageContent The prompt
 * @returns {string} The text content of the response
 */
async function callOpenAI(endpoint, apiKey, messageContent) {
    const response = await fetch(
        endpoint,
        {
            method: "POST",
            headers: {
                "Authorization": `Bearer ${apiKey}`,
                "content-type": "application/json",
            },
            body: JSON.stringify({
                "model": "gpt-3.5-turbo",
                "messages": [
                    {
                        "role": "user",
                        "content": messageContent,
                    }
                ],
            }),
        }
    );
    if (!response.ok) {
        alert(await response.text());
        Quit();
    }

    const responseObj = await response.json();
    if (responseObj.choices.length == 0) {
        alert("choices length is 0");
        Quit();
    }

    // Get content of first choice
    return responseObj.choices.pop().message.content;
}

async function main() {
    const endpoint = "https://api.openai.com/v1/chat/completions";
    const sPrompt = "How are you?";
    shell.KeepRunning = true;
    const response = await callOpenAI(endpoint, apiKey, sPrompt);
    OutputBar.writeln( response );
    OutputBar.Visible = true;
    shell.KeepRunning = false;
}
main();

Das CharOpenAI.jsee-Makrobeispiel erweitert dieses Beispiel weiter, indem es ein Popupmenü mit häufig verwendeten Fragen („Korrekturlesen“, „Zusammenfassen“, „Nachschlagen“, „Übersetzen“ …) für den aktuell ausgewählten Text oder das gesamte Dokument anzeigt. Wenn eine Frage ausgewählt wird, sendet es die Frage an die OpenAI API und zeigt die Antwort in der Ausgabieleiste an.

Tatsächlich verwende ich das CharOpenAI.jsee-Makro zum Übersetzen und Korrekturlesen, während ich diesen Blog schreibe. Durch die Kombination der generativen KI mit einem Texteditor konnte ich meine Arbeitseffizienz erheblich verbessern.

Eine weitere wesentliche Änderung in v23.1 ist die Geschwindigkeitsverbesserung bei der Verarbeitung großer Dateien. In v23.0 wurden Änderungen an Zeilen für einen schnelleren Betrieb im Arbeitsspeicher statt in temporären Dateien gespeichert. Bei Systemen mit begrenztem Arbeitsspeicher konnte dies jedoch zu Langsamkeit oder Fehlern aufgrund unzureichenden Systemarbeitsspeichers führen. In v23.1 wurden die speicherbezogenen Algorithmen überarbeitet, um effizienter zu arbeiten. Wenn der virtuelle Speicher nicht mehr ausreicht, werden nun außerdem temporäre Dateien zum Speichern der Daten verwendet. Dadurch müssen sich Benutzer keine Gedanken mehr über die Größe des virtuellen Speichers machen, und die Häufigkeit von Abstürzen wegen Speichermangels wurde erheblich reduziert. Die Verbesserungen im speicherbezogenen Code sowie die Verwendung von Multithreading und dem SIMD-Befehlssatz haben zu einer Geschwindigkeitssteigerung um das 1,51- bis 41,2-Fache gegenüber v23.0 für viele Befehle beim Bearbeiten riesiger Dateien geführt, einschließlich CSV-Dateien.

Die Hilfe-Funktion verwendet jetzt standardmäßig einen externen Browser anstelle des in EmEditor integrierten Webbrowsers, ähnlich wie v22.5 und frühere Versionen. Darüber hinaus wurde dem Dialogfeld Anpassen die Seite Hilfe hinzugefügt, sodass Benutzer Einstellungen zur Hilfe ändern können.

Zuletzt hat Makoto Emura die Funktion „Vervollständigungsliste“ unter Verwendung des Language Server Protocol (LSP) hinzugefügt. Um diese Funktion zu nutzen, muss auf der Seite Language Server der Konfigurationseigenschaften das Language Server Protocol aktiviert und außerdem die Option Vervollständigungsliste anzeigen aktiviert sein (nur EmEditor Professional). Derzeit unterstützt nur JavaScript diese Funktion.

Ich hoffe, dass Ihnen EmEditor gefällt, unabhängig davon, ob Sie die Version Professional oder Free verwenden. Bitte kontaktieren Sie uns oder schreiben Sie in den Foren, wenn Sie Fragen, Funktionswünsche oder Ideen für die Zukunft haben.

Vielen Dank, dass Sie EmEditor verwenden!
— Yutaka Emura

Einzelheiten und Screenshots finden Sie unter Neue Funktionen in EmEditor v23.1.

Diese Version enthält außerdem alle Fehlerbehebungen aus der Entwicklung von v23.1.

Wenn Sie die Desktop-Installer-Version verwenden, können Sie im Menü Hilfe die Option Auf Updates prüfen wählen, um die neueste Version herunterzuladen. Wenn diese Methode fehlschlägt, laden Sie die neueste Version herunter und führen Sie den heruntergeladenen Installer aus. Wenn Sie die portable Desktop-Version verwenden, können Sie die neueste Version auf der Downloadseite herunterladen. Die Store-App-Versionen können nach einigen Tagen über den Microsoft Store (64-Bit oder 32-Bit) aktualisiert werden.