Erfassung ausgewählter Bereiche in Web-Browsern für Obsidian

Das Bild zeigt ein Arbeitszimmer mit einem großen Computerbildschirm, der eine Website anzeigt. Der Schreibtisch, auf dem der Monitor steht, ist mit verschiedenen Büromaterialien wie Stiftbehältern, Notizblöcken und einem Globus dekoriert. Neben dem Schreibtisch befindet sich ein Stuhl. Im Raum gibt es Pflanzen und einige Bilderrahmen an den Wänden. Tageslicht strömt durch ein Fenster, das einen Ausblick auf eine grüne Umgebung bietet. Alles ist im monochromen Stil gehalten, wodurch eine skizzenhafte Atmosphäre entsteht.

In mei­nem Artikel Kleine Einführung in die Verwendung von „Browser Actions” beschrei­be ich am Schluss einen Kurzbefehl, der einen aus­ge­wähl­ten Bereich aus einem Browser-Fenster als Snippet in einer Obsidian-Notiz spei­chert. In die­sem Artikel möch­te ich die­sen Kurzbefehl erwei­tern, um die Möglichkeit zu bie­ten, dem Snippet eine eige­ne Anmerkung und Tags hin­zu­zu­fü­gen. Dazu nut­ze ich die Technik, die ich in mei­nem Artikel Mit einem Kurzbefehl Daten aus einem HTML-Formular in Obsidian inte­grie­ren vor­ge­stellt habe. Dieser Kurzbefehl nutzt Aktionen, die von den Apps Browser Actions und Actions For Obsidian bereit­ge­stellt wer­den.

Funktionsweise des Kurzbefehls

Auf dem Bild ist ein Flussdiagramm dargestellt, das einen Prozess beschreibt. Der Prozess beginnt im Browser und führt durch verschiedene Schritte, um Daten zu erfassen und schließlich eine Snippet-Seite anzuzeigen. 

- Zunächst gibt es eine Abfrage, ob Inputparameter vorhanden sind.
- Je nach Antwort werden entweder Browser-Aktionen ausgeführt, um bestimmte Daten (wie URL, Titel und Auswahl) zu erfassen, oder es wird direkt ein Snippet-Inhalt erstellt.
- Ein Benutzer ergänzt dann Informationen wie Notizen und Tags und reicht ein Formular ein.
- Schließlich zeigt das System die Snippet-Seite an. 

Das Diagramm enthält auch Überschriften in Deutsch, die die einzelnen Schritte des Prozesses angeben.

Der Kurzbefehl besteht aus zwei Bearbeitungssträngen, die abhän­gig davon, wie der Kurzbefehl auf­ge­ru­fen wird, abge­ar­bei­tet wer­den. Erfolgt der Aufruf, nach­dem in einem akti­ven Browser-Fenster ein Bereich aus­ge­wählt wur­de, wird er ohne einen Input-Parameter auf­ge­ru­fen. So wird dann zunächst die „Ja-Bedingung“ der „wenn“-Abfrage aus­ge­führt.

Wichtig ist, dass die „wenn“-Abfrage rich­tig aus­ge­führt wird. Dazu muss als Parameter in der Kurzbefehl-Eingabe-Box die „Nein-Eingabe“ aus­ge­wählt sein. Dies wird genau­er in mei­nem Artikel Mit einem Kurzbefehl Daten aus einem HTML-Formular in Obsidian inte­grie­ren erklärt.

Im ers­ten Schritt der Bearbeitung kommt die Aktion „Get Details of the tab…“ aus der Browser Action-App zum Einsatz, die alle rele­van­ten Attribute des akti­ven Browser-Fensters erfasst, die für die­sen Kurzbefehl wich­tig sind:

  • pageURL
  • pageTitle
  • Current Selection (Markdown)

Nun wird ein vor­ge­fer­tig­tes HTML-Formular geöff­net und mit die­sen Daten, wie­der­um unter Zuhilfenahme von Aktionen der App Browser Actions, gefüllt. Zusätzlich kön­nen in die­sem Formular die eige­nen Anmerkungen und die Tags erfasst wer­den.

