Kiel uzi Katalunan + Hispanan + Rusan + Esperantan en Linuksa komputilsistemo?

1. Enhavo

  1. Enhavo
  2. Celoj
  3. Enkonduko al la problemo
    1. Mia propra sperto
    2. Literkodoj krom latin1
    3. Nura nuna solvo: Unikodo
    4. Nuntempa uzado de literkodoj
  4. Montri literojn ne-latin1-ajn: tiparoj
  5. Naciaj agordoj, aŭ programoj en nacia lingvo: "Locale"
    1. Kia estas nuna nacia agordo?
    2. Kiel atingi unikodan naciagordon?
  6. Kiel tajpi neanglajn literojn
  7. Programoj
    1. X-terminalo: xterm
    2. Kodotekoj por terminalaj programoj
    3. Mutt, mia retpoŝtilo
    4. Vim, mia redaktilo
  8. Ne pretaj artikoloj
  9. Pri tiu ĉi dokumento

2. Celoj

Mi celas ebligi la uzon de katalunaj literoj, esperantaj literoj kaj rusaj literoj en preskaŭ la plena X sistemo, kaj ankaŭ en terminalaj programoj. Pli ekzakte, mi celas uzi tiajn literojn en X programoj kiuj subtenas unikodon, retpoŝtilo mutt, kaj redaktilo vim (kompreneble ankaŭ gvim, kiel X programo).

La katalunaj literoj estas: a b c ç d e f g h i j k l m n o p q r s t u v w x y z
La hispanaj literoj estas: a b c d e f g h i j k l m n ñ o p q r s t u v w x y z
La esperantaj literoj estas: a b c ĉ d e f g ĝ h ĥ i j ĵ k l m n o p q r s ŝ t u ŭ v z
La rusaj literoj estas: а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я

3. Enkonduko al la problemo

3.1. Mia propra sperto

Dum jaroj 2003/2004 mi eklernis novajn fremdajn lingvojn krom la anglan.Mi denaske scipovas la katalunan, kaj dum mia infaneco mi lernis la hispanan. Kiam mi estis dekunujara, mi eklernis la anglan. Kaj nun, kiam mi estas dudekdu, mi lernas la esperantan kaj la rusan. Mi neniam antaŭe havis problemojn por skribi per miaj konataj lingvoj ĉe komputilo: Katalunan, Hispanan kaj Anglan eblas skribi per la sama literkodo: la tre konata iso-8859-1, aŭ alimaniere latin1.

3.2. Literkodoj krom latin1

Nun nova mondo malkovriĝis antaŭ mi: literkodoj kaj por la rusa kaj por la esperanta. Ruse oni plej kutime skribas per: KOI8-Rwin-1251 (tiu ĉi lasta preskaŭ nur en vindozaj komputilsistemoj). Esperante oni skribas per latin3 (a.k.k. iso-8859-3), aŭ rekte sen uzi la esperantajn ĉapelitajn literojn, sed anstataŭigi ilin per x, h' sistemo (per po du latinaj literoj por ĉapellitero).

3.3. Nura nuna solvo: Unikodo

Ekde kelkaj jaroj ekzistas novaj literkodoj, ne limigataj pro 1-bajto interna komputila reprezento de literoj. Tiel, tiuj literkodoj enhavas pli ol 256 literojn malsimilajn. Ekzistas pluraj unikodaj literkodoj. La plej uzatas estas UTF-8. Mi celis atingi la uzon de UTF-8.

3.4. Nuntempa uzado de literkodoj

Nuntempe neniu zorgas pri literkodoj en siaj programoj, ĉar oni ĉiam uzas kodotekojn, kiuj ja zorgas pri tiuj aferoj. Ĉe konzolo oni povas programi per la kodoteko "ncursesw", kaj ĉe X-sistemo per QT, GTK, ktp...

La X-sistemo mem zorgas pri rilato inter klavoj kaj literoj. Ĝi havas proprajn kodojn por ĉiuj eblaj literoj. Do, se programo subtenas KOI8-R literoj, ĝi povas bone funkcii sub la X-sistemo, ĉar la X-sistemo jam havas propran kodon por ebligi tajpi ĉiujn literojn.

Noteto: Mi ne certas pri tio... sed ŝajnas ke tio tiel rulas.

4. Montri literojn ne-latin1-ajn: tiparoj

Tio, kio rilatigas literkodon kun montrotaj literoj, estas tiparo. Do, se oni volas uzi fine UTF-8 en X-sistemo, oni devas havi tiparojn UTF-8. La ISO-a nomo de tiu literkodo estas iso-10646-1. Por scii ĉu via X-sistemo havas tiajn tiparojn, skribu en X-terminalo:

