Emacs 下交换 Contorl_L 和 Caps_Lock 的小程序
Tofloor
poster avatar
careone1949
deepin
2013-08-07 03:19
Author
Emacs 下交换 Contorl_L 和 Caps_Lock 的小程序
程序名: key-changer

下载地址(含 deb, tar.gz 两种格式):
https://sourceforge.net/projects/emacsl ... ale-zh-cn/

* 使用说明:
key-changer -swap  (注意:参数 -swap 前面要有一个空格)
即可实现Contorl_L 和 Caps_Lock 的键位互换。
(说明:退出登陆或重新启动后,又恢复为正常键位)

• 想恢复正常键位的方法(运行以下任意一种命令均可):
方法1: 再带 -swap 参数运行一次:
• key-changer -swap

方法2: 带 -rkey 参数运行:
• key-changer -rkey

方法3:退出登陆或重新启动后,又恢复为正常键位

其它功能选项,请运行 key-changer -h 查看更多帮助

技巧:如果为了方便玩街机模拟器游戏,或者原键盘上某个键位损坏,需要替换键位,可以查看 脚本 /usr/local/bin/key-changer 的内容,
添加或修改功能选项即可。

详细的键位信息,可运行 key-changer -pke (实际上是调用 xmodmap -pke)查看完整信息。
Reply Favorite View the author
All Replies
careone1949
deepin
2013-08-07 03:22
#1
文件内容其实就是一个 bash 脚本 /usr/local/bin/key-changer

脚本完整内容如下:
  1. #! /bin/bash
  2. ## swap Caps_Lock and Control_L for Emacs
  3. # version 0.1, 2013-08-05
  4. # Author: Careone
  5. # require /usr/bin/xmodmap from package "x11-xserver-utils"
  6. ### defines ###
  7. VERSION="0.1"
  8. # Usage: usage
  9. # Print the usage.
  10. usage () {
  11.     cat <Usage: $0 [OPTION]
  12. Swap CapsLock and Ctrl_L for current user and current session, and
  13. run again to reset swapped keys to normal.
  14.   -swap, --swap-ctrl-capslock
  15.         swap CapsLock and Ctrl_L for current user and current session, and
  16.         run again to reset swapped keys to normal.
  17.   -rkey, --reset-keymap
  18.         restore key map for current user and current session
  19.   -pm              print modifier map (equals run "xmodmap -pm")
  20.   -pke             print keymap table as expressions (equals run "xmodmap -pke")
  21.   -V, --version    print the version information and exit
  22.   -h, --help       print this message and exit
  23. Please report bugs to Careone .
  24. EOF
  25. }
  26. for option in "$@"; do
  27.     case "$option" in
  28.     -h | --help)
  29.         usage
  30.         exit 0 ;;
  31.    -pm)xmodmap -pm
  32.         exit 0 ;;
  33.    -pke)xmodmap -pke
  34.         exit 0 ;;
  35.    -swap | --swap-ctrl-capslock)
  36. ## to show current key maps, please type command "xmodmap -pke"
  37.         echo "(User) swap CapsLock and Ctrl_L for current user and current session..."
  38.         echo "  (for current user and current login only. you can run"
  39.         echo "  '$0 $1' again to reset key map to normal)"
  40. if ! which xmodmap &>/dev/null; then
  41.         echo "  Error: xmodmap not found, or not executable." 1>&2
  42.         echo "  Please install 'x11-xserver-utils' first! Quit." 1>&2
  43.         exit 0;
  44. else
  45. ## define: swap Caps_Lock and Control_L
  46. _keySwap () {
  47. cat <remove Lock = Caps_Lock
  48. remove Control = Control_L
  49. keysym Control_L = Caps_Lock
  50. keysym Caps_Lock = Control_L
  51. add Lock = Caps_Lock
  52. add Control = Control_L
  53. EOF
  54. }
  55. # method 1:
  56. #        _keySwap >> ~/.xmodmap.swap
  57. #        xmodmap ~/.xmodmap.swap
  58. #
  59. # method 2:
  60.         _keySwap | xmodmap -
  61.   if [ "$?" = 0 ]; then
  62.         echo " Done."
  63.   fi
  64. fi
  65. shift
  66.          ;;
  67.    -rkey | --reset-keymap)
  68.         echo "(User) restore key map for current user and current session..."
  69. if ! which xmodmap &>/dev/null; then
  70.         echo "  Error: xmodmap not found, or not executable." 1>&2
  71.         echo "  Please install 'x11-xserver-utils' first! Quit." 1>&2
  72.         exit 0;
  73. else
  74. ## define: reset key map
  75. _keyReset () {
  76. cat <remove Lock = Caps_Lock
  77. remove Control = Control_L
  78. keycode  37 = Control_L NoSymbol Control_L
  79. keycode  66 = Caps_Lock NoSymbol Caps_Lock
  80. add Lock = Caps_Lock
  81. add Control = Control_L
  82. EOF
  83. }
  84. _keyReset | xmodmap -
  85.   if [ "$?" = 0 ]; then
  86.         echo " Done."
  87.   fi
  88. fi
  89. shift
  90.          ;;
  91.     -V | --version)
  92.         echo "$0 $VERSION"
  93.         exit 0 ;;
  94.     -*)
  95.         echo "Unrecognized option \`$option'" 1>&2
  96.         exit 1;;
  97.     esac
  98. done
  99. exit 0;
Copy the Code
Reply View the author