Endlich *richtig* kyrillisch schreiben …

Folgendes Snippet, wenn es als Datei ocs im Verzeichnis /usr/share/X11/xkb/symbols abgelegt ist, erlaubt einfache Eingabe von nicht-alltäglichen Zeichen aus dem kyrillischen Alphabet. Es läßt sich auf folgende Wiese invozieren (um die eigenen Präferenzen und alternativen Groups ergänzen):

setxkbmap -layout de,ocs -variant ,phonetic

Das Layout basiert auf dem standardmäßig mit Xorg gelieferten, phonetischen Layout, welches es um diverse zusätzliche Zeichen auf der dritten Ebene ergänzt; die zugehörigen Majuskeln erreicht man intutiverweise durch die Shifttaste. Außerdem sind die arabischen Ziffern auf die zweite Ebene migriert worden, um mehr Raum für andere Glyphen zu schaffen; allerdings liegen auf der Zahlenreihe die Majuskeln und Minuskeln nebeneinander, wie es das phonetische Layout für „ъ“ und „ё“ vorgesehen hatte.

Wenn sich dieser Entwurf als unhandlich oder unzureichend herausstellen sollte, bin ich für alle produktiven Vorschläge offen. Beim Setzen von altrussischen Texten hat sich dieses Layout bereits in der Praxis bewährt. XKB mag grausam und unflexibel sein, aber konfigurierbar ist es auf traumhaft zuvorkommende Weise …

// $XKeyboardConfig$

partial alphanumeric_keys
xkb_symbols "phonetic" {

    name[Group1]= "Russia - Phonetic";

// Number row
// Plain decimal digits are accessed via shift.
    key  {        [             U0467,                  1,        U0469,          exclam ] }; //   small little yus | small iotified little yus
    key  {        [             U0466,                  2,        U0468,              at ] }; //   cap   little yus | cap   iotified little yus
    key  {        [       Cyrillic_io,                  3,        U0465                  ] }; //                  ё | small iotified e
    key  {        [       Cyrillic_IO,                  4,        U0464                  ] }; //                  Ё | cap   iotified e
    key  {        [ Cyrillic_hardsign,                  5,        U0481                  ] }; // small tverdyj znak | small qoppa
    key  {        [ Cyrillic_HARDSIGN,                  6,        U0480                  ] }; // cap   tverdyj znak | cap   qoppa
    key  {        [         ampersand,                  7,        U047F                  ] }; //                    | small ot
    key  {        [          asterisk,                  8,        U047E                  ] }; //                    | cap   ot
    key  {        [             U046b,                  9,        U046d,       parenleft ] }; //      small big yus | small iotified big yus
    key  {        [             U046a,                  0,        U046c,      parenright ] }; //      cap   big yus | cap   iotified big yus
    key  {        [        underscore,              minus                                ] };
// punctuation corresponding to english layout
    key  {        [            period,            greater                                ] };
    key  {        [             slash,           question                                ] };
    key  {        [             comma,               less                                ] };
    key  {        [         semicolon,              colon                                ] };
    key  {        [        apostrophe,           quotedbl                                ] };
    key  {        [               bar,          brokenbar                                ] };
// Latin -> Cyrillic mapping
    key  {        [       Cyrillic_yu,        Cyrillic_YU,        U0479,           U0478 ] }; // small uk      | cap uk
    key  {        [       Cyrillic_ya,        Cyrillic_YA,        UA657,           UA656 ] };
    key  {        [       Cyrillic_ze,        Cyrillic_ZE,        U0455,           U0405 ] }; // small dzelo   | cap dzelo
    key  {        [       Cyrillic_es,        Cyrillic_ES,        UA641,           UA640 ] }; // small zemlja  | cap zemlja
    key  {        [        Cyrillic_a,         Cyrillic_A                                ] };
    key  {        [       Cyrillic_ve,        Cyrillic_VE                                ] };
    key  {        [      Cyrillic_tse,       Cyrillic_TSE                                ] };
    key  {        [ Cyrillic_softsign,  Cyrillic_SOFTSIGN                                ] };
    key  {        [       Cyrillic_de,        Cyrillic_DE                                ] };
    key  {        [       Cyrillic_ie,        Cyrillic_IE,        U0463,           U0462 ] }; // small yat     | cap yat
    key  {        [      Cyrillic_zhe,       Cyrillic_ZHE                                ] };
    key  {        [       Cyrillic_ef,        Cyrillic_EF,        U0473,           U0472 ] }; // small fita    | cap fita
    key  {        [       Cyrillic_te,        Cyrillic_TE                                ] };
    key  {        [       Cyrillic_er,        Cyrillic_ER                                ] };
    key  {        [       Cyrillic_en,        Cyrillic_EN                                ] };
    key  {        [       Cyrillic_be,        Cyrillic_BE                                ] };
    key  {        [       Cyrillic_ha,        Cyrillic_HA                                ] };
    key  {        [      Cyrillic_ghe,       Cyrillic_GHE                                ] };
    key  {        [     Cyrillic_yeru,      Cyrillic_YERU,        U0475,           U0474 ] }; // small ižica   | cap ižica
    key  {        [       Cyrillic_em,        Cyrillic_EM                                ] };
    key  {        [   Cyrillic_shorti,    Cyrillic_SHORTI, Ukrainian_yi,    Ukrainian_YI ] };
    key  {        [        Cyrillic_u,         Cyrillic_U,        UA64B,           UA64A ] }; // small mono uk | cap mono uk
    key  {        [       Cyrillic_ka,        Cyrillic_KA,        U046F,           U046E ] }; // small ksi     | cap ksi
    key  {        [        Cyrillic_i,         Cyrillic_I,  Ukrainian_i,     Ukrainian_I ] };
    key  {        [        Cyrillic_o,         Cyrillic_O,        U0461,           U0460 ] }; // small omega   | cap omega
    key  {        [       Cyrillic_el,        Cyrillic_EL                                ] };
    key  {        [       Cyrillic_pe,        Cyrillic_PE,        U0471,           U0470 ] }; // small psi     | cap psi
// Other Cyrillic characters (could be made obsolete by using third level
// instead, but for now it works as it is).
    key  {        [      Cyrillic_sha,       Cyrillic_SHA                                ] };
    key  {        [      Cyrillic_che,       Cyrillic_CHE                                ] };
    key  {        [    Cyrillic_shcha,     Cyrillic_SHCHA                                ] };
    key  {        [        Cyrillic_e,         Cyrillic_E, Ukrainian_ie, Ukrainian_IE    ] };
};

