Browse Source

Makefile um xmodmaps zu erzeugen

feature/programmer
ben 13 years ago
parent
commit
8ac3de8f33
  1. 4
      Makefile
  2. 32
      linux/Makefile
  3. 8
      linux/bin/installiere_neo/Makefile
  4. 3
      linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_alternative
  5. 0
      linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_referenz
  6. 3
      linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_x-prog
  7. 11
      linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_x-prog.sed
  8. 330
      linux/xmodmap/neo_de_alternative.xmodmap
  9. 330
      linux/xmodmap/neo_de_x-prog.xmodmap

4
Makefile

@ -7,11 +7,11 @@ grafik:
make -kC grafik
linux/bin/installiere_neo:
make -kC linux/bin/installiere_neo
make -kC linux
svnclean:
make -C portable clean
make -C linux/bin/installiere_neo clean
make -C linux clean
clean: svnclean
make -kC grafik clean

32
linux/Makefile

@ -0,0 +1,32 @@
FILES=bin/installiere_neo/installiere_neo xmodmap/neo_de_x-prog.xmodmap xmodmap/neo_de_alternative.xmodmap
all:${FILES}
bin/installiere_neo/installiere_neo: xmodmap/neo_de.xmodmap console/neo.map bin/asdf bin/uiae ../A-REFERENZ-A/neo20.txt bin/neo bin/num bin/wiemitneo bin/beschreibe ../Compose/Compose.neo etc/neo.conf bin/installiere_neo/erzeuge.installiere_neo bin/installiere_neo/installiere_neo.1 bin/installiere_neo/installiere_neo.2
cd bin/installiere_neo; ./erzeuge.installiere_neo > installiere_neo
chmod a+x $@
xmodmap/neo_de_x-prog.xmodmap:xmodmap/neo_de.xmodmap
sed -e 's/\x09Up/\x9KP_Up/g'\
-e 's/BackSpace/NoSymbol/g'\
-e 's/\x09Delete/\x09KP_Delete/g'\
-e 's/\x09Insert/\x09KP_Insert/g'\
-e 's/\x09Home/\x09KP_Home/g'\
-e 's/\x09Left/\x09KP_Left/g'\
-e 's/\x09Down/\x09KP_Down/g'\
-e 's/\x09Right/\x09KP_Right/g'\
-e 's/\x09End/\x09KP_End/g'\
-e 's/\x09Next/\x09KP_Next/g'\
-e 's/\x09Return/\x09KP_Enter/g' $< > $@
xmodmap/neo_de_alternative.xmodmap:xmodmap/neo_de.xmodmap
sed -e s/U202F/NoSymbol/g -e s/dead_stroke/NoSymbol/g $< > $@
xmodmap/neo_de.xmodmap.referenz:xmodmap/neo_de.xmodmap
cd xmodmap/erzeuge_andere_xmodmaps; ./erzeuge_neo_de_referenz > ../neo_de.xmodmap.referenz
clean:
rm -f ${FILES}
.PHONY: clean

8
linux/bin/installiere_neo/Makefile

@ -1,8 +0,0 @@
installiere_neo: ../../xmodmap/neo_de.xmodmap ../../console/neo.map ../asdf ../uiae ../../../A-REFERENZ-A/neo20.txt ../neo ../num ../wiemitneo ../beschreibe ../../../Compose/Compose.neo ../../etc/neo.conf ./erzeuge.installiere_neo ./installiere_neo.1 ./installiere_neo.2
./erzeuge.installiere_neo > installiere_neo
chmod a+x installiere_neo
clean:
rm -f installiere_neo
.PHONY: clean

3
linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_alternative

@ -1,3 +0,0 @@
#!/bin/sh
cat ../neo_de.xmodmap | sed s/U202F/NoSymbol/g | sed s/dead_stroke/NoSymbol/g

0
linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_referenz

3
linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_x-prog

@ -1,3 +0,0 @@
#!/bin/sh
sed -f erzeuge_neo_de_x-prog.sed ../neo_de.xmodmap

11
linux/xmodmap/erzeuge_andere_xmodmaps/erzeuge_neo_de_x-prog.sed

@ -1,11 +0,0 @@
s/\x09Up/\x9KP_Up/g
s/BackSpace/NoSymbol/g
s/\x09Delete/\x09KP_Delete/g
s/\x09Insert/\x09KP_Insert/g
s/\x09Home/\x09KP_Home/g
s/\x09Left/\x09KP_Left/g
s/\x09Down/\x09KP_Down/g
s/\x09Right/\x09KP_Right/g
s/\x09End/\x09KP_End/g
s/\x09Next/\x09KP_Next/g
s/\x09Return/\x09KP_Enter/g