Nach dem Klicken auf den „Send“-Button wird der Kurzbefehl erneut auf­ge­ru­fen und der „Nein“-Teil der Bedingung durch­lau­fen. In die­sem Teil wird der Inhalt des Snippets erstellt und mit Hilfe von Actions for Obsidian in die dafür vor­ge­se­he­ne Notiz in Obsidian ein­ge­fügt.

Das HTML-Formular

Das Layout

Auf dem Bild ist ein Screenshot des Formulars zu sehen. Dieses enthält mehrere Textfelder und Bereiche für Eingaben, darunter:

- Eine Vorschau, in der Markdown-Inhalte angezeigt werden.
- Ein Feld für Anmerkungen, wo Benutzer Kommentare hinzufügen können.
- Ein Tag-Bereich, in dem mehrere Optionen zur Auswahl stehen, um Inhalte zu kategorisieren.
- Ein weiteres Textfeld für die Eingabe von Markdown.
- Eingabefelder für eine URL und einen Seitentitel.
- Einen „Senden“-Button am unteren Rand.

Das HTML-Formular ist ein­fach auf­ge­baut. Im obe­ren Bereich wird die Browser-Auswahl ange­zeigt. In der nächs­ten Reihe wer­den das Textfeld für die Eingabe eige­ner Anmerkungen und der Eingabe der Tags ange­bo­ten. Häufig benutz­te Tags kön­nen im HTML-Code defi­niert wer­den und erschei­nen an die­ser Stelle dann als Checkboxen und kön­nen so schnell aus­ge­wählt wer­den. Eine Eingabe des ‘#’-Zeichens ist nicht not­wen­dig, da dies durch das JavaScript auto­ma­tisch hin­zu­ge­fügt wird.

Der unte­re Bereich zeigt die zuvor im Browser-Fenster erfass­ten Daten an. In der lin­ken Spalte das Markdown der Auswahl und in der rech­ten Spalte die URL sowie der Seitentitel. Diese Felder sind not­wen­dig, damit die Daten aus dem ers­ten Aufruf des Kurzbefehls wei­ter­ver­ar­bei­tet wer­den kön­nen. Außerdem kön­nen sie an die­ser Stelle auch noch edi­tiert wer­den. Es ist aber auch mög­lich, die­sen Bereich zu ver­ste­cken, wozu im HTML-Code die CSS-Klasse .hidden-input ver­wen­det wer­den kann.

Am Ende der Seite wird der „Senden“-Button ange­zeigt, mit dem die Daten an den Kurzbefehl zur Erstellung des Snippets über­ge­ben wer­den.

Das gleich Formular wie oben aber gefüllt mit Daten aus der Wikipedia Seite über Flensburg.

Der HTML-Code

Im <head>-Bereich der HTML-Datei befin­den sich die not­wen­di­gen CSS-Definitionen sowie der Aufruf der markedjs/marked-Bibliothek, die für die Erstellung der Vorschau des Markdowns genutzt wird.

Im <body>-Bereich wer­den die zuvor beschrie­be­nen Felder defi­niert, eben­so wie der „Senden“-Button. Dieser Bereich ent­hält auch den not­wen­di­gen JavaScript-Teil mit den bei­den Funktionen:

  • updatePreview(): Diese Funktion aktua­li­siert die Vorschau, sobald das Markdown ver­än­dert wird.
  • handleSubmit(): Diese Funktion berei­tet die Formular-Daten als JSON-String auf und ruft den Kurzbefehl erneut mit dem JSON-String als Parameter auf. Dabei wer­den die Tags um das # ergänzt und in einem Array gespei­chert. Abschließend wer­den alle Daten in einem Objekt zusam­men­ge­fasst, in einen JSON-String kon­ver­tiert und über das URL-Schema shortcuts://run-shortcut an den Kurzbefehl über­ge­ben.

Hier ist die gesam­te HTML-Datei:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Erstelle Snippet mit einer Anmerkung und Tags in Obsidian</title>
    <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
    <style>
/* Base Body */
body {
    margin: 0;
    padding: 10px;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    background-color: #f4f7f9;
    color: #333;
}

/* Container */
.container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    max-width: 1000px;
    margin: 0 auto;
}

/* Box */
.box {
    background-color: #fff;
    border-radius: 8px;
    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1);
    padding: 15px;
    border: 1px solid #ddd;
}

/* Preview Box */
.preview-box {
    grid-column: 1 / 3;
    min-height: 200px;
    font-size: 0.9rem;
    overflow: auto;
}

