プログラム実行中にキーを無効にする

プログラム実行中にキーを無効にする

重複した質問特定のプログラムの実行中にキーを無効にするにはどうすればいいですか?、回答はありませんでした。(同じ質問を再投稿するのと、古い投稿をスレッドで削除するのと、どちらの選択肢が悪いでしょうか?)

とにかく、特定のプログラムの実行中に特定のキーを無効にする方法はありますか? または、特定のプログラムの実行中に Dash を無効にする方法はありますか?

答え1

シンプルな解決策

Superキーを無効にするためのショートカットと、キーを任意に復元するためのショートカットの 2 つを作成します。

システム設定 -> キーボード -> ショートカット -> カスタム に移動し、+ボタンをクリックします。新しいショートカットに「ダッシュを無効にする」という名前を付けます。コマンドは次のとおりです。

 gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher 'Disabled'

スクリプトを再度有効にするためのショートカットを作成するには、上記の手順を繰り返しますが、コマンドは次のようになります。

 gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher '<Super>'

スクリプトソリューション

以下のスクリプトは、ユーザーが指定したプログラムにフォーカスがあるときにキーを無効にしますSuper。ユーザーはマウスでダッシュアイコンをクリックしてダッシュを呼び出すことができます。プログラム名は一重引用符で囲み、Unity Launcher に表示されるものとまったく同じである必要があります。複数のウィンドウを同じ形式でスペースで区切って指定できます。

ここに画像の説明を入力してください

たとえば、FirefoxウィンドウにフォーカスがあるたびにSuperキーを無効にするには、スクリプトを次のように呼び出す必要があります。

disable_super_key.sh 'Firefox Web Browser'

両方を無効にfirefoxgnome-terminal

disable_super_key.sh 'Firefox Web Browser' 'Terminal'

スクリプトの入手方法

ユーザーは、ここからソースをコピーするか、以下の手順に従って github からソースを取得できます。

  1. sudo apt-get install git
  2. cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
  3. sudo chmod -R +x sergrep

スクリプトは次の場所にあります/opt/sergrep/disable_super_key.sh

ログイン時にスクリプトを自動的に開始するには、ログイン時にアプリケーションを自動的に起動するにはどうすればよいですか?./opt/sergrep/disable_super_key.shコマンドとして(フルパス)を指定します

スクリプトソース

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: April 12 , 2016
# Purpose: Disable super key that brings up Unity Dash
#          per specific application
# 
# Written for: https://askubuntu.com/q/754884/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#
enable_dash_key()
{
  gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher '<Super>'
}

disable_dash_key()
{
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher 'Disabled'
}



get_active_app()
{
   qdbus org.ayatana.bamf \
        /org/ayatana/bamf/matcher \
        org.ayatana.bamf.matcher.ActiveApplication
}

get_active_app_name()
{
  qdbus org.ayatana.bamf \
   $(get_active_app)   \
   org.ayatana.bamf.view.Name
}

check_active_app()
{
  active_name=$(get_active_app_name)
  local is_found
  for win in  "${windows_list[@]}"
  do
    if [ "$active_name" = "$win" ] ; then
      is_found=true
      break
    else
      is_found=false
    fi
  done

  if $is_found ; then
     disable_dash_key
  else
     enable_dash_key
  fi
}


print_usage()
{
cat << EOF
Copyright Serg Kolo , 2016

Usage: disable_super_key.sh 'App Name 1' [ 'App Name 2' 'App Name 3' ...  ]

The script disables the Super key for the specified set of applications
under Ubuntu's Unity environment. The list of windows must be space
separated, each app name single quoted and exactly as it appears on the
launcher (or as it appears in the .desktop file of that app), so spelling
and spacing matter.

Note that the script only disables the Super key as shortcut for Dash.
The user still will be able to invoke Dash by manually clicking on the 
Ubuntu icon in the launcher
EOF
}

main()
{

  if [ $ARGC -eq 0   ]; then
     print_usage
     exit
  fi

  local windows_list
  windows_list=( "$@" )
  dbus-monitor --profile "type='signal',member='FocusedWindowChanged'" |\
  while read line
  do
     case "$line" in
       *FocusedWindowChanged*) check_active_app ;;
     esac         
  done
}

main "$@"

関連情報