xlsfonts | grep iso10646-1

Se vi havas ilin, daŭrigu la legadon de tiu ĉi dokumento. Se ne, bonvolu legi alian how-to pri instali unikodajn tiparojn ĉe vian X-sistemon.

5. Naciaj agordoj, aŭ programoj en nacia lingvo: "Locale"

5.1. Kia estas nuna nacia agordo?

Multaj nuntempaj programoj scias kiun literkodon uzi, per agordoj locale. Ni scios kiun naciagordon ni havas tajpante tion en X-terminalo:

echo $LANG

Ekzemple, tiu ordono eble donos al ni ca_ES.ISO-8859-1. Tio signifas:

Lingvo
ca: Kataluna. La programoj montras mesaĝojn per tiu lingvo.
Lando
ES: Hispanio. La programoj scias pri tiuj landaj aferoj (mono, datoj, ktp.)
Literkodo
ISO-8859-1: a.k.k latin1. Eble tio aperas kiel iso88591. Tiun literkodon programoj uzos por montri/akiri mesaĝojn.
En iuj sistemoj respondojn tiajn, kiaj nur ca_ES, ni akiros. Tio okazas pro antaŭsupozaĵoj en dosiero /usr/share/locale/locale.alias. Tie, oni ligas ca_ES kun ca_ES.ISO-8859-1 (aŭ alia literkodo, kompreneble). Se la literkodo montrita estas "utf8", aŭ "UTF-8", ĉio jam bonas, kaj vi povas preterpasi la venontan eksplikadon.

5.2. Kiel atingi unikodan naciagordon?

Ni devas unikodigi niajn naciajn agordojn. T.e. ŝanĝi la literkodon de nia nacia agordo. Laŭ la antaŭa ekzemplo, ni devus ŝanĝi tiun ca_ES.ISO-8859-1 al ca_ES.UTF-8.

Unue, ni devas certiĝi pri ĉu nia naciagorda sistemo enhavas nian naciajn agordojn unikodajn. Ni povas peti tion serĉante ilin per:

locale -a | grep "ca_ES\.UTF-8"

Se ni havas tion, ni nur devas ordoni al nia sistemo ĉiam uzi ĝin. Se ne, ni devas krei ilin per ordono (ordonota per uzanto root):

localedef -f UTF-8 -i ca_ES ca_ES.UTF-8

Post havi tiujn dosierojn unikodigitajn, ni devas ŝanĝi startdosierojn, por ke ili agordu tiun nacian unikodan locale. Ni devas ŝanĝi linion similan al:

 export LANG="ca_ES.ISO-8859-1" 

kaj ŝanĝi ĝin al:

 export LANG="ca_ES.UTF-8" 

Fine, ni bezonas havi naciagordon agorditan kun literkodon "UTF-8". Aliekzemple, rusoj devus havi literkodon ru_RU.UTF-8.

Nun, niaj iksaj programoj jam bone devus montri unikode!

6. Kiel tajpi neanglajn literojn

Mi nuntempe uzas programitan X11 de Xfree86, versio 4.3.0. Oni normale elektas nuran lingvon de klavaro (almenaŭ en Katalunio), ĉar per la hispana klavaro oni povas tajpi kaj per la kataluna, kaj per la hispana, kaj per la angla. Do, mi antaŭe uzis nur es-an klavaron.

Nuntempe, mi bezonas modifitan hispanan klavaron (por tajpi esperantajn literojn), kaj ankaŭ rusan. La X-sistemo, kiun mi uzas, tenas du klavarojn samtempe uzeblajn (normala kaj alternativa). Do laŭ tio, kion mi vidis en aliaj dokumentoj tiaj, oni normale elektas la usonan kiel unua tajpolingvo kaj la nelatinan (rusan, ekzemple) kiel dua. Oni povas ŝanĝi inter tiuj du tajpolingvoj per elektita speciala klavo. Aŭ eĉ oni povas tajpi alialfabetajn literojn samptempe premante alian specialan klavon: ALT-GR (hispane, t.e. alternativaj grafikaĵoj).

En normalaj hispanaj hejmoj, oni uzas la alternativan klavaron por tajpi malmultajn specialajn signojn, kiel {}, [], kaj eĉ la Eŭran signon €. Kompreneble, antaŭ skribi ruse per komputilo mi uzis tiun alternativan klavaron por tajpi la ĉapelitajn literojn: ĉ ĥ ĵ ŝ ŭ. Mi agordis mian klavarsistemon por tajpi ilin uzante klavon ALT-GR samtempe kun c h j s kaj u.

