Tetapkan pintasan untuk menjalankan skrip di OS X

33

Apakah OS X menyediakan cara mudah untuk mengikat kombinasi tombol ke perintah yang biasanya dijalankan pada baris perintah?

Misalnya, apakah ada cara untuk menetapkan ⌘ Cmd+ Lsebagai pintasan global untuk mengunci layar saya dengan cepat, mungkin menggunakan /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

Stefan Lasiewski
sumber

Jawaban:

21

Ya, Anda dapat melakukan ini dengan Applescript atau Automator .

Cara saya melakukan hal-hal seperti ini adalah menggunakan Automator untuk membuat Layanan yang tersedia di semua aplikasi. Layanan dapat dibuat untuk menjalankan skrip bash / zsh / ruby ​​/ apa pun. Kemudian Anda dapat mengikat kombinasi tombol ke layanan di panel Keyboard preferensi sistem.

Menjelang akhir podcast MacBreak ini prosedur ini ditampilkan secara rinci.

Sunting: Saya baru tahu Anda tidak menggunakan Snow Leopard. Saya tidak berpikir membuat layanan seluruh sistem semudah 10.5.8. Saya kira Anda tidak dapat memutakhirkan karena itu Powerbook. Anda mungkin ingin melihat ke FastScripts yang memungkinkan Anda untuk menetapkan pintasan keyboard ke applescripts (gratis untuk digunakan hingga 10 pintasan keyboard) dan menggunakan Applescript berikut:

do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine"
ghoppe
sumber
36

Saat ini saya menggunakan FastScripts . Ini termasuk semua skrip ~/Library/Scripts/, jadi Anda tidak perlu menambahkan skrip secara manual. Ini juga mendukung skrip khusus aplikasi, dan memiliki beberapa fitur yang berguna dengan AppleScripts, seperti skrip berhenti sebelum keystrokeatau key codeperintah hingga kunci pengubah dilepaskan.

Jika Anda telah membeli Powerpack untuk Alfred 2 , Anda dapat membuat alur kerja seperti ini:

Tombol pintas memiliki penundaan singkat secara default, tetapi Anda dapat menguranginya dengan mengubah perilaku pemicu:

KeyRemap4MacBook juga mendukung skrip shell yang sedang berjalan:

<?xml version="1.0"?>
<root>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_SHELL_say_a</name>
    <url type="shell">say a</url>
  </vkopenurldef>
  <item>
    <name>test</name>
    <identifier>test</identifier>
    <autogen>__KeyToKey__ KeyCode::A, KeyCode::VK_OPEN_URL_SHELL_say_a</autogen>
  </item>
</root>

Aplikasi lain yang mendukung menetapkan pintasan ke skrip:

Pilihan lain adalah membuat layanan Automator:

  1. Buka Automator dan pilih templat Layanan.
  2. Periksa bahwa jenis input dan ruang lingkup aplikasi sudah benar, atau ubah "teks yang dipilih" menjadi "tidak ada input" jika layanan tidak menerima input apa pun.
  3. Tambahkan Run Shell Script atau Run AppleScript action untuk skrip.
  4. Simpan layanan dan berikan pintasan dari System Preferences.

Ada bug sejak 10.7 di mana pintasan untuk layanan tidak selalu berfungsi sampai Anda mengarahkan kursor ke menu layanan dari bilah menu. Pintasan untuk layanan tidak berfungsi ketika aplikasi yang tidak memiliki menu layanan (seperti Tower) paling depan. Ada juga penundaan yang nyata sebelum layanan dijalankan.

Lri
sumber
open -a ScreenSaverEnginebahkan sedikit lebih pendek.
Jari Keinänen
Petunjuk Quicksilver: macosxtips.co.uk/index_files/…
paragbaxi
FastScripts adalah shareware $ 10 tetapi layak.
kutu buku yang dibayar
Apakah Anda memiliki FastScript dasar yang melakukan sesuatu seperti mengikat F1 untuk membuka terminal atau apa pun?
Nick T
1
Silakan tambahkan Hammerspoon ke daftar :)
vault
1

Jika Anda menggunakan BetterTouchTool, Anda dapat menetapkan pintasan ke perintah shell dengan memilih tindakan berikut: Mengontrol Aplikasi Lainnya> Jalankan Perintah Terminal

alexeit
sumber
0

Berikut ini contoh skrip KeePass.sh yang saya buat. Saya baru saja Dapatkan Info tentang itu dan mengaturnya untuk dijalankan dengan Terminal. Setelah itu, saya membuat alias di desktop saya. Ini menjalankan skrip KeePass.sh di dalam Terminal dan kemudian setelah Anda keluar dari aplikasi, ia membunuh semua jendela Terminal yang terbuka. Anda mungkin ingin mengubah baris terakhir :-)

cd ~/Documents/KeePass
/Library/Frameworks/Mono.framework/Versions/current/bin/mono KeePass.exe 1>/dev/null 2>/dev/null
cd ~
killall Terminal

Anda tidak perlu menggunakan hal khusus seperti dalam jawaban orang lain di sini.

segera
sumber