UPDATE
Wie so oft hat sich bereits jemand um fast dieselbe Sache verdient gemacht und ein Altkirchenslavisch-Layout für Xorg erstellt — einbegreiflich von ein paar weiteren Lettern wie z. B. dem Ѿ. Zeichen zur Wiedergabe des Ukrainischen wie z.~B. das „ї“ fehlen hingegen. Zudem basiert es auf dem russischen Standardlayout, was es für Westeuropäer etwas gewöhnungsbedürftig macht. (Ganz abgesehen von den umständlichen Installationsanweisungen … die Leiden der Ubuntu-User müssen unvorstellbar sein.)

2nd UPDATE
Bin durch eben erwähnte Seite auf die Schriftart Ponomar gestoßen; sieht vielversprechend aus. Ich verspreche hiermit, den uralten und mittlerweile obsoleten Post zu Kyrillisch-Tauglichkeit diverser Schriftarten zu aktualisieren — spätestens jedenfalls nach Einreichen meiner Abschlußarbeit …

3rd UPDATE
Der oben angebotene Aufruf von setxkbmap hätte in der rohen Form fatal sein können.

Automatische Transliteration in Vim (2) — mittels Lua

Im letzten Post wurde ein knappes Script vorgestellt, das die Funktionalität des Transliterator-Moduls für ConTeXt in Vim zugänglich macht. Dasselbe Ziel läßt sich mittlerweile dank Lua-Scripting Unterstützung auch in Lua selbst erreichen. Zwar stehen einige essentielle Internals des Editors – wie z. B. Register – (noch?) nicht direkt im Lua-Interface zur Verfügung, doch läßt sich vieles durch Aufruf von vim.command() oder vim.eval() improvisieren. (NB: Vim muß mit dem Flag --enable-luainterp kompiliert worden sein!)