330
linux/xmodmap/neo_de_alternative.xmodmap

@ -1,330 +0,0 @@
!! ~/.xmodmap
!!
!! German NEO-Layout
!! adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
!! inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/
!! Authors:
!! Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
!! Erik Streb <mail at erikstreb dot de>
!! Pascal Hauck <pascal dot hauck at web dot de>
!!
!! Other Questions:
!! <mailinglist at neo-layout dot org>
!!
!! \$Revision: 1293 \$, \$Date: 2008-12-19 09:39:48 +0100 (Fr, 19 Dez 2008) \$
!! http://pebbles.schattenlauf.de/layout.php
!!
!! To try the layout in this file, simply do xmodmap <file>.
!! To load the layout in this file at X startup, simply store it as
!! ~/.xmodmap
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebenen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene 1: normal
! Ebene 2: Shift
! Ebene 3: Mod3
! Ebene 4: Mod4 (zum Markieren Shift+Mod4)
! Ebene 5: Shift+Mod3
! Ebene 6: Mod3+Mod4 (in dieser Reihenfolge!)
! Ebene 7: wird (bis auf technisch bedingte Ausnahmen) nicht belegt
! Multi_key=Compose (keine eigene Ebene): Mod3+Tab or right window key
! Feststellen/Shift_Lock: Shift+Shift
! Mod4_Lock: Mod4(rechts)+Mod4(links)
! Reihenfolge der Ebenen in der Xmodmap:
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Modifier definition
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
clear Lock
clear Mod2
! Mod2 war NumLock !
clear Mod3
clear Mod5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Shift
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 50=left 62=right
! Shift+Shift ergibt ein ShiftLock (wie Caps, wirkt aber auf alle Zeichen, nicht nur auf Großbuchstaben)
! Der Lock lässt sich durch ein weiteres Shift lösen.
! Eigentlich (siehe Referenz) sollte hier ein CapsLock stehen.
keycode 50 = Shift_L Shift_Lock
keycode 62 = Shift_R Shift_Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Mod3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 66=left 51=right
! Make CapsLock an modifier called Mod3 (similar to AltGr) (Mode_switch or ISO_Group_Shift is for 3rd and 4th level)
! Make former CapsLock and qwertz-# to Mode_switch or ISO_Group_Shift
! Mod3(links) (=Qwertz-Caps) erlaubt nur 4 Ebenen
! Ohne einen Eintrag in der zweiten Gruppe (=Ebene 3) ergäbe Mod3+Mod3=Group_Shift+Group_Shift=Gruppe 3=Ebene 6. Das ist nicht gewünscht.
keycode 66 = ISO_Group_Shift ISO_Group_Shift ISO_First_Group NoSymbol
keycode 51 = ISO_Group_Shift ISO_Group_Shift ISO_First_Group NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Mod4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 94=left 113=right
! Make the former AltGr and qwertz-< to Mod4 (ISO_Level3_Shift)
! Mod4(rechts)+Mod4(links) lässt Mod4 einrasten (Mod4Lock)
! das funktioniert nur in dieser Reihenfolge, da Mod4(rechts) (=Qwertz-AltGr) nur 4 Ebenen hat
! Der Lock lässt sich durch ein weiteres Mod4 lösen.
keysym less = ISO_Level3_Shift ISO_Level3_Shift ISO_Group_Shift ISO_Group_Shift ISO_Level3_Lock NoSymbol
keysym ISO_Level3_Shift = ISO_Level3_Shift ISO_Level3_Shift ISO_Group_Shift ISO_Group_Shift ISO_Level3_Lock NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! window keys
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! keysym Super_L = Super_L
! keycode 116 = Super_R
keysym Super_R = Multi_key Multi_key
! add Mod4 = Super_L
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! general Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Einrasten über linke Win-Taste+Modifier, Lösen über nochmaliges Betätigen des Modifiers
! Shift_Lock und Mo4_Lock funktionieren, Mod3_Lock lässt sich aber nicht mehr lösen!!!!
! keycode 115 = ISO_Lock NoSymbol
! add Lock = ISO_Lock
! add Mod3 = ISO_Group_Shift
! add Mod5 = ISO_Level3_Shift
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! main keyboard
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Tab key
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
keycode 23 = Tab ISO_Left_Tab Multi_key ISO_Level3_Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Space key
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
keycode 65 = space space space nobreakspace KP_0 KP_0 NoSymbol NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! dead keys
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 49 = dead_circumflex dead_tilde dead_abovering dead_breve dead_caron Pointer_EnableKeys dead_macron NoSymbol
! called T1 ˆ ˜ ˚ ˘ ˇ (keypad-mouse mode) ¯
keycode 21 = dead_grave NoSymbol dead_diaeresis U1FFE NoSymbol NoSymbol NoSymbol NoSymbol
! called T2 \` ¨ ῾ dasia (asper)
keycode 35 = dead_acute dead_cedilla NoSymbol U1FBF dead_doubleacute NoSymbol dead_abovedot NoSymbol
! called T3 ´ ¸ / ᾿ psili (lenis) ˝ ˙
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The first row (number Row)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 10 = 1 degree onesuperior onesubscript ordfeminine NoSymbol notsign NoSymbol
! ° ¹ ₁ ª ¬
keycode 11 = 2 section twosuperior twosubscript masculine NoSymbol logicalor NoSymbol
! § ² ₂ º ∨
keycode 12 = 3 U2113 threesuperior threesubscript numerosign NoSymbol logicaland NoSymbol
! ℓ liter ³ ₃ № ∧
keycode 13 = 4 guillemotright U203A dagger Prior Prior downtack NoSymbol
! » › † ⊥ perpendicular
keycode 14 = 5 guillemotleft U2039 femalesymbol periodcentered NoSymbol U2221 NoSymbol
! « ‹ ♀ · ∡ angle sign
keycode 15 = 6 EuroSign cent malesymbol sterling NoSymbol U2225 NoSymbol
! € ¢ ♂ £ ∥ parallel
keycode 16 = 7 dollar yen Greek_kappa currency NoSymbol rightarrow NoSymbol
! \$ ¥ κ ¤ →
keycode 17 = 8 doublelowquotemark singlelowquotemark leftanglebracket NoSymbol NoSymbol infinity NoSymbol
! „ ‚ ⟨ (bra) ∞
keycode 18 = 9 leftdoublequotemark leftsinglequotemark rightanglebracket KP_Divide KP_Divide containsas NoSymbol
! “ ‘ ⟩ (ket) / / ∋
keycode 19 = 0 rightdoublequotemark rightsinglequotemark zerosubscript KP_Multiply KP_Multiply emptyset NoSymbol
! ” ’ ₀ * * ∅
keycode 20 = minus emdash NoSymbol U2011 KP_Subtract KP_Subtract hyphen NoSymbol
! - — ‑ non-breaking - - ­ soft hyphen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The upper row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 24 = x X ellipsis Greek_xi U22EE NoSymbol Greek_XI Greek_XI
! … ξ ⋮ Ξ Ξ
keycode 25 = v V underscore NoSymbol BackSpace BackSpace U2259 NoSymbol
! _ ≙ ≙
keycode 26 = l L bracketleft Greek_lambda Up Up Greek_LAMBDA Greek_LAMBDA
! [ λ Λ Λ
keycode 27 = c C bracketright Greek_chi Delete Delete U2102 NoSymbol
! ] χ ℂ komplex
keycode 28 = w W asciicircum Greek_omega Insert Insert Greek_OMEGA Greek_OMEGA
! ^ ω Ω Ω
keycode 29 = k K exclam U03F0 exclamdown NoSymbol radical NoSymbol
! ! ϰ Greek_kappa ¡ √
keycode 30 = h H less Greek_psi KP_7 KP_7 Greek_PSI Greek_PSI
! < ψ Ψ Ψ
keycode 31 = g G greater Greek_gamma KP_8 KP_8 Greek_GAMMA Greek_GAMMA
! > γ Γ Γ
keycode 32 = f F equal Greek_phi KP_9 KP_9 Greek_PHI Greek_PHI
! = φ Φ Φ
keycode 33 = q Q ampersand U03D5 KP_Add KP_Add U211A NoSymbol
! & ϕ Greek_phi + + ℚ rational
keycode 34 = ssharp U1E9E U017F Greek_finalsmallsigma NoSymbol NoSymbol jot NoSymbol
! ß ẞ Capital ß ſ long s ς ∘ ring operator
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The home row (middle row)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 38 = u U backslash NoSymbol Home Home U222E NoSymbol
! \ ∮ contour integral
keycode 39 = i I slash Greek_iota Left Left integral NoSymbol
! / ι ∫
keycode 40 = a A braceleft Greek_alpha Down Down U2200 NoSymbol
! { α ∀ for all
keycode 41 = e E braceright Greek_epsilon Right Right U2203 NoSymbol
! } ε ∃ there exists
keycode 42 = o O asterisk Greek_omicron End End elementof NoSymbol
! * ο ∈
keycode 43 = s S question Greek_sigma questiondown NoSymbol Greek_SIGMA Greek_SIGMA
! ? σ ¿ Σ Σ
keycode 44 = n N parenleft Greek_nu KP_4 KP_4 U2115 NoSymbol
! ( ν ℕ natural
keycode 45 = r R parenright U03F1 KP_5 KP_5 U211D NoSymbol
! ) ϱ Greek_rho ℝ real
keycode 46 = t T minus Greek_tau KP_6 KP_6 partialderivative
! - τ ∂
keycode 47 = d D colon Greek_delta KP_Separator NoSymbol Greek_DELTA Greek_DELTA
! : δ ,/. Δ Δ
keycode 48 = y Y at Greek_upsilon KP_Decimal NoSymbol nabla NoSymbol
! @ υ ./, ∇
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lower row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 52 = udiaeresis Udiaeresis numbersign NoSymbol Escape Escape U211C NoSymbol
! ü Ü # ℜ real part
keycode 53 = odiaeresis Odiaeresis dollar NoSymbol Tab ISO_Left_Tab U2111 NoSymbol
! ö Ö \$ ℑ imaginary part
keycode 54 = adiaeresis Adiaeresis bar Greek_eta Next Next U2135 NoSymbol
! ä Ä | η ℵ alef symbol
keycode 55 = p P asciitilde Greek_pi Return Return Greek_PI Greek_PI
! ~ π Π Π
keycode 56 = z Z grave Greek_zeta Undo Redo U2124 NoSymbol
! \` ζ ℤ integers
keycode 57 = b B plus Greek_beta colon NoSymbol U21D0 NoSymbol
! + β : ⇐
keycode 58 = m M percent Greek_mu KP_1 KP_1 ifonlyif NoSymbol
! % μ ⇔
keycode 59 = comma endash quotedbl Greek_rho KP_2 KP_2 U21D2 NoSymbol
! , – " ρ ⇒ implies
keycode 60 = period enfilledcircbullet apostrophe U03D1 KP_3 KP_3 Greek_THETA Greek_THETA
! . • ' ϑ Greek_theta Θ
keycode 61 = j J semicolon Greek_theta semicolon NoSymbol variation NoSymbol
! ; θ ; ∝ proportional to
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Keypad
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The uppest row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 77 = Tab ISO_Left_Tab equal approxeq identical NoSymbol notequal NoSymbol
! = ≈ almost equal ≡ identical to ≠
keysym KP_Divide = KP_Divide KP_Divide division U2300 U2223 NoSymbol U2044 NoSymbol
! / / ÷ ⌀ diameter ∣ divides (for ⁶⁄₅₉)
keycode 63 = KP_Multiply KP_Multiply U22C5 U2299 U2297 NoSymbol multiply NoSymbol
! * * ⋅ dot ⊙ cirled dot ⊗ circled times × times
keycode 82 = KP_Subtract KP_Subtract U2212 U2296 U2238 NoSymbol U2216 NoSymbol
! - - − real minus ⊖ cirled minus ∸ dot minus ∖ set minus
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The upper row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 79 = KP_7 U2714 U2195 U226A upstile NoSymbol KP_Home KP_Home
! ✔ check mark ↕ arrow ≪ much less ⌈
keycode 80 = KP_8 U2718 uparrow intersection U22C2 NoSymbol KP_Up KP_Up
! ✘ ballot x ↑ ∩ ⋂ n-ary intersection
keycode 81 = KP_9 NoSymbol U20D7 U226B U2309 NoSymbol KP_Prior KP_Prior
! vector ≫ much greater ⌉
keycode 86 = KP_Add KP_Add plusminus U2295 U2214 NoSymbol U2213 NoSymbol
! + + ± circled plus dot plus ∓ minus-plus
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The middle row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 83 = KP_4 club leftarrow includedin U2286 NoSymbol KP_Left KP_Left
! ♣ ← ⊂ ⊆
keycode 84 = KP_5 EuroSign brokenbar U22B6 U22B7 NoSymbol KP_Begin KP_Begin
! € ¦ ⊶ original of ⊷ image of
keycode 85 = KP_6 U2023 rightarrow includes U2287 NoSymbol KP_Right KP_Right
! ‣ → ⊃ ⊇
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lower row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 87 = KP_1 diamond U2194 lessthanequal downstile NoSymbol KP_End KP_End
! ♦ ↔ arrow ≤ ⌊
keycode 88 = KP_2 heart downarrow union U22C3 NoSymbol KP_Down KP_Down
! ♥ ↓ ∪ ⋃ n-ary union
keycode 89 = KP_3 U2660 U21CC greaterthanequal U230B NoSymbol KP_Next KP_Next
! ♠ ⇌ ≥ ⌋
! keycode 108 = KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lowest row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 90 = KP_0 U2423 percent U2030 U25A1 NoSymbol KP_Insert KP_Insert
! ␣ space sign % ‰ per mille □ white square
keycode 91 = comma period KP_Separator minutes seconds NoSymbol KP_Delete KP_Delete
! , . ,/. ′ min,feets ″ sec,inches
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Bemerkungen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 1.) Ebene 6 (hier: der 7. Eintrag) erreicht man über ISO_Group_Shift+ISO_Group_Shift
! (bzw. mode_switch+mode_switch) und über keine andere mir bekannte Kombination. Insbesondere legt
! ISO_Level3_Shift Level3 (Ebene 4, hier: Eintrag 5) fest, verschiebt also nicht. Darum kann man
! ISO_Level3_Shift nur mit Shift sinnvoll kombinieren. Daraus resultiert, dass Ebene 6 nur über
! Mod3+Mod4 (in dieser Reihenfolge!) erreicht werden kann.
!
! 2.) Die KP_-Einträge ermöglichen die Steuerung des Mauscursors mit der Tastatur.
! Hierzu wird mittels Mod4+ß dieser Betriebsmodus ein- und später wieder ausgeschaltet.
! Die Steuerung des Cursors kann über den Ziffernblock (Ebene 4, eventuell mit
! eingerastetem Mod4) erfolgen.

330
linux/xmodmap/neo_de_x-prog.xmodmap

@ -1,330 +0,0 @@
!! ~/.xmodmap
!!
!! German NEO-Layout
!! adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
!! inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/
!! Authors:
!! Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
!! Erik Streb <mail at erikstreb dot de>
!! Pascal Hauck <pascal dot hauck at web dot de>
!!
!! Other Questions:
!! <mailinglist at neo-layout dot org>
!!
!! \$Revision: 1293 \$, \$Date: 2008-12-19 09:39:48 +0100 (Fr, 19 Dez 2008) \$
!! http://pebbles.schattenlauf.de/layout.php
!!
!! To try the layout in this file, simply do xmodmap <file>.
!! To load the layout in this file at X startup, simply store it as
!! ~/.xmodmap
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebenen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene 1: normal
! Ebene 2: Shift
! Ebene 3: Mod3
! Ebene 4: Mod4 (zum Markieren Shift+Mod4)
! Ebene 5: Shift+Mod3
! Ebene 6: Mod3+Mod4 (in dieser Reihenfolge!)
! Ebene 7: wird (bis auf technisch bedingte Ausnahmen) nicht belegt
! Multi_key=Compose (keine eigene Ebene): Mod3+Tab or right window key
! Feststellen/Shift_Lock: Shift+Shift
! Mod4_Lock: Mod4(rechts)+Mod4(links)
! Reihenfolge der Ebenen in der Xmodmap:
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Modifier definition
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
clear Lock
clear Mod2
! Mod2 war NumLock !
clear Mod3
clear Mod5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Shift
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 50=left 62=right
! Shift+Shift ergibt ein ShiftLock (wie Caps, wirkt aber auf alle Zeichen, nicht nur auf Großbuchstaben)
! Der Lock lässt sich durch ein weiteres Shift lösen.
! Eigentlich (siehe Referenz) sollte hier ein CapsLock stehen.
keycode 50 = Shift_L Shift_Lock
keycode 62 = Shift_R Shift_Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Mod3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 66=left 51=right
! Make CapsLock an modifier called Mod3 (similar to AltGr) (Mode_switch or ISO_Group_Shift is for 3rd and 4th level)
! Make former CapsLock and qwertz-# to Mode_switch or ISO_Group_Shift
! Mod3(links) (=Qwertz-Caps) erlaubt nur 4 Ebenen
! Ohne einen Eintrag in der zweiten Gruppe (=Ebene 3) ergäbe Mod3+Mod3=Group_Shift+Group_Shift=Gruppe 3=Ebene 6. Das ist nicht gewünscht.
keycode 66 = ISO_Group_Shift ISO_Group_Shift ISO_First_Group NoSymbol
keycode 51 = ISO_Group_Shift ISO_Group_Shift ISO_First_Group NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Mod4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 94=left 113=right
! Make the former AltGr and qwertz-< to Mod4 (ISO_Level3_Shift)
! Mod4(rechts)+Mod4(links) lässt Mod4 einrasten (Mod4Lock)
! das funktioniert nur in dieser Reihenfolge, da Mod4(rechts) (=Qwertz-AltGr) nur 4 Ebenen hat
! Der Lock lässt sich durch ein weiteres Mod4 lösen.
keysym less = ISO_Level3_Shift ISO_Level3_Shift ISO_Group_Shift ISO_Group_Shift ISO_Level3_Lock NoSymbol
keysym ISO_Level3_Shift = ISO_Level3_Shift ISO_Level3_Shift ISO_Group_Shift ISO_Group_Shift ISO_Level3_Lock NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! window keys
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! keysym Super_L = Super_L
! keycode 116 = Super_R
keysym Super_R = Multi_key Multi_key
! add Mod4 = Super_L
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! general Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Einrasten über linke Win-Taste+Modifier, Lösen über nochmaliges Betätigen des Modifiers
! Shift_Lock und Mo4_Lock funktionieren, Mod3_Lock lässt sich aber nicht mehr lösen!!!!
! keycode 115 = ISO_Lock NoSymbol
! add Lock = ISO_Lock
! add Mod3 = ISO_Group_Shift
! add Mod5 = ISO_Level3_Shift
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! main keyboard
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Tab key
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
keycode 23 = Tab ISO_Left_Tab Multi_key ISO_Level3_Lock
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Space key
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
keycode 65 = space space space nobreakspace KP_0 KP_0 U202F NoSymbol
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! dead keys
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 49 = dead_circumflex dead_tilde dead_abovering dead_breve dead_caron Pointer_EnableKeys dead_macron NoSymbol
! called T1 ˆ ˜ ˚ ˘ ˇ (keypad-mouse mode) ¯
keycode 21 = dead_grave NoSymbol dead_diaeresis U1FFE NoSymbol NoSymbol NoSymbol NoSymbol
! called T2 \` ¨ ῾ dasia (asper)
keycode 35 = dead_acute dead_cedilla dead_stroke U1FBF dead_doubleacute NoSymbol dead_abovedot NoSymbol
! called T3 ´ ¸ / ᾿ psili (lenis) ˝ ˙
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The first row (number Row)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 10 = 1 degree onesuperior onesubscript ordfeminine NoSymbol notsign NoSymbol
! ° ¹ ₁ ª ¬
keycode 11 = 2 section twosuperior twosubscript masculine NoSymbol logicalor NoSymbol
! § ² ₂ º ∨
keycode 12 = 3 U2113 threesuperior threesubscript numerosign NoSymbol logicaland NoSymbol
! ℓ liter ³ ₃ № ∧
keycode 13 = 4 guillemotright U203A dagger Prior Prior downtack NoSymbol
! » › † ⊥ perpendicular
keycode 14 = 5 guillemotleft U2039 femalesymbol periodcentered NoSymbol U2221 NoSymbol
! « ‹ ♀ · ∡ angle sign
keycode 15 = 6 EuroSign cent malesymbol sterling NoSymbol U2225 NoSymbol
! € ¢ ♂ £ ∥ parallel
keycode 16 = 7 dollar yen Greek_kappa currency NoSymbol rightarrow NoSymbol
! \$ ¥ κ ¤ →
keycode 17 = 8 doublelowquotemark singlelowquotemark leftanglebracket NoSymbol NoSymbol infinity NoSymbol
! „ ‚ ⟨ (bra) ∞
keycode 18 = 9 leftdoublequotemark leftsinglequotemark rightanglebracket KP_Divide KP_Divide containsas NoSymbol
! “ ‘ ⟩ (ket) / / ∋
keycode 19 = 0 rightdoublequotemark rightsinglequotemark zerosubscript KP_Multiply KP_Multiply emptyset NoSymbol
! ” ’ ₀ * * ∅
keycode 20 = minus emdash NoSymbol U2011 KP_Subtract KP_Subtract hyphen NoSymbol
! - — ‑ non-breaking - - ­ soft hyphen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The upper row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 24 = x X ellipsis Greek_xi U22EE NoSymbol Greek_XI Greek_XI
! … ξ ⋮ Ξ Ξ
keycode 25 = v V underscore NoSymbol NoSymbol NoSymbol U2259 NoSymbol
! _ ≙ ≙
keycode 26 = l L bracketleft Greek_lambda KP_Up KP_Up Greek_LAMBDA Greek_LAMBDA
! [ λ Λ Λ
keycode 27 = c C bracketright Greek_chi KP_Delete KP_Delete U2102 NoSymbol
! ] χ ℂ komplex
keycode 28 = w W asciicircum Greek_omega KP_Insert KP_Insert Greek_OMEGA Greek_OMEGA
! ^ ω Ω Ω
keycode 29 = k K exclam U03F0 exclamdown NoSymbol radical NoSymbol
! ! ϰ Greek_kappa ¡ √
keycode 30 = h H less Greek_psi KP_7 KP_7 Greek_PSI Greek_PSI
! < ψ Ψ Ψ
keycode 31 = g G greater Greek_gamma KP_8 KP_8 Greek_GAMMA Greek_GAMMA
! > γ Γ Γ
keycode 32 = f F equal Greek_phi KP_9 KP_9 Greek_PHI Greek_PHI
! = φ Φ Φ
keycode 33 = q Q ampersand U03D5 KP_Add KP_Add U211A NoSymbol
! & ϕ Greek_phi + + ℚ rational
keycode 34 = ssharp U1E9E U017F Greek_finalsmallsigma NoSymbol NoSymbol jot NoSymbol
! ß ẞ Capital ß ſ long s ς ∘ ring operator
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The home row (middle row)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 38 = u U backslash NoSymbol KP_Home KP_Home U222E NoSymbol
! \ ∮ contour integral
keycode 39 = i I slash Greek_iota KP_Left KP_Left integral NoSymbol
! / ι ∫
keycode 40 = a A braceleft Greek_alpha KP_Down KP_Down U2200 NoSymbol
! { α ∀ for all
keycode 41 = e E braceright Greek_epsilon KP_Right KP_Right U2203 NoSymbol
! } ε ∃ there exists
keycode 42 = o O asterisk Greek_omicron KP_End KP_End elementof NoSymbol
! * ο ∈
keycode 43 = s S question Greek_sigma questiondown NoSymbol Greek_SIGMA Greek_SIGMA
! ? σ ¿ Σ Σ
keycode 44 = n N parenleft Greek_nu KP_4 KP_4 U2115 NoSymbol
! ( ν ℕ natural
keycode 45 = r R parenright U03F1 KP_5 KP_5 U211D NoSymbol
! ) ϱ Greek_rho ℝ real
keycode 46 = t T minus Greek_tau KP_6 KP_6 partialderivative
! - τ ∂
keycode 47 = d D colon Greek_delta KP_Separator NoSymbol Greek_DELTA Greek_DELTA
! : δ ,/. Δ Δ
keycode 48 = y Y at Greek_upsilon KP_Decimal NoSymbol nabla NoSymbol
! @ υ ./, ∇
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lower row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Ebene4+Sh Ebene6 Ebene7
keycode 52 = udiaeresis Udiaeresis numbersign NoSymbol Escape Escape U211C NoSymbol
! ü Ü # ℜ real part
keycode 53 = odiaeresis Odiaeresis dollar NoSymbol Tab ISO_Left_Tab U2111 NoSymbol
! ö Ö \$ ℑ imaginary part
keycode 54 = adiaeresis Adiaeresis bar Greek_eta KP_Next KP_Next U2135 NoSymbol
! ä Ä | η ℵ alef symbol
keycode 55 = p P asciitilde Greek_pi KP_Enter KP_Enter Greek_PI Greek_PI
! ~ π Π Π
keycode 56 = z Z grave Greek_zeta Undo Redo U2124 NoSymbol
! \` ζ ℤ integers
keycode 57 = b B plus Greek_beta colon NoSymbol U21D0 NoSymbol
! + β : ⇐
keycode 58 = m M percent Greek_mu KP_1 KP_1 ifonlyif NoSymbol
! % μ ⇔
keycode 59 = comma endash quotedbl Greek_rho KP_2 KP_2 U21D2 NoSymbol
! , – " ρ ⇒ implies
keycode 60 = period enfilledcircbullet apostrophe U03D1 KP_3 KP_3 Greek_THETA Greek_THETA
! . • ' ϑ Greek_theta Θ
keycode 61 = j J semicolon Greek_theta semicolon NoSymbol variation NoSymbol
! ; θ ; ∝ proportional to
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Keypad
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The uppest row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 77 = Tab ISO_Left_Tab equal approxeq identical NoSymbol notequal NoSymbol
! = ≈ almost equal ≡ identical to ≠
keysym KP_Divide = KP_Divide KP_Divide division U2300 U2223 NoSymbol U2044 NoSymbol
! / / ÷ ⌀ diameter ∣ divides (for ⁶⁄₅₉)
keycode 63 = KP_Multiply KP_Multiply U22C5 U2299 U2297 NoSymbol multiply NoSymbol
! * * ⋅ dot ⊙ cirled dot ⊗ circled times × times
keycode 82 = KP_Subtract KP_Subtract U2212 U2296 U2238 NoSymbol U2216 NoSymbol
! - - − real minus ⊖ cirled minus ∸ dot minus ∖ set minus
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The upper row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 79 = KP_7 U2714 U2195 U226A upstile NoSymbol KP_Home KP_Home
! ✔ check mark ↕ arrow ≪ much less ⌈
keycode 80 = KP_8 U2718 uparrow intersection U22C2 NoSymbol KP_Up KP_Up
! ✘ ballot x ↑ ∩ ⋂ n-ary intersection
keycode 81 = KP_9 NoSymbol U20D7 U226B U2309 NoSymbol KP_Prior KP_Prior
! vector ≫ much greater ⌉
keycode 86 = KP_Add KP_Add plusminus U2295 U2214 NoSymbol U2213 NoSymbol
! + + ± circled plus dot plus ∓ minus-plus
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The middle row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 83 = KP_4 club leftarrow includedin U2286 NoSymbol KP_Left KP_Left
! ♣ ← ⊂ ⊆
keycode 84 = KP_5 EuroSign brokenbar U22B6 U22B7 NoSymbol KP_Begin KP_Begin
! € ¦ ⊶ original of ⊷ image of
keycode 85 = KP_6 U2023 rightarrow includes U2287 NoSymbol KP_Right KP_Right
! ‣ → ⊃ ⊇
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lower row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 87 = KP_1 diamond U2194 lessthanequal downstile NoSymbol KP_End KP_End
! ♦ ↔ arrow ≤ ⌊
keycode 88 = KP_2 heart downarrow union U22C3 NoSymbol KP_Down KP_Down
! ♥ ↓ ∪ ⋃ n-ary union
keycode 89 = KP_3 U2660 U21CC greaterthanequal U230B NoSymbol KP_Next KP_Next
! ♠ ⇌ ≥ ⌋
! keycode 108 = KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter KP_Enter
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The lowest row
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ebene1 Ebene2 Ebene3 Ebene5 Ebene6 Ebene7 Ebene4 Ebene4+Sh
keycode 90 = KP_0 U2423 percent U2030 U25A1 NoSymbol KP_Insert KP_Insert
! ␣ space sign % ‰ per mille □ white square
keycode 91 = comma period KP_Separator minutes seconds NoSymbol KP_Delete KP_Delete
! , . ,/. ′ min,feets ″ sec,inches
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Bemerkungen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 1.) Ebene 6 (hier: der 7. Eintrag) erreicht man über ISO_Group_Shift+ISO_Group_Shift
! (bzw. mode_switch+mode_switch) und über keine andere mir bekannte Kombination. Insbesondere legt
! ISO_Level3_Shift Level3 (Ebene 4, hier: Eintrag 5) fest, verschiebt also nicht. Darum kann man
! ISO_Level3_Shift nur mit Shift sinnvoll kombinieren. Daraus resultiert, dass Ebene 6 nur über
! Mod3+Mod4 (in dieser Reihenfolge!) erreicht werden kann.
!
! 2.) Die KP_-Einträge ermöglichen die Steuerung des Mauscursors mit der Tastatur.
! Hierzu wird mittels Mod4+ß dieser Betriebsmodus ein- und später wieder ausgeschaltet.
! Die Steuerung des Cursors kann über den Ziffernblock (Ebene 4, eventuell mit
! eingerastetem Mod4) erfolgen.
Loading…
Cancel
Save