LoginSignup
3
3

More than 5 years have passed since last update.

atom-shell でグローバルなキーボードショートカットを使う

Last updated at Posted at 2015-04-12

TL; DR

  • require('global-shortcut') を使う
  • イベントハンドラの登録は app.on('ready') イベントの中で行う

やりたいこと

Mac でいう Alfred みたいな常駐型キーワードランチャー的な何かが作りたいので、キーボードショートカットで画面が現れたり隠れるようにしたい。

やってみた

コードの全体は こちら に置いてます。

main.js
var app = require('app');
var BrowserWindow = require('browser-window');
var globalShortcut = require('global-shortcut');

require('crash-reporter').start();

var mainWindow = null;

app.on('window-all-closed', function() {
  app.quit();
});

app.on('ready', function() {
  mainWindow = new BrowserWindow({width: 800, height: 600});

  mainWindow.loadUrl('file://' + __dirname + '/index.html')

  mainWindow.on('closed', function() {
    mainWindow = null;
  });

  var displayWindow = true;

  var ret = globalShortcut.register('Ctrl + Shift + x', function() {
    if (displayWindow) {
      mainWindow.hide();
      displayWindow = false;
    } else {
      mainWindow.show();
      displayWindow = true;
    }
  });

  if (!ret) {
    console.log('registration fails');
  }
});

大事なのは globalShortcut.register() によるイベントハンドラの登録を app.ready('on') の中で行うことです。
その前に登録しようとすると、起動時に以下のようなエラーとともに異常終了します。

$ ~/Downloads/Atom.app/Contents/MacOS/Atom .
[24383:0413/032658:FATAL:global_shortcut_listener_mac.mm(64)] Check failed: BrowserThread::CurrentlyOn(BrowserThread::UI).
[1]    24383 trace trap  ~/Downloads/Atom.app/Contents/MacOS/Atom .

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3