HTML 모드에서 기본적으로 들여쓰기시 스페이스 두개를 사용하도록 되어있습니다. 이것을 탭 문자를 사용하도록 설정하는 방법입니다.


.emacs 파일에 아래와 같이 정의합니다.

(add-hook 'html-mode-hook
          (lambda()
            (setq sgml-basic-offset 4) ; 사용 중인 탭 사이즈가 들어갑니다.
            (setq indent-tabs-mode t)))


<테스트 환경> 
OS : Windows 7 
Emacs 버전 : Emacs 24.3 윈도우
,
프롬프트로부터 값을 입력받아 처리하는 함수 정의입니다.
(defun <함수명> ()
  (interactive (let ((<변수명>  (read-string "<프롬프트 문자열>")))
                     <처리할 구문>
                     ))
)


<테스트 환경> 
- OS : Windows 7 
- Emacs 버전 : Emacs 24.3 윈도우
,

태그명을 입력받아 한쌍의 열기/닫기 태그를 한번에 입력해주는 함수 정의입니다.

(defun enter-tag ()
  (interactive (let ((tag-name  (read-string "Tag name?")))
                 (insert (format "<%s>\n</%s>" tag-name tag-name))
                 ))
  )


<테스트 환경>
- OS : Windows 7
- Emacs 버전 : Emacs 24.3 윈도우
,

(point)

현재 위치를 반환. 1부터 시작. 한글도 1씩 할당.

(point-min)

최소 위치를 반환.

(point-max)

최대 위치를 반환.

(goto-char pos)

커서를 해당 위치로 이동. (pos: 이동할 위치.)

(goto-line line)

커서를 특정 행 번호로 이동. (line: 이동할 행번호.)

(forward-line line)

커서를 현재로부터 주어진 라인 수만큼 이동한다. (line: 이동할 라인 수.)

(search-forward "target-string" limit-of-search fail-fn repeat-count)

문자열을 검색하여 발견된 검색어 바로 뒤에 커서를 위치시킨다. 발견시 t를 반환한다.

  • target-string : 검색어.
  • limit-of-search : 최대 검색 범위를 위치로 제공하면 현재 위치에서 해당 위치 사이에서 검색. (nil : 제한 없음.)
  • fail-fn : 검색 실패시 실행할 구문 또는 nil(signal을 발생시킴) 또는 t(무시)로 설정할 수 있다.
  • repeat-count : 검색 횟수. 없으면 1회, 마이너스이면 역방향 검색어.

(number-to-string number)

숫자를 문자열로 변환. (number : 변환할 숫자.)

(delete-char size)

커서로부터 순방향으로 사이즈만큼 지운다. (size : 지울 사이즈.)

(delete-backward-char size)

커서로부터 역방향으로 사이즈만큼 지운다. (size : 지울 사이즈.)

(length str)

문자열의 길이를 반환한다. 한글의 경우도 1로 계산. (str : 문자열.)

(string-width str)

문자열의 보이는 사이즈를 반환한다. 한글의 경우는 2로 계산. (str : 문자열.)

(insert str)

현재 위치에 문자열을 삽입. (str : 삽입할 문자열.)

(sit-for sec)

메세지 등을 출력한 수 일정 시간 대기한다. 키입력이 들어오면 해제됨. (sec : 대기할 초 수)

(sleep-for sec)

메세지 등을 출력한 수 일정 시간 대기한다. 키입력이 들어와도 해제안됨. (sec : 대기할 초 수)

