X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_bin%2Fcaps-ctrl;h=824ddd1a1fde0968a6c3d28c9e247848af269120;hb=5b0c6b200fe0a76b7a78c984733defdb3120ea6a;hp=502b46c4fee0a1faf9bd6c45dc91edd68fc2a2d1;hpb=e720deae78f1eda5e6f62629606c194f16796762;p=grml-scripts.git diff --git a/usr_bin/caps-ctrl b/usr_bin/caps-ctrl index 502b46c..824ddd1 100755 --- a/usr_bin/caps-ctrl +++ b/usr_bin/caps-ctrl @@ -1,39 +1,78 @@ -#!/bin/sh +#!/bin/zsh # Filename: caps-ctrl -# Purpose: switch setting of caps-control key (switch between ctrl + shift) -# Authors: grml-team (grml.org), (c) Michael Prokop +# Purpose: switch caps to control key and vice versa for linux console and X +# Authors: grml-team (grml.org), (c) Matthias Kopfermann # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Sun Jan 15 22:45:27 CET 2006 [mika] ################################################################################ -if [ -z "$DISPLAY" ] ; then - if [ "$UID" != 0 ] ; then - echo "Sorry, you need root permissions for running $0 on console -using loadkeys. Run this program with root permissions. Exiting." - exit -1 - fi - dumpkeys | grep -q '^keycode 58 = Caps_Lock' && \ - ( echo "Caps lock mapped to shift-function. Switching caps lock key to control key." - echo $'keycode 58 = Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control\nkeycode 29 = Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock' | loadkeys - ) || - ( echo "Caps lock mapped to control-function. Switching caps lock key to shift key." - echo $'keycode 58 = Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock Caps_Lock\nkeycode 29 = Control Control Control Control Control Control Control ' | loadkeys - ) +if [[ -f /etc/grml/script-functions ]] ; then + source /etc/grml/script-functions && \ + check4progs xmodmap loadkeys dumpkeys || exit 1 +fi +if [[ -f /etc/grml/lsb-functions ]] ; then + source /etc/grml/lsb-functions else - xmodmap -pm | grep -q 'control.*Caps_Lock' && \ - ( echo "Caps lock mapped to control-function. Switching caps lock key to shift key." - xmodmap -e "add lock = Caps_Lock" - echo "clear Lock - keycode 66 = Shift_Lock - add Lock = Shift_Lock" | xmodmap - - echo "Problems? Try to run 'setxkbmap -option caps:shift' manually." - ) || - ( echo "Caps lock mapped to shift-function. Switching caps lock key to control key" - xmodmap -e "keycode 66 = Caps_Lock" - xmodmap -e "remove lock = Caps_Lock" -e "add control = Caps_Lock" - echo "Problems? Try to run 'setxkbmap -option ctrl:nocaps' manually." - ) + einfo() { echo "$*" ; } + eerror() { echo "$*" ; } + eend() { echo "$*" ; } fi +emulate zsh + +if [[ -z $DISPLAY ]] ; then # test if X is not running when calling us + if [ $(id -u) != 0 ] ; then # test if user root did invoke this command + eerror "As of Linux 2.6.15 you need root permissions for changing" + eerror "the keyboard on console using loadkeys for security reasons." + eerror "Run this program with root permissions. Exiting." ; eend 1 + exit 1 + fi + dumpkeys | grep -q '^keycode 58 = Caps_Lock' && \ + ( einfo "caps-ctrl - switching caps lock and control key." + + loadkeys <<- EOT + keycode 58 = $(repeat 15 echo -n 'Control ') + keycode 29 = $(repeat 7 echo -n 'Caps_Lock ') + EOT + eend $? + + ) || ( + einfo "caps-ctrl - switching caps lock and control key." + + loadkeys <<- EOT + keycode 58 = $(repeat 15 echo -n 'Caps_Lock ') + keycode 29 = $(repeat 7 echo -n 'Control ') + EOT + eend $? + ) + +else # running under X + ( + einfo "caps-ctrl - switching caps lock and control key." + einfo "If you notice errors, please make sure the xmodmap you have is right" + einfo "or use e.g. \"setxkbmap us\" beforehand." + xmodmap -pke | grep 'Caps_Lock' > /dev/null || ( + xmodmap - <<- EOT + keycode 66 = Caps_Lock + EOT + ) + + xmodmap - <<- EOT + remove Lock = Caps_Lock + remove Control = Control_L + !remove Control = Control_R + + keysym Control_L = Caps_Lock + keysym Caps_Lock = Control_L + !keysym Control_R = Caps_Lock + !keysym Caps_Lock = Control_R + + add lock = Caps_Lock + add Control = Control_L + !add Control = Control_R + EOT + eend $? + ) +fi # end of test if X or console is used + ## END OF FILE #################################################################