Tuesday, June 30, 2015

trimforce enable

Trim in OSX 10.10.4

Trim in OSX 10.10.4


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


System Environments

Operating Systems

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

지난 번에 ONE™님이 언급한 데로, OSX 10.10.4부터 3rd-party application의 도움 없이 OS단에서 사용자가 직접 설치한 3rd-party SSD에 대한 Trim 지원이 가능해졌다.

실행 법은 허무하리 만큼 간단하다. Terminal.app을 켜서 아래 한 줄을 실행하자.

$ sudo trimforce enable

y(Yes)를 두 번 누르게 되고 조금 기다리면 저절로 restart된다.

19300069452_3cd82dbd4c_o.png

데이터 손실이 있을 수 있으니, 백업을 하라고 경고 하고 있다.

그 후, [System Information]에 들어가면 Trim이 활성화되어 있는 것을 볼 수 있다.

19300069242_1beac814c2_o.png

FYI) 그 전까지 TrimEnabler를 쓰고 있었는데, 10.10.4로 업그레이드 시 특별히 Trim을 끄고 실행하지는 않았고, 업그레이드 후 TrimEnabler는 지우고 백업을 한 후, sudo trimforce enable 를 실행하였다.


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

Created: 2015-06-30 Tue 23:33

Emacs 24.3.1 (Org mode 8.2.10)

Saturday, June 27, 2015

a way to recover data

photorec

photorec


이 문서는 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 Jessie (8.1)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 7.1.2

PhotoRecGNU General Public License로 배포되는 데이터 복구 소프트웨어이다. TestDisk를 깔면 함께 설치되며, TestDisk로도 살리지 못한 데이터를 복구할 수 있다. Debian GNU/Linux, Kubuntu 등의 Linux는 물론, OSX에서도 MacPorts를 통해 사용할 수 있다. Christophe GRENIERCGSecurity에서 더 많은 정보를 찾아볼 수 있다.

내 경우는 메인 OSX보다는 서브컴 Debian 8.1에서 주로 진행했고, 데이터를 날린 초기에는 8GB USB에 설치한 Kubuntu 12.04에서도 10% 정도를 복구했다. (자세한 초기 상황은 지난 Post를 참고하자.) 다 복구 할 수 있다는 기대는 하지도 않았고, 그럴 돈도 없고 특히 시간이 없다. 중요한 데이터는 거의 메인 OSX에 있고 백업도 잘 되어있다. 날린 것은 서브컴의 하드 30% 정도와 외장하드의 70% 가량이었다. 내장하드는 그냥 내가 실수로 지웠다. (직접 다시 적으니 정말 한 숨만 나온다.)

다른 더 좋고 비싼 전문 소프트웨어를 써야 할 정도의 데이터는 아니었기에 진행했다는 점을 반드시 명심해 두자. 여기에 기술한 데로 한다고 해서, 어떠한 것도 보장할 수 없다는 점을 다시 한번 꼭 밝히고 싶다.

PhotoRec

주의 사항

  1. 데이터 복구는 우선 TestDisk를 써보자. 그래도 안되면 PhotoRec를 쓰자.
  2. 복구를 하더라도 파일 이름까지 그대로 되살리지는 못 한다. 즉, f0123456789.dat 같이 무작위로 이름이 부여된다.
  3. 위의 이유로 인해 복구를 하더라도, 정말 쓸 수 있게 만드는데 엄청난 시간이 요구된다.

상상이 되는가? 동영상이나 사진은 직접 보고 그게 뭔지 확인해야 하고, .iso.dmg 등의 이미지 파일은 직접 마운트를 해봐야 한다!!!

동영상이야 그래도 몇 백 개까지(?)는 직접 확인한다고 쳐도, 사진은 단위가 다르니 엄두가 안 난다. 자막 파일이야 복구만 된다면, 어차피 text니깐 EasyFind 같은 OSX 용 소프트웨어를 쓰면 어찌어찌한다 치더라도, .7z 이나 .zip 같은 압축 파일들은 또 언제 다 압축을 푸나. 게다가 .smi 자막 파일은 제대로 잘 찾지도 못 한다.

