На моєму Mac працює спеціальна системна служба під назвою Пошук Google , яка розміщує вибраний текст у визначеній URL-адресі, а потім відкриває URL-адресу на новій вкладці (поруч із поточною вкладкою) у Google Chrome.
Моя служба отримує вибране text
в any application
. Служба спрацьовує виключно за допомогою контекстного меню правою кнопкою миші для вибраного тексту, загальносистемного та всіх програм. Жоден сторонній додаток чи ярлик клавіатури не задіяний.
За замовчуванням кожне натискання на посилання, що відкриває нову вкладку в Chrome, утримуючи її ⌘ command, поточна вкладка в Chrome не змінюється. Нова вкладка відкривається праворуч від та безпосередньо примикає до поточної вкладки, але нова вкладка не робиться активною вкладкою.
Я хотів би, щоб ⌘ command ключ мав такий самий ефект, коли я запускаю Сервіс. Так що:
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.
Моя служба складається з однієї дії "Запустити AppleScript". Ось повний код:
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
Моя скарга з вищевказаним кодом полягає в тому, що він встановлює поточну вкладку на нову вкладку, навіть якщо ⌘ commandвона утримується, коли Служба починається.
Чи можливо, щоб поточна вкладка не була змінена на нову вкладку, якщо і лише у випадку, якщо користувач утримує ⌘ commandпри запуску Служби?
Я очікую, що ⌘ commandключова функціональність працюватиме лише тоді, коли контекстне меню правою кнопкою миші натискається в Chrome.app. Наприклад, якщо ця Служба запускається в Preview.app, хоча було б непогано все-таки мати в своєму розпорядженні можливість використовувати ⌘ commandключ, щоб не змінювати активну вкладку вікна Chrome, я розумію, що це, ймовірно, просить забагато.
Я розумію, що AppleScript не має механізму перевірити, чи натискається клавіша середнього скрипту. Однак мені цікаво, чи існує альтернативний метод створення нової вкладки в AppleScript, який змушує Chrome виконувати все прослуховування, щоб Chrome міг реагувати так, ⌘ commandяк це відбувається природно.