Abriendo una página específica en Mac Preview desde Terminal

Cómo puedo modificar el open filename.pdfcomando para poder abrir un número de página deseado directamente sin tener que desplazarme hacia abajo.

Respuestas (1)

Desafortunadamente, el opencomando no tiene una opción para pasar a Vista previa para indicarle que vaya a una página determinada. Además, Preview no tiene un diccionario de AppleScript para facilitar la creación de secuencias de comandos, sin embargo, no es imposible. El siguiente script bash toma dos argumentos , el nombre del archivo del documento a abrir y el número de página al que se va a ir . Tenga en cuenta que si el archivo de destino para abrir no está en el directorio de trabajo en Terminal, entonces se debe usar el nombre de ruta completamente calificado.

Deberá crear un archivo para colocar este código y hacerlo ejecutable . Debe estar en un directorio que esté en $PATH, de lo contrario, para usarlo, deberá proporcionar el nombre de ruta completo al ejecutable o usarlo ./executableen el directorio de trabajo del ejecutable en la Terminal.

Para este ejemplo, usando la Terminal predeterminada, que se abre en el Directorio de inicio de uno:

touch OpenToPage
open OpenToPage

Ahora copie y pegue el código , de la sección Código: a continuación, en el documento abierto y guárdelo, luego ciérrelo.

Mientras aún está en la Terminal, haga que el archivo sea ejecutable :

chmod u+x OpenToPage

Para usar OpenToPage:

./opentopage /path/name/to/filename.pdf 3

O:

./opentopage '/path/name/to/file name.pdf' 3

./opentopage /path/name/to/file\ name.pdf 3

Código:

#!/bin/bash

if [[ -z $2 ]]; then
    [[ -z $1 ]] && printf "\n Missing Filename..."
    printf "\n Missing Page Number...\n\n"
    printf "   Syntax: OpenToPage Filename Page_Number\n"
    printf "   Example: OpenToPage Filename.pdf 3\n\n"
    exit 1
else
    open -a Preview "$1"
    sleep .5
    osascript -e 'tell application "Preview" to activate' \
              -e 'delay 0.25' \
              -e 'tell application "System Events" to tell process "Preview" to click menu item "Go to Page…" of menu "Go" of menu bar 1' \
              -e 'delay 0.25' \
              -e "tell application \"System Events\" to keystroke \"$2\"" \
              -e 'delay 0.25' \
              -e 'tell application "System Events" to key code 36'
fi
exit 0

Notas: Si el nombre de archivo de destino o la ruta de acceso tienen espacios, los espacios deben escaparse con una \(barra invertida) o el nombre de archivo de destino o la ruta de acceso deben estar entre comillas, pero no ambos.

Los tiempos sleepy delayse pueden ajustar si es necesario. Como el guión está escrito actualmente, los tiempos agregan 1,25 segundos en total a todo el proceso y probablemente deberían estar bien como están. Si tuviera que ajustar algo, cambiaría el valor de sleep, a .75o 1, antes de modificar los valores de delay.

El nombre del archivo de script bash en esta respuesta es arbitrario, asígnele el nombre que desee, por ejemplo, otpo o2ppara abrir en la página , etc.

Gracias por esta solución. Parece estar funcionando para mí, y un poco más rápido, incluso con el sleepy delays eliminado.
Voté a favor de su publicación el 14 de octubre y luego volví más tarde para agregar un comentario.
@sjy, ¡Perdón por el malentendido y gracias por votar! :)