여기까지 쓰니, 웃음밖에 안 나온다. 첫째도 백업, 둘째도 백업이다. 별로 안 중요해도 복구에 시간이 걸리는 것도 백업하자.

내가 복구한 것들

사진이나 압축 파일들은 깔끔히 포기하고, 동영상과 디스크 이미지 파일에 집중했다. 특히, 자막이 포함될 수 있는 동영상인 .m4v, .mp4, .mkv 를 집중적으로 우선 살렸다. 나머지는 위에서 언급한 데로 일일이 확인하는 데 시간이 걸리니, 복구는 해 놓고 짬짬이 할 요량이다. 아니면, 아싸리 다 버릴 수도 있다. 그래도 언제 또 필요할 때가 올지 모르니, 시도해본 것들을 여기에 정리한다.

주로 참고한 곳들은 http://www.cgsecurity.org/wiki/Add_your_own_extension_to_PhotoRec, http://techglimpse.com/photorec-recover-add-specific-file-type/ 이다.

Basic understanding how it works

PhotoRec는 TestDisk를 설치하면 함께 깔린다. Debian GNU/Linux나 Kubuntu 경우는 아래 명령어로 설치할 수 있다.

$ sudo apt-get install testdisk

설치하는 OS마다 PhotoRec 버전에 변화가 좀 있으므로 복구 대상 파일을 인식하는데 조금씩 차이가 있을 수 있다. 아래 표에 간단히 정리해 보았다.

복구 대상 파일   인식하는 이름
m4v/mp4 : mov or mp4
mkv : mkv
avi : riff or avi
dmg : bz2 or unknown
iso : iso
srt : txt or unknown
smi : java or txt or unknown

일단, TestDisk를 깔아서 PhotoRec를 쓸 수 있게 되면, fidentify 명령어를 쓸 수 있다. 이는 위의 표에서 정리한 것처럼 복구 대상 파일을 PhotoRec가 인식하는 이름을 알 수 있게 해준다. 예를 들어, example.iso 파일을 확인해 보려면, Bash에서 아래를 실행하면

$ sudo fidentify example.iso

다음과 같은 결과를 볼 수 있다.

example.iso: iso

위의 표에서 unknown으로 표현한 것들은 fidentify 명령어로 인식되지 않아서 결과가 아예 없는 경우를 뜻한다. 계속 읽어보면 의미를 알 수 있을 것이다.

FYI) 위에서 sudo 와 함께 사용하였는데, fidentify 명령어 자체에는 필요 없다. 즉, 그냥 fidentify example.iso 만으로도 확인은 가능하다. 하지만, 결국에는 photorecsudo 에서 사용할 것이므로, 이 Post에서는 앞으로 sudo 와 함께 표현할 것이다.

이 과정이 중요한 이유는 PhotoRec는 fidentify 명령어가 인식할 수 있는 파일만 복구할 수 있기 때문이다.

나머지 과정은 홈페이지에서 설명하는 데로 따라하면 된다. photorec 를 실행해서, 복구할 데이터가 있는 하드를 선택한 후, 복구할 파일 종류를 선택하고, 하드의 File Allocation Type (ext, fat, ntfs, etc)를 선택해서 진행하면 된다.

아래 GIF는 PhotoRec를 통해서 .isoOwn Custom Signitures 를 선택해서 복구하는 과정을 간단히 보여주고 있다.

18593934593_38fdf011f0_o.gif

Figure 1: Workflow of PhotoRec in Debian 7.8

Custom extensions: sami