.preview-box h2 {
    margin-top: 0;
    font-size: 1.2rem;
    color: #007acc;
}

/* Anmerkung und Tags - 2 Column Grid */
.notes-tags-box {
    grid-column: 1 / 3;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}
.note-field {
    
}

/* Tags Bereich */
.tag-input {
    width: 100%;
    padding: 8px;
    font-size: 0.9rem;
    border-radius: 4px;
    border: 1px solid #ccc;
    margin-top: 8px;
    margin-bottom: 15px; /* Added space below tag input field */
}

/* Checkbox Gruppe - ermöglicht Zeilenumbruch */
.checkbox-group {
    display: flex;
    flex-wrap: wrap;
    gap: 10px; /* Space between checkboxes */
}

.checkbox-group label {
    display: flex;
    align-items: center;
    margin-right: 10px;
}

/* Markdown und Meta Information 2 Column Grid */
.markdown-meta-box {
    grid-column: 1 / 3;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

/* Eingabe und Textarea Stil */
textarea, input[type="text"] {
    width: 100%;
    padding: 8px;
    font-size: 0.9rem;
    border-radius: 4px;
    border: 1px solid #ccc;
    box-sizing: border-box;
}

textarea {
    min-height: 100px;
    resize: vertical;
}

/* Senden Button */
.submit-button {
    display: block;
    margin: 20px auto;
    padding: 12px 24px;
    font-size: 1rem;
    background-color: #007acc;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: background-color 0.3s;
}

.submit-button:hover {
    background-color: #005999;
}

/* Klasse zum Verstecken des Containers für das Markdown etc. */

.hidden-input {
position: absolute;
left: -1000px;
overflow: hidden;
width: 1px;
height: 1px;
}


/* Minimales responsives Design */
@media (max-width: 768px) {
    .container {
        grid-template-columns: 1fr;
    }

    .preview-box,
    .notes-tags-box,
    .markdown-meta-box {
        grid-column: 1 / 2;
    }

    .notes-tags-box, .markdown-meta-box {
        grid-template-columns: 1fr;
    }
}
</style>
</head>
<body>

    <div class="container">
        <!-- Vorschau (spans über beide columns) -->
        <div class="box preview-box" id="preview-container">
            <h2>Vorschau der Auswahl</h2>
            <div id="preview">
                <p>Markdown Preview wird hier angezeigt.</p>
            </div>
        </div>

        <!-- Anmerrkungen and Tags jeweils eine column -->
        <div class="notes-tags-box">
            <div class="box notes-section">
                <h3>Anmerkung</h3>
                <textarea id="notes" class="note-field" name="notes" placeholder="Gebe Deine Anmerkung hier ein..."></textarea>
            </div>

            <div class="box tags-section">
                <h3>Tags</h3>
                <input type="text" id="tags" class="tag-input" placeholder="Für zusätzliche mit Kommas getrennte Tags">
                <div class="checkbox-group">
                    <label><input type="checkbox"> Wichtig</label>
                    <label><input type="checkbox"> Fragen</label>
                    <label><input type="checkbox"> Beispiel</label>
                    <label><input type="checkbox"> Idee</label>
                    <label><input type="checkbox"> Widerspruch</label>
                    <label><input type="checkbox"> Nachverfolgen</label>
                </div>
            </div>
        </div>

        <!-- Markdown und Meta Information über beide columns -->
        <!-- kann mit de class hidden-input ausgeblendet werden -->
        <div class="markdown-meta-box">
            <div class="box markdown-section">
                <h3>Markdown</h3>
                <textarea id="markdown" placeholder="Hier wird das Markdown der Auswahl angezeigt" oninput="updatePreview()"></textarea>
            </div>

            <div class="box meta-section">
                <h3>URL</h3>
                <input type="text" id="url" placeholder="URL">
                <h3>Seiten-Title</h3>
                <input type="text" id="title" placeholder="Seiten-Title">
            </div>
        </div>
    </div>


    <button class="submit-button" onclick="handleSubmit()">Senden</button>

    <script>
        function updatePreview() {
            const markdownContent = document.getElementById('markdown').value;
            const previewBox = document.getElementById('preview');
            previewBox.innerHTML = marked.parse(markdownContent);
        }

        function handleSubmit() {
            const notes = document.getElementById('notes').value;
            const tagsInput = document.getElementById('tags').value;
            const markdown = document.getElementById('markdown').value;
            const url = document.getElementById('url').value;
            const title = document.getElementById('title').value;

            const tagsArray = tagsInput.split(',')
            .map(tag => `#${tag.trim()}`)
            .filter(tag => tag.length > 1);

            const checkedTags = Array.from(document.querySelectorAll('.checkbox-group input[type="checkbox"]:checked'))
            .map(checkbox => `#${checkbox.parentElement.textContent.trim()}`);

            const tags = [...tagsArray, ...checkedTags];

            const data = {
                notes: notes,
                tags: tags,
                markdown: markdown,
                url: url,
                title: title
            };

            const jsonString = JSON.stringify(data);
            window.location.href = `shortcuts://run-shortcut?name=Snippets+&input=${encodeURIComponent(jsonString)}`;
            window.close();
        }
    </script>
</body>
</html>

Das Snippet+ Layout

Bevor der Kurzbefehl betrach­tet wird, muss das Layout des Snippets+ defi­niert wer­den. Es besteht aus den fol­gen­den vier Bereichen:

  1. Kopfzeile: Die Kopfzeile beginnt mit dem Callout-Indikator > [!quote]. Darauf fol­gen das aktu­el­le Datum, der Seitentitel und die Seiten-URL.
  2. Tags: Der zwei­te Abschnitt ent­hält eine Zeile mit den Tags.
  3. Auswahl: Der drit­te Abschnitt ent­hält die Browserauswahl, for­ma­tiert in Markdown.
  4. Anmerkung: Der vier­te Abschnitt ent­hält die Anmerkung, die zur bes­se­ren Unterscheidung von der Auswahl kur­siv dar­ge­stellt wird.

Hier ist ein Beispiel im Markdown-Format, zusam­men mit einem Screenshot aus Obsidian:

> [!quote]  06.12.24 [Flensburg – Wikipedia](https://de.wikipedia.org/wiki/Flensburg)
>#Wichtig
> **Flensburg** ([dänisch](https://de.wikipedia.org/wiki/D%C3%A4nische_Sprache) und [niederdeutsch](https://de.wikipedia.org/wiki/Niederdeutsche_Sprache) **Flensborg**, [nordfriesisch](https://de.wikipedia.org/wiki/Nordfriesische_Sprache) Flansborj oder _Flensborag_, [südjütisch](https://de.wikipedia.org/wiki/S%C3%B8nderjysk) _Flensborre_, [lateinisch](https://de.wikipedia.org/wiki/Latein) Flenopolis oder _Flensburgum_[[2]]()) ist eine große [kreisfreie](https://de.wikipedia.org/wiki/Kreisfreie_Stadt) [Mittelstadt](https://de.wikipedia.org/wiki/Mittelstadt) im Norden [Schleswig-Holsteins](https://de.wikipedia.org/wiki/Schleswig-Holstein). Nach [Kiel](https://de.wikipedia.org/wiki/Kiel) und [Lübeck](https://de.wikipedia.org/wiki/L%C3%BCbeck) ist Flensburg mit 92.667 Einwohnern (Stand: 31. Dezember 2023) die drittgrößte Stadt des Bundeslandes, die größte im [Landesteil Schleswig](https://de.wikipedia.org/wiki/S%C3%BCdschleswig) und die nördlichste [kreisfreie Stadt Deutschlands](https://de.wikipedia.org/wiki/Liste_der_kreisfreien_St%C3%A4dte_in_Deutschland).
>
> *Dat is mien Heimat, dor bün ik leid nich mehr to Huus.*
Das Bild zeigt das gerendete Snippet. In der ersten Zeile die Überschrift der Notiz, unter der das Snippet eingefügt wird. Dann das Icon für Quote, das Datum un der Tile. Weiter die Zeile mit den Tags, gefolgt von der Auswahl und dan in Kursiver Schrift die Anmerkung.

In dem Kurzbefehl wird die­ser Callout so defi­niert:

Das Bild zeigt die entsprechend Definition des Callouts in dem Kurzbefehl

Die Kurzbefehl-Definition

In dem ers­ten Block der meis­ten Kurzbefehle wird die Quelle der Kurzbefehleingabe defi­niert. In die­sem Kurzbefehl ist das nicht not­wen­dig, da beim ers­ten Aufruf die Aktion „Get details of the Tab…“ den akti­ven Browser direkt auf­ruft und im zwei­ten Aufruf die Daten als Parameter direkt an den Kurzbefehl über­ge­ben wer­den. Daher soll­te „Keine Eingabe” als Quelle fest­ge­legt wer­den.

Diese Option wird am ein­fachs­ten defi­niert, indem zunächst die Wenn-Aktion in den Kurzbefehleditor gezo­gen und dann die „Kurzbefehleingabe” als Eingabeparameter aus­ge­wählt wird. Es erscheint der Eingabe-Block mit der Quelle „Nirgendwo“. Nun wird die Angabe der „Bilder und 18 weiter“-Eingaben auf „Nein“ gesetzt, indem die Auswahl aller Checkboxen auf­ge­ho­ben wird.

Die wei­te­ren Aktionen wer­den unter den Bereichen Wenn und Sonst ein­ge­tra­gen. Der Block unter dem Wenn wird aus­ge­führt, wenn die Kurzbefehleingabe beim Aufruf kei­ne Daten ent­hält, und der Block unter dem Sonst-Block, wenn der Kurzbefehl über den „Senden“-Button der HTML-Seite auf­ge­ru­fen wird. Dabei wird dann der Kurzbefehl mit einem Parameter auf­ge­ru­fen.

Die „hat keinen Wert“-Bedingung

Wenn der Kurzbefehl aus dem Browser her­aus auf­ge­ru­fen wird, geschieht dies ohne einen Eingabewert, und daher wird der Block nach der „wenn“-Aktion durch­lau­fen.

Das Bild zeigt den ersten Teil der Kurzbefehldefinition. Der Ablauf wird im Text beschrieben.

Die Aktion „Get details of the tab acti­ve tab of front­most win­dow in front­most brow­ser“ aus der App „Browser-Actions“ über­nimmt alle rele­van­ten Daten von der Webseite. Diese Daten sind in der voll­stän­di­gen Liste der erfass­ba­ren Attribute beschrie­ben, die in der Browser-Action Dokumentation zu fin­den ist. Für die­sen Kurzbefehl sind ledig­lich die aktu­el­le Auswahl (als Markdown), die URL und der Titel der Webseite rele­vant.

Als Nächstes wird die HTML-Datei mit dem Eingabeformular in einem neu­en Tab des Browsers geöff­net. Die Formularfelder für die URL, den Seitentitel und das Markup wer­den dann mit den zuvor ermit­tel­ten Daten gefüllt. Dies geschieht mit­hil­fe der Aktion „Set form field with ‘id’ attri­bu­te of field name to value para­me­ter in acti­ve tab of front­most win­dow of front­most brow­ser“ aus der App „Browser-Actions“.

Sobald die Felder mit Daten gefüllt sind, kön­nen eine zusätz­li­che Anmerkung sowie Tags hin­zu­ge­fügt wer­den. Danach wird der Kurzbefehl been­det.

Die „Sonst“-Bedingung

Wenn die Bearbeitung des Formulars durch das Klicken des „Senden-Buttons“ been­det wird, wird der Kurzbefehl erneut auf­ge­ru­fen. Da dies nun mit dem JSON-String als Wert für die Kurzbefehleingabe geschieht, wer­den die Aktionen der Sonst-Bedingung aus­ge­führt.

Das Bild zeigt den zweiten Teil der Kurzbefehldefinition. Der Ablauf wird im Text beschrieben.

Als Eingabe erhält der Kurzbefehl einen JSON-String wie die­sen:

{
    "tags":
    [
        "#Wichtig",
        "#Beispiel"
    ],
    "title": "Flensburg – Wikipedia",
    "notes": "Dat is mien Heimat, dor bün ik leid nich mehr to Huus.",
    "url": "https://de.wikipedia.org/wiki/Flensburg",
    "markdown": "**Flensburg** ([dänisch](https://de.wikipedia.org/wiki/D%C3%A4nische_Sprache) und [niederdeutsch](https://de.wikipedia.org/wiki/Niederdeutsche_Sprache) **Flensborg**, [nordfriesisch](https://de.wikipedia.org/wiki/Nordfriesische_Sprache) Flansborj oder _Flensborag_, [südjütisch](https://de.wikipedia.org/wiki/S%C3%B8nderjysk) _Flensborre_, [lateinisch](https://de.wikipedia.org/wiki/Latein) Flenopolis oder _Flensburgum_[[2]]()) ist eine große [kreisfreie](https://de.wikipedia.org/wiki/Kreisfreie_Stadt) [Mittelstadt](https://de.wikipedia.org/wiki/Mittelstadt) im Norden [Schleswig-Holsteins](https://de.wikipedia.org/wiki/Schleswig-Holstein). Nach [Kiel](https://de.wikipedia.org/wiki/Kiel) und [Lübeck](https://de.wikipedia.org/wiki/L%C3%BCbeck) ist Flensburg mit 92.667 Einwohnern (Stand: 31. Dezember 2023) die drittgrößte Stadt des Bundeslandes, die größte im [Landesteil Schleswig](https://de.wikipedia.org/wiki/S%C3%BCdschleswig) und die nördlichste [kreisfreie Stadt Deutschlands](https://de.wikipedia.org/wiki/Liste_der_kreisfreien_St%C3%A4dte_in_Deutschland)."
}

Um dar­aus das Snippet+ zusam­men­zu­set­zen, müs­sen die ein­zel­nen Schlüssel-Wert-Paare auf­be­rei­tet wer­den.

Zuerst wird das Tags-Array in einen ein­zel­nen String umge­wan­delt, bei dem die ein­zel­nen Tags durch Leerzeichen getrennt sind. Dies geschieht mit der Aktion „Text kom­bi­nie­ren“. Das Ergebnis wird in der Variablen „tags“ gespei­chert.

Im nächs­ten Schritt wird das Markdown auf­be­rei­tet. Da das Snippet in einem Obsidian-Callout ange­zeigt wer­den soll, muss, falls die Auswahl aus meh­re­ren Zeilen besteht, vor jeder Zeile das > ste­hen. Dazu wird das Markdown zunächst in ein­zel­ne Zeilen auf­ge­teilt, damit dann mit der Aktion „Mit jedem Objekt aus text wie­der­ho­len“ vor jede Zeile das > vor­an­ge­stellt wer­den kann. Das Ergebnis die­ser Schleife wird dann als kom­bi­nier­ter Text in der Variablen markdown gespei­chert.

Die glei­che Prozedur wird dann noch ein­mal mit den Anmerkungen notes durch­ge­führt, da auch hier ggf. meh­re­re Zeilen ein­ge­ge­ben sein könn­ten.

Nun kann das Snippet in einem Textfeld, wie oben defi­niert, erstellt wer­den. Dieses Feld wird dann in Obsidian einer der Snippets+-Notiz vor­an­ge­stellt (in mei­nem Fall im Vault „Obsidian Cloud“ in der Notiz „00 New/Snippet+“ unter der Überschrift ## Snippets+).

Die „Stop and output“-Aktion wird auto­ma­tisch nach dem ers­ten Lauf erstellt.

Fazit und Ausblick

Das war’s! Wie ich in einem der vor­he­ri­gen Artikel erwähnt habe, füge ich die meis­ten mei­ner Kurzbefehle auf dem Mac nur dem Kurzbefehl-Menü im Finder hin­zu, da dies für mich der ein­fachs­te Weg ist, auf sie zuzu­grei­fen. Wenn ande­re Methoden zuge­wie­sen wer­den, wie z.B. Tastenkurzbefehle, muss sicher­ge­stellt wer­den, dass das „Verknüpfungseingabe“-Feld auf „Nein“ und „Nirgendwo“ ste­hen bleibt. Andernfalls könn­te dies dazu füh­ren, dass der fal­sche Teil der beding­ten Anweisung aus­ge­führt wird.

Dieser Kurzbefehl läuft nur auf dem Mac, da die Beschränkungen in iOS und iPadOS Apps wie „Browser Actions“ unmög­lich machen.

Es sind sicher­lich noch eini­ge Erweiterungen mög­lich. Dieser Artikel soll kein „Endprodukt“ vor­stel­len, son­dern zu eige­nen Lösungen inspi­rie­ren.

Wie immer, freue ich mich über Lob, Kritik, Ideen oder Verbesserungsvorschläge in den Kommentaren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert