From: Michael Prokop Date: Thu, 23 Nov 2006 21:36:19 +0000 (+0100) Subject: Rewrite of caps-ctrl, big thanks to wuehlmaus! X-Git-Tag: 0.8-29 X-Git-Url: http://git.grml.org/?p=grml-scripts.git;a=commitdiff_plain;h=e1a324809d64170021b4a9e236972375a329ac46 Rewrite of caps-ctrl, big thanks to wuehlmaus! --- diff --git a/debian/changelog b/debian/changelog index 0db1a25..e932bb9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +grml-scripts (0.8-29) unstable; urgency=low + + * Rewrite of caps-ctrl, big thanks to wuehlmaus! + + -- Michael Prokop Thu, 23 Nov 2006 22:35:54 +0100 + grml-scripts (0.8-28) unstable; urgency=low * fma: added hint to lzop and updated header information diff --git a/usr_bin/caps-ctrl b/usr_bin/caps-ctrl index 502b46c..e597c90 100755 --- a/usr_bin/caps-ctrl +++ b/usr_bin/caps-ctrl @@ -1,39 +1,73 @@ -#!/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] +# Latest change: Don Nov 23 22:32:29 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 - ) -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." - ) +if . /etc/grml/script-functions ; then + check4progs xmodmap loadkeys dumpkeys || exit 1 fi +. /etc/grml/lsb-functions || ( alias einfo=echo ; alias eerror=echo; alias eend=echo ) + +emulate zsh +autoload -U colors ; colors + +if [[ -z $DISPLAY ]] ; then # test if X is not running when calling us + if [[ $UID != 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 #################################################################