fidentify 명령어가 모든 파일을 찾을 수 있는 것은 아니다. 아무 결과도 안 보이는 unknown으로 인식해서 복구 못 할 수 있다. 그렇지 않더라도 txt 로 인식하는 여러 파일 중 .srt 만 꼭 집어서 복구하고 싶은 경우도 있다. 지금부터, 인식 못하거나 java 로 인식하는 .smi 파일을 PhotoRec로 복구하고 싶은 경우에 fidentify 명령어가 인식하게 만드는 과정을 기술하려 한다.

  1. 테스트 삼아, fidentify 명령어로 example.smi 을 확인해 보면
    $ sudo fidentify example.smi
    

    아래와 같은 결과를 Bash에서 보거나

    example.smi: java
    

    아니면 아무 결과도 : 오른 편에 안보이거나 할 것이다. 이를 위의 표에서 unknown으로 표현하였다.

  2. 이를 인식하게 하려면, sami 파일의 hexadecimal (16진법) 정보를 우선 알아야 한다. Bash에서 아래 명령어를 실행하면
    $ hexdump -C example.smi | head
    

    다음과 같은 결과를 볼 수 있다.

    00000000  3c 53 41 4d 49 3e 0d 0a  3c 48 45 41 44 3e 0d 0a  |<SAMI>..<HEAD>..|
    00000010  3c .....
    

    물론, 여기서 계속 예로 사용하는 파일인 example.smi 는 사용자가 임의로 만든 것이 아니라, 실제 자막 정보를 가지고 있는 진짜 sami 파일이어야 한다.

  3. 이제 .photorec.sig 파일이 필요한데, 이미 있을 수도 있고 없을 수도 있다. 있으면 $ sudo find / -name *.photorec* 명령어로 찾을 수 있다.
    /root/.photorec.cfg
    /home/UserName/.photorec.sig
    
  4. 중요한 것은 /root/ 디렉터리 아래에 이 파일이 있어야 한다는 점인데, 없으면 하나 만들자.
    $ sudo touch /root/.photorec.sig
    
  5. 이제 mousepad나 emacs같은 적당한 에디터로 이 파일을 열어
    $ sudo mousepad /root/.photorec.sig
    

    아래와 같이 적거나

    smi 0 "<SAMI>"
    

    hexadecimal (16진법) 정보 그대로 적자

    smi 0 0x3c53414d493e0d0a3c484541443e0d0a
    

    위에서, smifidentify 명령어가 토해낼 결과이고 0 0x 이후는 hexdump 명령어로 알아낸 hexadecimal (16진법) 정보 중 첫 줄을 띄어쓰기 없이 적은 것이다.

  6. 이제 photorec 명령어가 sami 파일을 정확히 인식하는 것을 확인할 수 있을 것이다.
    $ sudo fidentify example.smi
    example.smi: smi
    

이제, 위의 GIF에서 보듯이 [File Opt] 안에서 가장 상위에 있는 Own Custom Signitures 를 스페이스바키로 선택하면, .photorec.sig 파일에 직접 써넣은 확장자의 파일을 복구할 수 있다.

Custom extensions: others