"===============================================================================
" TRANSLITERATOR PLUGIN FOR LUA
"===============================================================================

lua << EOF

local fmt, iopopen, print = string.format, io.popen, print
local vimcommand, vimeval, vimline, vimwindow = vim.command, vim.eval, vim.line, vim.window

trl = trl or { }
trl.mode = "all"
trl.mode_list = {
    "all",                      "ru_old",
    "ru",                       "ru_transcript_de",
    "ru_transcript_de_exp",     "ru_transcript_en",
    "ru_transcript_en_exp",     "ru_cz",
    "ocs_cz",                   "iso9_ocs",
    "iso9_ocs_hack",            "ocs",
    "ocs_gla",                  "sr_tocy",
    "sr_tolt",                  "bg_de",
    "gr",                       "gr_n",
}

trl.mode_dict = { }
do
    for modecnt, mode in next, trl.mode_list do
        trl.mode_dict[mode] = modecnt
    end
end

trl.transliterate = function (mode, str)
    local p = iopopen(fmt([[/usr/bin/env mtxrun --script transliterate --mode=%s --s="%s" --silent 2> /dev/null]], mode, str))
    local result = p:read("*a")
    p:close()
    if result:find("\n$") then
        result = result:sub(1,#result-1)
    end
    return result
end

trl.do_line = function ()
    local current = vimline()
    local trled   = trl.transliterate(trl.mode, current)
    local buffer  = vim.buffer()
    buffer[vimwindow().line] = trled
end

trl.do_selection = function ()
    vimcommand[[normal gv"ty]]
    local trled = trl.transliterate(trl.mode, vimeval[[@t]])
    vimcommand(fmt([[let @t = "%s"]], trled))
    vimcommand[[normal gvd"tP]]
end

trl.set_mode = function (mode)
    if trl.mode_dict[mode] then
        trl.mode = mode
    end
    print(fmt([[Set transliteration mode to â~@~\%sâ~@~].]], mode))
end

trl.cycle_modes = function ()
    local next_mode = trl.mode_dict[trl.mode]
    next_mode       = next_mode % #trl.mode_list + 1
    trl.mode        = trl.mode_list[next_mode]
    print(fmt([[Set transliteration mode to â~@~\%sâ~@~].]], trl.mode))
end

EOF

nmap <Leader>t :lua trl.do_line()<CR>
imap <F9>      :<ESC>:lua trl.do_line()<CR>a
vmap <Leader>t :lua trl.do_selection()<CR>

nmap <F10>     :lua trl.cycle_modes()<CR>
imap <F10>     <ESC>:lua trl.cycle_modes()<CR>a

nmap <F11>     :lua trl.set_mode("all")<CR>
imap <F11>     <ESC>:lua trl.set_mode("all")<CR>a

"===============================================================================
" END TRANSLITERATOR PLUGIN FOR LUA
"===============================================================================

Automatische Transliteration in Vim

ConTeXt-Nutzer, die die neueste Version des Transliterator-Moduls installiert haben, können mit wenig Aufwand alle Transliterationsschemata auch in ihrerm Editor verfügbar machen. Das folgende Snippet, anzuhängen an ~/.vimrc, bindet das Transliterieren der aktuellen Zeile an Tasten F9 (insert mode), sowie Lt (normal und visual, wobei sich L auf den aktuellen Mapleader bezieht). Zudem kann mit F10 durch die verschiedenen Transliteration-Modi gewechselt werden. Der Modus defaultet zu all (vgl. das Manual). Mit F11 kann er direkt wieder auf diesen Wert zurückgesetzt werden.

"===============================================================================
" TRANSLITERATOR PLUGIN
"===============================================================================

let g:trl_mode = "all"
let g:trl_mode_list = [ "all", "ru_old", "ru", "ru_transcript_de", "ru_transcript_de_exp", "ru_transcript_en", "ru_transcript_en_exp", "ru_cz", "ocs_cz", "iso9_ocs", "iso9_ocs_hack", "ocs", "ocs_gla", "sr_tocy", "sr_tolt", "bg_de", "gr", "gr_n" ]
let g:trl_mode_dict = { }
let b:modecnt = 1
for mode in g:trl_mode_list
    let g:trl_mode_dict[mode] = b:modecnt
    let b:modecnt = b:modecnt + 1
endfor

function! TRL_transliterate(mode, str)
    let result = system(printf("/usr/bin/env mtxrun –script transliterate –mode=%s –s=\"%s\" –silent 2> /dev/null", a:mode, a:str))
    if result =~ "\n$"
        return strpart(result, 0, strlen(result) - 1)
    end
    return result
endfunction

function! TRL_do_line()
    let current = getline(".")
    let trled   = TRL_transliterate(g:trl_mode, current)
    call setline(".", trled)
endfunction

function! TRL_do_selection()
    normal gv"ty
    let @t = TRL_transliterate(g:trl_mode, @t)
    normal gvd
    normal "tP
endfunction

function! TRL_set_mode(mode)
    if get(g:trl_mode_dict, a:mode)
        let g:trl_mode = a:mode
    endif
    echo "Set transliteration mode to: “\" . g:trl_mode . "”."
endfunction

function! TRL_cycle_modes()
    let next_mode = get(g:trl_mode_dict, g:trl_mode)
    if len(g:trl_mode_list) == next_mode
        let next_mode = 0
    endif
    let g:trl_mode = get(g:trl_mode_list, next_mode)
    echo "Set transliteration mode to: “\" . g:trl_mode . "”."
endfunction

nmap <Leader>t :call TRL_do_line()<CR>
imap <F9>      <ESC>:call TRL_do_line()<CR>a
vmap <Leader>t :call TRL_do_selection()<CR>

nmap <F10>     :call TRL_cycle_modes()<CR>
imap <F10>     <ESC>:call TRL_cycle_modes()<CR>a

nmap <F11>     :call TRL_set_mode("all")<CR>
imap <F11>     <ESC>:call TRL_set_mode("all")<CR>a

"===============================================================================
" END TRANSLITERATOR PLUGIN
"===============================================================================

Entsorgung

Glas? Plastikmüll? Papier? Mülltrennung sorgt für Ordnung im Abfall. Hier in Olmütz lassen sich zudem auch kurzerhand diverse andere Gebrauchsgüter recyclen, derer man sich andernorts nicht so einfach entledigen kann. Konkret handelt es sich um das Übel der Welt (zlo), vergammelte Liebe (láska) sowie überflüssige Freude (radost). Einfach weg damit, wenn Mensch es nicht mehr braucht — die Wiederverwertung bringt diese überschüssigen Ressourcen wieder in Umlauf.

Zlo, radost, láska

Gelegenheiten zur Abfallentsorgung richten sich nach dem realen Aufkommen an Unrat.

Auch die übliche Entsorgung von Körperausscheidungen läuft hier etwas anders, denn selbst handelsübliche Aborte sind für Dual-Use freigegeben. Als Beispiel soll hierfür das stille Örtchen im ehemaligen Olmützer Jesuitenkonvikt dienen.

Bietet besonderen Schutz im Fall von Bränden...

Notausgang für schlanke Zeitgenossen

Wein aus der Eisgrube

Tagesausflug zum Schloß Lednice (Eisgrub); Resultat: Hervorragend gegessen (auch wenn sie keine stravenky dafür wollten …), knappe Schloßtour, Gartenbesichtigung, Raubvogelgala, und vor allem — drei Liter Wein im Rucksack zurückgebracht.

Hinterseits braucht es wohl noch ein paar Jahre Reparatur, um vorzeigbar zu werden

Schloß Lednice zeigt seine renovierte Seite

Aus dem Faß natürlich am besten, aber der 2008-er Chardonnay aus der Flasche ist auch sehr empfehlenswert.

Preise für verschiedene Jahrgänge -- von der anderen Seite begeh- bzw. besitzbares Faß.

Follow

Get every new post delivered to your Inbox.