Do jen la problemo! Mi ne povis uzi la rusan kiel alternativa klavaro. La nura solvo estis ŝanĝi rultempe la klavarsistemon. Mi skribis recepton por ŝanĝi la klavarsistemon al "es+eo", kaj alian recepton por ŝanĝi al "en+ru". Nur mankis al mi ilo por ruligi tiujn receptojn per specialaj klavoj. La nomo de tiu programo estas xbindkeys.

Nu, ĝis nun mi ĉion ŝanĝis sen tuŝi la ĉefan agordodosieron de XFree86 4.3.0. Tie oni nur elektas la unuan agordon kiun oni trovos ĵus post ruligi la sistemon X. Fakte, la receptoj modifas la agordojn pri la klavaro, kiujn kompreneble oni devas elekti en la ĉefa agordodosiero de la sistemo X.

Nur gravas la klavara sekcio de tiu agordodosiero (/etc/X11/XF86Config-4 ĉe mi). Jen la enhavo, kiun mi uzas, de tiu sekcio. Rigardu ke mi nek agordas du klavarojn. Oni ne povas elekti kiel tajpi la esperantajn specialajn literojn per tiu dosiero.

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
        Option      "XkbRules" "xfree86"
        Option      "XkbRules" "xfree86"
        Option      "XkbModel" "pc104"
        Option      "XkbLayout" "es"
EndSection

Vi vidas ke nenion ĝi montras pri esperanto aŭ rusa lingvo. Nu, ĵus post ruligi la sistemon X, ni devas agordi la specialajn klavojn por tajpi ĉapelajn literojn. Mi faras tion per xmodmap, ilo de X kiu eblas ŝanĝi literojn de klavojn. Mi havas en mia hejma dosierujo la dosieron por xmodmap, nomigita .Xmodmap (vidu la punkton: kaŝita dosiero), kun jena enhavo:

keycode 54 = C NoSymbol ccircumflex
keycode 42 = G NoSymbol gcircumflex
keycode 43 = H NoSymbol hcircumflex
keycode 44 = J NoSymbol jcircumflex
keycode 39 = S NoSymbol scircumflex
keycode 30 = U NoSymbol ubreve

Tiu sola dosiero ne taŭĝas. Ni devas ruligi xmodmap por agordi laŭ tiu enhavo de la dosiero. Mi faras tion per hejma dosiero .xinitrc (hejma startodosiero de mia sistemo X), kun jena enhavo:

#!/bin/bash

# Tio agordas kelkajn aferojn de iksaj programoj.
xrdb -merge /home/viric/.Xresources

# Linio pri xmodmap
xmodmap ~/.Xmodmap

# Tio ebligos min sxangxi per specialaj klavoj la klavarsistemojn.
xbindkeys

# Jen mia fenestrilo
exec wmaker

Vi jam vidis ke tie mi ruligas ankaŭ xbindkeys. Tiu estas la programo kiu ruligos la eblecon ŝanĝi klavarsistemon per specialaj klavoj. Ni devas agordi tiun programon per nova dosiero: ~/.xbindkeysrc. Jen la enhavo:

"setxkb-es"
  shift + c:115

"setxkb-ru"
  shift + c:116

Tie estas du programoj, nomitaj setxkb-es kaj setxkb-ru. La unua igas hispanan klavaron kun esperantaj ĉapelitaj literoj. La alia, igas rusan klavaron. Fakte, la dua igas rusan kun angla. Sciu, ke la unua recepto igas hispanan klavaron kiel ĉefa, kaj la dua recepto igas la rusan ĉefa, kaj la usonan kiel alternativa klavaro. Mi ruligas la unuan recepton per "maldekstra majuskla + maldekstra vindoza klavoj", kaj la duan per "dekstra majuskla + dekstra vindoza klavoj".

Tiuj receptoj devas esti en serĉvojo, ĉar mi menciis neniun dosierujon. La enhavo de setxkb-es estas:

#!/bin/bash
setxkbmap -layout es
setxkbmap -model pc104
xmodmap ~/.Xmodmap

Kaj la enhavo de setxkb-ru estas:

#!/bin/bash
setxkbmap -layout ru,us
setxkbmap -model pc104
setxkbmap -option grp:shift_toggle
En la lasta dosiero mi agordas novan specialan klavon, por ŝanĝi inter la ĉefa kaj la alternativa klavaroj (ru, us). Tiel, se iam xbindkeys malfunkcias, ni ankoraŭ povos skribi latine.

7. Programoj

7.1. X-terminalo: xterm