같은 방법으로 원하는 파일 확장자(extension)을 지정해서 PhotoRec로 복구할 수 있다. 이를테면, .dmg.sh 경우의 hexadecimal (16진법) 정보는 아래와 같다.

  • .dmg
    00000000  78 da 63 60 18 05 43 18  fc fb ff ff 1d 10 33 02  |x.c`..C.......3.|
    or
    00000000  78 01 63 60 18 05 43 38  04 fe fd ff ff 0e 88 19  |x.c`..C8........|
    or
    00000000  78 da 73 0d 62 62 60 60  a8 f0 62 18 05 23 12 00  |x.s.bb``..b..#..|
    or
    00000000  78 01 73 0d e2 60 60 60  64 4b 67 18 05 23 32 04  |x.s..```dKg..#2.|
    
  • .sh
    00000000  23 21 20 2f 62 69 6e 2f  73 68 0d 0a 23 0d 0a 23  |#! /bin/sh..#..#|
    or
    00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 0a 66 75 6e  |#!/bin/bash..fun|
    

내 경우, 원하는 모든 인식하지 못하는 unknown 파일들을 root/.photorec.sig 에 몽땅 적어 넣었다.

srt 0 0x310a30303a30313a35362c303238202d
smi 0 0x3c53414d493e0d0a3c484541443e0d0a
dmg 0 0x78da636018054318fcfbffff1d103302
dmg 0 0x780163601805433804fefdffff0e8819
dmg 0 0x78da730d62626060a8f0621805231200
dmg 0 0x7801730de2606060644b671805233204

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

Created: 2015-06-27 Sat 23:57

Emacs 24.3.1 (Org mode 8.2.10)

Friday, June 26, 2015

Jessie looks not good enough

Debian GNU/Linux Jessie

Debian GNU/Linux Jessie


이 문서는 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

Wheezy vs Jessie

지난 번에 Debian Wheezy를 설치한 2nd 컴을 날린 김에 Jessie(8.1)를 설치하고 열흘 정도 사용했다. 결론을 얘기하면, 나와는 안 맞는다.

다른 구체적인 것은 차지하고, 나의 sub-machine의 주요 용도는 동영상 제작과 재생이라는 점을 우선 말하고 싶다. 1.8GHz의 cpu에 2GB ram을 꽂은 5년 된 mini-pc에다가 동영상을 돌리고, 이런저런 잡다한 일을 하려다 보니, 가장 가벼운 XFCE desktop을 사용 중이다. XFCE의 기본 file browser인 Thunar는 한글명 파일 정렬이 제대로 안되어 KDE의 Dolphin을 주로 쓰고, 동영상 제작은 Handbrake 재생은 VLC를 이용한다. 동영상 재생의 경우, 4GB 이상이거나 Virtualbox까지 쓰면서 돌리기에는 컴이 너무 후져서 버벅거리는데, deb-multimedia에서 제공하는 버전의 VLC를 쓰면 어지간히 쓸만했다.

FYI) 하드웨어는 그대로 인데 VLC 버전을 생각보다 많이 탄다. 예를 들어, HD급 동영상 같은 경우 같은 하드웨어에서도 가능한 최신 버전의 VLC를 쓰면 원활히 재생되는 경우가 많다. SMPlayer도 다른 것들에 비해서는 월등하지만 VLC에 비해서는 한 수 아래다.

Jessie를 써보니, 일단 VLC가 버벅인다. HD급이 아닌데도 버벅인다. Debian의 기본 repository를 쓰던, deb-multimedia에서 제공하는 버전의 VLC를 쓰던, 상관없이 버벅인다. 직접 compile을 할까도 생각해봤지만, VLC Homepage에도 역시 VideoLAN답게 jessie에 관한 정보가 거의 없다. 더 이상 위험을 감수할 순 없었다. 둘째로, Dolphin이 너무 구리게 못 생겨졌다. 위에도 언급했다시피, 한글명 파일 때문에 Thunar는 쓸 수 없다. 그렇다. XFCE는 외적인 GUI(Graphic User Interface)는 염두에 없다. 다만 최상의 가벼움을 추구할 뿐. 나도 이 때문에 XFCE를 쓰는 것도 사실이다. 그래도 그렇지… Wheezy XFCE에서 Dolphin은 외관상 KDE에서와 차이가 없었다. 그런데, Jessie XFCE에서는 구려도 너무 구리다.

FYI) 사실 이 부분들은 Debian Jessie 문제이기 보다는 VideoLAN VLC와 KDE의 문제이긴 하다. 그러나 어쩌겠나. 매번 컴파일해서 쓸 수는 없잖은가? 그럴 거면, archlinux나 gentoo를 쓰지.

다 포기하고, Debian GNU/Linux Wheezy (7.8)로 돌아왔다. 모든 것이 완벽하다.


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

Created: 2015-06-26 Fri 23:45

Emacs 24.3.1 (Org mode 8.2.10)

Saturday, June 6, 2015

reinstall Debian

Debian 날리다

Debian 날리다


이 문서는 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

Hardware Systems

  • OSX installed : MacBook Pro(13-inch, Mid 2009) 2.53 GHz Intel Core 2 Duo
  • Debian installed : Zotac ZBOX ID12 Intel Atom D525

잘 쓰던 Debian을 이것저것 해보다가 완전히 날렸다.

처음에 emacs 24.3을 설치하다가 System directory (/)에 용량이 다 차면서, 부팅이 prompt로만 가능하게 되어버렸다. /usr directory를 /home/ 아래로 옮기고 symbolic link를 걸어서 어찌어찌 해결했다. (자세한 사항은 여기 참조)

부팅 시 VirtualBox 관련 error가 무수히 뜨긴 했지만 사용에는 문제가 없어서 그냥 쓰다가, 역시 Debian에 설치한 VirtualBox가 안되더라. 새 버전을 설치해보고 구글링도 해보았으나 실패, 아예 지우고 다시 설치하는 중, 별생각없이 /lib 아래에 뭔가를 지워버렸다. 부팅이 안된다!

애초에 Debian이 깔린 internal HD가 1 TB. 이를 살리려 이 기회에 2 TB external HD를 새로 구입하고 eSata2usb 케이블도 함께 구매해서 MacBook Pro에서 복구하기로 결정. Debian이 깔린 internal HD는 ext2에 LVM(Logical Volume Manager)로 포맷 되어있어서, MacBook Pro에 깐 VirtualBox에서 복구 시도. 4 GB 이상의 파일도 있어서, External HD는 exFAT으로 포맷하고, 이를 위한 package와 LVM 하드를 마운트시킬 package 등들을 VirtualBox의 Debian에서 설치한 후, 시도하였으나 매끄럽지 않았다. VirtualBox가 자꾸 얼었고, 그렇지 않더라도 전송 속도가 2.5 M/s 밖에 안 나올 정도로 너무 느렸다. 이 속도로 1 TB를 전송하려면, 50 시간 이상이 걸린다.

내 MacBook Pro에서 지원하는 usb port는 두 개이고 모두 usb 2.0이다. 여기에 하나는 external HD를 꽂고 다른 하나는 Debian이 깔린 internal HD를 eSata2usb cable로 연결해서 꽂고, VirtualBox에서 한다는 생각 자체가 어리석었다. 내 MacBook Pro이 usb 3.0을 지원한다면 얘기는 조금 달라질 수도 있었겠지만, 녀석은 나이가 많다. 다른 방법을 생각해야 했다.

17910546094_fcaeff2e78_o.png

가지고 있는 모든 저장장치를 동원하기로 했다. 2 GB SDcard에 리눅스 설치 디스크 만들어서, 8 GB usb에 리눅스를 설치했다. 애초에 Debian이 깔린 internal HD는 그대로 eSata로 연결해 놓은 후, 다른 리눅스를 설치한 usb로 부팅시켜서, usb에 꽂은 2 TB 외장하드에 복구 중이다. 내 second machine도 나이가 많아 usb 2.0 port만 여섯 개 있지만, HD 한 녀석은 eSata에 연결되어 있어서 전송 속도가 최소 20 M/s는 나온다. 이 기세라면 내일은 1 TB internal HD를 밀고 다시 Debian GNU/Linux를 설치할 수 있을 것 같다.

데이터 전송은 Thunar나 Dolphin같은 file browser에서 하지 않고, gcp 명령을 통해서 하고 있다. File browsers에서는 자꾸 귀찮은 Notifications가 뜨고, cp 명령어는 전송 과정을 percentage로 표현하지 않아서, Bash에서 gcp 를 쓰고 있다. usb에 설치한 Linux distro는 kubuntu 12.04인데, 따로 LVM mount를 위해 packages를 설치할 필요는 없었다. exFAT mount를 위해서 exfat-fuse 를 설치했고, 현재까지 원활하다.

18345473688_0ca1168a86_o.png

혹이라도 나 같은 상황에 처해서 리눅스 안의 데이터를 복구해야 할 상황이라면, 원활한 전송 속도 구현을 위해 다음과 같이 하는 것이 한 방법이다. 총 세 개의 저장 장치가 필요하다.

  1. 우선, 두 개의 저장 장치가 필요하다. 하나는 2 GB 정도도 상관 없지만, 다른 하나는 8 GB 정도는 되어야 한다.
  2. 용량이 적은 녀석에 ubuntu/kubuntu bootable usb 만든다. 저장 장치가 usb던 sd card던 뭐던 상관없다.
  3. 두 저장 장치 모두 꼽고, bias에서 bootable usb로 부팅한다.
  4. 8 GB 정도 되는 다른 저장 장치에 ubuntu/kubuntu를 설치한다.
  5. bias에서 새로 설치한 ubuntu/kubuntu로 부팅한다.
  6. 세 번째 저장 장치를 꽂아, 이곳에 데이터를 복구한다. 4 GB 이상의 파일이 있다면, exFAT, ext2, ntfs 등으로 포맷했어야 한다.
  7. 데이터 전송은 Bash (or Konsole)에서 cp (or gcp)를 이용한다.

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

Created: 2015-06-06 Sat 21:05

Emacs 24.3.1 (Org mode 8.2.10)

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)