1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Web会議ミュートショートカットキー問題を解消

Posted at

この記事はMac OS X向けです.

Web会議ショートカットキー問題

ウェブ会議で,音声のミュートやビデオのオンオフを切り替えたいとき,いちいちマウスを持って画面上のアイコンをクリックしていたら,会話が途切れ途切れになってしまいます.

そこで,迅速に切り替えるためにショートカットキーで切り替える事を考えます.ただ,ここでWeb会議アプリショートカットキー問題にぶち当たります.

例えば,MS TeamsとZoomでは以下のようにミュート・ビデオオンオフのショートカットキーが異なります.

  • ミュート切り替え
    • Teams: Command + Shift + M
    • Zoom: Command + Shift + A
  • ビデオ切り替え
    • Teams: Command + Shift + O
    • Zoom: Command + Shift + V

いちいち憶えてられません.ホントクソです.

解決策

Teamsでも,Zoomでも,同じ直ぐに押せる簡単な方法でミュート・ビデオのオンオフを切り替えれるようにします.
具体的には,以下の2つを実現します.

  • ミュートオンオフ切り替え: 右シフト2回押し
  • ビデオオンオフ切り替え: 左シフト2回押し

Hammerspoonを使って実現

Hammerspoonのインストール方法は割愛します.

まず,少し長いコードになるので,init.luaを直接編集せず,ファイルを分けるために,以下を追記.

~/.hammerspoon/init.lua
local mute = require('mute')

以下の様なmute.luaを作成.

~/.hammerspoon/mute.lua
-- 右shift2回押しでミュートの解除・左shift 2回押しでビデオのオンオフ切り替え
-- 
firstShift = false
secondShift = false
local function cancelShift()
    firstShift = false
    secondShift = false
end

local function toggleMuteVideoZoom(event)
    local c = event:getKeyCode()
    local f = event:getFlags()
    if event:getType() == hs.eventtap.event.types.flagsChanged then
        if f['shift'] then
            if c == 60 then -- 右シフト 60
                if firstShift then
                    secondShift = true
                end
                firstShift = true
                hs.timer.doAfter(0.5, function()
                    cancelShift()
                end)
                if firstShift and secondShift then
                    cancelShift()
                    hs.eventtap.keyStroke({"cmd", "shift"}, "A")
                end
            elseif c == 56 then -- 左シフト 56 
                if firstShift then
                    secondShift = true
                end
                firstShift = true
                hs.timer.doAfter(0.5, function()
                    cancelShift()
                end)
                if firstShift and secondShift then
                    cancelShift()
                    hs.eventtap.keyStroke({"cmd", "shift"}, "V")
                end
            else
                cancelShift()
            end
        end
    end
end
toggleMuteVideoZoomEvent = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, toggleMuteVideoZoom)

local function toggleMuteVideoTeams(event)
    local c = event:getKeyCode()
    local f = event:getFlags()
    if event:getType() == hs.eventtap.event.types.flagsChanged then
        if f['shift'] then
            if c == 60 then -- 右シフト 60
                if firstShift then
                    secondShift = true
                end
                firstShift = true
                hs.timer.doAfter(0.5, function()
                    cancelShift()
                end)
                if firstShift and secondShift then
                    cancelShift()
                    hs.eventtap.keyStroke({"cmd", "shift"}, "M")
                end
            elseif c == 56 then -- 左シフト 56
                if firstShift then
                    secondShift = true
                end
                firstShift = true
                hs.timer.doAfter(0.5, function()
                    cancelShift()
                end)
                if firstShift and secondShift then
                    cancelShift()
                    hs.eventtap.keyStroke({"cmd", "shift"}, "O")
                end
            else
                cancelShift()
            end
        end
    end
end
toggleMuteVideoTeamsEvent = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, toggleMuteVideoTeams)


hs.window.filter.new('zoom.us')
  :subscribe(hs.window.filter.windowFocused, function() toggleMuteVideoZoomEvent:start() end)
  :subscribe(hs.window.filter.windowUnfocused, function() toggleMuteVideoZoomEvent:stop() end)

hs.window.filter.new('Microsoft Teams')
  :subscribe(hs.window.filter.windowFocused, function() toggleMuteVideoTeamsEvent:start() end)
  :subscribe(hs.window.filter.windowUnfocused, function() toggleMuteVideoTeamsEvent:stop() end)

参考にしたページ

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?