Ho un servizio di sistema personalizzato sul mio Mac, intitolato Ricerca Google , che colloca il testo selezionato all'interno di un URL definito e quindi apre l'URL in una nuova scheda (adiacente alla scheda corrente) in Google Chrome.
Il mio servizio riceve text
selezionato in any application
. Il Servizio viene attivato esclusivamente tramite il menu di scelta rapida del tasto destro del mouse per il testo selezionato, a livello di sistema e in tutte le applicazioni. Nessuna app o scorciatoia da tastiera di terze parti è coinvolta.
Per impostazione predefinita, ogni volta che si fa clic su un collegamento che apre una nuova scheda in Chrome mentre si tiene premuto ⌘ comando , la scheda corrente in Chrome non cambia. La nuova scheda è aperta a destra e immediatamente adiacente alla scheda corrente, ma la nuova scheda non viene visualizzata nella scheda attiva.
Vorrei che il ⌘ comando abbia lo stesso effetto quando eseguo il mio servizio. In questo modo:
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.
Il mio servizio consiste in un'azione "Esegui AppleScript". Ecco il codice 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
Il mio reclamo con il codice precedente è che imposta la scheda corrente sulla nuova scheda, anche se viene tenuto premuto ⌘ comando all'avvio del servizio.
È possibile avere la scheda corrente non modificata nella nuova scheda se e solo se l'utente tiene premuto ⌘ comando quando viene eseguito il servizio?
Mi aspetto che la funzionalità chiave ⌘ comando funzioni quando si fa clic sul menu di scelta rapida con clic destro in Chrome.app. Ad esempio, se questo servizio viene attivato da Preview.app, mentre sarebbe bello avere ancora a mia disposizione la possibilità di utilizzare il tasto ⌘ comando per non modificare la scheda attiva della finestra di Chrome , Capisco che questo è probabilmente chiedere troppo.
Capisco che AppleScript non abbia alcun meccanismo per controllare se un tasto è premuto a metà script. Tuttavia, mi chiedo se esiste un metodo alternativo per creare una nuova scheda in AppleScript che faccia sì che Chrome esegua tutto l'ascolto in modo che Chrome possa rispondere a ⌘ comando come fa naturalmente.