- 投稿日:2020-10-11T22:55:20+09:00
Mac用タイル型ウィンドウマネージャーのyabaiがヤバイ
WM(Window Manager)とは
Linuxを普段使いしている人ならおなじみのWM(Window Manger)。
キーボードだけでモニター内のアプリのウィンドウを操作できるツールです。
有名なものだとi3やxmonadがあります。
この二つをは基本的にLinuxのみで動くもので、LinuxからMacに移行する人や、両方とも使う人にはMac用の代替品が欲しくなります。
その一つがyabaiです。yabaiとは
yabaiはi3ライクにウィンドウ操作ができるWMです。
キーボードのみでウィンドウの切り替えやサイズ・レイアウトの変更ができます。
yabaiのセットアップ
yabaiをbrewでインストール
brew install koekeishiya/formulae/yabai
yabai自体は
yabai -m window --focus recent
などのコマンドでウィンドウを操作するもので、キーボードで操作するには、skhdというショートカットツールが必要になります。skhdをbrewでインストール
brew install koekeishiya/formulae/skhd
yabaiとskhdには、ショートカットを定義するそれぞれの設定ファイルをルートディレクトリに置く必要があります。
基本的には、yabaiの開発者の設定ファイルを参考にして改良しました。.yabairc#!/usr/bin/env sh # global settings yabai -m config mouse_follows_focus on yabai -m config focus_follows_mouse autoraise yabai -m config window_placement second_child yabai -m config window_topmost on yabai -m config window_shadow off yabai -m config window_opacity on yabai -m config window_opacity_duration 0.0 yabai -m config active_window_opacity 1.0 yabai -m config normal_window_opacity 0.95 yabai -m config window_border on yabai -m config window_border_width 6 yabai -m config active_window_border_color 0xff775759 yabai -m config normal_window_border_color 0xff555555 yabai -m config insert_feedback_color 0xaad75f5f yabai -m config split_ratio 0.50 yabai -m config auto_balance on yabai -m config mouse_modifier fn yabai -m config mouse_action1 move yabai -m config mouse_action2 resize # general space settings yabai -m config layout bsp yabai -m config top_padding 12 yabai -m config bottom_padding 12 yabai -m config left_padding 12 yabai -m config right_padding 12 yabai -m config window_gap 06 # specific space settings yabai -m config --space 2 layout stack yabai -m config --space 7 layout float # window rules yabai -m rule --add app="^Mail$" space=2 yabai -m rule --add app="^Safari$" space=3 yabai -m rule --add app="^Notes$" space=4 yabai -m rule --add app="^Transmission$" space=5 yabai -m rule --add app="^Spotify$" space=6 yabai -m rule --add app="^Discord$" space=7 grid=1:1:0:0:1:1 manage=off yabai -m rule --add app="^Steam$" space=7 manage=off yabai -m rule --add app="^System Preferences$" manage=off # signals yabai -m signal --add event=window_destroyed action="yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse" yabai -m signal --add event=application_terminated action="yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse" yabai -m signal --add event=application_activated app="^mpv$" action="/Users/Koe/Scripts/mpv_opacity" yabai -m signal --add event=application_deactivated app="^mpv$" action="/Users/Koe/Scripts/mpv_opacity" # restore position of floating windows when they are manually unfloated # ~/Scripts/yabai_restore.sh echo "yabai configuration loaded..".skhdrc# focus window alt - x : yabai -m window --focus recent alt - h : yabai -m window --focus west alt - j : yabai -m window --focus south alt - k : yabai -m window --focus north alt - l : yabai -m window --focus east alt - z : yabai -m window --focus stack.prev alt - c : yabai -m window --focus stack.next # swap window shift + alt - x : yabai -m window --swap recent shift + alt - h : yabai -m window --swap west shift + alt - j : yabai -m window --swap south shift + alt - k : yabai -m window --swap north shift + alt - l : yabai -m window --swap east # move window shift + cmd - h : yabai -m window --warp west shift + cmd - j : yabai -m window --warp south shift + cmd - k : yabai -m window --warp north shift + cmd - l : yabai -m window --warp east # balance size of windows shift + alt - 0 : yabai -m space --balance # make floating window fill screen shift + alt - up : yabai -m window --grid 1:1:0:0:1:1 # make floating window fill left-half of screen shift + alt - left : yabai -m window --grid 1:2:0:0:1:1 # make floating window fill right-half of screen shift + alt - right : yabai -m window --grid 1:2:1:0:1:1 # create desktop, move window and follow focus - uses jq for parsing json (brew install jq) shift + cmd - n : yabai -m space --create && \ index="$(yabai -m query --spaces --display | jq 'map(select(."native-fullscreen" == 0))[-1].index')" && \ yabai -m window --space "${index}" && \ yabai -m space --focus "${index}" # create desktop and follow focus - uses jq for parsing json (brew install jq) cmd + alt - n : yabai -m space --create && \ index="$(yabai -m query --spaces --display | jq 'map(select(."native-fullscreen" == 0))[-1].index')" && \ yabai -m space --focus "${index}" # destroy desktop cmd + alt - w : yabai -m space --destroy # fast focus desktop cmd + alt - x : yabai -m space --focus recent cmd + alt - z : yabai -m space --focus prev || skhd -k "ctrl + alt + cmd - z" cmd + alt - c : yabai -m space --focus next || skhd -k "ctrl + alt + cmd - c" cmd + alt - 1 : yabai -m space --focus 1 || skhd -k "ctrl + alt + cmd - 1" cmd + alt - 2 : yabai -m space --focus 2 || skhd -k "ctrl + alt + cmd - 2" cmd + alt - 3 : yabai -m space --focus 3 || skhd -k "ctrl + alt + cmd - 3" cmd + alt - 4 : yabai -m space --focus 4 || skhd -k "ctrl + alt + cmd - 4" cmd + alt - 5 : yabai -m space --focus 5 || skhd -k "ctrl + alt + cmd - 5" cmd + alt - 6 : yabai -m space --focus 6 || skhd -k "ctrl + alt + cmd - 6" cmd + alt - 7 : yabai -m space --focus 7 || skhd -k "ctrl + alt + cmd - 7" cmd + alt - 8 : yabai -m space --focus 8 || skhd -k "ctrl + alt + cmd - 8" cmd + alt - 9 : yabai -m space --focus 9 || skhd -k "ctrl + alt + cmd - 9" cmd + alt - 0 : yabai -m space --focus 10 || skhd -k "ctrl + alt + cmd - 0" # send window to desktop and follow focus #shift + cmd - x : yabai -m window --space recent && yabai -m space --focus recent #shift + cmd - z : yabai -m window --space prev && yabai -m space --focus prev #shift + cmd - c : yabai -m window --space next && yabai -m space --focus next #shift + cmd - 1 : yabai -m window --space 1 && yabai -m space --focus 1 #shift + cmd - 2 : yabai -m window --space 2 && yabai -m space --focus 2 #shift + cmd - 3 : yabai -m window --space 3 && yabai -m space --focus 3 #shift + cmd - 4 : yabai -m window --space 4 && yabai -m space --focus 4 #shift + cmd - 5 : yabai -m window --space 5 && yabai -m space --focus 5 #shift + cmd - 6 : yabai -m window --space 6 && yabai -m space --focus 6 #shift + cmd - 7 : yabai -m window --space 7 && yabai -m space --focus 7 #shift + cmd - 8 : yabai -m window --space 8 && yabai -m space --focus 8 #shift + cmd - 9 : yabai -m window --space 9 && yabai -m space --focus 9 #shift + cmd - 0 : yabai -m window --space 10 && yabai -m space --focus 10 # focus monitor ctrl + alt - x : yabai -m display --focus recent ctrl + alt - z : yabai -m display --focus prev ctrl + alt - c : yabai -m display --focus next ctrl + alt - 1 : yabai -m display --focus 1 ctrl + alt - 2 : yabai -m display --focus 2 ctrl + alt - 3 : yabai -m display --focus 3 # send window to monitor and follow focus ctrl + cmd - x : yabai -m window --display recent && yabai -m display --focus recent ctrl + cmd - z : yabai -m window --display prev && yabai -m display --focus prev ctrl + cmd - c : yabai -m window --display next && yabai -m display --focus next ctrl + cmd - 1 : yabai -m window --display 1 && yabai -m display --focus 1 ctrl + cmd - 2 : yabai -m window --display 2 && yabai -m display --focus 2 ctrl + cmd - 3 : yabai -m window --display 3 && yabai -m display --focus 3 # move window shift + ctrl - a : yabai -m window --move rel:-20:0 shift + ctrl - s : yabai -m window --move rel:0:20 shift + ctrl - w : yabai -m window --move rel:0:-20 shift + ctrl - d : yabai -m window --move rel:20:0 # increase window size shift + alt - a : yabai -m window --resize left:-20:0 shift + alt - s : yabai -m window --resize bottom:0:20 shift + alt - w : yabai -m window --resize top:0:-20 shift + alt - d : yabai -m window --resize right:20:0 # decrease window size shift + cmd - a : yabai -m window --resize left:20:0 shift + cmd - s : yabai -m window --resize bottom:0:-20 shift + cmd - w : yabai -m window --resize top:0:20 shift + cmd - d : yabai -m window --resize right:-20:0 # set insertion point in focused container ctrl + alt - h : yabai -m window --insert west ctrl + alt - j : yabai -m window --insert south ctrl + alt - k : yabai -m window --insert north ctrl + alt - l : yabai -m window --insert east ctrl + alt - i : yabai -m window --insert stack # rotate tree alt - r : yabai -m space --rotate 90 # mirror tree y-axis alt - y : yabai -m space --mirror y-axis # mirror tree x-axis alt - x : yabai -m space --mirror x-axis # toggle desktop offset alt - a : yabai -m space --toggle padding && yabai -m space --toggle gap # toggle window parent zoom alt - d : yabai -m window --toggle zoom-parent # toggle window fullscreen zoom alt - f : yabai -m window --toggle zoom-fullscreen # toggle window native fullscreen shift + alt - f : yabai -m window --toggle native-fullscreen # toggle window split type alt - e : yabai -m window --toggle split # float / unfloat window and restore position # alt - t : yabai -m window --toggle float && /tmp/yabai-restore/$(yabai -m query --windows --window | jq -re '.id').restore 2>/dev/null || true alt - t : yabai -m window --toggle float && yabai -m window --grid 4:4:1:1:2:2 # toggle sticky (show on all spaces) alt - s : yabai -m window --toggle sticky # toggle topmost (keep above other windows) alt - o : yabai -m window --toggle topmost # toggle picture-in-picture alt - p : yabai -m window --toggle border && \ yabai -m window --toggle pip # change layout of desktop ctrl + alt - a : yabai -m space --layout bsp ctrl + alt - d : yabai -m space --layout float ctrl + alt - s : yabai -m space --layout $(yabai -m query --spaces --space | jq -r 'if .type == "bsp" then "float" else "bsp" end')また、yabaiとskhdを有効化するには、[設定]→[セキュリティとプライバシー]→[プライバシー]→[アクセシビリティ]でコンピュータの制御の権限を有効にする必要があります。
権限を有効化できたら、serviceとして起動します。
brew services start skhd brew services start yabaiこれで既存のウィンドウが自動で綺麗なタイル型に配置され、
.skhdrc
で設定したショートカットでウィンドウを操作できます。デモ
上記のショートカット設定で、実際にウィンドウを操作してみます。
ウィンドウの移動
alt + hjkl(vimと同じキーバインドの上下左右)ウィンドウの切り替え
shift + alt + hjklウィンドウサイズを大きくする
shift + alt + aswdウィンドウサイズを小さくする
shift + command + aswdウィンドウを画面の中心に配置する
alt + t.cf
https://github.com/koekeishiya/yabai
https://github.com/koekeishiya/dotfiles/blob/master/skhd/skhdrc
- 投稿日:2020-10-11T19:54:32+09:00
MacBook Pro 13インチ Late 2013 を macOS Mojave + XCode 11.3.1 にバージョンアップするメモ
ハードディスクを整理して、20GBまで空きスペースを作ったので、やっとMojaveとXCodeをバージョンアップしたので、その際のメモです。
環境
- MacBook Pro (Retina, 13-inch, Late 2013)
バージョンアップ前
- macOS 10.13.6(High Sierra)
- XCode Version 10.1
バージョンアップ後
- macOS 10.14.6(Mojave)
- XCode Version 11.3.1 (11C505)
バックアップ作成
どんな方法でも良いのでバックアップしましょう。
今回は手持ちの外付けHDDに、ユーザーフォルダのみバックアップしました。
電源
ACアダプターから電源を取るようにします。
macOS のバージョンアップ
こちらから、
macOS Mojave にアップグレードする方法
https://support.apple.com/ja-jp/HT210190macOS Mojave をダウンロードする
のあたりから、App Store経由でダウンロードします。
2~3時間かかるので、休みの時に時間をかけてやるのがおすすめです。
OSが更新されて再起動されたら、このMacについてからバージョンを確認します。
XCodeのバージョンアップ
MacOSがバージョンアップできたので、バージョンアップした macOS 10.14.6 に対応したXCodeをバージョンアップします。
現時点(2020-10-11)でのmacOS 10.14.6 に対応したXCodeはVersion 11.3.1なので、こちらをダウンロードします。
App Store経由では以前のバージョンのXCodeはダウンロードできないので、下記よりダウンロードします。
More Downloads for Apple Developers
https://developer.apple.com/download/more/※Developer登録が必要です。
Xcode_11.3.1.xip をダウンロードします。
1時間程度かかります。ダウンロードできたら、ダブルクリックして展開するとXCode.appが展開したフォルダにできるので、それをアプリケーションフォルダに移動します(以前のバージョンは上書きでOK)
XCodeを起動して(初回起動時に処理が走ります)、バージョンを確認します。
参考
- 投稿日:2020-10-11T19:08:37+09:00
iterm を格好良くした
itermの画面
やったこと
- itermのテーマをjapanesequeにした
- 背景を半透明にした
- 「コンピュータ名:」を緑色にした(詳細は後述)
- 全部白いままだとコマンドをどこで打ったのかわかりづらいので。
- 黒地に緑が個人的に格好良いと思うので
- ステータスバーでgitとファイルパスをつけた。
- 参考:iTerm2 にステータスバーが付いた - Qiita
- 画像ではgitのブランチとファイルパスを設定した(他にもCPUやメモリの使用率、現在のユーザー名などを入れられるらしい)
「コンピュータ名:」を緑色にする方法
Preferences > Profile > Advanced > Triggers edit で以下のように設定する。
これで文頭からkubotaaで始まる場合のみ色がつく。
Macのシステムを操作して色をつける方法もあるみたいだが、これはitermの機能を使った。
- 投稿日:2020-10-11T16:21:34+09:00
macOSのキーボードショートカットを変更し、EmacsのMarkSetができるようにする
EmacsのMark set(Ctrl+Space)と入力ソースのキーボードショートカットが競合している。
システム環境→キーボード→キーボードショートカット(タブ)→入力ソース のチェックボックスを外せば解決する。
前の入力ソースを選択 のチェックボックスを外す
- 投稿日:2020-10-11T07:54:02+09:00
Pythonを使ってWindowsやMacを監視し、操作中のアプリの情報を収集してみる
はじめに
お家で仕事することが多くなり、多くの人が「みんなきちんと家で仕事してるのか?」という不安を抱えているという話を聞いています。
そもそも不安になること自体がおかしいことかなと思いますが、上司が不安になると自分が困ることになる人もいるのかなと思ったりもします。
ということで、パソコンを使っている時にリアルタイムで使用しているアプリの情報を収集できればその不安も少しは低減できるのではないかと考え、方法を検討してみました。
ここでは、「アクティブウィンドウを変更するたびにアクティブウインドウのタイトルを取得して表示する」という方法をまとめてみます。
動作環境
- macOS Move
- Windows10 Pro
- Python3.7
ライブラリのインストール
Macを操作するライブラリ
Macの方は以下のコマンドで必要なライブラリをインストールして下さい。
pip install -U PyObjCWindowsを操作するライブラリ
Windowsの方は以下のコマンドで必要なライブラリをインストールして下さい。
pip install -U pywin32スクリプトの作成
get_active_window_title.py#!/usr/bin/env python import sys # Mac用 if sys.platform == "darwin": from AppKit import NSWorkspace from Quartz import ( CGWindowListCopyWindowInfo, kCGWindowListOptionOnScreenOnly, kCGNullWindowID ) def getActiveWindowTitle(): curr_app = NSWorkspace.sharedWorkspace().frontmostApplication() curr_pid = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationProcessIdentifier'] curr_app_name = curr_app.localizedName() options = kCGWindowListOptionOnScreenOnly windowList = CGWindowListCopyWindowInfo(options, kCGNullWindowID) txt = "" for window in windowList: pid = window['kCGWindowOwnerPID'] windowNumber = window['kCGWindowNumber'] ownerName = window['kCGWindowOwnerName'] geometry = window['kCGWindowBounds'] windowTitle = window.get('kCGWindowName', u'Unknown') if curr_pid == pid: activeWindowTitle = ownerName + " - " + windowTitle return activeWindowTitle # Windows用 elif sys.platform == "win32": import win32gui def getActiveWindowTitle(): activeWindowTitle = win32gui.GetWindowText(win32gui.GetForegroundWindow()); return activeWindowTitle else: def getActiveWindowTitle(): return "" def main(): bufWindowTitle = "" try: while True: activeWindowTitle = getActiveWindowTitle() if bufWindowTitle != activeWindowTitle: print(activeWindowTitle) bufWindowTitle = activeWindowTitle except KeyboardInterrupt: sys.exit(0) if __name__ == '__main__': main()実行
作成したら以下のコマンドで実行します。
python get_active_window_title.pyアクティブウィンドウを切り替えるたびにアプリケーション名が表示されるはずです。
できた!
これを指定したサーバーに送信するようにすれば自分がきちんと仕事をしていることがきちんとわかり、「証明しろ!」って言われても大丈夫!!
...大丈夫!
......大丈夫だと思う。