Neo ist eine ergonomische Tastaturbelegung, welche für die deutsche Sprache optimiert ist. https://neo-layout.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

154 lines
4.4 KiB

  1. #!/bin/bash
  2. # This file is part of the german Neo keyboard layout
  3. #
  4. # GUI to combine several Compose modules written by Neo keyboard layout
  5. # This file has been originally written by Pascal Hauck <neo at pascalhauck dot de>
  6. SRC=./src # Source directory
  7. CONFFILE=.config # config file for selected modules
  8. # colours in the Bash
  9. normal="\033[0m"
  10. red="\033[31m"
  11. orange="\033[33m"
  12. green="\033[32m"
  13. # different subroutines for kdialog, zenity and dialog
  14. if [ "X:$KDE_FULL_SESSION" = "X:true" ]; then
  15. NL="<br>" # new line (can be different in kdialog and zenity)
  16. ADD_TO_LIST() { # make list of modules, descriptions and default values (not for zenity)
  17. list=("${list[@]}" "$1" "$2" "$3")
  18. }
  19. CHECKLIST() {
  20. kdialog --title Compose-Module --checklist "$1" "${list[@]}"
  21. }
  22. MSGBOX() {
  23. kdialog --title Compose-Module --msgbox "$1"
  24. }
  25. YESNO() {
  26. kdialog --title Compose-Module --yesno "$1"
  27. }
  28. elif [ -n "`which zenity 2>/dev/null`" ] && [ ${DISPLAY} ]; then
  29. NL="\n"
  30. ADD_TO_LIST() {
  31. list=("${list[@]}" "$1" "$2")
  32. }
  33. CHECKLIST() {
  34. zenity --title Compose-Module --width=610 --height=320 --list --multiple --column Modulname --column Modulebeschreibung --separator=_ --text "$1${NL}$2" "${list[@]}"
  35. }
  36. MSGBOX() {
  37. zenity --title Compose-Module --info --text "$1"
  38. }
  39. YESNO() {
  40. zenity --title Compose-Module --question --text "$1"
  41. }
  42. elif [ -n "`which dialog 2>/dev/null`" ]; then
  43. NL="\n"
  44. ADD_TO_LIST() {
  45. list=("${list[@]}" "$1" "$2" "$3")
  46. }
  47. CHECKLIST() {
  48. dialog --title Compose-Module --checklist "$1" 20 70 10 "${list[@]}" 3>&1 1>&2 2>&3 3>&- || exit 1
  49. clear
  50. }
  51. MSGBOX() {
  52. dialog --title Compose-Module --msgbox "$1" 8 60
  53. clear
  54. }
  55. YESNO() {
  56. dialog --title Compose-Module --yesno "$1" 0 0 || exit 1
  57. clear
  58. }
  59. else # none of them (kdialog, zenity, dialog) exists → tell user to use make config && make install
  60. echo -e ${red} "Es wurde weder kdialog noch zenity noch dialog gefunden." ${normal}
  61. echo -e ${red} "Die graphische Konfiguration kann nicht verwendet werden." ${normal}
  62. echo -e ${red} "Bitte benutzen Sie stattdessen ›make config && make install‹." ${normal}
  63. exit 1
  64. fi
  65. while [ ! "$nohelp" ]; do # options for »compose_gui.sh« (at the moment just --help)
  66. case ${1-" "} in
  67. " ")
  68. nohelp=ok
  69. ;;
  70. *)
  71. echo Aufruf: compose.sh
  72. echo Mit »compose.sh« können die Compose-Module von Neo zusammengesetzt werden.
  73. echo Folgende Module sind verfügbar:
  74. for j in `ls $SRC/*.module`; do # show all available Compose modules and descriptions
  75. i=$(basename $j .module)
  76. if [ ! "$i" = "base" ] && [ ! "$i" = "enUS" ]; then
  77. sed -n "
  78. /^#configinfo[ \t]*/{
  79. s///
  80. b print
  81. }
  82. \$! b
  83. s/.*/(ohne Beschreibung)/
  84. : print
  85. x
  86. s/^/$i /
  87. G
  88. s/^\(.\{9\}\).*\n\(.\{1,69\}\).*/\1 \2/ # 80-Zeichen-Terminal-Grenze
  89. p
  90. q
  91. " ${SRC}/${i}.module
  92. fi
  93. done
  94. exit;;
  95. esac
  96. done
  97. auswahl=XCompose_enUS_base # enUS and base cannot be deselected
  98. for i in src/*.module; do
  99. name=$(basename $i .module) # get name of modul
  100. if [ ! "$name" = "base" -a ! "$name" = "enUS" ]; then # enUS and base annot be deselected
  101. description=$(sed -n "
  102. /^#configinfo[ \t]*/{
  103. s///
  104. b print
  105. }
  106. \$! b
  107. s/.*/(ohne Beschreibung)/
  108. : print
  109. p
  110. q
  111. " $SRC/$name.module) # get description of module
  112. if grep -qs $name $CONFFILE; then
  113. default=on # get default value for this module
  114. else
  115. default=off
  116. fi
  117. ADD_TO_LIST "$name" "$description" "$default"
  118. fi
  119. done
  120. if [ -f $HOME/.XCompose ]; then # warn if ~/.XCompose already exists
  121. YESNO "Es gibt bereits eine Compose-Datei (z.B. durch eine ältere Neo-Installation).\nSollten Sie eigene Definitionen in der Datei ~/.XCompose vorgenommen haben, dann brechen Sie jetzt ab und schreiben Ihre eigenen Definitionen in eine Datei (z.B. user.module) im Ordner src.\n\nAnderenfalls können Sie das Skript bedenkenlos fortsetzen.\nWollen Sie fortfahren?" || exit 1
  122. fi
  123. menu=`CHECKLIST "Die Neo-Tastaturbelegung hat etliche Erweiterungen für Compose (Mod3+Tab) erstellt,${NL}wodurch Zeichen wie ≙ έ ʒ ermöglicht werden.${NL}Wählen Sie die Compose-Module von Neo aus, die Sie verwenden möchten." "Für mehrere Module STRG bzw. CTRL gedrückt halten." | sed -e 's/\"//g' | sed -e 's/\ /_/g'`
  124. if [ $menu ]; then
  125. fertig="Die neue Compose-Datei wurde erfolgreich erstellt.\nSie wird für alle neu gestarteten Programme sowie nach dem nächsten Login wirksam."
  126. echo "USER_XCOMPOSE = ${auswahl}_${menu}" > .config && make install && MSGBOX "$fertig"
  127. fi