Showing posts with label gnu emacs. Show all posts
Showing posts with label gnu emacs. Show all posts

Friday, June 5, 2015

Emacs 24

Emacs 24

Emacs 24


이 문서는 e[ ⎋Esc ]m[ ⌥Meta ]a[ ⌥Alt ]c[ ^Ctrl ]s[ ⇧Shift ] org-mode로 작성된 글입니다.


System Environments

Operating Systems

  • Main- : OS X Yosemite (10.10.3)
  • Sub- : Debian GNU/Linux Wheezy (7.8)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 7.1.2

Emacs Cocoa 24.3 & GNU Emacs 24.3

우선 Emacs 버전부터 짚고 넘어가자.

현재(<2015-06-04 Thu>) Debian GNU/Linux Wheezy에서 debian repository에 저장되어 있어서 apt 로 설치할 수 있는 GNU Emacs는 23.4이다. OSX Yosemite에서 돌아가는 Aquamacs 최신 버전은 3.2이고, 이는 Emacs 24를 기본으로 하고 있다. OSX에서 사용할 수 있는 또 다른 Emacs fork인 Emacs Cocoa는 두 가지 경로를 통해 설치할 수 있다. 하나는 Homepage를 이용하는 것이고, 다른 하나는 MacPorts나 Homebrew 같은 package manager를 쓰는 것이다. Emacs Cocoa Homepage에서 제공하는 가장 높은 버전은 24.5이고 Homepage: Other versions에서는 아래로 23.2까지 다운로드 가능하다. MacPorts 이용자는 Debian의 apt 처럼 최신 버전만 설치할 수 있는데, 이는 24.5이다. 지난 Posts에서도 언급했다시피, Hunspell을 이용한 영/한 맞춤법 검사 를 구현하고자 하는 사용자는 반드시 24.3이나 그 이하 버전을 써야만 이 블로그에서 설명한 방법을 적용할 수 있다.

이번에는 조금 더 구체적으로, Emacs 24.3을 기준으로 그 특징과 Debian에서 설치 방법을 적어볼 생각이다.

Upgrade org-mode

그 전 버전과 차별화되는 Emacs 24의 특징은, marmalade같은 외부 package repository를 사용할 필요 없이 자체적으로 Emacs에 필요한 package를 설치하고 또 설치한 package를 업그레이드할 수 있다는 점이다. Emacs에 기본적으로 설치된 org-mode package를 통해서 어떻게 이를 진행하는 지 살펴보자.

How to upgrade

OS 와는 상관없이 Emacs 24에서 아래의 순서로 진행하면 된다. 단축키는 OSX Emacs Cocoa의 경우를 기준으로 썼고, Debian에서 GNU Emacs 경우는 괄호 안에 기본 표현으로 표기하였다.

  1. Emacs에서 ⌥x (M-x)을 친 후, package-list-packages 쓰고 ↩Return
  2. 세 번째 열 Status에서 가능한 (available) packages와 설치된 (built-in) packages를 볼 수 있다. 이 중 org 를 찾아 클릭한다.
  3. 다음에 등장하는 buffer에서 Install 을 클릭해서 설치하면 끝

18469818431_854726cf90_o.gif

Figure 1: Upgrading org-mode in GNU Emacs 24.3

Trouble shooting

가끔 문제가 발생하는데, 이는 사용자가 Emacs 설정 파일인 ~/.emacs 를 이미 수정해서 쓰는 경우나 marmalade같은 외부 package repository를 사용한 상황에서 주로 발생한다.

  1. Emacs 설정 파일인 ~/.emacs 를 적당한 곳에 백업해 두자.
  2. ~/.emacs.d/ 로 이동해서 elpa 이름의 디렉토리를 지우자. 이동은 Bash (혹은 Termianl)에서 해도 되고, Finder (혹은 Dolphin, Thunar, etc)에서 해도 된다.
  3. Emacs를 실행해서 위의 과정을 다시 한다.
  4. 백업해둔 Emacs 설정 파일을 다시 ~/.emacs 로 복사한다.
  5. 이제 Emacs를 다시 실행하자.

Emacs 24.3 in debain

설치 과정은 여기를 참고했다.1 아래의 명령들을 Bash (혹은 Terminal)에서 순서대로 실행하자.

$ sudo apt-get install ttf-inconsolata build-essential xorg-dev libgtk2.0-dev libjpeg-dev libgif-dev libtiff-dev libncurses-dev autoconf
$ wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.3.tar.gz
$ tar xvfz emacs-24.3.tar.gz
$ cd ~/emacs-24.3
$ ./configure
$ make
$ sudo make install

wget 으로 받은 emacs-24.3.tar.gz 파일은 홈디렉토리(~) 아래에 있으니 나중에 지워도 무방하다. 설치가 끝나면 Bash (혹은 Termianl)에서 emacs 까지만 치고 자동 완성을 위해 ↹Tab 키를 두 번 정도 치면, emacs란 이름으로 시작하는 가능한 모든 명령어를 볼 수 있다. 이미 설치했던 emacs 23은 emacs23 으로 바꾸어 있고, 새로 설치한 24는 표면적으로 없는 것처럼 보인다. 하지만 emacs 가 바로 emacs 24이다. 이는 emacs --version 명령어로 확인할 수 있다.

18467159295_4a02b21b93_o.png


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Footnotes:

Created: 2015-06-05 Fri 00:18

Emacs 24.3.1 (Org mode 8.2.10)

Wednesday, June 3, 2015

Emacs Spell-checker English/Korean

Emacs Spell-checker English/Korean

Emacs Spell-checker English/Korean


This post is written with e[ ⎋Esc ]m[ ⌥Meta ]a[ ⌥Alt ]c[ ^Ctrl ]s[ ⇧Shift ] org-mode.

이 문서는 e[ ⎋Esc ]m[ ⌥Meta ]a[ ⌥Alt ]c[ ^Ctrl ]s[ ⇧Shift ] org-mode로 작성된 글입니다.


System Environments

Operating Systems

  • Main- : OS X Yosemite (10.10.3)
  • Sub- : Debian GNU/Linux Wheezy (7.8)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 7.1.2

Ispell-word and the secondary click within Flyspell on

Needless to say, the GIF below is self-explanatory.

English/Korean spell-checker in Emacs 24.3, OS X

The work-flow was captured under Hunspell with Emacs Cocoa 24.3 in OSX. Hunspell was activated for English/Korean. Shortcuts I set are ⌘d for ispell-word and ⌘2⌘2 for the spell-checking pop-up window. For the former, you can select a word you want by typing a digit. The latter is technically nothing but the secondary click(or right click) at a mouse point on a word underscored by Flyspell On. I made the key-binding for it by ⌘2⌘2. Though the gif above shows way in Emacs Cocoa under OSX, it is completely possible in GNU Emacs under Linux.

FYI) ⌘⎵ in the gif indicates the shortcut I set for ispell-change-dictionary.

Requirements

  • Hunspell for Emacs cocoa 24.3 in OSX or for GNU Emacs 23.4/24.3 in Debian GNU/Linux

It is not dealt with in this post, because I explained it already. You can see the details by clicking one of the links followed.

There are descriptions for a simple way to change both input methods and hunspell dictionaries as well.

Instruction

