Nido Apple

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ayuda para el manejo de los HANDLERS

--================================
--ENTORNO INICIAL:
--El puntero (cursor) está en cualquier punto de la cadena del nombre de archivo de una ventana del Finder
-- Supongamos que llamamos COLA a la parte comprendida entre la posición del puntero en el nombre del archivo en el Finder y el último carácter del nombre del archivo (incluyendo la extensión).

--El OBJETIVO es determinar la porción comprendida entre la posición del puntero y el último carácter del nombre del archivo (excluyendo la extensión).

--El script funciona, pero cuando intento poner el código comprendido en la sentencia if.. else en forma de handler (ver la parte final) y ejecutarlo (ambos puestos como comentario para mostrarlos) no logro comprender por qué no funcional cuando intento su ejecución versionandolo como handler.

--Agradecería ayuda que me aclarara qué es lo que no he comprendido acerca de cómo invocar los handers y recoger sus resultados.
--================================

tell application "System Events"
    key code 125 using {command down, shift down} -- Selecciona todo el resto a partir del puntero (incluye la posible extensión)
    delay 0.2
    keystroke "c" using command down -- copiado al portapapeles
    delay 0.2
    set cola to the clipboard

    if cola contains "." then -- eliminar
        set cola to (the reverse of every character of cola) as string
        set x to the offset of "." in cola
        set cola to (text (x + 1) thru -1 of cola)
        set cola to (the reverse of every character of cola) as string
    end if

    --suprimir_extension(cola) -- La ejecución debería hacer la misma función que el código comprendido entre if... end if.

    set tamCola to (length of cola)
    key code 123 -- puntero retorna al comienzo de la cola
    delay 0.1

    -- luego, podrá ser seleccionada, copiada, cortada, eliminada, o enviar el puntero a su extremo final.

    repeat tamCola times -- En este caso, Seleccionar la Cola
        key code 124 using shift down
    end repeat

end tell

(*

on suprimir_extension(nombreParcial)

    if nombreParcial contains "." then
        say "Entrando en instrucción if... endif"  -- línea de control (¡¡¡el flujo no entra!!!)
        set nombreParcial to (the reverse of every character of nombreParcial) as string
        set x to the offset of "." in nombreParcial
        set nombreParcial to (text (x + 1) thru -1 of nombreParcial)
        set nombreParcial to (the reverse of every character of nombreParcial) as string
    end if
    return nombreParcial

end suprimir_extension

*)

1 Respuesta

1voto

DJUNQUERA Puntos2290

Hola.

Creo que he conseguido saber la respuesta a mi pregunta.

La finalidad del script es seleccionar la parte comprendida entre la localización del cursor del nombre del archivo seleccionado en el Finder y el carácter anterior al punto que separa el nombre base del archivo de su extensión (desde la localización del cursor hasta el final del nombre base del archivo).

Dejando aparte lo "chapucero" del algoritmo para conseguir el propósito y yendo al núcleo de la cuestión, la clave está en que para invocar a un handler desde el interior de un bloque tellend tell es necesario hacerlo anteponiendo la palabra reservada "my".
De esta manera la llamada al handler desde el bloque tell será "escuchada"

Salud.

tell application "System Events"
    key code 125 using {command down, shift down} -- Selecciona todo el resto a partir del puntero (incluye la posible extensión)
    delay 0.2
    keystroke "c" using command down -- copiado al portapapeles
    delay 0.2
    set cola to the clipboard

    my suprimir_extension(cola)  -- *** se necesita poner la palabra resevada "my" a la llamda de ejecución del handler ***

    set tamCola to (length of cola)
    key code 123 -- puntero retorna al comienzo de la cola
    delay 0.1

    repeat tamCola times -- Seleccionar la Cola
        key code 124 using shift down
    end repeat

end tell

on suprimir_extension(nombreParcial)
    if nombreParcial contains "." then
        say "Entrando en instrucción if... endif" -- línea de control (¡¡¡el flujo no entra!!!)
        set nombreParcial to (the reverse of every character of nombreParcial) as string
        set x to the offset of "." in nombreParcial
        set nombreParcial to (text (x + 1) thru -1 of nombreParcial)
        display dialog "nombreParcial : " & nombreParcial as text
        set nombreParcial to (the reverse of every character of nombreParcial) as string
        display dialog "nombreParcial : " & nombreParcial as text   
    end if

    return nombreParcial
end suprimir_extension

0voto

Peter comentado

Gracias por compartir la solución, seguramente le ayuda a otros. Por favor selecciona la respuesta para marcar la pregunta como solucionada.

1voto

DJUNQUERA comentado

Saludos, Peter.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...