AppleScript-Bug: Beim Platzieren von reinem Text in der Zwischenablage wird der Text immer in Rich Text umgewandelt

Führen Sie den folgenden Code aus, um Text in Ihre Zwischenablage zu kopieren:

set testString to "This string should be plain text."
set the clipboard to testString

Wenn Sie eine neue .rtf-Datei in TextEdit.app öffnen und die Zwischenablage in dieses Dokument einfügen, werden Sie feststellen, dass die Zwischenablage Rich-Text enthält. Insbesondere hat der Text in der Zwischenablage die Schriftart Helveticaund -größe 12.

Ich habe auch versucht, set the clipboard to (testString as string)oder anzugeben set the clipboard to (testString as text). Der Code fügt jedoch immer Rich-Text in die Zwischenablage ein. Dieser Rich-Text hat immer den gleichen Stil (wie im vorherigen Absatz beschrieben).

Ist es möglich, Text in AppleScript als Klartext in die Zwischenablage zu legen?


OS X El Capitan, Version 10.11.6.


Nachträglich ist dies nicht ganz korrekt. Wann immer (fast immer) Sie etwas in die Zwischenablage kopieren, werden mehrere Dinge und Formate dort abgelegt – selbst wenn es sich um „einfachen“ Text handelt. Wenn Sie Text kopieren, gibt es im Allgemeinen auch eine Rich-Text-Version, die (nehme ich an) immer dann verwendet wird, wenn Sie in ein Rich-Text-Dokument einfügen. Beachten Sie, dass TextEdit seine eigenen seltsamen Regeln zu Dingen zu haben scheint, sodass ich nicht sehe, wie eine allgemeine Aussage getroffen werden kann, die auf seinem Verhalten basiert. Ich habe gerade etwas Text von dieser Seite eingefügt (etwas Kommentartext) und es wurde als Times formatiert. Und TextEdit bietet auch "Match Style".

Antworten (3)

Wenn Sie den Text mit Cocoa-AppleScript in das Pasteboard kopieren, wird möglicherweise nur einfacher Text zum Einfügen in das RTF-Dokument festgelegt.

Verwenden Sie andernfalls Folgendes als Problemumgehung:

set testString to "This string should be plain text." as string
do shell script "pbcopy <<<" & quoted form of testString

Die zuvor erwähnte Methode zur Problemumgehung fügt der Zwischenablage ein linefeedNachher hinzu testString. Wenn dies ein unerwünschtes Verhalten ist, verwenden Sie Folgendes:

set testString to "This string should be plain text." as string
do shell script "printf " & the quoted form of testString & " | pbcopy"

Die andere Option besteht darin , Einfügen und Stil anpassen ⌥⇧⌘V anstelle von Einfügen ⌘V zu verwenden, um den Einfügepunkt anzupassen.