Typing ispell-word after ⌥x (M-x in typical Emacs notation) would be enough for some users to check spelling. However, what I want to say is how to set up a key-stroke for the spell-checking pop-up window once the flyspell is on.

  1. Set flyspell-mode on for text-mode by adding the line
    '(text-mode-hook (quote (turn-on-flyspell text-mode-hook-identify)))
    

    into your Emacs preference file, i.e. ~/.emacs. For instance,

    (custom-set-variables
    ;; custom-set-variables was added by Custom.
    ;; If you edit it by hand, you could mess it up, so be careful.
    ;; Your init file should contain only one such instance.
    ;; If there is more than one, they won't work right.
    '(cua-mode t nil (cua-base)) ;;<--- let c-x c-c c-v work
    '(text-mode-hook (quote (turn-on-flyspell text-mode-hook-identify))) ;;<--- flyspell
    )
    

    The basic to read an elisp source is that anything after ;; is a comment, so that doesn't affect Emacs at all.

  2. Activate ⌘2⌘2 for the secondary click(or right click) at an underscored word by adding the following elisp code to ~/.emacs
    ;; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    ;; \\\\\[Body III-a.] For keyboard strokes for spelling check
    ;; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    (global-set-key [\s-mouse-2] 'flyspell-correct-word)   ;; <--- step 0/2 for s-2 s-2
    ;; ------------------------------
    ;; ---> function 1
    ;; ------------------------------
    (defun make-mouse-event-at-point (base-event)
    (let ((posn (posn-at-point))
      (prefix "")
      (basic-type (event-basic-type base-event))
      (modifiers (event-modifiers base-event)))
    (cond
    ((and (integerp basic-type) (>= basic-type ?0) (<= basic-type ?9))
    ;; click
    (let* ((mouse-type (intern (format "%smouse-%d" prefix (- basic-type ?0))))
           (click-count 1)
           (type (event-convert-list (append modifiers (list mouse-type)))))
      (list type posn click-count)))
    (t
    (error "Unsupported key for mouse event: %s" (event-basic-type base-event)))
    ))
    )
    ;; ------------------------------
    ;; ---> function 2
    ;; ------------------------------
    (defun simulate-mouse-event-at-point ()
    (interactive)
    (let ((event (make-mouse-event-at-point last-input-event)))
    (setq unread-command-events (cons event unread-command-events))))
    ;; ------------------------------
    ;; ---> function 3
    ;; ------------------------------
    (defvar simulate-mouse-event-map (make-sparse-keymap))
    (global-set-key (kbd "s-2") simulate-mouse-event-map)   ;; <--- step 1/2 for s-2 s-2
    ;; ------------------------------
    ;; #####!!! final step, i.e step 2/2 for keyboard stroke for mouse#-click
    ;; ------------------------------
    (define-key simulate-mouse-event-map [t] 'simulate-mouse-event-at-point)
    

    When you use the exactly same elisp above in GNU Emacs under Linux, the shortcut must be ⊞Win-2 ⊞Win-2 in a non-apple keyboard. If you want to change it to C-2 C-2, then it can be done after replacing s- and \s- with C- and \C- respectively.

FYI) In GNU Emacs under Linux, C, M, S, and s stand for Ctrl, Meta, Shift, and super-key (a.k.a. Windows key) respectively.

Acknowledgement

I acknowledge Gilles from StackExchange's debt to almost every elisp code here. You can find his source code explicitly in HERE.

Epilog, 한글 사용자를 위하여

Emacs에서 맞춤법 검사는, ⌥x (M-x Emacs 기본 표기) 후 ispell-word 로 간단히 실행할 수 있다. Flyspell mode(틀린 맞춤법에 밑줄 그어짐)이 켜있는 경우에는, 밑줄 그어진 단어 위에서 우클릭하면 팝업창이 뜨고 화살표키로 선택하는 방법으로도 사용할 수 있다. 영어의 경우는 특별한 사전을 설치하지 않아도 바로 검사할 수 있음은 물론이다. 한글 맞춤법 검사는 현재로는 hunspell이 거의 유일무이한 대안인데, 영어와 함께 이를 활성화 하는 방법은 지난 Posts에서 설명했다.

OSX Yosemite 전까지는 Aquamacs에서 ispell-word (or ispell-region)으로 영어/한글 맞춤법 모두를 해결해 왔었다. 바람입력기로 OSX 차원이 아닌 Aquamacs 자체에서 입력소스를 변경하고, 영어 맞춤법은 Aquamacs에서 기본으로 제공하는 것으로 한글 맞춤법은 OSX 차원에서 설치한 Korean hunspell dictionary로 약간은 변칙을 써왔었다. 당시에도 Aquamacs에서 Hunspell을 동작하게 하는 방법을 많이 시도했으나 다 무위로 돌아갔었고, 이 변칙 방법으로도 잘 작동하니 문제 없이 사용했었다. 물론, OSX 단에서 설치한 이 한글 사전은 Aquamacs는 물론 다른 프로그램에서도 잘 돌았었다.

OSX Yosemite 후, 모든 것이 달라졌다. OSX 단에서 설치한 한글 사전은 어디에서도 제대로 동작하지 않았다. BACK TO THE MAC에서 항상 추천하는 한글 맞춤법 검사기 "단디" 역시 나에게는 해당 사항이 없었다. 왜냐하면, 단축키를 지정해도 Emacs던 Aquamacs던 동작하지 않고, 설혹 가능해도 단순히 확인할 수 있을 뿐 수정은 직접 해주어야 하는 점 때문이다. 나에게는 Hunspell이 필요했다.

모든 문제의 시작은 Hunspell임을 직감하고, 어떻게 해도 이를 활성화 할 수 없었던 Aquamacs를 포기하고 Original GNU Emacs에 가장 가깝다고 하는 Emacs Cocoa로 전환하기로 결정했다. 다행히, OSX Yosemite Emacs Cocoa에서 Hunspell을 쓰는 방법을 찾았다. (Linux에서 GNU Emacs로 hunspell 이용은 사실 자명하다.) 이는 위에서 언급한 지난 두 글에서 자세히 설명했지만, 핵심은 OS 마다 적절한(?) Emacs version을 써야 하는 점이다. 그러면 문제 해결은 비교적 간단하다.

언제나 그렇듯이, 한글이 항상 문제(?)다. 어지간히 Emacs에서 한글을 써본 사람은 다 알겠지만, Linux를 제외한 OS에서 OS 단에서 제공하는 한/영 변환은 항상 문제를 일으키므로, Emacs 자체에서 제공하는 입력 소스 변환을 쓰는 것이 항상 추천된다. 이는 OSX Yosemite에서도 바람입력기를 통해 간단히 해결할 수 있다. Hunspell을 Emacs에서 쓸 수 있게 된다 하더라도 문제는 크게 두 가지가 남아있다.

첫째, ⌥x (M-x Emacs 기본 표기) ispell-word*Choices* buffer 에서 한글이 잘린다

한글 잘림 in *Choices* buffer

이는 한글과 영어를 다른 크기로 지정함으로써, 어느 정도 해결 가능하다. 아래는 영어는 Anonymous Pro 10으로, 한글은 HCR Dotum LVT 16으로 만든 경우이다.

;; Setup different font family and size for English/Korean
(setq default-frame-alist
      '(
	(top . 0) (left . 182) (width . 96) (height . 36)   ---> window position and size
	))