(thing-at-point 'word)

커서가 위치하는 곳의 단어를 얻는다.

(thing-at-point 'line)

커서가 위치하는 곳의 한 라인을 얻는다. 개행 문자도 포함.

(message string), (message format-string ...)

메세지를 출력한다.

(kill-new string)

문자열을 클립보드에 저장한다. (string : 저장할 문자열)

(yank)

클립보드의 내용을 현재 위치에 붙여넣는다.

(cl-search str1 str2)

첫번째 문자열이 두번째 문자열에 포함되는지 검사한 후 발견 위치(0부터 시작)를 반환한다. 발견되지 않을 경우 nil을 반환한다. 문자열 뿐만 아니라 시퀀스 전체에 대해 사용가능하다.

(sort line-list 'string<)

문자열의 리스트를 정렬한다. (line-list : 정렬할 문자열 리스트)

(substring string from to)

문자열의 일부를 자른다. (string : 자를 문자열, from : 시작 위치(0부터 시작), to : 끝 위치)

(format-time-string "%Y-%m-%d")

날짜 포맷에 일치하는 현재 날짜를 반환한다.

(read-string str)

미니 버퍼로부터 문자열을 입력받는다. (str : 입력시 미니 버퍼에 표시할 메세지)

(line-beginning-position)

현재 줄의 시작 위치를 반환한다.

(line-end-position)

현재 줄이 끝나는 위치를 반환한다.

(beginning-of-line)

현재 줄의 시작 위치로 커서를 이동시킨다.

(end-of-line)

현재 줄이 끝나는 위치로 커서를 이동시킨다.

region-beginning

선택 영역의 시작 위치를 반환한다.

region-end

선택 영역이 끝나는 위치를 반환한다.

use-region-p

선택 영역의 사용 여부를 반환한다.

buffer-file-name

[변수] 현재 버퍼의 절대 경로

buffer-file-truename

[변수] 현재 버퍼의 경로 (~/..와 같이 C-x f, C-x C-b에서 실제로 보여지는 경로)

default-directory

[변수] 현재 버퍼의 기본 디렉토리


<테스트 환경>
 - OS : Windows 7 (32bit)
 - Emacs 버전 : Emacs 24.3 윈도우용


,

Emacs의 가장 큰 차별점이라고 할 수 있는 emacs lisp를 활용한 버퍼 현실 조작에 필요한 내용을 정리해보았다.


사용자 함수 정의

  • .emacs 파일에 아래와 같은 방법으로 사용자 함수를 정의할 수 있다.
    (defun 함수명 ()
     (interactive)
     함수 내용
     )
    
    다음은 미니버퍼창에 간단히 메세지를 표시하는 예제이다.
    (defun my-func ()
      (interactive)
      (message "hello")
      )
    
  • 이렇게 정의한 함수는 언제든지 M-x를 누른 후, 함수명을 입력하여 실행할 수 있다.
  • 그런데 사용자 함수를 .emacs 파일에 직접 정의할 경우, 함수 내부에서 한글 사용시 문제가 발생한다. 이 경우, <emacs 설치 경로>/site-lisp 위치에 외부 파일을 생성하고 이 파일에 사용자 함수를 정의한 뒤, 아래와 같이 .emacs 파일에서 이를 읽어들이면 문제가 생기지 않는다.
    (load-library "외부 파일명")
    
    ==> [참고] UTF–8 한글 정상적으로 표시되도록 설정 방법
  • Emacs 실행 중에 위의 외부 정의 파일을 수정했을 경우에, 수정 내용을 바로 반영하기 위해서는, M-x를 누른 후 load-file을 입력하고 해당 파일의 경로를 입력하면 된다.

버퍼 조작 관련 유용한 함수들

외부 프로그램에서 함수 실행

  • emacsclient 실행시에 -e 인수를 사용하면 외부에서 내장 함수 혹은 사용자 함수를 실행할 수 있다.
     
    emacsclientw.exe -e "emacs lisp 표현식"
    
  • 윈도우 환경이라면, 아래와 같은 내용으로 배치파일을 작성하여 사용하는 것도 편리하다.
    emacsclientw.exe -n -e "%1"
    


    <테스트 환경>
     - OS : Windows 7 (32bit)
     - Emacs 버전 : Emacs 24.3 윈도우용
    
,
  1. .emacs 파일에 다음과 같이 함수를 정의한다.
    (defun delete-this-buffer-and-file ()
      "Removes file connected to current buffer and kills buffer."
      (interactive)
      (let ((filename (buffer-file-name))
            (buffer (current-buffer))
            (name (buffer-name)))
        (if (not (and filename (file-exists-p filename)))
            (error "Buffer '%s' is not visiting a file!" name)
          (when (yes-or-no-p "Are you sure you want to remove this file? ")
            (delete-file filename)
            (kill-buffer buffer)
            (message "File '%s' successfully removed" filename)))))
    


  2. 위 함수에 키를 바인딩한다.(C-c k)
    (global-set-key (kbd "C-c k") 'delete-this-buffer-and-file)
    


<테스트 환경>
OS : Windows 7
Emacs 버전 : Emacs 24.3 윈도우
,

2017년 2월 서울

현재 emacs용 clojure-mode의 최신 버전의 최소 emacs 요구 버전이 24.4라서 24.3.1 버전에서는 설치가 되지 않는다. emacs package-install에서 구버전을 설치할 수 있는 방법은 없어서, 구 버전(5.4)을 수동으로 설치하는 방법에 대해 정리해본다.

  1. 다음 위치에서 clojure mode 5.4 버전을 다운 받는다.


  2. 압축을 풀어서 <emacs 설치 디렉토리>/site-lisp 밑에 복사한다.


  3. .emacs 파일에 다음과 같이 추가한다. (역슬래시가 아닌 슬래시임에 주의!)
    (add-to-list 'load-path "<emacs 설치 디렉토리>/site-lisp/clojure-mode-5.4.0/")
    (require 'clojure-mode)
    


참고 사이트


테스트 환경 
 - OS : Windows 7
 - Emacs 버전 : Emacs 24.3.1 윈도우


,

설치하기

  1. M-x를 누른 후, list-package를 입력한다.

  2. markdown-mode를 찾아서 설치한다.


사용법

  1. Markdown 모드로 전환 : M-x를 누른 후, markdown-mode를 입력한다.

  2. GitHub 스타일의 markdown 모드(GitHub Flavored Markdown, GFM)로 전환 : M-x를 누른 후, gfm-mode를 입력한다.


Markdown 요소 입력 단축키

  1. Markdown / GFM 모드에서 아래의 단축키들을 사용하여 Markdown 요소들을 한번에 추가/수정하는 것이 가능하다.

    - C-c C-t 1 : 1단계 제목 요소 입력
    - C-c C-t 2 : 2단계 제목 요소 입력
    - C-c C-s e : 이탤릭체 요소 입력
    - C-c C-s s : 볼드체 요소 입력
    - C-c C-s b : 인용 블럭 변환
    - C-c C-s c : 코드 블럭 변환
    - C-c C-a l : 인라인 링크 입력
    - C-c C-j : 리스트 아이템 입력
    - C-c - : 가로줄 입력
    - C-c C-k : 입력한 요소를 한번에 삭제
    
  2. 보다 많은 단축키에 대해서는 참고 사이트나 emacs 상의 Markdown 메뉴를 참고하도록 한다.


HTML 변환 관련 단축키


Markdown –> HTML 변환 기능을 지원하기 위해 다음 단축키들을 제공한다.

- C-c C-c m : 변환한 결과를 다른 버퍼창을 통해 보여준다.
- C-c C-c e : 변환한 결과를 HTML 파일로 저장한다.
- C-c C-c p : 변환한 결과를 브라우저를 통해 보여준다.

[참고] 많은 경우, 생성된 HTML에 charset 설정이 되어있지 않기 때문에 한글 사용시 제대로 보이지 않을 수 있다. <head>~</head> 사이에 아래와 같은 형태로 인코딩 지정을 추가하면 한글을 제대로 볼 수 있다.

<head>
...
<meta charset="utf-8">
</head>


외부 변환 프로그램 세팅


HTML 변환 기능을 사용하기 위해서는 외부 변환 프로그램 세팅이 필요하다. 변환 프로그램은 플랫폼의 종류에 따라 여러가지가 있지만 여기서는 윈도우 환경 등에서 사용할 수 있는 MultiMarkdown 프로그램을 사용하겠다.

  1. http://fletcherpenney.net/multimarkdown/을 방문하여 다운로드 페이지에서 프로그램을 다운받아 설치한다. (스페이스가 포함되지 않은 경로에 설치하여야 한다.)
  2. .emacs 파일에 다음과 같이 MultiMarkdown 실행파일의 경로를 추가한다.

    (setq markdown-command "C:/MultiMarkdown/bin/multimarkdown.exe")


Markdown Preview Mode 설치


수동으로 Markdown을 HTML으로 변환한 결과를 확인하려면 번거로운 점도 있고, 위에서 언급한 한글 인코딩 문제도 있기 때문에 markdown preview mode도 같이 설치할 것을 추천한다. 패키지 리스트에서 markdown-preview-mode를 검색해서 설치한다.


설치 후, Markdown 모드에서 M-x markdown-preview-mode를 입력하면 브라우저 창이 뜨고, 저장시 실시간으로 변환 결과를 확인할 수 있다. 물론 한글 문제도 없다.


Preview mode를 종료하려면, M-x markdown-preview-cleanup을 입력하면 사용된 웹서버가 종료된다.


참고 사이트


<테스트 환경>
OS : Windows 7
Emacs 버전 : Emacs 24.3 윈도우


,