Cygwin ist eine schöne und freie Posix Umgebung für Windows, welche aber leider ein ordentliches Terminal vermissen lässt. Man kann zwar einen X-Server automatisch starten und dann mit xterm arbeiten, so ganz toll ist das aber auch nicht, weil die Schriften nicht so einfach auszutauschen sind und es wirkt insgesamt immer ein bisschen hakelig.
Ok, nun bin ich schonmal über einen Putty Patch gestolpert, der sich mit Cygwin verbinden kann. Leider habe ich es noch nicht hinbekommen gehabt, heute dann doch. Zunächst muss man die modifizierte Version von Putty laden http://code.google.com/p/puttycyg/ und entpacken, sagen wir mal nach ‘D:\opt\puttycyg-20071202′.
Jetzt ist das Putty genauso startklar wie ein normales, wie kommt man nun aber zu einer lokalen Bash? Auch einfach, man muss es nur wissen

Diese Einstellung speichert man - wie hier zu sehen - gleich mal unter ‘localhost’ ab, damit man nicht immer die Konfiguration vornehmen muss. Nach dem Doppelklick geht das auch soweit.
Nun wäre es aber noch schön, die lokale Session nicht erst immer über die Putty Abfrage zu starten. Dafür bauen wir noch eine Verknüpfung (man beachte den Parameter -load localhost am Ende der Datei).

Bei Bedarf tauscht man noch das Icon gegen “C:\cygwin\Cygwin.ico” aus und man hat eine wunderschöne und schnelle Startverknüpfung zu einem ordentlichen lokalen Terminal.
Nun fehlen nur noch Cygwin- oder Bash spezifische Einstellungen, welche auch gleich noch gemacht werden können. Zum einen fehlen noch die Umlaute in der Bash, das macht die angehangene .Xmodmap Datei, welche ins Home kopiert werden muss. In der .bashrc und der .inputrc werden ein paar Farbwerte gesetzt, die ‘Reverse History Search’ auf die BildAuf/BildAb Tasten gelegt und der Prompt so angepasst, dass der Pfad immer durch einen Doppelklick markierbar ist.
In der .bashrc wird dieser teil unten eingefügt:
export LANG=de_DE
export LANGUAGE=de_DE
export LC_CTYPE=de_DE
export LC_NUMERIC=C
export LC_TIME=de_DE
export LC_COLLATE=de_DE
export LC_MONETARY=de_DE
export LC_MESSAGES=C
export LC_PAPER=de_DE
export LC_NAME=de_DE
export LC_ADDRESS=de_DE
export LC_TELEPHONE=de_DE
export LC_MEASUREMENT=de_DE
export LC_IDENTIFICATION=de_DE
export LC_ALL="de_DE xterm -fn"
export HISTCONTROL=ignoredups
PS1='${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]: \[33[01;34m\]\w\[33[00m\] \$ ‘
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "33]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}07"'
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
eval “`dircolors -b`”
alias ls=’ls –color=auto’
#alias dir=’ls –color=auto –format=vertical’
#alias vdir=’ls –color=auto –format=long’
fi
# coloured grep
export GREP_OPTIONS='--color=auto' GREP_COLOR='1;32'
In der .inputrc fügen wir diese Zeilen ein, damit die History Search funktioniert:
# alternate mappings for "page up" and "page down" to search the history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
Und die .Xmodmap sieht so aus:
keycode 8 =
keycode 9 = Escape
keycode 10 = 1 exclam
keycode 11 = 2 quotedbl twosuperior
keycode 12 = 3 paragraph threesuperior
keycode 13 = 4 dollar
keycode 14 = 5 percent
keycode 15 = 6 ampersand
keycode 16 = 7 slash braceleft
keycode 17 = 8 parenleft bracketleft
keycode 18 = 9 parenright bracketright
keycode 19 = 0 equal braceright
keycode 20 = ssharp question backslash
keycode 21 = apostrophe grave
keycode 22 = BackSpace
keycode 23 = Tab
keycode 24 = q Q at
keycode 25 = W
keycode 26 = E
keycode 27 = R
keycode 28 = T
keycode 29 = Z
keycode 30 = U
keycode 31 = I
keycode 32 = O
keycode 33 = P
keycode 34 = Udiaeresis
keycode 35 = plus asterisk asciitilde
keycode 36 = Return
keycode 37 = Control_L
keycode 38 = A
keycode 39 = S
keycode 40 = D
keycode 41 = F
keycode 42 = G
keycode 43 = H
keycode 44 = J
keycode 45 = k K Arabic_kaf
keycode 46 = l L Arabic_lam Greek_lambda
keycode 47 = Odiaeresis
keycode 48 = Adiaeresis
keycode 49 = asciicircum degree
keycode 50 = Shift_L
keycode 51 = numbersign apostrophe
keycode 52 = Y
keycode 53 = X
keycode 54 = C
keycode 55 = V
keycode 56 = B
keycode 57 = N
keycode 58 = m M mu
keycode 59 = comma semicolon
keycode 60 = period colon
keycode 61 = minus underscore
keycode 62 = Shift_R
keycode 63 = KP_Multiply
keycode 64 = Alt_L Meta_L
keycode 65 = space
keycode 66 = Caps_Lock
keycode 67 = F1
keycode 68 = F2
keycode 69 = F3
keycode 70 = F4
keycode 71 = F5
keycode 72 = F6
keycode 73 = F7
keycode 74 = F8
keycode 75 = F9
keycode 76 = F10
keycode 77 = Num_Lock
keycode 78 = Scroll_Lock
keycode 79 = Home KP_7 KP_7 Home
keycode 80 = Up KP_8 KP_8 Up
keycode 81 = Prior KP_9 KP_9 Prior
keycode 82 = KP_Subtract
keycode 83 = Left KP_4 KP_4 Left
keycode 84 = Begin KP_5 KP_5 Begin
keycode 85 = Right KP_6 KP_6 Right
keycode 86 = KP_Add
keycode 87 = End KP_1 KP_1 End
keycode 88 = Down KP_2 KP_2 Down
keycode 89 = Next KP_3 KP_3 Next
keycode 90 = Insert KP_0 KP_0 Insert
keycode 91 = Delete KP_Decimal KP_Decimal Delete
keycode 92 = 0x1007ff00
keycode 93 =
keycode 94 = less greater bar
keycode 95 = F11
keycode 96 = F12
keycode 97 = Home
keycode 98 = Up
keycode 99 = Prior
keycode 100 = Left
keycode 101 = Begin
keycode 102 = Right
keycode 103 = End
keycode 104 = Down
keycode 105 = Next
keycode 106 = Insert
keycode 107 = Delete
keycode 108 = KP_Enter
keycode 109 = Control_R
keycode 110 = Pause
keycode 111 = Print
keycode 112 = KP_Divide
keycode 113 = Mode_switch
keycode 114 = Break
keycode 115 = Meta_R
keycode 116 = Meta_R