(when (eq system-type 'darwin)
  (set-face-attribute 'default nil :family "Anonymous Pro")
  default font size (point * 10)
  (set-face-attribute 'default nil :height 195)
  (set-fontset-font t 'hangul (font-spec :name "HCR Dotum LVT-16"))
  )

이렇게 하면 한글 폰트 크기가 전반적으로 바뀌면서, *Choices* buffer 에서도 한글이 잘리지 않는다. 두벌식 사용자라면, ispell-word 단축키만 따로 지정해도 적당히 쓸 만한 환경을 구축할 수 있다.

나는 세벌식390 사용자다. 문제가 심각해졌다. Emacs 자체 입력 소스를 설정하면 한글 세벌식 입력 환경에서 *Choices* buffer 안에서 단어 선택이 안된다. Emacs 자체 입력 소스를 끄고, OSX 입력 소스를 쓰면 *Choices* buffer 안에서 단어 선택은 되지만, ⌥x 같은 Emacs 단축키가 안먹는다!!! 어떤 세벌식을 쓰는 지와는 무관하게 세벌식 모두(보통, 390, 최종)에서 다 안된다. 이는 Yosemite 이전에 Aquamacs (Aquamacs 2.5x 이하 버전) 사용 시는 발생하지 않는 문제였다.이 문제를 해결하기 위해서 Flyspell-mode에서 마우스 우클릭하면 팝업창이 뜨는 것에 착안, 이를 키보드로 쓸 수 있는 방법을 여기서 기술했다. 이 방법은 당연하게도 두벌식이든 세벌식이든 상관없다. 게다가 ispell-word 를 쓸 때에도 불만이었던, "화살표키로 단어선택이 안되던 문제"에서 자유롭다. 가능한 한 키보드로 모든 것을 해결하려는 이들에게 숫자키로 가는 손가락은 화살표키보다 불편하다.

지난 글과 여기에서 설명하려한 방법의 목적을 다시 정리하자면, " 어떤 한글 입력 방법을 쓰던 상관 없이 Emacs에서 맞춤법 검사 과정 전부를 키보드로 해결하자! "이다. Emacs 버전을 타는 경향이 있지만, 이는 OSX 전반은 물론 Debian GNU/Linux에서도 큰 수정 없이 바로 쓸 수 있는, 현재로써는 가장 완벽한 해결책이다.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Created: 2015-06-04 Thu 11:21

Emacs 24.3.1 (Org mode 8.2.10)

Saturday, May 30, 2015

Hunspell for Emacs in Debain

Hunspell for Emacs in Debain

Hunspell for Emacs in Debain


This post is written with e[ ⎋Esc ]m[ ⌥Meta ]a[ ⌥Alt ]c[ ^Ctrl ]s[ ⇧Shift ] org-mode.


System Environments

Operating Systems

  • Main- : OS X Yosemite (10.10.3)
  • Sub- : Debian GNU/Linux Wheezy (7.8)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 7.1.2

Hunspell and Emacs in Debian GNU/Linux

Debian GNU/Linux Wheezy doesn't have Hunspell preinstalled, but does GNU Emacs by all means. The version of the default emacs in the system is 23.4.1, which can be seen under Bash with emacs --version. I have testified not only the default version of Emacs, but the manually compiled 24.3.2 version as well. The following will work for both.

Using hunsepll for GNU Emacs in Debian GNU/Linux is much simpler than that in OSX, because all needs can be easily installed and configured via Debian repositories, i.e. apt. Here a English-Korean multilingual environment is taken as an example.

Additionally, dictionary-toggling in Emacs will be also at issue of this post.

Installation and configuration

  1. Get necessary packages: Open Bash, and run
    $ sudo apt-get install hunspell hunspell-ko hunspell-en-us
    
  2. Check detailed information of Hunspell:
    $ hunspell -D
    

    Two most important things are a) being executable with the above command and b) dictionaries you installed. The later must be en_US and ko_KR. Information could be as similar as the screenshot of mine.

    17657609743_e07000deb4_o.png

    Figure 1: Hunspell information in Debian 7.8

  3. Open the Emacs preference file, i.e. ~/.emacs and add the following elisp code into it
    (setq ispell-local-dictionary-alist
    '(
      ("english-hunspell"
       "[A-Za-z]" "[^A-Za-z]" "[0-9a-zA-Z]" t
       ("-d" "en_US")
       nil utf-8)
      ("korean-hunspell"
       ;; "[가-힝]" "[^가-힝]" "[0-9a-zA-Z]" nil   ;; <--- emacs 22 or lower
       "[가-힣]" "[^가-힣]" "[0-9a-zA-Z]" nil   ;; <--- emacs 23 or higher
       ("-d" "ko_KR")
       nil utf-8)
      ;; ("german"
      ;;  "[a-zäöüßA-ZÄÖÜ]" "[^a-zäöüßA-ZÄÖÜ]" "[']" t
      ;;  ("-d" "de_DE")
      ;;  nil utf-8)
      )
    )
    (setq ispell-program-name "hunspell"
          ispell-dictionary "english-hunspell")
    (setq ispell-really-hunspell t)   ;; <--- optional??? working w/o it in emacs(cocoa)
    

    FYI) If you wanna use a triple lingual environment such as German together, you can uncomment the last four sentences and modify a library.

Toggle two dictionaries

If you can change libraries with a single keyboard stroke, like C-\ for toggle-input-method rather than type it after M-x, it must then be great. I set the toggle for libraries by S-SPC. And it works after adding the following into ~/.emacs