Mi uzas xterm, ĉar preskaŭ ĉiuj havas ĝin (do des pli bone lerni uzi ĝin ol alia), kaj ĝi bone subtenas unikodon. Por uzi xterm unikode, ni devas ruligi ĝin dirante kiun tiparon uzi, kaj ordonante uzi unikodon. Tio estas:

xterm -u8 -font '-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1'
Kompreneble, ni povas uzi iun ajn unikodan tiparon (iso10646-1). Mi plej ŝatas tiun ekzemple montritan. Oni povas scii kiujn unikodajn tiparojn eblas uzi per ordono montrita antaŭe.

7.1.1. Kio ene okazas?

xterm devas subteni unikodon, por bone montri literojn. Tamen, xterm ruligas bash. Ankaŭ bash devas kompreni unikodon (ĉar ĝi legos niajn ordonojn unikode). Se nia naciagordo estas unikoda, bash bone rolos. Do ni devas havi bone agorditan naciagordojn antaŭ ruligi bash. T.e. antaŭ ruligi xterm. Se oni forgesas tion, bash ne bone rolos, ĉefe forviŝante literojn.

7.2. Kodotekoj por terminalaj programoj

Ekzistas du versioj de konata kodoteko ncurses. La normala, kaj la unikoda (wide-char, dosiere konata kiel ncursesw, enhavata en la normala distribuo de la kodoteko. Preskaŭ ĉiuj programoj terminalaj uzas ncurses, sed kelkajn oni povas kompili uzigante ncursesw, aŭ alia tute malsimila nomita slang.

7.3. Mutt, mia retpoŝtilo

Mi ekde pluraj jaroj uzas mutt kiel retpoŝtilo, ĉar mi ankoraŭ ne trovis alian pli bonan. Do, mi multege hezitis ĉu ŝanĝi la retpoŝtilon kiam mi ankoraŭ ne atingis ties unikodan agordon. Fine, mi pli multe zorgis pri unikodigi mian mutt ol frue ricevi bone miajn nelatinajn retleterojn. Nu, oni devas kompili mutt havante kodotekon ncursesw. Tiel, mutt bonege funkcios. Mutt ne devas uzi slang. Sciu ke Gentoo linux igas kompili mutt uzigante slang (almenaŭ kiam mi skribas tiun ĉi artikolon).

7.4. Vim, mia redaktilo

Mi lernis uzi vim ankaŭ antaŭ pluraj jaroj, kaj mi nur scipovas skribi per vi-aj redaktiloj. Mi ja rapide skribas per ili, sed mi iĝis misskribanto por aliaj redaktiloj. Mi imagas, ke tio ĉiam okazas al uzantoj de vi-aj. Oni povas uzi rekte gvim (ĝi uzas kodotekon GTK, tial ne havas problemojn unikode). Se iu ŝatas uzi vim en iksaj terminaloj, tiu devas kompili vim tra kodoteko ncurses (ne ncursesw!). Mi mem ne provis kompili ĝin tra ncursesw, sed multaj diras ke ĝi tiel misfunkcias. Mi ne provis tion ankaŭ pro ke vim ja bonege funkcias unikode tra kodoteko ncurses ĉe mi.

7.4.1 Kiel elekti literkodon por dosiero

Oni povas uzi vim-konzolan ordonon ekzemple: :set fileencoding=koi8r. Ankaŭ oni povas rekte diri al vim la literkodon de malfermota dosiero denove per konzola ordono ekzemple: :e dosiero ++enc=latin3. Por pli da informo, bonvolu rigardi vim-an helpan paĝon pri tiuj ordonoj (fileencoding kaj ++opt). Vim ene ĉiam rolos unikode, sed tradukos literkodojn konservante kaj malfermitante dosierojn.

8. Ne pretaj artikoloj

9. Pri tiu ĉi dokumento

Mi skribis ĝin ĉar mi multe laboris por trovi solvon al tiu unikoda problemo. Eble ekzistas antaŭaj dokumentoj, kiujn mi ne legis malgraŭ serĉi, kaj solvas ankaŭ tion, sed mi ne trovis ilin kiam mi serĉis. Nu, bonvolu skribi rekte al mi se iu volas aldoni ion al tiu ĉi dokumento. Mi ankoraŭ ne tro regas la esperantan, nek scias ĉu mi bone rakontis ĉion en tiu ĉi informilo. Tial mi certas ke la dokumento estas ege plibonigebla. Do ne zorgu skribi al mi por ia demando aŭ konsilo.
Lluís Batlle i Rossell, retpoŝto lluis ĉe vicerveza.homeunix.net, 12/06/2004