Ich kann bestätigen, dass Ihr Code das gewünschte Ergebnis des Einfügens der Zeichenfolge als Klartext implementiert. Beide Codebeispiele offenbaren jedoch einen neuen AppleScript-Fehler: Wenn testStringein Em-Bindestrich (—) oder ein En-Bindestrich (–) enthalten ist, werden diese Bindestriche in Mojibake umgewandelt. In Bezug auf Ihren ultimativen Vorschlag besteht das Problem mit "Paste and Match Style" darin, dass dieser Befehl nicht in alle Anwendungen geschrieben ist.
Interessanterweise nähert sich diese Stack Overflow-Antwort , die ich gefunden habe (die genau den Fehler zitiert, den ich in meinem ursprünglichen Beitrag beschrieben habe), dem Problem aus demselben Blickwinkel.
In @rubiks Sphäre sagten Sie: "In Bezug auf Ihren ultimativen Vorschlag besteht das Problem mit "Paste and Match Style" darin, dass dieser Befehl nicht in alle Anwendungen geschrieben ist." Ich erwähnte ⌥⇧⌘V, weil Sie TextEdit im OP sagten, also ich davon ausgegangen, dass Sie TextEdit verwenden. Das heißt, viele Anwendungen haben ⌥⇧⌘V , obwohl dies als Paste Unformatted Text oder ähnliches bezeichnet werden kann, und viele Apps haben Paste Special ... ⇧⌘V , die dies ebenfalls handhaben können. Ja, möglicherweise haben nicht alle Apps einige oder alle davon, aber Sie müssen mit dem arbeiten, was Sie haben, wenn die Verwendung von Cocoa-AppleScript das Problem nicht lösen kann.
@rubik's sphere, BTW, EM DASH und EN DASH sind kein reiner ASCII-Text und teilweise wahrscheinlich der Grund, warum Sie Mojibake erhalten. Das heißt, AppleScript hat, wie Sie herausgefunden haben, viele Fehler, daran besteht kein Zweifel, zumal ähnliche Operationen in anderen Apps wie erwartet funktionieren, anders als AppleScript einige Dinge verstümmeln kann und tut. Wenn Sie keinen Fix/Workaround für die Verwendung mit AppleScript finden, müssen Sie eine andere Sprache/Methode verwenden, um das Ziel zu erreichen. Eine andere Möglichkeit besteht darin, das gelegentliche Auftreten von Mojibake einfach manuell zu korrigieren. Ist das so eine große Sache?
1. Zum Punkt "⌥⇧⌘V" habe ich im OP nur TextEdit erwähnt, weil ich daraus geschlossen habe, dass die von AppleScript festgelegte Zwischenablage Rich-Text enthält. Dies war meine Frage: "Ist es möglich, Text in AppleScript als Klartext in die Zwischenablage zu legen?" Das betreffende Skript fügt den Text nicht ein oder drückt ihn nicht. Das Skript platziert den Text lediglich in der Zwischenablage (damit der Benutzer diesen Text einfügen kann, wo immer er möchte). 2. Nein, der em dash/en dash Bug ist keine große Sache. Ihre Lösung erfüllt meine Anforderungen. Ich werde Ihren Code implementieren und eine replace_charsErklärung hinzufügen, um diesen Fehler zu berücksichtigen.

Das sollte funktionieren:

set the clipboard to string of (the clipboard as record)

Tatsächlich können Sie es mit einer try-Anweisung auf Sicherheit prüfen:

try
  set the clipboard to string of (the clipboard as record)
on error errMsg
  display dialog errMsg
end try
Ich habe Ihren Code getestet, aber er legt den Rich-Text immer noch in der Zwischenablage ab. Funktioniert diese Lösung in Ihrer Umgebung richtig?

Es sieht so aus, als würde Ihre Zwischenablage, egal was Sie tun, reinen Text einfügen, wenn Sie in Ihren Textbearbeitungseinstellungen auf Ihrer neuen Dokumentregisterkarte einfachen Text ausgewählt haben. Wenn Sie jedoch Rich-Text aktiviert haben, sieht es so aus, als ob alles als Rich-Text in ein RTF-Dokument eingefügt wird.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ich habe auch versucht, den Text im RTF-Dokument auszuwählen und im Formatmenü in Klartext zu konvertieren. Ein Dialogfenster öffnete sich und sagte, dass das Dokument von RTF in reinen Text konvertiert würde, wenn ich den Text formatieren würde

Versuchen Sie Folgendes, um das Problem zu sehen, über das ich spreche: Erstellen Sie ein .rtf-Dokument in TextEdit. Geben Sie dann Text mit einer anderen Schriftart als Helvetica und in einer anderen Größe als 12 ein. Fügen Sie nun die Zwischenablage ein (deren Text durch den AppleScript-Code festgelegt wurde). Sie werden feststellen, dass die Schriftart dieses Textes in Helvetica geändert wurde und die Größe auf 12 geändert wurde . Dies bedeutet, dass der Text in der Zwischenablage Rich-Text ist; die eindeutigen Schriftartdaten und die eindeutigen Größendaten sind in der Zwischenablage enthalten.