불행했던 과거에는 이것이 상당히 문제거리였다. 각각의 프로그램들이
개별적으로 모든 비트가 제대로 남아 있는지 확인해야 했다. 물론 현재도
모든 것이 쉬운 것은 아니다. 하지만 최근에 많은 gnu 유틸리티에서
LC_CTYPE=iso_8859_1
또는 LC_CTYPE=iso-8859-1
에 대해서
어떻게 대응해야 하는지 알고 있다. 이 방법을 먼저 시도해 보고
안되면 아래에 소개한 힌트를 참고해 보라.
libc의 최신 버전에서 setlocale()은 locale 화일(즉, /usr/lib/locale
)을
설치해야만 제대로 작동한다는 점에 유의해야 한다.
우선, 8번째 비트가 커널 입력 프로세스에서 살아 남도록
stty cs8 -istrip -parenb
가 설정되었는지 확인한다.
A. emacs
의 경우에는 개별적인 사항은 그 버전에 상당히 의존한다.
아래 정보는 버전 19.34에 대한 것이다. 사용자의
$HOME/.emacs
에 아래와 같은 내용을 넣는다.
(set-input-mode nil nil 1)
(standard-display-european t)
(require 'iso-syntax)
첫번째 줄 (정확히는 마지막의 1)은 emacs
가 입력되는 문자들의
8번째 비트를 없애지 않도록 지정한다. 두번째 줄은 emacs
가 비ASCII
문자를 8진수 이스케이프로 표시하지 않도록 한다. 세번째 줄은 syntactic
특성을 지정하고 Latin-1 문자세트를 변환 테이블로 적용하도록 한다.
사용자가 환경변수로 LC_CTYPE=ISO-8859-1
를 설정했다면 뒤의 두 줄은
중복되는 것이다.
(여기에 사용되는 변수는 LC_ALL
또는 LANG
일 수도 있다.
값은 뒤에 붙는 숫자가 `88591' 또는 `8859-1' `8859_1' 등 어느것도 된다.)
여기까지 되어 있으면 일단 OK. 비ASCII ISO 8859-1 심볼을 표시하지 못하는 터미널에서는
(load-library "iso-ascii")
라고 명령을 내리면 액샌트 기호의 문자가 표시될 것이다.
사용자의 keymap이 비ASCII 문자를 만들기 쉽지 않다면
(load-library "iso-transl")
라고 명령을 내리면 2문자 시퀀스 Ctrl-X 8을 하나의 조합문자로 만든다.
따라서 4문자 시퀀스 Ctrl-X 8 , c는 c-cedilla를 만든다.
무지 불편한 방법이다.
(iso-accents-mode)
명령은 ISO-8859-1 액센트 모드를 토글할 것이다. 이 모드에서는
', `, ", ^, ~, / 이렇게 6개의 키가 그 다음 나오는
심볼을 변경하는 데드키이다.
특수한 조합: ~c는 cedilla가 붙은 c,
~d는 Icelandic eth, ~t는 Icelandic thorn,
"s는 German sharp s, /a는 ring 붙은 a,
/e는 a-e ligature, ~<와 ~>는 guillemots,
~!는 뒤집힌 감탄부호,
~?는 뒤집힌 물음표, ''는 뾰죽한 액센트이다.
액센트의 기본 대응은 위와 같다.
변수 iso-languages
는 (언어 이름, 액센트 대응) 쌍의 목록이다.
디폴트와 다른 대응을 하려면
(iso-accents-customize LANGUAGE)
를 사용하면 된다.
여기서 LANGUAGE는 "portuguese"
, "irish"
,
"french"
, "latin-2"
, "latin-1"
중 하나이다.
리눅스의 디폴트 조합 문자는 Ctrl-이기 때문에 어디서나 이것을 사용하는 것이 편리할 것이다. 다음과 같이 한번 해보자.
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
emacs -nw
를 사용하는 사람이라면 두번째 줄이 말을 듣지 않을 것이다.
이 경우, .Xresources
에 다음과 같은 라인을 넣어두면 된다.
XTerm*VT100.Translations: #override\n\
Ctrl <KeyPress> . : string("\0308")
B. less
에서는 환경변수에 LESSCHARSET=latin1
을 넣어두면 된다.
man
출력에 \255
또는 <AD>
가 보이는 경우에도
효과가 있을 것이다. less
의 어떤 버전에서는 Latin-1 출력에 허가가
거부되는 경우에 소프트 하이픈(octal 0255, hex 0xAD)을 이런 식으로
만든다.
C. ls
에서는 옵션 -N
을 주면 된다. (아마도 alias를 만들어 두어도 좋을 것이다.)
D. bash
(버전 1.13.*)에서는 (Danish HOWTO에 따르면)
아래의 내용을 $HOME/.inputrc
에 넣어두면 된다고 한다.
set meta-flag on
set convert-meta off
set output-meta on
E. tcsh
에서는
setenv LANG US_en
setenv LC_CTYPE iso_8859_1
를 사용하면 된다.
시스템에 nls가 설치되어 있으면 그에 해당되는 루틴이 사용된다.
그렇지 않은 경우에는 tcsh
는 LANG과 LC_CTYPE에 주어진 값에 관계없이
iso_8859_1을 가정한다. tcsh(1)의 NATIVE LANGUAGE SYSTEM 단락을 참조하면
도움이 될 것이다.
(Danish HOWTO에는 setenv LC_CTYPE ISO-8859-1; stty pass8
라고
나와 있다.)
F. flex
에서 생성하는 파서가 8비트 입력을 처리할 수 있게 하려면
-8
옵션을 주면 된다. (너무 당연하다.)
G. elm
에서는 displaycharset
을 ISO-8859-1
로 설정하면 된다.
(Danish HOWTO: LANG=C
와 LC_CTYPE=ISO-8859-1
)
H. (lynx
와 같이) curses를 사용하는 프로그램의 경우에는 David Silbey가
다음과 같은 이야기를 했다.
보통의 curses 패키지는 최상위 비트를 비디오 모드 반전용으로 사용한다.
(/usr/include/curses.h
에 정의되어 있는 _STANDOUT 플래그를 볼 것.)
하지만 ncurses
는 8-비트를 사용하지 않는 것 같으며 iso-latin-8859-1을
올바로 보여준다.
I. (man
과 같이) groff
를 사용하는 프로그램의 경우,
-Tascii
대신에 -Tlatin1
을 사용하면 된다. man
프로그램의
구 버전에서는 col
도 사용했기 때문에 다음번 항목도 같이 적용해야 한다.
J. col
의 경우, 1) setlocale(LC_CTYPE,"");
를 할 수 있도록
수정했는지 확인하고, 2) LC_CTYPE=ISO-8859-1
를 환경변수로
넣어두어라.
K. rlogin
의 경우, -8
옵션을 사용하면 된다.
L. joe
의 경우,
L. For joe
,
sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz
는
환경설정 화일을 편집하면 된다. 어떤 사람들은 /usr/lib/joerc
첫번째
칼럼에 -asis
옵션을 넣으라고 한다.
M. LaTeX의 경우, \documentstyle[isolatin]{article}
.
LaTeX2e: \documentclass{article}\usepackage{isolatin}
,
여기서 isolatin.sty
는
ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit에서 구할 수 있다.
ISO-8859-1 주제에 대한 여러가지 좋은 논의와 8비트 문자를 다루는 방법이
grasp.insa-lyon.fr:/pub/faq/fr/accents
에 (프랑스어로) 실려 있다.
(영어로 된) 다른 좋은 내용은
ftp.vlsivie.tuwien.ac.at:/pub/8bit/FAQ-ISO-8859-1에서 볼 수 있으며,
미러 사이트는
rtfm.mit.edu:pub/usenet-by-group/comp.answers/character-sets/iso-8859-1-faq
이다.
8비트 문자를 제대로 다루지 못하는 프로그램을 손수 고쳐보고 싶다면 한가지 유념할 점이 있다. 만약 signed char 형 변수를 사용한다면 문자는 음수가 되는 경우가 생겨서 이것을 배열 인덱스로 취급하는 방법은 듣지 않는다. 몇몇 프로그램의 경우 경우를 잘 가려서 (unsigned char) 캐스트로 고칠 수 있다.