;; ;; ### korean-english
(let ((langs '("korean-hunspell" "english-hunspell")))
  (setq lang-ring (make-ring (length langs)))
  (dolist (elem langs) (ring-insert lang-ring elem)))
(defun cycle-ispell-languages ()
  (interactive)
  (let ((lang (ring-ref lang-ring -1)))
    (ring-insert lang-ring lang)
    (ispell-change-dictionary lang)))
;; ### key bindings
(global-set-key (kbd "S-SPC") 'cycle-ispell-languages)

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Created: 2015-05-30 Sat 22:43

Emacs 24.3.1 (Org mode 8.2.10)

Saturday, December 14, 2013

Note in plain text

Note in plain text

Note in plain text


;; =================================================
;; εμαcs is ⎋[esc]⌘[meta]⌥[alt]⌃[ctrl]⇧[shift].
;; =================================================

이 문서는 emacs org-mode로 작성된 글입니다.


Operating System Environments

  • Main- : OS X Mavericks (10.9)
  • Sub- : Debian GNU/Linux Wheezy (7.2)
  • Server: Debian GNU/Linux Squeeze || Lenny
  • Mobile: iOS 7.0.4

시중에는 Note 관련 Apps이나 Applications이 즐비하다. OS X나 iOS 사용자라면, Apple에서 제공하는 Notes.app을 대부분 쓸 것이다. iCloud로 자동으로 sync되는 이 Notes.app은 그냥저냥 쓸 만은 하다. IT 환경에 조금 밝은 사람은 Evernote를 많이 쓴다. 이 역시 나쁜 선택은 아닐 것이다. 그럼 뭐가 불만인가? 내가 Note 관련 Apps이나 Applications에 요구하는 기능은, 한 마디로 하자면, Plain text이다.

  • Plain text는 어떤 OS에서도 완벽히 호환된다.
  • Plain text는 읽거나 수정하는데 있어 특별한 프로그램이 필요치 않다.
  • Plain text는 검색이 용이하다.

다시 되짚어 보자. iCloud는 Apple 제품에서만 쓸 수 있다. Evernote 역시 Linux 버전이 없으며 따로 iOS 버전이던 OS X 버전을 설치해야 사용이 용이하다. 물론 나도 이 글에서 어떤 프로그램을 추천하겠지만, Plain text로 작성된 문서는 기본적으로 따로 특별한 프로그램이 요구되지는 않는다는 점을 다시 한 번 강조하고 싶다.

여기서는 두 개만 예로 들었지만, Note를 표방하는 시중의 대부분의 제품의 가장 큰 문제는 검색이 엉망이라는 데 있다. 아름다운 GUI로 Note 프로그램을 잘 만들어도, 그 안에서만 검색이 가능하거나 그마저도 잘 않되는 것들이 태반이다. Note를 쓰면 쓸 수록, 쓴 글들이 database가 되어, 이를 언제라도 빠르고 쉽게 검색할 수 있어야 진정한 Note라고 부를 수 있지 않을까? 강력한 호환성을 자랑하는 문서 format은 첫째가 단연 plain text고 두 번째로는 pdf라 할 수 있겠다. 한글을 사용할 것이므로 unicode의 한 종류인 utf8으로 note를 작성하고, .txt 확장자로 저장하면 어느 OS에서도 문제 없이 사용할 수 있는 강력한 호환성을 갖게 된다.

Sync는 Dropbox로 해결할 것이다. Dropbox를 쓰는(혹은 추천하는) 가장 큰 이유는 다양한 OS를 지원하기 때문이다. OS X, Linux, Windows의 3대 OS는 물론이고 iOS, Android, BlackBerry에 Kindle Fire까지 지원한다. 또한 API가 공개되어 있어서 다양한 apps에서 접근성 또한 높다. 무료 사용자에게는 2GB 만을 제공하지만, Note 사용에는 한도 끝도 없는 용량이며, 간단한 pdf 파일들로는 일반인들은 다 쓰기도 어려운 용량이다. 어떤 editor든지 .txt 파일로 만들어서 Dropbox directory 아래에 저장만 하면 그냥 sync 된다. 인터넷만 된다면 어디서든 볼 수 있다.

Dropbox 사용의 또 하나의 강력한 장점은, 지난 번에 저장했던 같은 이름의 파일들이 Dropbox server에 고스란히 저장되어 있다는 점이다. 즉, 글을 계속 수정하고 저장해 가며 쓰다가 문득 지난 번에 쓴 표현을 되살리고 싶을 때, Dropbox homepage에 가서 그 이름의 파일에서 secondary click (aka 우클릭) 후, 'Previous versions'을 클릭하면 지난번에 저장했던 파일들이 고스란히 존재하는 것을 볼 수 있다. 시간 순서로 정렬되어 있으므로 적당한 시간대의 파일들을 몽땅 다운로드해서 확인해 보면 된다. 한 가지 주의할 점도 있다. 아직껏 Dropbox hacking 소식없지만, 그래도 기본적으로는 서버에 올리게 되는 것이므로, 개인정보에 관한 파일을 Dropbox와 함께 사용하는 것은 항상 신중해야 하고 가능하면 그런 파일은 encrypt해서 그냥 컴에만 가지고 있자.

11259796523_5099ab2db9.jpg

여기까지 정리하면, Note 관련 Apps이나 Applications에게 요구되는 기능은 다음과 같다.

  1. Plain text에 Unicode를 지원해야 한다.
  2. 가볍게 돌아가야 하고 사용이 간단해야 한다.
  3. 강력한 검색을 지원해야 한다.
  4. Dropbox sync가 용이해야 한다.
  5. Markdown 같은 markup language를 지원하면 금상첨화다.

OS X

Notational Velocity and nvALT

Notational Velocity라는 환상의 프로그램이 있다. GNU GPLv3 license의 OS X 전용의 plain text note 프로그램이다. 이 프로그램 안에서 note를 작성하는 것은 물론 검색도 해준다. 한글도 잘 동작하며, dropbox sync도 문제없다. 무엇보다도 정말 가볍고 빠르다.

Notational_velocity_screenshot.png

Notational Velocity, image from Wikipeida: Notational Velocity

기본적인 동작은 검색 필드(로 보이는)에서 모두 이루어진다.(단축키 ⌘L)

  • 여기에 단어를 쓰면 바로 검색을 해 주고, 그 단어가 포함된 notes를 모두 filtering 해서 바로 아래 panel에서 즉각 보여주며, 방향키로 검색한 단어가 포함된 notes 사이를 이동할 수 있다. 이 때 세 번째 panel에서 그 note 안에서 검색한 단어가 강조되어 표현됨은 물론이다. 다른 applications과 마찬가지로, Forward finding (단축키 ⌘G)으로는 그 note 안에서 계속적으로 그 검색 단어를 찾아준다.
  • 여기에 단어를 쓰고 엔터()를 누르면, 그 단어를 이름으로 한 다른 note를 바로 만든다.

개인적으로는 Notational Velocity의 모든 기능에 MultiMarkdown preview까지 지원하는 nvALT를 더 추천한다. Open source는 아니지만 free이다. 사용 방법 및 설정은 Notational Velocity와 완전히 동일하다. dropbox sync와 notes 관리 설정은 아래와 같다.

  1. nvAlt에서 Preferences(⌘,)를 열어 아래 그림에서 (1.)의 'Notes'를 클릭한다.
  2. (2.)를 클릭해서 Dropbox에서 sync 시킬 폴더를 선택한다. 아래 예에는 ~/Dropbox/nv 로 설정되어있다.
  3. 기본으로는 모든 notes를 단 하나의 이름의 파일로 관리하는 것으로 되이있는데, 그 아래 'Storage' panel에서 (아래 그림 (3.)) (4.)을 클릭해서 'Plain Text Files*'로 바꾸면 각기 다른 파일 이름으로 note 작성 가능하다.
  4. Markdown(.md) 파일을 nvALT에서 작성 및 검색 가능하게 하려면, (5.1)의 '+'를 클릭하여 (5.2)에 md를 추가시킨다. FYI) (5.2)의 빨간 박스를 잘 보면 txt 가 굵게 표시되어 있는데, 이건 새로 작성할 note가 .txt 로 작성됨을 뜻한다. .md 를 기본으로 하려면 그 이름을 클릭해서 굵게 표시되게 만들면 된다.

11242442566_34e7884a80.jpg

말로는 잘 설명이 안된다. free software(Notational Velocity는 free-/open-)이므로 한 번 써보는 것을 권한다. 써보면 무슨 말인지 알게 된다.

특히, Markdown 및 MultiMarkdown 사용자라면 nvALT를 한 번 써볼 것을 추천한다. Mou라는 꽤 괜찮은 OS X 전용 무료 editor가 존재하지만 nvALT도 그 못지 않다. Navtive nvALT의 Live-preview 기능을 켜고 편집을 하면 Live-preview 화면이 다시 맨 위로 올라가서 다소 부족한데, 이 또한 해결이 가능하다. 이를 위해서는 아래 사이트에 가서 Download Lopash for nvALT v1.0 를 클릭하여 다운로드 받은 후 (혹은 여기를 눌러 직접 받은 후)

압축을 풀어서, 아래 여섯개의 파일을 ~/Library/Application Support/nvALT/ 에 붙여 넣는다.

custom.css
highlight.pack.js
jquery.min.js
solarized_dark.css
solarized_light.css
template.html

그러면 아래 그림과 같은 Live-preview을 볼 수 있게 된다. 이 설정을 완료한 후, Live-preview 기능을 켜고 편집을 하면 Live-preview 화면이 다시 맨 위로 따라 올라가지 않는다.

11313128466_4c01428dca_z.jpg

FYI-#1) 같은 MultiMarkdown source로 확인해 본 결과 Mou와 nvALT가 같은 결과(html 혹은 pdf)를 보여주지는 않았다. 즉, 둘의 MultiMarkdown engine이 다른 것으로 보인다.

FYI-#2) DEVONthink 사용자라면, 위의 예에서 dropbox sync 시킨 ~/Dropbox/nv 폴더를 indexing 하면 DEVONthink 안에서도 검색할 수 있음은 물론이다.

FYI-#3) Simplenote 사용자라면, sync는 Simplenote로 해결하면 된다. Notational VelocitynvALT 모두 Simplenote를 기본으로 지원한다.

Aquamacs (or emacs) deft-mode

완전하지는 않지만 markdown-mode.el 를 만들어 배포하고 있는 Jason Blevins1Notational Velocity의 영감을 얻어 유사하게 만든 deft.el 도 만들어서 배포하고 있다.

설정하는 방법은 jblevins.org/projects/deft/에 자세한 설명이 나와있지만 간단하게 설명하면,

  1. deft.el을 다운 받아 (혹은 링크를 따라가서 전체 복사 후, Aquamacs에서 새 문서를 열어 붙여 넣고 deft.el 로 저장)
  2. deft.el 파일을 ~/.emacs.d/ 아래로 이동. 예를 들어, ~/Desktop/deft.el 으로 만든 경우에 bash sell(Terminal.app)을 열어 아래를 실행
    $mv ~/Desktop/deft.el ~/.emacs.d/deft.el
    
  3. 내 경우는 markdown도 가끔 쓰지만, 주로 org-mode를 .txt 확장자로 사용한다.

    위의 nvALT에서와 같은 폴더(~/Dropbox/nv)를 사용하고 .txt 확장자를 새 note에 기본으로, note 편집은 org-mode 에서 할 경우에는, 아래를 ~/.emacs 파일에 붙여 넣고 저장한다.

    (add-to-list 'load-path "~/.emacs.d/")
    ;; ###################
    ;; for deft.el
    ;; ###################
    (require 'deft)
    (setq deft-directory "~/Dropbox/nv")
    (setq deft-extension "txt")
    (setq deft-text-mode 'org-mode)
    (setq deft-use-filename-as-title t)
    (global-set-key (kbd "C-c d") 'deft)
    

    Markdown을 주로 쓰는 사용자라면, .md 확장자를 선호할 것이고 note 편집은 물론 markdown-mode 를 쓸 것이므로 아래를 ~/.emacs 파일에 붙여 넣고 저장한다.

    (add-to-list 'load-path "~/.emacs.d/")
    ;; ###################
    ;; for deft.el
    ;; ###################
    (require 'deft)
    (setq deft-directory "~/Dropbox/nv")
    (setq deft-extension "md")
    (setq deft-text-mode 'markdown-mode)
    (setq deft-use-filename-as-title t)
    (global-set-key (kbd "C-c d") 'deft)
    

    물론 markdown-mode 가 깔려있어야 한다. 그리고 두 경우 모두 deft-mode 를 부른 단축키는 ⌃c d 로 지정되어 있다. 수동으로는 ⌥x 누른 후, deft ↩ 하면 부르는 것과 동일하다.

FYI) deft-mode를 쓰더라도 nvALT (혹은 Notational Velocity)는 필요하다. 왜냐하면, plain text를 쓰는 이유 중의 하나인 검색이 deft-mode에서 용이하지 않다. 특히 한글 검색은 deft-mode를 부른 후, ⌥x deft-filter 과정을 거쳐야 가능하다. 그럼에도 불구하고 deft-mode를 쓰는 이유는, Finder나 Quicksilver로 찾는 것보다 Aquamacs 안에서 보고, 찾아서, 바로 편집하는 편리함 때문이다.

Any test editor + searching

물론, 원론적으로는 어떤 editor를 쓰던 상관없다. Plain text로 작성하므로 OS X에 기본으로 들어있는 TexdEdit.app을 써도 된다. DEVONthink 사용자라면 그 안에서 검색은 물론 편집도 가능하므로 아무것도 필요 없다. Markdown을 주로 쓰면 Mou를 써도 되고, Emacs user라면 Aquamacs를 쓰면 되고 뭐든 상관없다. 문제는 검색인데, 그것도 Notational VelocitynvALT (혹은 DEVONthink) 처럼 시각적으로 바로 검색 결과를 보여주는 것도 필요 없다고 생각하면, 역시 문제 되지 않는다. 처음에 얘기했듯이 plain text로 작성한 문서는 검색도 용이하기 때문이다. 즉, 다른 프로그램 없이 그냥 Finder.app에서 ⌘F 로 검색해도 되고, DEVONtechnology에서 무료로 배포하는 EasyFind를 써서 검색해도 된다. (-> EasyFind: direct link for download) Plain text로 작성했으므로 파일명 뿐만 아니라 그 안의 내용까지 잘 검색해 준다.

11259740685_3f3f4b7df6_z.jpg

in Finder.app

11259824573_2ed49be81d_z.jpg

in EasyFind

Debian GNU/Linux and Kubuntu

다시 말하지만 plain text로 note를 만드는 것은 어디에서 해도 된다. 그냥 깔려있는 Kate 같은 프로그램으로 작성해도 된다. 저장만 Dropbox directory 아래에 적당한 이름으로 하면 그냥 sync도 된다. 역시 Notes 검색이 문제인데, 단순하게는 OS X의 Finder.app처럼 KDE environment에서는 Dolphin안에서 검색을 해도 잘 되긴 한다. 하지만 조금 더 나은 검색 환경을 위해 OS X 경우처럼 다른 가능성을 살펴보겠다.

nvpy

Notational VelocitynvALT는 OS X 전용 프로그램이다. Linux에서는 여기에 영감을 얻은 Charl P. Botha가 만들고 BSD License로 배포되고 있는 nvpy가 있다. 작동하는 방식은 Notational Velocity과 거의 같다. Markdown도 지원하고 Dropbox sync도 가능하다. 한글도 모양이 좀 이상하긴 하지만 무난하게 지원된다.

  • Debian GNU/Linux와 Kubuntu에서 설치는 다음 순서로 bash sell(Konsole/Terminal)에서 실행하면 된다.2
    $sudo apt-get install python python-tk python-pip python-markdown
    $sudo pip install nvpy
    
  • Dropbox sync3 위해서는
    1. home directory 아래 .nvpy.cfg 를 만들고
      $touch ~/.nvpy.cfg
      
    2. 적당한 editor로 .nvpy.cfg 파일을 열어, 아래를 적어 넣자.
      [nvpy]
      simplenote_sync = 0
      notes_as_txt = 1
      txt_path = /home/user_id/Dropbox/nv
      

      위에서 user_id 에는 실제 사용자 ID를 적어 넣어야 한다. Dropbox 아래 nv 라는 이름의 directory와 sync 시키는 경우로 설정되어 있음에 유의하자.

  • 실행은 K-runner나 bash sell(Konsole/Terminal)에서 nvpy↩ 하면 된다.
  • 간단한 단축키로는, ⌃?: 단축키 정보 표시, ⌃N: 새 노트, ⌃M: html로 rendering. (주의 html rendering 후 저장은 따로 브라우저 안에서 해야한다.) 자세한 단축키는 여기를 가서 살펴보자.

11243974703_76d77194de_z.jpg

nvpy in Debian GNU/Linux wheezy

Markdown은 지원하는데 MultiMarkdown은 지원하지 않는다 는 점도 염두해 두자.

Emacs user

Aquamacs와 다를 것이 하나도 없다. Deft-mode를 쓰면 된다. 'Aquamacs (or emacs) deft-mode' section 에서 자세히 기술하였다.

iOS

plain text를 편집할 수 있는 어떤 app도 가능하다. Dropbox app을 쓰면 수동으로 올리고 다운받는 것도 가능하긴 하다. 하지만 이렇게 쓰면 너무 불편하다. app 안에서 dropbox sync 기능이 지원되어 그 안에서 sync를 눌러 수행하거나 인터넷에 연결되면 자동으로 수행하는 방식이 가능한 apps 위주로 간단하게 살펴보기로 하자. 아래 링크를 따라가면 정말 많은 apps의 특징들을 비교하여 표로 만들어 놓았으니, 더 많은 정보를 원하면 참고하자.

Free apps

꽤 많은 수의 무료 apps가 있는데, 그 중에 쓸만한 두 개는 WriteroomNocs이다. Writeroom은 OS X 용의 유료 application도 있는데, iOS 용은 현재(<2013-12-08 Sun>) 무료로 배포되고 있다. 자화사의 무료 app인 PlainText의 iOS 7 용의 미발매로 지금 한시적으로 무료로 배포하고 있다. 괜찮은 GUI를 가지고 있으나 Markdown preview 기능은 지원하지 않는다. Nocs는 항상 free로 배포되고 있는데, GUI가 조금 촌스럽긴 하지만 광고도 없고 Markdown도 지원하고 그럭저럭 쓸만하다. 내가 추천하는 free app이다. 그것도 아니면 Notational Velocity나 nvALT, nvpy가 default로 지원하는 Simplenote를 쓰는 것도 한 방법이다. iOS, Android, Kindle을 지원하고 OS X 용도 있다. ID를 만들고 가입하는 절차가 필요하다는 점과 Markdown은 지원하지 않는다는 점을 유의하자.

Non-free apps

아직 $4.99 가격의 평이 좋은 apps도 있다. MultiMarkdown을 지원하는 Element나 그냥 Markdown만 지원하지만 OS X 용도 있는 ByWord이 쓸만해 보인다. 어디를 가도 추천 리스트에 꼽히는 apps다. 나는 둘 다 써보지 못 해서 추천할 수는 없고, 그냥 정보 정도라고 생각했으면 한다.

Nubulous Notes

neb·u·lous
미[nébjuləs] 영[nébjuləs]
【형용사】
(격식)
1. 흐린; 구름 같은; 성운(상)의(nebular).
2. 뚜렷하지 않은(formless), 막연한(vague), 불분명한(in-distinct); 혼란한

출처: Daum 영한사전: nebulous

마지막으로 내가 쓰는 app인 Nubulous Notes이다. 살 때만 해도 $3.99 였는데, 지금은 $7.99 이어서 추천하기에는 조금 부담스러운 가격이 되었다. 그래도 기능은 정말 막강하다. Dropbox sync도 잘 되고, 전체 화면 모드도 최상단의 정보창 부분도 사라지고 꽉차는 진짜 전체 화면 모드로 지원되며, Markdown 뿐만 아니라 html rendering도 지원되서 내 경우는 org-mode에서 html로 export 한 파일을 올려서 보기도 한다. 또한 자주 쓰는 단축키(or macros)를 설정(아래 세 번째)해서 자판 위에 올릴 수 있어서(아래 두 번째) 편집이 매우 용이하다. 내 설정(macros)에서는 (두 번째 그림에서), 1. 을 누르면 '** {오늘 날짜}' 가 찍히고, 2. 를 누르면 '*** ' 가 찍히게 설정되어 있다. 또한 Fonts도 몇 깔려 있어서 원하는 것으로 선택해서 쓸 수 있다.

11313219513_e56c457f2a_z.jpg

무료로 배포되는 lite version도 있으니 한 번 써보고 구매하길 추천한다.

FYI) 언급한 다섯 apps 모두 iPhone과 iPad를 전부 지원하는 univeral app이다.

Epilog

가벼운 note 검색은 nvALTAquamacsDeft-mode로 하지만, 개인적으로는 거의 모든 검색은 DEVONthink로 하고 있다. 가격이 좀 되기 때문에 note만 쓰는데 추천하기는 애매하지만(원래 이런데 쓰라고 나온 게 아니다), 가히 database 관리의 왕이라 불릴 만한 프로그램이다. DEVONthink는 워낙 다루는 블로거들이 많으므로 난 다룰 일이 없을 것 같다.

Markdown을 꼭 쓸 필요는 없다. 나조차도 Emacs org-mode를 주로 쓰고 있다(물론 그것은 내가 Emacs 사용자이기 때문일 수 있다). 그러나 문법이 워낙 간단(?)하고 유명 apps 중에 이를 지원하지 않는 것이 손에 꼽을 정도라 언급했다.

글이라는 것을 쓰는데 자질구레한 설정이 필요 없이 글쓰기에만 집중하게 하는 컨셉의 applications이 많은데, nvALT를 그런 용도로도 쓸 수 있을 것 같다. 원래 이 글은 쓰려고 했던 동기를 주었던 프로그램이다. OS X 사용자는 한번 쯤 써볼 것을 추천한다.


Footnotes:

1

바로 이 사람이 만든 markdown-mode.el 가 Aquamacs 3.0 preview에 기본으로 들어가 있다.

2

Installation은 여기를 참고하였다.

3

Dropbox sync 관련은 여기를 참고하였다. Simplenote 사용자는 여기를 살펴보자.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Created: 2013-12-14 Sat 16:56

Emacs 23.4.1 (Org mode 8.0.2)

Validate XHTML 1.0

Thursday, November 28, 2013

Emacs spell-checker

Emacs 한글 맞춤법 검사기

Emacs 한글 맞춤법 검사기


;; =================================================
;; εμαcs is ⎋[esc]⌘[meta]⌥[alt]⌃[ctrl]⇧[shift].
;; =================================================

이 문서는 emacs org-mode로 작성된 글입니다.

Operating System Environments

  • Main- : OS X Mavericks (10.9)
  • Sub- : Debian GNU/Linux Wheezy (7.2)
  • Server: Debian GNU/Linux Squeeze || Lenny
  • Mobile: iOS 7.0.4

Emacs 사용 환경

  • OS X: Aquamacs + OS X dictionaries
  • Debian GNU/Linux: Emacs + Hunspell

emacs_lisp in .emacs

OS X: Aquamacs + OS X dictionaries

Aquamacs한글 맞춤법 검사기는 아래에서 다운 받는다.

ko-aff-dic-0.5.6.zip 파일의 압축을 풀어, ko.affko.dic~/Library/Spelling/ (Finder에서 ⌘⇧G) 아래에 복사해 넣는다. 전체 사용자에게 한글 맞춤법 검사기가 동작하게 하려면, /Library/Spelling/ 에 복사해 붙이자. 시스템을 재부팅한다.

여기까지 하면, TextEdit.app이나 Mail.app 등에서 한글 맞춤법 검사기가 잘 동작하는 것을 볼 수 있다. 하지만 여기서 목표는 Aquamacs에서 이를 사용할 수 있게 하는 것이다. Aquamacs에서는 TextEdit.app이나 Mail.app 등과는 다르게 어떤 언어를 사용하여 맞춤법 검사를 할 지를 editor 차원에서 일일이 변경해야 함에 주의하자. 즉, 한글 맞춤법을 검사할 때는 한글로 해서 검사해야 하고, 영문 맞춤법을 검사할 때는 영어로 맞춤법 검사기를 바꾸어 주어야 한다. 또한, 아래의 기술할 방법으로 Aquamacs에서 한글 맞춤법을 쓰게 되면, TextEdit.app이나 Mail.app에서도 한 가지 언어로만 맞춤법 검사를 할 수 있게 됨에도 주의하자. 1

그럼에도 불구하고 Aquamacs에서 한글 및 다른 언어들의 맞춤법 검사를 쓰고 싶으면 다음을 진행하자. 사실, 아래 Emacs Lisp code에 다 적어 놨지만 간단히 방법을 기술하면 아래와 같다.

0째, Aquamacs에서 원할한 한글 사용을 하려면 바람 입력기 사용을 추천한다. 자세한 설치법은 지난 Post를 참고하자. -> "Emacs에서의 한글환경" 바로 가기

첫째, Aquamacs에서 영어 맞춤법을 검사하기를 기본으로 지정하자. 2

  1. OS X Mavericks에서는 System Preferences 을 열어 Keyboard 를 클릭, Text 페널에서 Spelling:U.S. English 로 선택하자.
  2. OS X Mountain Lion에서는 System Preferences 을 열어 Language & Text 를 클릭, Text 페널에서 Spelling:U.S. English 로 선택하자.

여기까지하면 Aquamacs 뿐만 아니라 TextEdit.app이나 Mail.app 등에서도 영어 맞춤법 검사만 가능해진다.

둘째, 이제 아래 Emacs Lisp code를 ~/.emacs 를 열어 적어넣자.

;; -------------------------------------------
;; Aquamacs spell-checker
;; -------------------------------------------
;; ###
;; pre-settings for Mountain Lion: System Preferences -> Language & Text -> [Text: Spelling: U.S. English]
;; pre-settings for Mavericks    : System Preferences -> Keyboard        -> [Text: Spelling: U.S. English]
;; ###
;; ### korean-english-german
;; (let ((langs '("ko" "en" "de")))
;;   (setq lang-ring (make-ring (length langs)))
;;   (dolist (elem langs) (ring-insert lang-ring elem)))
;; (defun cycle-ispell-languages ()
;;   (interactive)
;;   (let ((lang (ring-ref lang-ring -1)))
;;     (ring-insert lang-ring lang)
;;     (ispell-change-dictionary lang)))
;; ###
;; ### korean-english
(let ((langs '("ko" "en")))
  (setq lang-ring (make-ring (length langs)))
  (dolist (elem langs) (ring-insert lang-ring elem)))
(defun cycle-ispell-languages ()
  (interactive)
  (let ((lang (ring-ref lang-ring -1)))
    (ring-insert lang-ring lang)
    (ispell-change-dictionary lang)))
;; ###
;; ### key bindings
(global-set-key (kbd "S-SPC") 'cycle-ispell-languages)
(global-set-key (kbd "A-D") 'ispell-region)   ;; cmd+shift+d
(global-set-key (kbd "A-d") 'ispell-word)     ;; cmd+d

한글과 영어로 맞춤법 검사하기를 활성화 하였고, 맞춤법 검사기 변환은 ⇧SPC 로 지정하였다. 영어로 시작되었을 것이므로 ⇧SPC 한 번 누르면 한글로, 또 누르면 영어로, 또 다시 누르면 다시 한글로 바뀐다. 글을 쓰다가 빨간줄이 그어지면, ⌘d 를 누르면 올바른 단어가 Aquamacs 최상단에 뜬다. 예를 들어, "적어놨지만"이라고 적은 부분에서 ⌘d 하면 아래 화면을 볼 수 있다.

11104767174_46ee950f40_z.jpg

여기서 0 을 누르면 "적어냈지만"으로, 3 을 누르면 "적어 놨지만"으로 바뀐다. Shift-Selction으로 지정한 영역 전체의 맞춤법 검사는 ⌘⇧d (or ⌘D)로 지정해 놓았다. 물론 이 key bindings가 싫으면, 사용자 취향에 따라 원하는 것으로 바꾸면 된다. 세 개 이상의 언어로 맞춤법 검사를 하고 싶으면 이를 확장하면 된다. 위의 Emacs Lisp code에서 주석 처리(;;)해놓은 부분이 바로 "한국어-영어-독어"의 사용 예이다.

Debian GNU/Linux: Emacs + Hunspell

Emacs는 깔려 있는 것으로 가정한다. 역시, 아래 Emacs Lisp code에 다 적어 놨지만 간단히 방법을 기술하면 아래와 같다. 여기서는 "한국어-영어-독어"를 사용하는 것으로 예를 들었다.3

  1. 아래를 실행하여 hunspell, hunspell-en-us, hunspell-ko, hunspell-de-de 를 설치한다.
    $ sudo apt-get install hunspell hunspell-en-us hunspell-ko hunspell-de-de
    
  2. 아래 Emacs Lisp code를 ~/.emacs 를 열어 적어넣자.
    ;; -------------------------------------------
    ;; GNU Emacs spell-checker in Debian GNU/Linux
    ;; -------------------------------------------
    ;; ###
    ;; pre-settings: sudo apt-get install hunspell hunspell-en-us hunspell-ko hunspell-de-de
    (setq ispell-local-dictionary-alist
          '(
            ("korean"
             "[가-힣]" "[^가-힣]" "[0-9a-zA-Z]" nil
             ("-d" "ko_KR")
             nil utf-8)
            ("english"
             "[A-Za-z]" "[^A-Za-z]" "[0-9a-zA-Z]" nil
             ("-d" "en_US")
             nil utf-8)
            ("german"
             "[a-zäöüßA-ZÄÖÜ]" "[^a-zäöüßA-ZÄÖÜ]" "[']" t
             ("-d" "de_DE")
             nil utf-8)
            )
          )  ;; =====> Mandatory I.
    (if (file-exists-p "/usr/bin/hunspell")
        (progn
          (setq ispell-program-name "hunspell")
          (eval-after-load "ispell"
            '(progn (defun ispell-get-coding-system () 'utf-8))))
      )      ;; =====> Mandatory II.
    (setq ispell-local-dictionary "english")
    ;; ###
    ;; ### korean-english-german
    (let ((langs '("korean" "english" "german")))
      (setq lang-ring (make-ring (length langs)))
      (dolist (elem langs) (ring-insert lang-ring elem)))
    (defun cycle-ispell-languages ()
      (interactive)
      (let ((lang (ring-ref lang-ring -1)))
        (ring-insert lang-ring lang)
        (ispell-change-dictionary lang)))
    ;; ###
    ;; ### korean-english
    ;; (let ((langs '("korean" "english")))
    ;;   (setq lang-ring (make-ring (length langs)))
    ;;   (dolist (elem langs) (ring-insert lang-ring elem)))
    ;; (defun cycle-ispell-languages ()
    ;;   (interactive)
    ;;   (let ((lang (ring-ref lang-ring -1)))
    ;;     (ring-insert lang-ring lang)
    ;;     (ispell-change-dictionary lang)))
    ;; ###
    ;; ### key bindings
    (global-set-key (kbd "S-SPC") 'cycle-ispell-languages) ;; shift-spacebar
    (global-set-key (kbd "s-D") 'ispell-region)            ;; cmd+shift+d
    (global-set-key (kbd "s-d") 'ispell-word)              ;; cmd+d
    ;; ### key bindings for windows keyboard
    ;; (global-set-key (kbd "S-SPC") 'cycle-ispell-languages) ;; shift-spacebar
    ;; (global-set-key (kbd "M-D") 'ispell-region)            ;; alt+shift+d
    ;; (global-set-key (kbd "M-d") 'ispell-word)              ;; alt+d
    

key bindings와 사용법은 위와 동일하다. Debian GNU/Linux를 Windows keyboard와 쓰는 경우(대부분은 그렇겠지만)는 위 code의 ;; ### key bindings for windows keyboard 위의 세줄을 주석(;;) 처리하고, 아래 세 줄은 주석(;;) 해제하여 쓰면 된다. 위에서 보다시피 이 경우에는 '단어 검사'와 '영역 검사'를 각각 ⌥d⌥⇧d (or ⌥D)로 지정되었다.

Epilog

Cocoa emacs에서 한글 맞춤법 검사기 사용은 시도해 보았으나… 실패했다. Cocoa emacs에서 OS X 사전을 사용하는 방법도 모르겠고, MacPorts에서 Hunspell port에 한글도 없어서 쓰려면 직접 설치해야 하는데, 귀찮아서 안해봤다. 어차피 Cocoa emacs는 자잘한 bugs가 많아서 쓰지도 않고 추천하지도 않는다.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Footnotes:

1

원래 TextEdit.app이나 Mail.app 등에서는 Input sources에서 지정해준 언어들로 자동으로 그 언어에 맞게 알아서 맞춤법 검사를 해준다.

2

이유는 모르겠지만, 이렇게 하지 않으면 Aquamacs에서 맞춤법을 검사할 사전(⌥x ispell-change-dictionary)이 바뀌지 않는다.

3

참고 사이트들: Ref. #1, Ref. #2, Ref. #3

Created: 2013-11-28 Thu 21:35

Emacs 23.4.1 (Org mode 8.0.2)

Validate XHTML 1.0

Saturday, May 4, 2013

Korean in Emacs

Korean in Emacs

Korean in Emacs


이 문서는 e[⎋esc]m[⌥⌘meta]a[⌥alt]c[⌃ctrl]s[⇧shift] org-mode로 작성된 글입니다.


Operating System Environments

  • Main- : OS X Mountain Lion (10.8.3)
  • Sub- : Debian GNU/Linux Squeeze (6.0.7)
  • Server : Debian GNU/Linux Squeeze || Lenny
  • Mobile : iOS 6.1.3

태초에 e⎋m⌘a⌥c⌃s⇧1라는 이름의 초강력 editor 가 있었다. Richard Stallman이 이끄는 GNU Project에서 1976년에 처음으로 배포된 후, 아직까지 최강의 editor로 군림하고 있다. Lisp라는 언어로 쓰여진 e⎋m⌘a⌥c⌃s⇧는 거의 못 하는 것이 없는데, 특히 LaTeX, Fortran, C, 등의 coding에 강력한 힘을 발휘하며, .el의 확장자를 가진 일종의 plugin을 설치하면 Mathematica source, Markdown, 등도 편리하게 사용할 수 있다. 역사가 오래된 만큼 다양한 emacs variants(or forks)가 존재하는데, windows users 사이에서는 xemacs가 가장 유명하고, os x users 사이에서는 aquamacsemacs(cocoa)가 널리 사용되고 있다. 내 MacBookPro에는 둘다 깔려있긴한데, 그중에서 aquamacs가 나의 메인 editor이다. Debian GNU/Linux에서는 당연히 gnu emacs를 쓴다.

내가 주로 보는 소스 코드들은, .c, .h, 등의 C-language와 .f를 가지는 Fortran, .tex, .bib, 등의 LaTeX 관련 파일들과, Mathematica source 들이다. 모두 e⎋m⌘a⌥c⌃s⇧로 coding을 하고 있는데, 최근에는 plain text 와 .org의 emacs org-mode 를 e⎋m⌘a⌥c⌃s⇧에서 쓰려고 하니, 한글이 문제였다.

e⎋m⌘a⌥c⌃s⇧ 안에서의 한글환경

OS X에서

처음 맞닥드리는 문제는 한글이 e⎋m⌘a⌥c⌃s⇧ 안에서 깨지는 것인데, 이는 ~/.emacs 를 수정하는 것으로 손쉽게 해결할 수 있다. current-language-environmentUTF-8 으로 바꿔주면 된다. 가장 큰 문제는 시스템 차원의 한영변환(⌘-SPC)과 e⎋m⌘a⌥c⌃s⇧가 궁합이 안맞는다는 점이다. 즉, ⌘-SPC로 한영변환을 하면 Save(⌘-s)와 Save as…(⌘⇧-s) 등이 aquamacs 안에서 먹히지 않는것은 물론이거니와, ⌥-! 나 ⌥-x 로 minibuffer를 부를 수도 없다. aquamacs가 아니라 emacs(cocoa)를 쓰면 Save(⌘-s)와 Save as…(⌘⇧-s) 등은 쓸 수 있지만, 여전히 다른 단축키는 먹히지 않는다. 이는… 완벽한 해결책이 아직은 안보인다. 나같은 초보자가 보기에는 다른 Applications 처럼, ⌘(Meta or Command), ⌥(Alt or Option), ⌃(Ctrl), 등의 특수키를 누르면 자동 영어로 넘어가게 만들어 놓으면 간단히 해결될 문제로 생각되는데… e⎋m⌘a⌥c⌃s⇧ 안에서는 안된다. e⎋m⌘a⌥c⌃s⇧이 자체적으로 input method를 지원해서 인지, 그냥 개발자들이 비영어권 언어에대한 이해가 부족한 것인지.. 그 자세한 내막은 알 수 없다.

어찌보면 가장 간단한 해결책은 OS X에서 한글을 쓸 때 e⎋m⌘a⌥c⌃s⇧를 안쓰는 것일지도 모르겠으나, 그럼에도 불구하고 쓰고 싶을때는 두가지 방법이 있다. 언급했다시피, 문제의 핵심은 e⎋m⌘a⌥c⌃s⇧가 OS의 input method toggling에 반응을 한다는 점이므로, 첫째는 OS의 input method는 그대로 둔채 (즉, OS X에서는 ⌘-SPC), e⎋m⌘a⌥c⌃s⇧ 안에서 지원하는 input method의 단축키를 ⇧-SPC 같은 것으로 따로 설정해서 쓰는 방법이다. 이방법은 나름 유용함은 있으나, 막상 사용해보면 두 단축키가 달라서 헷갈리기 쉽상이고 자꾸 타이핑이 꼬인다. 그렇다고 OS의 input method toggling 단축키와 너무 다른 단축키로 e⎋m⌘a⌥c⌃s⇧의 input method toggling을 지정하면 사용이 불편하다. 두번째 방법으로 OS의 input method를 사용하지 말고 바람입력기를 사용하는 방법이 있다. 바람입력기는 Application 별로 input source를 고정해 놓을 수 있는 기능을 제공하고 있어서, e⎋m⌘a⌥c⌃s⇧를 쓸 때는 OS의 input method를 영어로 고정해 놓고, e⎋m⌘a⌥c⌃s⇧ 안에서 제공하는 input method toggling 단축키를 OS의 그것과 일치시키면 된다. 그러면 사용자 입장에서는 e⎋m⌘a⌥c⌃s⇧ 안에서 한글 사용환경이 OS 전반과 동일해지고, e⎋m⌘a⌥c⌃s⇧ 제공하는 다양한 기능은 문제없이 쓸 수 있다.2

Debian GNU/Linux에서

Debian GNU/Linux에서는 ibus 입력기를 사용하고 있는데, gnu emacs는 여기에 당연(?)하게도 반응하지 않는다. 그러므로, 한글깨짐만 수정하고, 그냥 ibus와 gnu emacs의 input method toggling을 하나로 일치시켜주기만 하면 모든 문제는 해결된다. Linux 한글입력기 관련 지난 Post 보러가기

해결책

OS X에서

I. aquamacsemacs(cocoa)는 깔려있다고 가정한다.

II. 바람입력기를 설치한 후 아래 순서로 OS X의 input source를 조정한다.

  1. 바람입력기는 pkg 형태로 배포되고 있다. 설치 후에는 자동으로 logout 된다.
  2. [System Preferences] → [Accessibility] → "Enable access for assistive devices"를 선택한다.
  3. [System Preferences] → [Language & Text] → [Input Sources]로 가서 "Baram"만 남겨두고 모두 선택해제한다.3
  4. [System Preferences] → [Keyboard] → [Keyboard Shortcuts]로 가서, 왼쪽 페널에서 "Keyboard & Text Input "을 선택 한 후, 오른쪽 페널에서 원래 지정되어있던 "Select the previous input source"와 "Select next source in input menu"를 모두 선택해제한다.
  5. 바람입력기에서 [Preferences]로 가서 "User Defined Hangul-English Switch Shortcut"을 설정(내경우는 ⌘-SPC) 후, [Application]으로 가서 aquamacs와 emacs(cocoa)를 등록해서 항상 English로 동작하게 설정한다.
  6. 바람입력기 삭제 순서는 아래와 같다.
    • a. Baram_xxx.dmg 를 클릭하여 마운트 한다.
    • b. Bash shell(Terminal)을 연다.
    • c. Baram_xxx.dmg 에 포함된 uninstall.sh을 Terminal로 Drag&Drop 하고 Enter(return)키를 눌러 실행한다. 이때 "Password:"가 화면에 출력되면, administer password(관리자 비밀번호)를 입력한다.
    • d. logout한다.

Screen+Shot+2013-05-04+at+10.58.29+AM.png Screen+Shot+2013-05-04+at+11.01.22+AM.png Screen+Shot+2013-05-04+at+11.02.45+AM.png Screen+Shot+2013-05-04+at+11.07.54+AM.png Screen+Shot+2013-05-04+at+11.07.48+AM.png

III. 특별히 한글폰트를 깔지않은 맥의 경우, ~/.emacs 를 다시 열어 아래를 복사해 넣고 저장한다.

(set-fontset-font "fontset-default" '(#x1100 . #xffdc) '("Apple SD Gothic Neo" . "iso10646-1")) ; 한글과 영문 폰트 따로 설정
(custom-set-variables
 '(current-language-environment "UTF-8")
 '(default-input-method "korean-hangul390")  ;; 세벌식 390
 ;; '(default-input-method "korean-hangul3f")   ;; 세벌식 최종
 ;; '(default-input-method "korean-hangul")     ;; 두벌식 
)

;; (global-set-key (kbd "S-SPC") 'toggle-input-method)   ;; Debian GNU/Linux에서
(global-set-key (kbd "s-SPC") 'toggle-input-method)   ;; OS X에서 emacs(cocoa)용
(global-set-key (kbd "A-SPC") 'toggle-input-method)   ;; OS X에서 aquamacs용

옆에 주석(;;)을 달아놓았으니 헷갈리지는 않겠지만, 나는 세벌식390을 쓰고 있고, input source toggling은 ⌘-SPC (A-SPC for aquamacs, s-SPC for emacs(cocoa))로 지정해 놓았다. 두벌식 사용자는 ";; 두벌식"가 쓰인 문장을 주석해제(문장 맨 앞의 ;; 를 지우고)하고 ";; 세벌식390"이라고 쓰인 문장을 주석처리하면 된다. Debian GNU/Linux에서 gnu emacs를 쓰는 경우는 ⇧-SPC 로 쓸 예정이므로 그부분도 지우지 않고 주석처리해 놓았다.

FYI) '함초롬'체를 설치한 경우4, 맨위의 애플 산돌고딕체를 뜻하는 Apple SD Gothic NeoHCR Dotum 혹은 HCR Batang 으로 변겅하면 된다. → '함초롬'체 다운로드 바로가기

(set-fontset-font "fontset-default" '(#x1100 . #xffdc) '("HCR Dotum" . "iso10646-1")) ; 한글과 영문 폰트 따로 설정

Free-/Open-font로는 unfont(은체) 가 가장 유명한데, Debain GNU/Linux 에서 뿐만아니라 OS X 에서도 한글을 쓰기위해서는 부족하다. 특히 은체만으로는, e⎋m⌘a⌥c⌃s⇧VLC 에서 한글명 파일의 이름이 깨진다던지, 자막을 쓰는데 bold체가 없다던지, 하는 자잘한 문제가 간혹 발생할 수 있다. 또한 독어에 Umlaut(ä ö ü) 등이 빠져있는 무료 한글폰트들도 많은데, 함초롬체는 완벽하다. 함초롬체를 적극 추천한다.


Updated <2015-11-21 Sat>

Current Operating Systems

  • Main- : OS X El Capitan (10.11.1)
  • Sub- : Debian GNU/Linux Wheezy (7.9)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 9.1

Aquamacs는 버렸다. OS X와 Debain GNU/Linux 모두에서 Emacs로 통일했고, 버전은 24.3.x이다. 한글 사용은 아직 까지는 매우 만족스럽다. 맞춤법은 Hunspell로 해결했다. 자세한 내용은 이 블로그의 지난 Posts인 아래 링크를 참고하자.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Footnotes:

1

여기서, e⎋m⌘a⌥c⌃s⇧라 함은 OS X에서 aquamacs와 emacs(cocoa) 그리고 Debian GNU/Linux에서의 gnu emacs를 모두 포괄하는 용어로 사용되었다.

3

English가 해제되지 않는 경우, Kotoeri를 선택하면 English를 해제할 수 있다. 그리고 다시 Kotoeri를 해제하면 Baram만 남는다. Baram 에서도 English는 지원하니, 문제는 없다.

4

'함초롬'체는 한글과 컴퓨터 에서 개인 및 기업 사용자에게 무료로 배포하고 있는 '한컴오피스 2010'의 대표글꼴이다.

Created: 2015-11-21 Sat 10:32

Emacs 24.3.1 (Org mode 8.2.10)