8 votos

¿Es posible teclear caracteres especiales en AppleScript?

El Error:

Para ciertos caracteres especiales y símbolos, AppleScript, se producirá a keystroke el carácter real, y en lugar de ello, simplemente escriba la letra a.


Un Ejemplo:

El siguiente AppleScript código:

tell application "System Events" to keystroke "² ³ é ½ ₭"

los tipos de la siguiente cadena de texto (independientemente de la aplicación que estoy en el):

a a a a a

Una Solución:

Uno puede efectivamente "tipo" en el texto, mediante la colocación de los caracteres especiales en el portapapeles y, a continuación, pegar el portapapeles, así:

set the clipboard to "² ³ é ½ ₭"
tell application "System Events" to keystroke "v" using command down

Evito usar el método anterior para poner el texto en el portapapeles en AppleScript, porque necesariamente se convierte en el portapapeles de texto enriquecido en el proceso.

Prefiero emplear el método proporcionado aquí, para asegurarse de que el texto sin formato se coloca en el portapapeles. Pero, este método convierte los caracteres especiales para mojibake.

Por ejemplo, el uso de la misma cadena como en el anterior, este método pone el siguiente texto en el portapapeles:

² ³ é ½ ₭

Usted puede manualmente cuenta para este problema, sin embargo, mediante la adición de un replace_chars instrucción para cada carácter especial.


La Pregunta:

Es allí una manera de escribir caracteres especiales mediante AppleScript, sin tener que involucrar el portapapeles?

Por ejemplo, ¿hay alguna manera de que yo pueda agregar el especial de caracteres a un "banco" o el sistema de archivo en algún lugar, por lo que el System Events aplicación está familiarizado con ellos?


10voto

Baczek Puntos 150

Es posible con CoreGraphics (CGEventPost), es un C API (no funciona en el Cacao-AppleScript), pero es posible llamar a un archivo ejecutable de un AppleScript.


Aquí es el método para crear el archivo ejecutable con Xcode (Versión 8.3.3):

Usted puede hacerlo usted mismo (se puede descargar Xcode desde la App Store), o pida a una persona de confianza para crear el ejecutable.

1- Abrir Xcode, seleccione el menú "Archivo" --> "Nuevo" --> "Proyecto..." enter image description here


2- Seleccione macOS y la Herramienta de Línea de Comandos, haga clic en el "Next" botón. enter image description here


3- Nombre TypeCharacters, seleccione Objective-C como Lenguaje, haga clic en el "Next" botón. enter image description here


4- Guardar el proyecto en la carpeta deseada.


5- En la ventana de Xcode, seleccione la main.n icono borrar el texto en la ventana y pegar este código:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        if (argc > 1) {
            NSString *theString = [NSString stringWithUTF8String:argv[1]];
            const unichar *uChars = (const unichar *)[theString cStringUsingEncoding:NSUnicodeStringEncoding];
            CGEventRef keyEvent = CGEventCreateKeyboardEvent(nil, 0, true);
            CGEventKeyboardSetUnicodeString(keyEvent, [theString length], uChars);
            CGEventPost(kCGHIDEventTap, keyEvent); // key down
            CGEventSetType(keyEvent, kCGEventKeyUp);
            CGEventPost(kCGHIDEventTap, keyEvent); // key up (type the full string)
            CFRelease(keyEvent);
        }
    }
    return 0;
}

Nota : Este código funciona en macOS Sierra y debe trabajar en El Capitan, pero no en un más viejo OS.

enter image description here


6- Seleccione el menú "Productos" --> "Construir".


7- Seleccione el TypeCharacters icono en el Producto de la carpeta, haga clic derecho y seleccione la opción "Mostrar en el Finder" en el menú en el menú contextual.

enter image description here


8- Desde el Finder, vaya a "TypeCharacters" archivo a la carpeta deseada, dejar de Xcode, eso es todo.


A partir de un AppleScript, llamar al ejecutable, como este

set myString to "ùéèà ² ³ é ½ ₭ "
do shell script "'/full path/of/TypeCharacters' " & quoted form of myString

6voto

Baczek Puntos 150

Una solución (con el portapapeles):

1 - Puede utilizar un método de cacao de un shell:

 set tString to "² ³ é ½ ₭"
my stringToClipboard(tString)
tell application "System Events" to keystroke "v" using command down

on stringToClipboard(t1)
    do shell script "/usr/bin/python -c 'import sys;from AppKit import NSPasteboard, NSPasteboardTypeString; cb=NSPasteboard.generalPasteboard();cb.declareTypes_owner_([NSPasteboardTypeString], None);cb.setString_forType_(sys.argv[1].decode(\"utf8\"), NSPasteboardTypeString)' " & quoted form of t1
end stringToClipboard
 

2 - O un Applet Cocoa-AppleScript:

 use framework "AppKit"
use scripting additions
set tString to "² ³ é ½ ₭"
my stringToClipboard(tString)
tell application "System Events" to keystroke "v" using command down

on stringToClipboard(t1)
    set ca to current application
    set cb to ca's NSPasteboard's generalPasteboard()
    cb's declareTypes:{ca's NSPasteboardTypeString} owner:(missing value)
    cb's setString:t1 forType:(ca's NSPasteboardTypeString)
end stringToClipboard
 

3voto

Andreas Scherer Puntos 161

Con el fin de keystroke un carácter, ese carácter debe ser asignado a una tecla real en el teclado seleccionado.

Por ejemplo, puedo keystroke é y ² muy bien, porque estoy usando el diseño de teclado francés - PC . Sin embargo, un teclado estándar QWERTY americano no incluye esas teclas y no podrá keystroke ellas.

2voto

wch1zpink Puntos 11

Puede definir todos sus caracteres especiales como variables, como este

on specialKeys(input)
    tell application "System Events"
        keystroke input
    end tell
end specialKeys


set characterSet1 to "²³é½₭ "
set characterSet2 to "³ "
set characterSet3 to "é "
set characterSet4 to "¬Ω "
set characterSet5 to "₭ "
set characterSet6 to characterSet1 & characterSet2 & characterSet3 & characterSet4 & characterSet5

specialKeys(characterSet1)
-- ² ³ é ½ ₭ is the result from calling specialKeys(characterSet1) After adding the text replacement for "a a a a a" in my keyboard preferences

Algunos caracteres especiales de pulsaciones correctamente cuando se establece como variables. Cualquiera de los caracteres especiales que establece como variables que no son de pulsaciones correctamente, puede añadir "las sustituciones de texto" en preferencias del sistema para el teclado.

Asegúrese de seleccionar todos los elementos y arrastrarlos al escritorio o donde sea. Esto creará una .plist archivo que va a ser una copia de seguridad de su configuración original. Puede arrastrar este archivo en cualquier momento.

enter image description here

enter image description here

A continuación, en ScriptEditor, asegúrese de que usted tiene las sustituciones de texto habilitado en el "sustituciones" sub-menú del menú edición.

enter image description here

enter image description here

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X