Tengo un servicio de sistema personalizado en mi Mac, titulado Búsqueda en Google que coloca el texto seleccionado dentro de una URL definida y luego abre la URL en una nueva pestaña (adyacente a la pestaña actual) en Google Chrome.
Mi Servicio recibe seleccionado text
en any application
. El Servicio se activa exclusivamente a través del menú contextual del botón derecho del ratón para el texto seleccionado, en todo el sistema y en todas las aplicaciones. No hay ninguna aplicación de terceros ni ningún atajo de teclado.
Por defecto, cada vez que uno hace clic en un enlace que abre una nueva pestaña en Chrome mientras mantiene command la pestaña actual en Chrome no cambia. La nueva pestaña se abre a la derecha de la pestaña actual e inmediatamente adyacente a ella, pero la nueva pestaña no se convierte en la pestaña activa.
Me gustaría que el command para tener el mismo efecto cuando ejecute mi Servicio. Pues eso:
if <the command key is being pressed when the Service is triggered> then
Open URL in a new, adjacent tab.
(Do not change the active tab.)
else
Open URL in a new, adjacent tab.
Change the active tab to the new tab.
Mi servicio consiste en una acción "Run AppleScript". Aquí está el código completo:
on run {input, parameters}
(*
When triggering this Service in applications other than Google Chrome, such as TextEdit, the Chrome window opens in the background. This command brings the Chrome window to the foreground:
*)
activate application "Google Chrome"
(*
Converting the selected text to plain text to remove any formatting:
From: http://lifehacker.com/127683/clear-text-formatting-on-os-x
*)
set selectedText to input
set selectedText to (selectedText as text)
(*
Removing any line breaks and indentations in the selected text:
From: http://stackoverflow.com/a/12546965
*)
set AppleScript's text item delimiters to {return & linefeed, return, linefeed, character id 8233, character id 8232}
set plainTextSelectedText to text items of (selectedText as text)
set AppleScript's text item delimiters to {" "}
set plainTextSelectedText to plainTextSelectedText as text
(* Assigning variables: *)
set baseURL to "https://www.google.com/search?q="
set finalLink to baseURL & plainTextSelectedText
(* Opening webpage in Chrome: *)
(*
The following tell block creates a new tab, located immediately after the currently open tab, which is what I want to occur.
From: http://apple.stackexchange.com/questions/271702/applescript-how-to-open-a-link-in-google-chrome-in-a-new-adjacent-tab/271709#271709
*)
tell application "Google Chrome"
activate
tell front window to make new tab at after (get active tab) with properties {URL:finalLink} -- open a new tab after the current tab
end tell
end run
Mi queja con el código anterior es que establece la pestaña actual a la nueva pestaña, incluso si command se mantiene pulsado cuando se inicia el Servicio.
¿Es posible tener la pestaña actual no cambiar a la nueva pestaña si y sólo si el usuario mantiene pulsado command cuando se ejecuta el Servicio?
Sólo espero que el command para que funcione cuando se haga clic en el menú contextual del botón derecho en Chrome.app. Por ejemplo, si este Servicio se activa desde Vista Previa.app, aunque sería bueno seguir teniendo a mi disposición la capacidad de utilizar el command para no cambiar la pestaña activa de la ventana de Chrome, entiendo que esto es probablemente pedir demasiado.
Entiendo que AppleScript no tiene ningún mecanismo para comprobar si se está pulsando una tecla a mitad descript. Sin embargo, me pregunto si hay un método alternativo para crear una nueva pestaña en AppleScript que haga que Chrome haga toda la escucha para que Chrome pueda responder a command como lo hace naturalmente.
0 votos
@user3439894 Por supuesto que tenías razón en la discrepancia. Pido disculpas por la confusión. He actualizado mi respuesta para reflejar todo el Servicio.