아래의 내용은 이것저것 짜집기해서 만들어낸 결과 이므로 모든 emacs버전에 적용되는 지는 모르겠다.
일단 나의 이맥스는 잘 동작한다.
현재 사용하고 있는 윈도우의 이맥스 버전이다.
This is GNU Emacs 23.0.0.1 (i386-mingw-nt5.1.2600)
of 2007-08-19 on TPAD
EmacsW32를 사용해 봤으나 이상하게 불안했다.
그래서 ntemacs를 다운받아서 사용했다.(언젠가는 꼭 컴파일해서 사용해야겠다.)
오늘까지 설정한 결과이다.
일단 새로운 입력기 (hangul.el)을 넣어서 입력자체가 "아햏햏" 같은 것이 된다.
문제는 저장과 출력이다.
저장(C-x C-s)의 경우 기본적으로 CP949로 되고 "아햏햏"과 같이 확장문자(?)가 있는 경우 이맥스가 친절히 물어준다.
그때 간단히 utf-8로 답하면 된다.
문제는 출력의 경우이다.
여러곳의 소스를 참고해서 다음과 같은 폰트 셋을 만들었다.
utf-8을 지원하는 편집기에서 "아햏햏"을 넣고 utf-8로 저장한다.
이를 이맥스에서 읽어 온다.
"햏"자(네모박스로 출력된다.) 위에 커서를 두고 C-u C-x = 을 입력하면 다음과 같은 결과가 나온다.
charset이 unicode-bmp이다 따라서 fontset을 만들때 unicode-bmp에 대한 폰트를 지정해 주었다.
위의 display에 보면 font가 지정되어 있지 않다. 이를 적절히 잘 지정하면 네모박스에 글씨가 보이고 아래와 같이 display에 대한 폰트 정보를 보여준다. 자세한 사항은 dotemacs의 fontset을 참고하기 바란다.
다음은 .emacs를 인용한다.
자세한 사항을 주석을 참고.(앞으로 주석을 최대한 자세히 달아보자)
일단 나의 이맥스는 잘 동작한다.
현재 사용하고 있는 윈도우의 이맥스 버전이다.
This is GNU Emacs 23.0.0.1 (i386-mingw-nt5.1.2600)
of 2007-08-19 on TPAD
EmacsW32를 사용해 봤으나 이상하게 불안했다.
그래서 ntemacs를 다운받아서 사용했다.(언젠가는 꼭 컴파일해서 사용해야겠다.)
오늘까지 설정한 결과이다.
일단 새로운 입력기 (hangul.el)을 넣어서 입력자체가 "아햏햏" 같은 것이 된다.
문제는 저장과 출력이다.
저장(C-x C-s)의 경우 기본적으로 CP949로 되고 "아햏햏"과 같이 확장문자(?)가 있는 경우 이맥스가 친절히 물어준다.
그때 간단히 utf-8로 답하면 된다.
문제는 출력의 경우이다.
여러곳의 소스를 참고해서 다음과 같은 폰트 셋을 만들었다.
utf-8을 지원하는 편집기에서 "아햏햏"을 넣고 utf-8로 저장한다.
이를 이맥스에서 읽어 온다.
"햏"자(네모박스로 출력된다.) 위에 커서를 두고 C-u C-x = 을 입력하면 다음과 같은 결과가 나온다.
character: _ (54671, #o152617, #xd58f)
preferred charset: unicode-bmp
(Unicode Basic Multilingual Plane (U+0000..U+FFFF))
code point: 0xD58F
syntax: w which means: word
buffer code: #xED #x96 #x8F
file code: #xED #x96 #x8F (encoded by coding system utf-8-dos)
display: no font available
Character code properties are not shown: customize what to show
There are text properties here:
auto-composed t
preferred charset: unicode-bmp
(Unicode Basic Multilingual Plane (U+0000..U+FFFF))
code point: 0xD58F
syntax: w which means: word
buffer code: #xED #x96 #x8F
file code: #xED #x96 #x8F (encoded by coding system utf-8-dos)
display: no font available
Character code properties are not shown: customize what to show
There are text properties here:
auto-composed t
charset이 unicode-bmp이다 따라서 fontset을 만들때 unicode-bmp에 대한 폰트를 지정해 주었다.
위의 display에 보면 font가 지정되어 있지 않다. 이를 적절히 잘 지정하면 네모박스에 글씨가 보이고 아래와 같이 display에 대한 폰트 정보를 보여준다. 자세한 사항은 dotemacs의 fontset을 참고하기 바란다.
character: 햏 (54671, #o152617, #xd58f)
preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
code point: 0xD58F
syntax: w which means: word
buffer code: #xED #x96 #x8F
file code: #xED #x96 #x8F (encoded by coding system utf-8-dos)
display: by this font (glyph code)
-outline-새굴림-normal-r-normal-normal-15-112-96-96-p-*-iso10646-1 (#xD58F)
Character code properties are not shown: customize what to show
There is an overlay here:
From 1 to 12
face highlight-current-line-face
There are text properties here:
auto-composed t
preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
code point: 0xD58F
syntax: w which means: word
buffer code: #xED #x96 #x8F
file code: #xED #x96 #x8F (encoded by coding system utf-8-dos)
display: by this font (glyph code)
-outline-새굴림-normal-r-normal-normal-15-112-96-96-p-*-iso10646-1 (#xD58F)
Character code properties are not shown: customize what to show
There is an overlay here:
From 1 to 12
face highlight-current-line-face
There are text properties here:
auto-composed t
다음은 .emacs를 인용한다.
자세한 사항을 주석을 참고.(앞으로 주석을 최대한 자세히 달아보자)
;; 한글 저장은 어떻게 되는 것인가?
;;
;; 버퍼에 쩍힌 영역에 따라 다르게 저장된다. 현재 default는 CP949로
;; 저장되며, 만약 확장영역의 한글이 적히면 utf-8로 저장할 것인지
;; 물어본다.
(setq user-mail-address "hosung_kim@samsung.com"
user-full-name "HoSung Kim")
(setq inhibit-startup-message t)
(setq byte-compile-verbose nil
byte-compile-warnings nil)
(add-to-list 'load-path "~/elisp")
;;;=====================================================================
;;; hangul 설정 http://sylphong.egloos.com/1787602
;;;============
;;; 1. 새로운 한글 입력기를 load한다.(utf-8지원)
;;; 2. 윈도우에서 사용할 fontset을 만든다.
;;; 3. font dialog를 unix형태의 것으로 설정한다.
;;; 4. theme 설정
;;;
;;; 날개셋이 Shift-Space를 사용하므로 IME를 원래 것으로 변경한다.
;;; (Ctrl-Shift-1로 가능)
;;; lisp/language/korea-util.el -> korean-key-bindings에 보면
;;; 아래와 같이 key-mapping이 되어 있다.
;;; Shift-SPACE : toggle-korean-input-method
;;; Ctrl-f9 : quail-hangul-switch-symbol-ksc
;;; f9 : quail-hangul-switch-hanja
;;;=====================================================================
(require 'hangul)
(set-language-environment "Korean")
(if (eq window-system 'w32)
(progn
;; http://oldpie.yoonkn.com/cgi-bin/moin.cgi/EmacsFontSet
;; http://oldpie.yoonkn.com/cgi-bin/moin.cgi/dreamstorm/emacs
;; http://www.emacswiki.org/cgi-bin/wiki/FontSets
;; by hosung 2008-05-20
;; http://www.gnu.org/software/emacs/windows/faq5.html#windows-font
;; M-x set-default-font <RET> <TAB>하면 폰트리스트가 나온다.
;; 폰트크기 18은 맨 첫줄을 따라 가는 것 같다. ksc5601에서 작게 해도 한글이 작아지지는 않는다.
;; ksc5601에서 c는 실제 p로 나오는데 어떤 것을 해도 상관 없다.
;; 맨끝의 0을 *로 하면 정상적으로 폰트가 출력되지 않는다.
;;
;; 이와 같이 ksc5601로 하면 확장문자에 대하여 네모박스로 출력되는 문제가 있다.
;; Consolas는 ms로 부터 다운로드 한다.
;;http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&displaylang=en
;; (create-fontset-from-fontset-spec
;; "-*-Consolas-normal-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
;; korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
;; unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
;; ' (medium))
;; (create-fontset-from-fontset-spec
;; "-*-Consolas-bold-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
;; korean-ksc5601:-outline-새굴림-bold-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
;; unicode-bmp:-outline-새굴림-bold-r-*-*-*-*-*-*-c-*-iso10646-1"
;; ' (bold))
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-11-*-*-*-c-*-fontset-iso8859_1_11,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-12-*-*-*-c-*-fontset-iso8859_1_12,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-13-*-*-*-c-*-fontset-iso8859_1_13,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-14-*-*-*-c-*-fontset-iso8859_1_14,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-15-*-*-*-c-*-fontset-iso8859_1_15,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-16-*-*-*-c-*-fontset-iso8859_1_16,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-17-*-*-*-c-*-fontset-iso8859_1_17,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-18-*-*-*-c-*-fontset-iso8859_1_18,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-19-*-*-*-c-*-fontset-iso8859_1_19,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-20-*-*-*-c-*-fontset-iso8859_1_20,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-21-*-*-*-c-*-fontset-iso8859_1_21,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-22-*-*-*-c-*-fontset-iso8859_1_22,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-23-*-*-*-c-*-fontset-iso8859_1_23,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-24-*-*-*-c-*-fontset-iso8859_1_24,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-25-*-*-*-c-*-fontset-iso8859_1_25,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-26-*-*-*-c-*-fontset-iso8859_1_26,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-27-*-*-*-c-*-fontset-iso8859_1_27,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-28-*-*-*-c-*-fontset-iso8859_1_28,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(setq initial-frame-alist '((top . 10) (left . 100)))
(setq default-frame-alist
(append
'(
;;(font . "-outline-Bitstream Vera Sans Mono-normal-r-normal-normal-14-*-*-*-c-*-iso8859-1")
;(font . "-*-Consolas-normal-r-*-*-14-*-*-*-c-*-fontset-iso8859_1_14")
(font . "fontset-iso8859_1_15");; 위와 같이 full로 적기 않고 fontset이후만 적어도 된다.
(width . 100)
(height . 45)
;;(cursor-type . (bar . 1))
)
default-frame-alist))))
;; Tell NT Emacs to use a font menu similar to the one it uses on Unix
(setq w32-use-w32-font-dialog nil) ;; Shift mouse 1 click시 윈도우 폰트
;; 다이얼로그 대신 Unix시스템과 같은
;; 폰트 선택리스트가
;; 나온다. fontset에 내가 등록한
;; 폰트가 나온다.
(add-to-list 'load-path "~/elisp/color-theme/")
(require 'color-theme)
(color-theme-initialize)
;(color-theme-clarity)
(load-file "~/elisp/color-theme/color-theme-colorful-obsolescence.el")
(color-theme-colorful-obsolescence)
;;;=====================================================================
;;; 각종 외관에 관한 설정
;;;=====================================================================
(global-font-lock-mode 1) ; syntanx highlight
(setq font-lock-maximum-decoration t)
(transient-mark-mode t) ; marking highlight
(show-paren-mode t) ; 짝이 맞는 괄호 보여준다
(delete-selection-mode 1) ; 윈도우처럼, 선택된 reging을 EL로
; 지우거나, 다른 글자를 타이핑할때 즉시
; 지운다.
;;(setq-default truncate-lines t) ; 화면을 벗어나는 긴 줄처리 toggle-truncate-lines 참고
(setq frame-title-format (list "GNU Emacs " emacs-version "@" system-name " - " '(buffer-file-name "%f" "%b")))
(setq icon-title-format frame-title-format)
;;; 어떤 함수를 수정중인지 modeline에 표현
;;; semantic-stickyfunc-mode 보다는 이게 보기 좋다
(which-function-mode 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 외관 모양
(scroll-bar-mode -1)
(tool-bar-mode -1)
;;(menu-bar-mode -1) ;; Ctrl+right mouse
(line-number-mode 1) ; mode line 에 라인수를 표시한다
(column-number-mode 1) ; mode line 에 컬럼을 표시한다(기본이 아니더라)
;;(display-time) ;; NTEmacs가 죽는다??
;; from http://www.emacswiki.org/cgi-bin/wiki/BufferMenu
(global-set-key (kbd "C-x C-b") 'ibuffer)
(global-set-key (kbd "M-g") 'goto-line)
;;; ido-mode(Interactive Do)
;;; http://www.emacsblog.org/2008/05/19/giving-ido-mode-a-second-chance/
;;; Flex or fuzzy matching is the ability to match any item containing
;;; the characters in the given sequence. For example, “mwc” might
;;; match a file named “my_wicked_class.rb.”
(require 'ido)
(ido-mode t)
(setq ido-enable-flex-mating t) ; fuzzy matching is a must have
(defun recentf-open-files-compl ()
(interactive)
(let* ((all-files recentf-list)
(tocpl (mapcar (function
(lambda (x) (cons (file-name-nondirectory x) x))) all-files))
(prompt (append '("File name: ") tocpl))
(fname (completing-read (car prompt) (cdr prompt) nil nil)))
(find-file (cdr (assoc-ignore-representation fname tocpl)))))
(global-set-key "\C-x\C-r" 'recentf-open-files-compl) ;; override read-only
;; (ido-everywhere 1)
;; (setq ido-use-filename-at-point 'guess
;; ido-use-url-at-point t)
;; ;;(iswitchb-mode 1)
;;; ======================================================================
;;; highlight-current-line.el
;;; http://www.emacswiki.org/cgi-bin/wiki/HighlineMode 이걸로 바꾸면?
;;; ======================================================================
;;; 커서가 있는 라인을 빛나게 한다.
;;(when window-system
;; (require 'highlight-current-line)
;; (highlight-current-line-on t)
;; (highlight-current-line-set-bg-color "gray20"))
;; hippie-expand
;;;http://trey-jackson.blogspot.com/2007/12/emacs-tip-5-hippie-expand.html
(global-set-key (kbd "M-/") 'hippie-expand)
(setq hippie-expand-try-functions-list
'(try-expand-dabbrev
try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill
try-complete-file-name-partially try-complete-file-name
try-expand-all-abbrevs try-expand-list try-expand-line
try-complete-lisp-symbol-partially try-complete-lisp-symbol))
;;; ======================================================================
;;; Tabbar
;;; http://www.emacswiki.org/cgi-bin/wiki/TabBarMode
;;; http://sourceforge.net/projects/emhacks/
;;; ======================================================================
(require 'tabbar)
;; Remove this if you want separated by mode
(setq tabbar-buffer-groups-function
(lambda (b) (list "All Buffers")))
;; Don't show *buffers* in the tabbar
(setq tabbar-buffer-list-function
(lambda ()
(remove-if
(lambda(buffer)
(find (aref (buffer-name buffer) 0) " *")) (buffer-list))))
(tabbar-mode)
(global-set-key [(control shift tab)] 'tabbar-backward)
(global-set-key [(control tab)] 'tabbar-forward)
;;(global-set-key [(meta right)] 'bury-buffer) ;; forward move buffer
;;(global-set-key [(meta left)] 'ubury-buffer);; backward move buffer
;;; tool-bar mode
(require 'tool-bar+)
(tool-bar-pop-up-mode)
;;; menu-bar mode
(eval-after-load "menu-bar" '(require 'menu-bar+))
;; function to reload .emacs 2008.01.24
(defun reload-dotemacs ()
"Reload .emacs"
(interactive)
(load-file "~/.emacs"))
;; TODO, BUG 등에 강조표시
(font-lock-add-keywords 'c++-mode
'(("\\<\\(FIXME\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(TODO\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(BUG\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(NOTE\\):" 1 c-nonbreakable-space-face prepend)))
;;;=====================================================================
;;; AUCTeX
;;; http://physics.kyunghee.ac.kr/~reds/Hpack_Project/k-download.htm
;;; http://www.gnu.org/software/auctex/download-for-windows.html 에서
;;; Precompiled AUCTeX for Emacs를 다운 받아 압축을 푼 후 Emacs가 설치된
;;; 디렉토리로 복사한다.
;;; -*-주의사항-*- info의 dir은 복사하지 말고 원본에 추가해야한다.
;;;=====================================================================
(setq TeX-auto-save t)
(setq TeX-parse-self t)
;; If use \include or \input, for multi-file document.
(setq-default TeX-master nil)
;(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
;(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
;;settings for bib-cite.el
(autoload 'turn-on-bib-cite "bib-cite")
;(add-hook 'LaTeX-mode-hook 'turn-on-bib-cite)
;; '(TeX-bar-LaTeX-buttons (quote (open-file kill-buffer save-buffer cut copy paste undo [separator nil] latex next-error view bibtex)))
;; '(TeX-newline-function (quote newline-and-indent))
(add-hook 'LaTeX-mode-hook
(function
(lambda ()
;; bib-cite
(turn-on-auto-fill)
(turn-on-reftex)
(turn-on-bib-cite)
(outline-minor-mode)
(TeX-source-specials-mode 1)
;;(TeX-newline-function (quote reindent-then-newline-and-indent))
;; PDF파일이 있으면 emacs가 자동으로 PDF mode를 on해서
;; pdflatex로 컴파일하게 된다. 이것을 disalbe한다.
;; 제대로 동작하지 않는다.
;; 2006-07-01
;; 파일 Local Variables에 TeX-PDF-mode: nil을 추가한다.
(TeX-PDF-mode t)
;; http://physics.kyunghee.ac.kr/~reds/Hpack_Project/faq.htm 확장자에 대한 이야기가 나온다.
;; - \site-lisp\auctex\tex.el 에서 확장자를 지정해준다.
;; 아래에서 %a에 pdf를 추가한 것이다.
(add-to-list 'TeX-expand-list '("%a" file "pdf" t))
;; (add-to-list 'TeX-command-list
;; (list "LaTeX" "latex --src-specials \\nonstopmode\\input{%s}"
;; 'TeX-run-LaTeX nil t))
(add-to-list 'TeX-command-list
(list "TeXify" "texify --src %t" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "Ghostview" "C:\\PROGRA~1\\Ghostgum\\gsview\\gsview32.exe %f"
'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "dviPS" "dvips %d -o %f"
'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "dvipdfm" "dvipdfmx %d" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "BibTeX" "bibtex %s" 'TeX-run-BibTeX nil nil))
;; (add-to-list 'TeX-command-list
;; (list "Index" "makeindex %s" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "dviPS-landscape" "dvips %d -t landscape -o %f" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "Check" "lacheck %s" 'TeX-run-compile nil t))
;; (add-to-list 'TeX-command-list
;; (list "GS PDFView" "C:\\gs\\Ghostgum\\gsview\\gsview32.exe %a" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "Acrobat" "C:\\PROGRA~1\\Adobe\\ACROBA~2.0\\Reader\\AcroRd32.exe %a" 'TeX-run-command nil t))
;;(list "Acrobat" "AcroRd32.exe %a" 'TeX-run-command nil t)
(add-to-list 'TeX-command-list
(list "Foxit" "C:\\PROGRA~1\\FOXITS~1\\FOXITR~1\\FOXITR~1.EXE %a" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DVIPDFMx" "dvipdfmx %d" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "ko-Index" "komkindex -s kotex %s" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "DVISearch" "yap.exe -1 -s %n%b %d" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DVISearch" "c:\\KC2007\\TeX\\dviout\\dviout.exe -1 %d # %n %b" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DviOut" "c:\\KC2007\\TeX\\dviout\\dviout.exe %d"
'TeX-run-command nil t))
;; `pdflatex -src-specials -interaction=nonstopmode "\input" "csi.tex"
(add-to-list 'TeX-command-list
(list "PDFLaTeX" "pdflatex -src-specials -interaction=nonstopmode %t"
'TeX-run-command nil t))
;;; key-binding
(define-key LaTeX-mode-map [f9] 'do-LaTeX)
(define-key LaTeX-mode-map [f10] 'do-DVISearch)
(define-key LaTeX-mode-map [f11] 'do-DVIPDFMx)
)))
(defun do-LaTeX ()
"LaTeX the curent file."
(interactive)
(TeX-command "LaTeX" 'TeX-master-file))
(defun do-DVISearch ()
"Forward search LaTeX the current file position."
(interactive)
(TeX-command "DVISearch" 'TeX-master-file))
(defun do-DVIPDFMx ()
"Running DVIPDFMx"
(interactive)
(TeX-command "DVIPDFMx" 'TeX-master-file))
;; if you have a network connection with UNIX like environment
;; take care of CR/LF disabling if NTemacs manages (load/save) files on it
;; ftp://ftp.sunet.se/pub/os/Win32/ntEmacs/docs/ntemacs.html#translation
(load "untranslate")
;(add-untranslated-filesystem "d:") ; d: is a UNIX drive
;;if you encounter a file with ^M or ... at the end of every line,
;; this means a worng copy by samba or floppy disk of the DOS file to UNIX.
;; get rid of them by pressing [F5]
;;(global-set-key [f5] 'cut-ctrlM) ; cut all ^M.
(defun cut-ctrlM ()
"Cut all visible ^M."
(interactive)
(beginning-of-buffer)
(while (search-forward "\r" nil t)
(replace-match "" nil t))
)
;; use ISPELL on PC (see http://cat.rpi.edu/~tibbetts/ispell_toc.html
;; fot the installation procedure)
;; you don't need to add c:\ispell4\exe to your PATH, and
;; you don't need to copy or move any file after unzipping
;; if you define ispell-command and ispell-look-command properly.
;; M-$ for ispell word under cursor, M-x ispell-buffer for whole buffer
;; see also pull-down menu <Edit>, <Spell>, <Check ...>.
;; For ispell-3.2.06-w32 by Suk-Ho Hong
;; download http://examples.oreilly.com/gnu3/ispell.zip version 3.1.20
;; TODO. LyX 깔면 자동으로 다운로드 하든 것 같은데 확인할것
(when (eq system-type 'windows-nt)
(cond
((file-exists-p "d:/Programs/ispell/bin/ispell.exe")
(autoload 'ispell-word "ispell"
"Check spelling of word at or before point" t)
(autoload 'ispell-complete-word "ispell"
"Complete word at or before point" t)
(autoload 'ispell-region "ispell"
"Check spelling of every word in the region" t)
(autoload 'ispell-buffer "ispell"
"Check spelling of every word in the buffer" t)
(setq ispell-command "~/ispell/bin/ispell.exe"
ispell-look-dictionary "~/ispell/lib/ispell.words"
ispell-look-command "d:/Programs/ispell/bin/look.exe"
ispell-command-options (list "-d" "d:/Programs/ispell/ISPELL~1.DIC"))))
(setenv "ISPELLDICTDIR" "d:/Programs/ispell/dic")
(setq exec-path (append (list "d:/Programs/ispell/bin") exec-path))
)
;still necessary
(setenv "TEMP" "c:/windows/temp")
(setenv "TMP" "c:/windows/temp")
;helpful
(setq text-mode-hook
'(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
(setq tex-mode-hook '
(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
(setq latex-mode-hook '
(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
;; enable tex parser, also very helpful
(setq ispell-enable-tex-parser t)
;;;=====================================================================
;;; noweb-mode
;;;=====================================================================
;; (autoload 'noweb-mode "noweb-mode" "Editing noweb files." t)
;; (setq auto-mode-alist (append (list (cons "\\.nw$" 'noweb-mode))
;; auto-mode-alist))
;; ;;(require 'noweb-font-lock-mode)
;; ;; from noweb-mode.el 아래 comment에서 복사함. 2008-05-29
;; ;;; We need this variable since we will be overwriting the
;; ;;; noweb-code-mode from time to time.
;; (defvar my-noweb-main-code-mode nil
;; "Variable used to save the default noweb-code-mode.")
;; (defun my-set-noweb-code-mode (beg-pt end-pt)
;; "Set the noweb-code-mode for the chunk between BEG-PT and END-PT."
;; (let (beg end done mode)
;; ;; Reset code-mode to default and then check for a mode comment.
;; (setq mode my-noweb-main-code-mode)
;; (save-excursion
;; (goto-char beg-pt)
;; (beginning-of-line 2)
;; (and (search-forward "-*-"
;; (save-excursion (end-of-line) (point))
;; t)
;; (progn
;; (skip-chars-forward " \t")
;; (setq beg (point))
;; (search-forward "-*-"
;; (save-excursion (end-of-line) (point))
;; t))
;; (progn
;; (forward-char -3)
;; (skip-chars-backward " \t")
;; (setq end (point))
;; (goto-char beg)
;; (setq mode (intern
;; (concat
;; (downcase (buffer-substring beg end))
;; "-mode")))))
;; (noweb-set-code-mode mode))))
;; (defun my-noweb-pre-select-code-mode-hook ()
;; "Set the code mode for the current chunk."
;; (let ((r (noweb-chunk-region)))
;; (my-set-noweb-code-mode (car r) (cdr r))
;; t))
;; (defun my-noweb-select-mode-hook ()
;; "Fontify the current chunk based on the chunks mode."
;; ;; If this is the first time, save the default noweb-code-mode.
;; (if my-noweb-first-time
;; (progn
;; (setq my-noweb-first-time nil)
;; (setq my-noweb-main-code-mode noweb-code-mode)))
;; (font-lock-set-defaults)
;; (let ((r (noweb-chunk-region)))
;; (save-excursion
;; (font-lock-fontify-region (car r) (cdr r))
;; t)))
;; (defun my-noweb-mode-hook()
;; (setq my-noweb-first-time t))
;; (add-hook 'noweb-mode-hook 'my-noweb-mode-hook)
;; (add-hook 'noweb-select-mode-hook 'my-noweb-select-mode-hook)
;; (add-hook 'noweb-pre-select-code-mode-hook 'my-noweb-pre-select-code-mode-hook)
;;;=====================================================================
;;; python mode
;;; : http://sourceforge.net/projects/python
;;;=====================================================================
;;;--->START
(setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.pyw$" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons '("python" . python-mode)
interpreter-mode-alist))
(autoload 'python-mode "python-mode" "Python editing mode." t)
;;;<---END python mode
;;; =================================================================================
;;; Key-map
;;; =================================================================================
(defmacro mapkeys (map &rest bindings)
"keymapping macro by jay@kldp.org.
USAGE :
(mapkeys map keystring command) or
(mapkeys (map1 map2 ...) keystring command)"
(if (consp map)
`(progn ,@(loop for m in map
if (and (boundp m)
(keymapp
(symbol-value
m)))
collect `(mapkeys ,m ,@bindings)))
`(progn
,@(loop for l = bindings then (cddr l)
until (null l)
collect (if (symbolp (cadr l))
`(define-key ,map
,(read-kbd-macro (car l)) ',(cadr l))
`(define-key ,map
,(read-kbd-macro (car l)) ,(cadr l)))))))
;;; =================================================================================
;;; c-mode
;;; =================================================================================
(defun my-custom-c-mode ()
"my c mode customization"
(interactive)
(c-set-offset 'comment-intro 0)
(setq comment-multi-line t)
;;(setq tab-stop-list ;;refer to upper modify Tab
;; '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq c-recognize-knr-p nil)
(c-toggle-auto-hungry-state 1)
(turn-on-auto-fill)
(abbrev-mode 1)
;; --> start added by hosung in solomon with clearmake
;;(setq compile-command "clearmake -C gnu -J 16 -k")
(setq compile-command "clearmake -C gnu -k")
(c-set-style "stroustrup")
;; --> end
(unless (or (file-exists-p "makefile")
(file-exists-p "Makefile"))
(make-local-variable 'compile-command)
;;; (when buffer-file-name
;;; (setq compile-command
;;; (concat "clearmake -C gnu -J 16 -k" ;; modified by hosung "make -k"
;;; ;;(concat "clearmake -C gnu -J 16" ;; in solomon with clearmake
;;; (file-name-sans-extension
;;; (file-name-nondirectory buffer-file-name)))))
)
(ignore-errors (require 'newcomment))
;; here follows local key bindings for C and Java modes only
;; the "xref-key-binding" variable must be set to 'local in order
;; that this binding takes effect).
;;
;; maybe you will need to customize the following loaded file name
;; to one containing c-mode-map and java-mode-map definitions
(load "cc-mode")
(mapkeys (c-mode-map c++-mode-map java-mode-map)
"RET" newline-and-indent
"M-(" insert-parentheses
"(" insert-delimiter-pair
")" insert-delimiter-pair
"{" insert-delimiter-pair
"}" insert-delimiter-pair
"[" insert-delimiter-pair
"]" insert-delimiter-pair
;; visual studio compatabiel key bindings
;;"<f10>" gud-next
;;"C-<f10>" gud-cont-to
;;"<f11>" gud-step
;;"<f12>" tags-search
;; align stuffs
"C-c a" align
;; skels
"C-c c" c-block-comment
"C-c e" c-local-var-block
"C-c C-i" c-skel
"C-c #" c-insert-ifdef
"C-c ;" c-set-comment-style
"C-c =" c-align-eql
"C-c |" c-align-decls
;; miscs
;;"C-c x" cpp-parse-buffer
"C-c C-f" function-comment
)
(and (fboundp 'highlight-regexp)
(highlight-regexp "FIXME\\|TODO\\|XXX\\|CODING" 'hi-black-b))
)
(add-hook 'c-mode-common-hook 'my-custom-c-mode)
(defun c-set-comment-style (style-name)
(interactive (list (let ((prompt (format "Which %s indentation style? "
mode-name)))
(completing-read prompt
(mapcar (lambda (a)
(list (symbol-name (car a))))
comment-styles)
nil
t
(symbol-name comment-style)
'c-set-comment-style-history))))
(setq comment-style (intern style-name))
(message "comment style set to %s." style-name)
(sit-for 1))
;; align = and declaration stuffs
(defun c-align-eql (start end)
(interactive (if (and mark-active
(or (not (fboundp 'transient-mark-mode))
transient-mark-mode))
(list (region-beginning)
(region-end))
(list nil nil)))
(if (null start)
(save-excursion
(mark-paragraph-dwim) (call-interactively 'c-align-eql))
(save-excursion
(setq start (progn (setf (point) start) (point-at-bol)))
(setq end (progn (setf (point) end) (point-at-bol)))
(let ((max-col 0))
(setf (point) start)
(while (<= (point) end)
(setq max-col (max max-col
(if (search-forward "=" (point-at-eol) t)
(current-column)
0)))
(beginning-of-line 2))
(setf (point) start)
(while (<= (point) end)
(when (search-forward "=" (point-at-eol) t)
(backward-char 1)
(while (> (- max-col (current-column)) 1)
(insert ? )
(incf end)))
(beginning-of-line 2))))))
(defun c-align-decls (start end)
(interactive (if (and mark-active
(or (not (fboundp 'transient-mark-mode))
transient-mark-mode))
(list (region-beginning)
(region-end))
(list nil nil)))
(if (null start)
(save-excursion
(mark-paragraph-dwim) (call-interactively 'c-align-decls))
(save-excursion
(setq start (progn (setf (point) start) (point-at-bol)))
(setq end (progn (setf (point) end) (point-at-bol)))
(let ((max-col 0))
(setf (point) start)
(while (<= (point) end)
(setq max-col
(max max-col
(if (and (not (looking-at "^\\s-*}"))
(re-search-forward ",\\|;" (point-at-eol) t))
(progn (decf (point))
(while (and (skip-chars-backward "\\s-*")
(memq (char-before) '(?\] ?\))))
(backward-sexp 1))
(backward-sexp 1)
;; let pointer tied together with the variable
(while (eq (char-before) ?\*) (backward-char))
(current-column))
0)))
(beginning-of-line 2))
(setf (point) start)
(while (<= (point) end)
(when (and (not (looking-at "^\\s-*}"))
(re-search-forward ",\\|;" (point-at-eol) t))
(decf (point))
(while (and (skip-chars-backward "\\s-*")
(memq (char-before) '(?\] ?\))))
(backward-sexp 1))
(backward-sexp 1)
;; let pointer tied together with the variable
(while (eq (char-before) ?\*) (backward-char))
(while (> (- max-col (current-column)) 0)
(insert ? )
(incf end)))
(beginning-of-line 2))))))
(defun mark-paragraph-dwim ()
(let (b e)
(forward-line -1)
(mark-paragraph)
(setq b (region-beginning)
e (region-end))
(setf (point) e)
(when (re-search-backward "^\\s-*{" b t)
(forward-line 1)
(setq b (point)))
(setf (point) e)
(set-mark b)
(setq mark-active t)))
(defun c-block-comment ()
(interactive)
(let (pt)
(insert "/* " (make-string 70 ?=) " *\n")
(insert " * ")
(setq pt (point))
(insert "\n")
(insert " * " (make-string 70 ?=) " *\n")
(insert " */" "\n")
(setf (point) pt)))
(defun c-local-var-block ()
(interactive)
(insert "
/*
* Local variables:
*
* End:
*/
")
(save-match-data
(re-search-backward "^ [*] End:")
(forward-line -1)
(end-of-line)))
(defun c-insert-delimiter-pair ()
(interactive)
(call-interactively 'insert-delimiter-pair)
(call-interactively 'c-indent-command))
;; pair file generator
(defun c-skel ()
(interactive)
(let* ((file-name (file-name-nondirectory (buffer-file-name)))
(file-name-symbol
(concat "_" (file-name-sans-extension file-name)
"_H_"))
(extension (intern (file-name-extension file-name)))
(pt (point)))
(case extension
((c)
(beginning-of-buffer)
(insert "/* " file-name " -- " )
(setq pt (point))
(insert "
* Time-stamp: <>
* $Id" "$
*/
#if !defined (lint)
static char rcsid[] = \"$Id" "$\";
#endif
")
(end-of-buffer)
(insert "
/*
* Local variables:
* End:
*/
/* " file-name " ends here. */"))
((h)
(beginning-of-buffer)
(insert "/* " file-name " -- " )
(setq pt (point))
(insert "
* Time-stamp: <>
* $Id" "$
*/
")
(insert "#ifndef " file-name-symbol "
#define " file-name-symbol "
")
(end-of-buffer)
(insert "#endif /* !" file-name-symbol "*/
")
)
(otherwise
(beginning-of-buffer)
(insert "-*- mode: outline; mode: auto-fill; outline-regexp:\" *[*^L]+\" -*-")
(insert "\n")
(insert "\n")
(insert "TITLE: ")
(setq pt (point))
(insert "\nTime-stamp: <>\n\n")
))
(setf (point) pt)))
(defun c-insert-ifdef (symbol &optional arg)
"insert ifdef statements"
(interactive "*ssymbol : \nP")
(let ((pt (point)))
(beginning-of-line)
(insert "#if defined(" symbol ")\n")
(setq pt (point))
(if arg
(progn
(insert "\n#else /* ! " symbol " */\n\n")
(insert "#endif /* ! " symbol " */\n"))
(insert "\n#endif /* " symbol " */\n"))
(setf (point) pt)
(c-indent-command)))
(defvar extra-delimiter-pairs
'((?\` . ?\') (?< . ?>) (?( . ?)) (?\' . ?\'))
"Alist of delimiters that should be paired in addition to syntax.")
(defun insert-delimiter-pair (arg)
"Put pair of delimiters around next ARG words, and leave point after first.
No argument is equivalent to zero: just insert pair and leave point between.
If the last command character has open-parenthesis syntax or is equal to
the car of an element of `extra-delimiter-pairs', insert it and the
matching parenthesis. If it has close-parenthesis syntax or is equal to
the cdr of an element of `extra-delimiter-paris', search for the first
occurrence and leave point past it; ignore ARG.
Any other syntax means just insert a pair of the last command character."
(interactive "P")
(let* ((arg (if arg (prefix-numeric-value arg) 0))
(command (or (eval-in-xemacs (event-key last-command-event))
(eval-in-gnuemacs (logand last-command-char ?\xff))))
(before (assoc command extra-delimiter-pairs))
(after (rassoc command extra-delimiter-pairs)))
(if (or after (eq (char-syntax command) ?\)))
(search-forward (char-to-string command) nil t)
(if (or before (eq (char-syntax command) ?\())
(setq after (if before (cdr before) (matching-paren command))
before command)
(setq before command
after command))
(if (< arg 0)
(save-excursion
(insert after)
(forward-sexp arg)
(insert before))
(or (eq arg 0) (skip-chars-forward " \t"))
(insert before)
(save-excursion
(or (eq arg 0) (forward-sexp arg))
(insert after))))))
(defvar maybe-byte-compile-file t
"If non-nil, byte-compiles el file if it was before when saved.")
(defun maybe-byte-compile-file ()
"For files ending in \".el\", byte-compile if there is a \".elc\" file.
Also, if the file appears to be loaded, re-load it."
(when (and maybe-byte-compile-file
(string= (substring buffer-file-name -3) ".el")
(file-exists-p (concat buffer-file-name "c")))
(let ((byte-compile-verbose nil)
(byte-compile-warnings nil)
(reload
(save-excursion
(widen)
(goto-char (point-min))
(and (search-forward "\n(provide '" nil t)
(featurep (read (current-buffer)))))))
(byte-compile-file buffer-file-name reload))))
(add-hook 'after-save-hook #'maybe-byte-compile-file t)
;; (add-hook 'dired-load-hook
;; (lambda ()
;; (load "dired-x")
;; ;; Set dired-x global variables here. For example:
;; ;; (setq dired-guess-shell-gnutar "gtar")
;; ;; (setq dired-x-hands-off-my-keys nil)
;; ))
;; (add-hook 'dired-mode-hook
;; (lambda ()
;; ;; Set dired-x buffer-local variables here. For example:
;; ;; (dired-omit-mode 1)
;; ))
;;;=====================================================================
;;; using sww
;;; http://www.xsteve.at/prg/emacs/sww.el
;;;=====================================================================
;;(require 'sww)
;;(setq sww-sww-cmd "d:/programs/sww.exe")
;;; 특정키에 연결된 함수나, 특정함수 이름 혹은 변수의 소스를 보고 싶은 경우
;;; 이 함수는 다음과 같은 명령어들이 정의 된다.
;;; C-x F : 함수의 정의를 찾아감
;;; C-x 4 F : 다른 버퍼에 표시
;;; C-x 5 F : 다른 프레임에 표시
;;; C-x V : 변수의 정의를 찾아감
;;; C-x 4 V
;;; C-x 5 V
;;; C-x K : 키에 연결된 명령의 정의로 바로 찾아감
;;; 이들은 "C-h f"또는 "<f1> f"나 "C-h k"나 "<f1> k"등의 명령과 흡사하지만,
;;; 설명을 "*Help*"버퍼에 보여주는 것 대신에, 명령이 정의된 소스를 보여준다.
(find-function-setup-keys)
;;;=====================================================================
;;; Org Mode 6.04c 2008-06-12
;;;=====================================================================
;; -- START http://sachachua.com/wp/2007/12/28/emacs-getting-things-done-with-org-basic/
(add-to-list 'load-path "~/elisp/remember") ;; (1)
(require 'remember-autoloads)
(setq remember-data-file "d:/work/org/notes.org")
(defun wicked/remember-review-file ()
"Open `remember-data-file'."
(interactive)
(find-file-other-window remember-data-file))
(global-set-key (kbd "C-c R") 'wicked/remember-review-file)
(setq load-path (cons "~/elisp/org/lisp" load-path))
(require 'org-install)
(require 'org-mouse)
(setq org-default-notes-file "d:/work/org/notes.org")
(setq remember-annotation-functions '(org-remember-annotation))
(setq remember-handler-functions '(org-remember-handler))
;;; http://members.optusnet.com.au/~charles57/GTD/remember.html
(setq org-remember-templates
'(("Todo" ?t "* TODO %? %^g\n %i\n " "d:/work/org/todo.org" "Inbox")
("Journal" ?j "\n* %^{topic} %T \n%i%?\n" "d:/work/org/journal.org")
("Book" ?b "\n* %^{Book Title} %t :READING: \n%[d:/work/org/booktemp.txt]\n" "d:/work/org/journal.org")
("Private" ?p "\n* %^{topic} %T \n%i%?\n" "d:/work/org/privnotes.org")
("Contact" ?c "\n* %^{Name} :CONTACT:\n%[d:/work/org/contemp.txt]\n" "d:/work/org/privnotes.org")
))
;;(setq org-remember-templates
;; '(("Tasks" ?t "* TODO %?\n %i\n %a" "d:/work/org/todo.org") ;; (2)
;; ("Appointments" ?a "* Appointment: %?\n%^T\n%i\n %a" "d:/work/org/todo.org")
;; (110 "* %u %?" "d:/work/org/notes.org" "Notes")
;; (116 "* TODO %?\n %u" "d:/work/org/todo.org" "Tasks")))
(eval-after-load 'remember
'(add-hook 'remember-mode-hook 'org-remember-apply-template))
(global-set-key (kbd "C-c r") 'remember) ;; (3)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) ;; (4)
(global-set-key (kbd "C-c a") 'org-agenda) ;; (5)
(setq org-agenda-files (list "d:/work/org/todo.org"))
;; DONE 상태가 되었을 때의 시각을 기록
(setq org-log-done t)
;; 말미 이외의 * (을)를 표시하지 않는다
(setq org-hide-leading-stars t)
;; (setq org-agenda-custom-commands
;; '(("a" "My custom agenda"
;; ((org-agenda-list nil nil 1)
;; ;;(org-agenda-ndays 1)
;; ;; (sacha/org-agenda-load) ; ADD THIS LINE
;; ;; (sacha/org-agenda-clock) ; Add this line
;; ;;(tags "PROJECT-WAITING")
;; ;;(tags-todo "WAITING")
;; ;;(tags-todo "-MAYBE")
;; ))
;; ("w" todo "WAITING" nil)
;; ))
(setq org-todo-keywords '((sequence "TODO" "STARTED" "WAITING" "|" "DONE")
(sequence "REPORT" "BUG" "|" "FIXED")
(sequence "|" "CANCELED"))) ;; (6)
;;(setq org-agenda-include-diary t) ;; (7)
(setq org-agenda-include-all-todo t) ;; (8)
;; -- END
;; from http://sachachua.com/wp/2007/12/22/a-day-in-a-life-with-org/
;; http://sachachua.com/wp/2007/12/26/bugfix-time-estimation/
(defun sacha/org-agenda-load (match)
"Can be included in `org-agenda-custom-commands'."
(let ((inhibit-read-only t)
(time (sacha/org-calculate-free-time
;; today
(calendar-gregorian-from-absolute org-starting-day)
;; now if today AND after starting time, else start of day
(if (= org-starting-day
(time-to-days (current-time)))
(max
(let* ((now (decode-time))
(cur-hour (nth 2 now))
(cur-min (nth 1 now)))
(+ (* cur-hour 60) cur-min))
(let ((start (car (elt org-agenda-time-grid 2))))
(+ (* (/ start 100) 60) (% start 100))))
(let ((start (car (elt org-agenda-time-grid 2))))
(+ (* (/ start 100) 60) (% start 100))))
;; until the last time in my time grid
(let ((last (car (last (elt org-agenda-time-grid 2)))))
(+ (* (/ last 100) 60) (% last 100))))))
(goto-char (point-max))
(insert (format
"%.1f%% load: %d minutes to be scheduled, %d minutes free, %d minutes gap"
(/ (car time) (* .01 (cdr time)))
(car time)
(cdr time)
(- (cdr time) (car time))))))
(defun sacha/org-calculate-free-time (date start-time end-of-day)
"Return a cons cell of the form (TASK-TIME . FREE-TIME) for DATE, given START-TIME and END-OF-DAY.
DATE is a list of the form (MONTH DAY YEAR).
START-TIME and END-OF-DAY are the number of minutes past midnight."
(save-window-excursion
(let ((files org-agenda-files)
(total-unscheduled 0)
(total-gap 0)
file
rtn
rtnall
entry
(last-timestamp start-time)
scheduled-entries)
(while (setq file (car files))
(catch 'nextfile
(org-check-agenda-file file)
(setq rtn (org-agenda-get-day-entries file date :scheduled :timestamp))
(setq rtnall (append rtnall rtn)))
(setq files (cdr files)))
;; For each item on the list
(while (setq entry (car rtnall))
(let ((time (get-text-property 1 'time entry)))
(cond
((and time (string-match "\\([^-]+\\)-\\([^-]+\\)" time))
(setq scheduled-entries (cons (cons
(save-match-data (appt-convert-time (match-string 1 time)))
(save-match-data (appt-convert-time (match-string 2 time))))
scheduled-entries)))
((and time
(string-match "\\([^-]+\\)\\.+" time)
(string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry)))
(setq scheduled-entries
(let ((start (and (string-match "\\([^-]+\\)\\.+" time)
(appt-convert-time (match-string 2 time)))))
(cons (cons start
(and (string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry))
(+ start (string-to-number (match-string 2 (get-text-property 1 'txt entry))))))
scheduled-entries))))
((string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry))
(setq total-unscheduled (+ (string-to-number
(match-string 2 (get-text-property 1 'txt entry)))
total-unscheduled)))))
(setq rtnall (cdr rtnall)))
;; Sort the scheduled entries by time
(setq scheduled-entries (sort scheduled-entries (lambda (a b) (< (car a) (car b)))))
(while scheduled-entries
(let ((start (car (car scheduled-entries)))
(end (cdr (car scheduled-entries))))
(cond
;; are we in the middle of this timeslot?
((and (>= last-timestamp start)
(<= last-timestamp end))
;; move timestamp later, no change to time
(setq last-timestamp end))
;; are we completely before this timeslot?
((< last-timestamp start)
;; add gap to total, skip to the end
(setq total-gap (+ (- start last-timestamp) total-gap))
(setq last-timestamp end)))
(setq scheduled-entries (cdr scheduled-entries))))
(if (< last-timestamp end-of-day)
(setq total-gap (+ (- end-of-day last-timestamp) total-gap)))
(cons total-unscheduled total-gap))))
;; end
(defun sacha/org-clock-in-if-starting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "STARTED")
(not (string= last-state state)))
(org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-in-if-starting)
(defadvice org-clock-in (after sacha activate)
"Set this task's status to 'STARTED'."
(org-todo "STARTED"))
(defun sacha/org-clock-out-if-waiting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "WAITING")
(not (string= last-state state)))
(org-clock-out)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-out-if-waiting)
(defun sacha/org-clock-in-if-starting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "STARTED")
(not (string= last-state state)))
(org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-in-if-starting)
(defadvice org-clock-in (after sacha activate)
"Set this task's status to 'STARTED'."
(org-todo "STARTED"))
(defun sacha/org-clock-out-if-waiting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "WAITING")
(not (string= last-state state)))
(org-clock-out)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-out-if-waiting)
;; The following lines are always needed. Choose your own keys.
(global-set-key "\C-cl" 'org-store-link)
;(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(defun clipboard()
"open clipboard file."
(interactive)
(find-file "~/clipboard"))
;;http://kldp.org/node/95647
;; Emacs 문장 단위 명령과 구두점 뒤 스페이스 두 개
(setq sentence-end-double-space nil)
;;;=====================================================================
;;; using emacsclientw
;;;=====================================================================
(server-start)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; customize menu
(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 nil nil (cua-base))
'(emacsw32-style-frame-title t)
'(font-latex-fontify-sectioning 1.1)
'(ido-mode (quote both) nil (ido))
'(menuacc-mode nil)
'(org-agenda-files (quote ("d:/work/org/journal.org" "d:/work/org/2008.org" "d:/work/org/todo.org")))
'(recentf-mode t)
'(safe-local-variable-values (quote ((TeX . UTF-8) (noweb-doc-mode . latex-mode) (noweb-code-mode . c-mode) (noweb-code-mode . C-mode))))
'(swbuff-y-mode t)
'(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify))))
(custom-set-faces
;; custom-set-faces 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.
)
;;
;; 버퍼에 쩍힌 영역에 따라 다르게 저장된다. 현재 default는 CP949로
;; 저장되며, 만약 확장영역의 한글이 적히면 utf-8로 저장할 것인지
;; 물어본다.
(setq user-mail-address "hosung_kim@samsung.com"
user-full-name "HoSung Kim")
(setq inhibit-startup-message t)
(setq byte-compile-verbose nil
byte-compile-warnings nil)
(add-to-list 'load-path "~/elisp")
;;;=====================================================================
;;; hangul 설정 http://sylphong.egloos.com/1787602
;;;============
;;; 1. 새로운 한글 입력기를 load한다.(utf-8지원)
;;; 2. 윈도우에서 사용할 fontset을 만든다.
;;; 3. font dialog를 unix형태의 것으로 설정한다.
;;; 4. theme 설정
;;;
;;; 날개셋이 Shift-Space를 사용하므로 IME를 원래 것으로 변경한다.
;;; (Ctrl-Shift-1로 가능)
;;; lisp/language/korea-util.el -> korean-key-bindings에 보면
;;; 아래와 같이 key-mapping이 되어 있다.
;;; Shift-SPACE : toggle-korean-input-method
;;; Ctrl-f9 : quail-hangul-switch-symbol-ksc
;;; f9 : quail-hangul-switch-hanja
;;;=====================================================================
(require 'hangul)
(set-language-environment "Korean")
(if (eq window-system 'w32)
(progn
;; http://oldpie.yoonkn.com/cgi-bin/moin.cgi/EmacsFontSet
;; http://oldpie.yoonkn.com/cgi-bin/moin.cgi/dreamstorm/emacs
;; http://www.emacswiki.org/cgi-bin/wiki/FontSets
;; by hosung 2008-05-20
;; http://www.gnu.org/software/emacs/windows/faq5.html#windows-font
;; M-x set-default-font <RET> <TAB>하면 폰트리스트가 나온다.
;; 폰트크기 18은 맨 첫줄을 따라 가는 것 같다. ksc5601에서 작게 해도 한글이 작아지지는 않는다.
;; ksc5601에서 c는 실제 p로 나오는데 어떤 것을 해도 상관 없다.
;; 맨끝의 0을 *로 하면 정상적으로 폰트가 출력되지 않는다.
;;
;; 이와 같이 ksc5601로 하면 확장문자에 대하여 네모박스로 출력되는 문제가 있다.
;; Consolas는 ms로 부터 다운로드 한다.
;;http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&displaylang=en
;; (create-fontset-from-fontset-spec
;; "-*-Consolas-normal-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
;; korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
;; unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
;; ' (medium))
;; (create-fontset-from-fontset-spec
;; "-*-Consolas-bold-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
;; korean-ksc5601:-outline-새굴림-bold-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
;; unicode-bmp:-outline-새굴림-bold-r-*-*-*-*-*-*-c-*-iso10646-1"
;; ' (bold))
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-10-*-*-*-c-*-fontset-iso8859_1_10,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-11-*-*-*-c-*-fontset-iso8859_1_11,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-12-*-*-*-c-*-fontset-iso8859_1_12,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-13-*-*-*-c-*-fontset-iso8859_1_13,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-14-*-*-*-c-*-fontset-iso8859_1_14,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-15-*-*-*-c-*-fontset-iso8859_1_15,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-16-*-*-*-c-*-fontset-iso8859_1_16,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-17-*-*-*-c-*-fontset-iso8859_1_17,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-18-*-*-*-c-*-fontset-iso8859_1_18,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-19-*-*-*-c-*-fontset-iso8859_1_19,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-20-*-*-*-c-*-fontset-iso8859_1_20,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-21-*-*-*-c-*-fontset-iso8859_1_21,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-22-*-*-*-c-*-fontset-iso8859_1_22,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-23-*-*-*-c-*-fontset-iso8859_1_23,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-24-*-*-*-c-*-fontset-iso8859_1_24,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-25-*-*-*-c-*-fontset-iso8859_1_25,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-26-*-*-*-c-*-fontset-iso8859_1_26,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-27-*-*-*-c-*-fontset-iso8859_1_27,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(create-fontset-from-fontset-spec
"-*-Consolas-normal-r-*-*-28-*-*-*-c-*-fontset-iso8859_1_28,
korean-ksc5601:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-ksc5601.1987-0,
unicode-bmp:-outline-새굴림-normal-r-*-*-*-*-*-*-c-*-iso10646-1"
t)
(setq initial-frame-alist '((top . 10) (left . 100)))
(setq default-frame-alist
(append
'(
;;(font . "-outline-Bitstream Vera Sans Mono-normal-r-normal-normal-14-*-*-*-c-*-iso8859-1")
;(font . "-*-Consolas-normal-r-*-*-14-*-*-*-c-*-fontset-iso8859_1_14")
(font . "fontset-iso8859_1_15");; 위와 같이 full로 적기 않고 fontset이후만 적어도 된다.
(width . 100)
(height . 45)
;;(cursor-type . (bar . 1))
)
default-frame-alist))))
;; Tell NT Emacs to use a font menu similar to the one it uses on Unix
(setq w32-use-w32-font-dialog nil) ;; Shift mouse 1 click시 윈도우 폰트
;; 다이얼로그 대신 Unix시스템과 같은
;; 폰트 선택리스트가
;; 나온다. fontset에 내가 등록한
;; 폰트가 나온다.
(add-to-list 'load-path "~/elisp/color-theme/")
(require 'color-theme)
(color-theme-initialize)
;(color-theme-clarity)
(load-file "~/elisp/color-theme/color-theme-colorful-obsolescence.el")
(color-theme-colorful-obsolescence)
;;;=====================================================================
;;; 각종 외관에 관한 설정
;;;=====================================================================
(global-font-lock-mode 1) ; syntanx highlight
(setq font-lock-maximum-decoration t)
(transient-mark-mode t) ; marking highlight
(show-paren-mode t) ; 짝이 맞는 괄호 보여준다
(delete-selection-mode 1) ; 윈도우처럼, 선택된 reging을 EL로
; 지우거나, 다른 글자를 타이핑할때 즉시
; 지운다.
;;(setq-default truncate-lines t) ; 화면을 벗어나는 긴 줄처리 toggle-truncate-lines 참고
(setq frame-title-format (list "GNU Emacs " emacs-version "@" system-name " - " '(buffer-file-name "%f" "%b")))
(setq icon-title-format frame-title-format)
;;; 어떤 함수를 수정중인지 modeline에 표현
;;; semantic-stickyfunc-mode 보다는 이게 보기 좋다
(which-function-mode 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 외관 모양
(scroll-bar-mode -1)
(tool-bar-mode -1)
;;(menu-bar-mode -1) ;; Ctrl+right mouse
(line-number-mode 1) ; mode line 에 라인수를 표시한다
(column-number-mode 1) ; mode line 에 컬럼을 표시한다(기본이 아니더라)
;;(display-time) ;; NTEmacs가 죽는다??
;; from http://www.emacswiki.org/cgi-bin/wiki/BufferMenu
(global-set-key (kbd "C-x C-b") 'ibuffer)
(global-set-key (kbd "M-g") 'goto-line)
;;; ido-mode(Interactive Do)
;;; http://www.emacsblog.org/2008/05/19/giving-ido-mode-a-second-chance/
;;; Flex or fuzzy matching is the ability to match any item containing
;;; the characters in the given sequence. For example, “mwc” might
;;; match a file named “my_wicked_class.rb.”
(require 'ido)
(ido-mode t)
(setq ido-enable-flex-mating t) ; fuzzy matching is a must have
(defun recentf-open-files-compl ()
(interactive)
(let* ((all-files recentf-list)
(tocpl (mapcar (function
(lambda (x) (cons (file-name-nondirectory x) x))) all-files))
(prompt (append '("File name: ") tocpl))
(fname (completing-read (car prompt) (cdr prompt) nil nil)))
(find-file (cdr (assoc-ignore-representation fname tocpl)))))
(global-set-key "\C-x\C-r" 'recentf-open-files-compl) ;; override read-only
;; (ido-everywhere 1)
;; (setq ido-use-filename-at-point 'guess
;; ido-use-url-at-point t)
;; ;;(iswitchb-mode 1)
;;; ======================================================================
;;; highlight-current-line.el
;;; http://www.emacswiki.org/cgi-bin/wiki/HighlineMode 이걸로 바꾸면?
;;; ======================================================================
;;; 커서가 있는 라인을 빛나게 한다.
;;(when window-system
;; (require 'highlight-current-line)
;; (highlight-current-line-on t)
;; (highlight-current-line-set-bg-color "gray20"))
;; hippie-expand
;;;http://trey-jackson.blogspot.com/2007/12/emacs-tip-5-hippie-expand.html
(global-set-key (kbd "M-/") 'hippie-expand)
(setq hippie-expand-try-functions-list
'(try-expand-dabbrev
try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill
try-complete-file-name-partially try-complete-file-name
try-expand-all-abbrevs try-expand-list try-expand-line
try-complete-lisp-symbol-partially try-complete-lisp-symbol))
;;; ======================================================================
;;; Tabbar
;;; http://www.emacswiki.org/cgi-bin/wiki/TabBarMode
;;; http://sourceforge.net/projects/emhacks/
;;; ======================================================================
(require 'tabbar)
;; Remove this if you want separated by mode
(setq tabbar-buffer-groups-function
(lambda (b) (list "All Buffers")))
;; Don't show *buffers* in the tabbar
(setq tabbar-buffer-list-function
(lambda ()
(remove-if
(lambda(buffer)
(find (aref (buffer-name buffer) 0) " *")) (buffer-list))))
(tabbar-mode)
(global-set-key [(control shift tab)] 'tabbar-backward)
(global-set-key [(control tab)] 'tabbar-forward)
;;(global-set-key [(meta right)] 'bury-buffer) ;; forward move buffer
;;(global-set-key [(meta left)] 'ubury-buffer);; backward move buffer
;;; tool-bar mode
(require 'tool-bar+)
(tool-bar-pop-up-mode)
;;; menu-bar mode
(eval-after-load "menu-bar" '(require 'menu-bar+))
;; function to reload .emacs 2008.01.24
(defun reload-dotemacs ()
"Reload .emacs"
(interactive)
(load-file "~/.emacs"))
;; TODO, BUG 등에 강조표시
(font-lock-add-keywords 'c++-mode
'(("\\<\\(FIXME\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(TODO\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(BUG\\):" 1 c-nonbreakable-space-face prepend)
("\\<\\(NOTE\\):" 1 c-nonbreakable-space-face prepend)))
;;;=====================================================================
;;; AUCTeX
;;; http://physics.kyunghee.ac.kr/~reds/Hpack_Project/k-download.htm
;;; http://www.gnu.org/software/auctex/download-for-windows.html 에서
;;; Precompiled AUCTeX for Emacs를 다운 받아 압축을 푼 후 Emacs가 설치된
;;; 디렉토리로 복사한다.
;;; -*-주의사항-*- info의 dir은 복사하지 말고 원본에 추가해야한다.
;;;=====================================================================
(setq TeX-auto-save t)
(setq TeX-parse-self t)
;; If use \include or \input, for multi-file document.
(setq-default TeX-master nil)
;(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
;(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
;;settings for bib-cite.el
(autoload 'turn-on-bib-cite "bib-cite")
;(add-hook 'LaTeX-mode-hook 'turn-on-bib-cite)
;; '(TeX-bar-LaTeX-buttons (quote (open-file kill-buffer save-buffer cut copy paste undo [separator nil] latex next-error view bibtex)))
;; '(TeX-newline-function (quote newline-and-indent))
(add-hook 'LaTeX-mode-hook
(function
(lambda ()
;; bib-cite
(turn-on-auto-fill)
(turn-on-reftex)
(turn-on-bib-cite)
(outline-minor-mode)
(TeX-source-specials-mode 1)
;;(TeX-newline-function (quote reindent-then-newline-and-indent))
;; PDF파일이 있으면 emacs가 자동으로 PDF mode를 on해서
;; pdflatex로 컴파일하게 된다. 이것을 disalbe한다.
;; 제대로 동작하지 않는다.
;; 2006-07-01
;; 파일 Local Variables에 TeX-PDF-mode: nil을 추가한다.
(TeX-PDF-mode t)
;; http://physics.kyunghee.ac.kr/~reds/Hpack_Project/faq.htm 확장자에 대한 이야기가 나온다.
;; - \site-lisp\auctex\tex.el 에서 확장자를 지정해준다.
;; 아래에서 %a에 pdf를 추가한 것이다.
(add-to-list 'TeX-expand-list '("%a" file "pdf" t))
;; (add-to-list 'TeX-command-list
;; (list "LaTeX" "latex --src-specials \\nonstopmode\\input{%s}"
;; 'TeX-run-LaTeX nil t))
(add-to-list 'TeX-command-list
(list "TeXify" "texify --src %t" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "Ghostview" "C:\\PROGRA~1\\Ghostgum\\gsview\\gsview32.exe %f"
'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "dviPS" "dvips %d -o %f"
'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "dvipdfm" "dvipdfmx %d" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "BibTeX" "bibtex %s" 'TeX-run-BibTeX nil nil))
;; (add-to-list 'TeX-command-list
;; (list "Index" "makeindex %s" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "dviPS-landscape" "dvips %d -t landscape -o %f" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "Check" "lacheck %s" 'TeX-run-compile nil t))
;; (add-to-list 'TeX-command-list
;; (list "GS PDFView" "C:\\gs\\Ghostgum\\gsview\\gsview32.exe %a" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "Acrobat" "C:\\PROGRA~1\\Adobe\\ACROBA~2.0\\Reader\\AcroRd32.exe %a" 'TeX-run-command nil t))
;;(list "Acrobat" "AcroRd32.exe %a" 'TeX-run-command nil t)
(add-to-list 'TeX-command-list
(list "Foxit" "C:\\PROGRA~1\\FOXITS~1\\FOXITR~1\\FOXITR~1.EXE %a" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DVIPDFMx" "dvipdfmx %d" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "ko-Index" "komkindex -s kotex %s" 'TeX-run-command nil t))
;; (add-to-list 'TeX-command-list
;; (list "DVISearch" "yap.exe -1 -s %n%b %d" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DVISearch" "c:\\KC2007\\TeX\\dviout\\dviout.exe -1 %d # %n %b" 'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "DviOut" "c:\\KC2007\\TeX\\dviout\\dviout.exe %d"
'TeX-run-command nil t))
;; `pdflatex -src-specials -interaction=nonstopmode "\input" "csi.tex"
(add-to-list 'TeX-command-list
(list "PDFLaTeX" "pdflatex -src-specials -interaction=nonstopmode %t"
'TeX-run-command nil t))
;;; key-binding
(define-key LaTeX-mode-map [f9] 'do-LaTeX)
(define-key LaTeX-mode-map [f10] 'do-DVISearch)
(define-key LaTeX-mode-map [f11] 'do-DVIPDFMx)
)))
(defun do-LaTeX ()
"LaTeX the curent file."
(interactive)
(TeX-command "LaTeX" 'TeX-master-file))
(defun do-DVISearch ()
"Forward search LaTeX the current file position."
(interactive)
(TeX-command "DVISearch" 'TeX-master-file))
(defun do-DVIPDFMx ()
"Running DVIPDFMx"
(interactive)
(TeX-command "DVIPDFMx" 'TeX-master-file))
;; if you have a network connection with UNIX like environment
;; take care of CR/LF disabling if NTemacs manages (load/save) files on it
;; ftp://ftp.sunet.se/pub/os/Win32/ntEmacs/docs/ntemacs.html#translation
(load "untranslate")
;(add-untranslated-filesystem "d:") ; d: is a UNIX drive
;;if you encounter a file with ^M or ... at the end of every line,
;; this means a worng copy by samba or floppy disk of the DOS file to UNIX.
;; get rid of them by pressing [F5]
;;(global-set-key [f5] 'cut-ctrlM) ; cut all ^M.
(defun cut-ctrlM ()
"Cut all visible ^M."
(interactive)
(beginning-of-buffer)
(while (search-forward "\r" nil t)
(replace-match "" nil t))
)
;; use ISPELL on PC (see http://cat.rpi.edu/~tibbetts/ispell_toc.html
;; fot the installation procedure)
;; you don't need to add c:\ispell4\exe to your PATH, and
;; you don't need to copy or move any file after unzipping
;; if you define ispell-command and ispell-look-command properly.
;; M-$ for ispell word under cursor, M-x ispell-buffer for whole buffer
;; see also pull-down menu <Edit>, <Spell>, <Check ...>.
;; For ispell-3.2.06-w32 by Suk-Ho Hong
;; download http://examples.oreilly.com/gnu3/ispell.zip version 3.1.20
;; TODO. LyX 깔면 자동으로 다운로드 하든 것 같은데 확인할것
(when (eq system-type 'windows-nt)
(cond
((file-exists-p "d:/Programs/ispell/bin/ispell.exe")
(autoload 'ispell-word "ispell"
"Check spelling of word at or before point" t)
(autoload 'ispell-complete-word "ispell"
"Complete word at or before point" t)
(autoload 'ispell-region "ispell"
"Check spelling of every word in the region" t)
(autoload 'ispell-buffer "ispell"
"Check spelling of every word in the buffer" t)
(setq ispell-command "~/ispell/bin/ispell.exe"
ispell-look-dictionary "~/ispell/lib/ispell.words"
ispell-look-command "d:/Programs/ispell/bin/look.exe"
ispell-command-options (list "-d" "d:/Programs/ispell/ISPELL~1.DIC"))))
(setenv "ISPELLDICTDIR" "d:/Programs/ispell/dic")
(setq exec-path (append (list "d:/Programs/ispell/bin") exec-path))
)
;still necessary
(setenv "TEMP" "c:/windows/temp")
(setenv "TMP" "c:/windows/temp")
;helpful
(setq text-mode-hook
'(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
(setq tex-mode-hook '
(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
(setq latex-mode-hook '
(lambda ()
(local-set-key "\M-\t" 'ispell-complete-word)))
;; enable tex parser, also very helpful
(setq ispell-enable-tex-parser t)
;;;=====================================================================
;;; noweb-mode
;;;=====================================================================
;; (autoload 'noweb-mode "noweb-mode" "Editing noweb files." t)
;; (setq auto-mode-alist (append (list (cons "\\.nw$" 'noweb-mode))
;; auto-mode-alist))
;; ;;(require 'noweb-font-lock-mode)
;; ;; from noweb-mode.el 아래 comment에서 복사함. 2008-05-29
;; ;;; We need this variable since we will be overwriting the
;; ;;; noweb-code-mode from time to time.
;; (defvar my-noweb-main-code-mode nil
;; "Variable used to save the default noweb-code-mode.")
;; (defun my-set-noweb-code-mode (beg-pt end-pt)
;; "Set the noweb-code-mode for the chunk between BEG-PT and END-PT."
;; (let (beg end done mode)
;; ;; Reset code-mode to default and then check for a mode comment.
;; (setq mode my-noweb-main-code-mode)
;; (save-excursion
;; (goto-char beg-pt)
;; (beginning-of-line 2)
;; (and (search-forward "-*-"
;; (save-excursion (end-of-line) (point))
;; t)
;; (progn
;; (skip-chars-forward " \t")
;; (setq beg (point))
;; (search-forward "-*-"
;; (save-excursion (end-of-line) (point))
;; t))
;; (progn
;; (forward-char -3)
;; (skip-chars-backward " \t")
;; (setq end (point))
;; (goto-char beg)
;; (setq mode (intern
;; (concat
;; (downcase (buffer-substring beg end))
;; "-mode")))))
;; (noweb-set-code-mode mode))))
;; (defun my-noweb-pre-select-code-mode-hook ()
;; "Set the code mode for the current chunk."
;; (let ((r (noweb-chunk-region)))
;; (my-set-noweb-code-mode (car r) (cdr r))
;; t))
;; (defun my-noweb-select-mode-hook ()
;; "Fontify the current chunk based on the chunks mode."
;; ;; If this is the first time, save the default noweb-code-mode.
;; (if my-noweb-first-time
;; (progn
;; (setq my-noweb-first-time nil)
;; (setq my-noweb-main-code-mode noweb-code-mode)))
;; (font-lock-set-defaults)
;; (let ((r (noweb-chunk-region)))
;; (save-excursion
;; (font-lock-fontify-region (car r) (cdr r))
;; t)))
;; (defun my-noweb-mode-hook()
;; (setq my-noweb-first-time t))
;; (add-hook 'noweb-mode-hook 'my-noweb-mode-hook)
;; (add-hook 'noweb-select-mode-hook 'my-noweb-select-mode-hook)
;; (add-hook 'noweb-pre-select-code-mode-hook 'my-noweb-pre-select-code-mode-hook)
;;;=====================================================================
;;; python mode
;;; : http://sourceforge.net/projects/python
;;;=====================================================================
;;;--->START
(setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.pyw$" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons '("python" . python-mode)
interpreter-mode-alist))
(autoload 'python-mode "python-mode" "Python editing mode." t)
;;;<---END python mode
;;; =================================================================================
;;; Key-map
;;; =================================================================================
(defmacro mapkeys (map &rest bindings)
"keymapping macro by jay@kldp.org.
USAGE :
(mapkeys map keystring command) or
(mapkeys (map1 map2 ...) keystring command)"
(if (consp map)
`(progn ,@(loop for m in map
if (and (boundp m)
(keymapp
(symbol-value
m)))
collect `(mapkeys ,m ,@bindings)))
`(progn
,@(loop for l = bindings then (cddr l)
until (null l)
collect (if (symbolp (cadr l))
`(define-key ,map
,(read-kbd-macro (car l)) ',(cadr l))
`(define-key ,map
,(read-kbd-macro (car l)) ,(cadr l)))))))
;;; =================================================================================
;;; c-mode
;;; =================================================================================
(defun my-custom-c-mode ()
"my c mode customization"
(interactive)
(c-set-offset 'comment-intro 0)
(setq comment-multi-line t)
;;(setq tab-stop-list ;;refer to upper modify Tab
;; '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq c-recognize-knr-p nil)
(c-toggle-auto-hungry-state 1)
(turn-on-auto-fill)
(abbrev-mode 1)
;; --> start added by hosung in solomon with clearmake
;;(setq compile-command "clearmake -C gnu -J 16 -k")
(setq compile-command "clearmake -C gnu -k")
(c-set-style "stroustrup")
;; --> end
(unless (or (file-exists-p "makefile")
(file-exists-p "Makefile"))
(make-local-variable 'compile-command)
;;; (when buffer-file-name
;;; (setq compile-command
;;; (concat "clearmake -C gnu -J 16 -k" ;; modified by hosung "make -k"
;;; ;;(concat "clearmake -C gnu -J 16" ;; in solomon with clearmake
;;; (file-name-sans-extension
;;; (file-name-nondirectory buffer-file-name)))))
)
(ignore-errors (require 'newcomment))
;; here follows local key bindings for C and Java modes only
;; the "xref-key-binding" variable must be set to 'local in order
;; that this binding takes effect).
;;
;; maybe you will need to customize the following loaded file name
;; to one containing c-mode-map and java-mode-map definitions
(load "cc-mode")
(mapkeys (c-mode-map c++-mode-map java-mode-map)
"RET" newline-and-indent
"M-(" insert-parentheses
"(" insert-delimiter-pair
")" insert-delimiter-pair
"{" insert-delimiter-pair
"}" insert-delimiter-pair
"[" insert-delimiter-pair
"]" insert-delimiter-pair
;; visual studio compatabiel key bindings
;;"<f10>" gud-next
;;"C-<f10>" gud-cont-to
;;"<f11>" gud-step
;;"<f12>" tags-search
;; align stuffs
"C-c a" align
;; skels
"C-c c" c-block-comment
"C-c e" c-local-var-block
"C-c C-i" c-skel
"C-c #" c-insert-ifdef
"C-c ;" c-set-comment-style
"C-c =" c-align-eql
"C-c |" c-align-decls
;; miscs
;;"C-c x" cpp-parse-buffer
"C-c C-f" function-comment
)
(and (fboundp 'highlight-regexp)
(highlight-regexp "FIXME\\|TODO\\|XXX\\|CODING" 'hi-black-b))
)
(add-hook 'c-mode-common-hook 'my-custom-c-mode)
(defun c-set-comment-style (style-name)
(interactive (list (let ((prompt (format "Which %s indentation style? "
mode-name)))
(completing-read prompt
(mapcar (lambda (a)
(list (symbol-name (car a))))
comment-styles)
nil
t
(symbol-name comment-style)
'c-set-comment-style-history))))
(setq comment-style (intern style-name))
(message "comment style set to %s." style-name)
(sit-for 1))
;; align = and declaration stuffs
(defun c-align-eql (start end)
(interactive (if (and mark-active
(or (not (fboundp 'transient-mark-mode))
transient-mark-mode))
(list (region-beginning)
(region-end))
(list nil nil)))
(if (null start)
(save-excursion
(mark-paragraph-dwim) (call-interactively 'c-align-eql))
(save-excursion
(setq start (progn (setf (point) start) (point-at-bol)))
(setq end (progn (setf (point) end) (point-at-bol)))
(let ((max-col 0))
(setf (point) start)
(while (<= (point) end)
(setq max-col (max max-col
(if (search-forward "=" (point-at-eol) t)
(current-column)
0)))
(beginning-of-line 2))
(setf (point) start)
(while (<= (point) end)
(when (search-forward "=" (point-at-eol) t)
(backward-char 1)
(while (> (- max-col (current-column)) 1)
(insert ? )
(incf end)))
(beginning-of-line 2))))))
(defun c-align-decls (start end)
(interactive (if (and mark-active
(or (not (fboundp 'transient-mark-mode))
transient-mark-mode))
(list (region-beginning)
(region-end))
(list nil nil)))
(if (null start)
(save-excursion
(mark-paragraph-dwim) (call-interactively 'c-align-decls))
(save-excursion
(setq start (progn (setf (point) start) (point-at-bol)))
(setq end (progn (setf (point) end) (point-at-bol)))
(let ((max-col 0))
(setf (point) start)
(while (<= (point) end)
(setq max-col
(max max-col
(if (and (not (looking-at "^\\s-*}"))
(re-search-forward ",\\|;" (point-at-eol) t))
(progn (decf (point))
(while (and (skip-chars-backward "\\s-*")
(memq (char-before) '(?\] ?\))))
(backward-sexp 1))
(backward-sexp 1)
;; let pointer tied together with the variable
(while (eq (char-before) ?\*) (backward-char))
(current-column))
0)))
(beginning-of-line 2))
(setf (point) start)
(while (<= (point) end)
(when (and (not (looking-at "^\\s-*}"))
(re-search-forward ",\\|;" (point-at-eol) t))
(decf (point))
(while (and (skip-chars-backward "\\s-*")
(memq (char-before) '(?\] ?\))))
(backward-sexp 1))
(backward-sexp 1)
;; let pointer tied together with the variable
(while (eq (char-before) ?\*) (backward-char))
(while (> (- max-col (current-column)) 0)
(insert ? )
(incf end)))
(beginning-of-line 2))))))
(defun mark-paragraph-dwim ()
(let (b e)
(forward-line -1)
(mark-paragraph)
(setq b (region-beginning)
e (region-end))
(setf (point) e)
(when (re-search-backward "^\\s-*{" b t)
(forward-line 1)
(setq b (point)))
(setf (point) e)
(set-mark b)
(setq mark-active t)))
(defun c-block-comment ()
(interactive)
(let (pt)
(insert "/* " (make-string 70 ?=) " *\n")
(insert " * ")
(setq pt (point))
(insert "\n")
(insert " * " (make-string 70 ?=) " *\n")
(insert " */" "\n")
(setf (point) pt)))
(defun c-local-var-block ()
(interactive)
(insert "
/*
* Local variables:
*
* End:
*/
")
(save-match-data
(re-search-backward "^ [*] End:")
(forward-line -1)
(end-of-line)))
(defun c-insert-delimiter-pair ()
(interactive)
(call-interactively 'insert-delimiter-pair)
(call-interactively 'c-indent-command))
;; pair file generator
(defun c-skel ()
(interactive)
(let* ((file-name (file-name-nondirectory (buffer-file-name)))
(file-name-symbol
(concat "_" (file-name-sans-extension file-name)
"_H_"))
(extension (intern (file-name-extension file-name)))
(pt (point)))
(case extension
((c)
(beginning-of-buffer)
(insert "/* " file-name " -- " )
(setq pt (point))
(insert "
* Time-stamp: <>
* $Id" "$
*/
#if !defined (lint)
static char rcsid[] = \"$Id" "$\";
#endif
")
(end-of-buffer)
(insert "
/*
* Local variables:
* End:
*/
/* " file-name " ends here. */"))
((h)
(beginning-of-buffer)
(insert "/* " file-name " -- " )
(setq pt (point))
(insert "
* Time-stamp: <>
* $Id" "$
*/
")
(insert "#ifndef " file-name-symbol "
#define " file-name-symbol "
")
(end-of-buffer)
(insert "#endif /* !" file-name-symbol "*/
")
)
(otherwise
(beginning-of-buffer)
(insert "-*- mode: outline; mode: auto-fill; outline-regexp:\" *[*^L]+\" -*-")
(insert "\n")
(insert "\n")
(insert "TITLE: ")
(setq pt (point))
(insert "\nTime-stamp: <>\n\n")
))
(setf (point) pt)))
(defun c-insert-ifdef (symbol &optional arg)
"insert ifdef statements"
(interactive "*ssymbol : \nP")
(let ((pt (point)))
(beginning-of-line)
(insert "#if defined(" symbol ")\n")
(setq pt (point))
(if arg
(progn
(insert "\n#else /* ! " symbol " */\n\n")
(insert "#endif /* ! " symbol " */\n"))
(insert "\n#endif /* " symbol " */\n"))
(setf (point) pt)
(c-indent-command)))
(defvar extra-delimiter-pairs
'((?\` . ?\') (?< . ?>) (?( . ?)) (?\' . ?\'))
"Alist of delimiters that should be paired in addition to syntax.")
(defun insert-delimiter-pair (arg)
"Put pair of delimiters around next ARG words, and leave point after first.
No argument is equivalent to zero: just insert pair and leave point between.
If the last command character has open-parenthesis syntax or is equal to
the car of an element of `extra-delimiter-pairs', insert it and the
matching parenthesis. If it has close-parenthesis syntax or is equal to
the cdr of an element of `extra-delimiter-paris', search for the first
occurrence and leave point past it; ignore ARG.
Any other syntax means just insert a pair of the last command character."
(interactive "P")
(let* ((arg (if arg (prefix-numeric-value arg) 0))
(command (or (eval-in-xemacs (event-key last-command-event))
(eval-in-gnuemacs (logand last-command-char ?\xff))))
(before (assoc command extra-delimiter-pairs))
(after (rassoc command extra-delimiter-pairs)))
(if (or after (eq (char-syntax command) ?\)))
(search-forward (char-to-string command) nil t)
(if (or before (eq (char-syntax command) ?\())
(setq after (if before (cdr before) (matching-paren command))
before command)
(setq before command
after command))
(if (< arg 0)
(save-excursion
(insert after)
(forward-sexp arg)
(insert before))
(or (eq arg 0) (skip-chars-forward " \t"))
(insert before)
(save-excursion
(or (eq arg 0) (forward-sexp arg))
(insert after))))))
(defvar maybe-byte-compile-file t
"If non-nil, byte-compiles el file if it was before when saved.")
(defun maybe-byte-compile-file ()
"For files ending in \".el\", byte-compile if there is a \".elc\" file.
Also, if the file appears to be loaded, re-load it."
(when (and maybe-byte-compile-file
(string= (substring buffer-file-name -3) ".el")
(file-exists-p (concat buffer-file-name "c")))
(let ((byte-compile-verbose nil)
(byte-compile-warnings nil)
(reload
(save-excursion
(widen)
(goto-char (point-min))
(and (search-forward "\n(provide '" nil t)
(featurep (read (current-buffer)))))))
(byte-compile-file buffer-file-name reload))))
(add-hook 'after-save-hook #'maybe-byte-compile-file t)
;; (add-hook 'dired-load-hook
;; (lambda ()
;; (load "dired-x")
;; ;; Set dired-x global variables here. For example:
;; ;; (setq dired-guess-shell-gnutar "gtar")
;; ;; (setq dired-x-hands-off-my-keys nil)
;; ))
;; (add-hook 'dired-mode-hook
;; (lambda ()
;; ;; Set dired-x buffer-local variables here. For example:
;; ;; (dired-omit-mode 1)
;; ))
;;;=====================================================================
;;; using sww
;;; http://www.xsteve.at/prg/emacs/sww.el
;;;=====================================================================
;;(require 'sww)
;;(setq sww-sww-cmd "d:/programs/sww.exe")
;;; 특정키에 연결된 함수나, 특정함수 이름 혹은 변수의 소스를 보고 싶은 경우
;;; 이 함수는 다음과 같은 명령어들이 정의 된다.
;;; C-x F : 함수의 정의를 찾아감
;;; C-x 4 F : 다른 버퍼에 표시
;;; C-x 5 F : 다른 프레임에 표시
;;; C-x V : 변수의 정의를 찾아감
;;; C-x 4 V
;;; C-x 5 V
;;; C-x K : 키에 연결된 명령의 정의로 바로 찾아감
;;; 이들은 "C-h f"또는 "<f1> f"나 "C-h k"나 "<f1> k"등의 명령과 흡사하지만,
;;; 설명을 "*Help*"버퍼에 보여주는 것 대신에, 명령이 정의된 소스를 보여준다.
(find-function-setup-keys)
;;;=====================================================================
;;; Org Mode 6.04c 2008-06-12
;;;=====================================================================
;; -- START http://sachachua.com/wp/2007/12/28/emacs-getting-things-done-with-org-basic/
(add-to-list 'load-path "~/elisp/remember") ;; (1)
(require 'remember-autoloads)
(setq remember-data-file "d:/work/org/notes.org")
(defun wicked/remember-review-file ()
"Open `remember-data-file'."
(interactive)
(find-file-other-window remember-data-file))
(global-set-key (kbd "C-c R") 'wicked/remember-review-file)
(setq load-path (cons "~/elisp/org/lisp" load-path))
(require 'org-install)
(require 'org-mouse)
(setq org-default-notes-file "d:/work/org/notes.org")
(setq remember-annotation-functions '(org-remember-annotation))
(setq remember-handler-functions '(org-remember-handler))
;;; http://members.optusnet.com.au/~charles57/GTD/remember.html
(setq org-remember-templates
'(("Todo" ?t "* TODO %? %^g\n %i\n " "d:/work/org/todo.org" "Inbox")
("Journal" ?j "\n* %^{topic} %T \n%i%?\n" "d:/work/org/journal.org")
("Book" ?b "\n* %^{Book Title} %t :READING: \n%[d:/work/org/booktemp.txt]\n" "d:/work/org/journal.org")
("Private" ?p "\n* %^{topic} %T \n%i%?\n" "d:/work/org/privnotes.org")
("Contact" ?c "\n* %^{Name} :CONTACT:\n%[d:/work/org/contemp.txt]\n" "d:/work/org/privnotes.org")
))
;;(setq org-remember-templates
;; '(("Tasks" ?t "* TODO %?\n %i\n %a" "d:/work/org/todo.org") ;; (2)
;; ("Appointments" ?a "* Appointment: %?\n%^T\n%i\n %a" "d:/work/org/todo.org")
;; (110 "* %u %?" "d:/work/org/notes.org" "Notes")
;; (116 "* TODO %?\n %u" "d:/work/org/todo.org" "Tasks")))
(eval-after-load 'remember
'(add-hook 'remember-mode-hook 'org-remember-apply-template))
(global-set-key (kbd "C-c r") 'remember) ;; (3)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) ;; (4)
(global-set-key (kbd "C-c a") 'org-agenda) ;; (5)
(setq org-agenda-files (list "d:/work/org/todo.org"))
;; DONE 상태가 되었을 때의 시각을 기록
(setq org-log-done t)
;; 말미 이외의 * (을)를 표시하지 않는다
(setq org-hide-leading-stars t)
;; (setq org-agenda-custom-commands
;; '(("a" "My custom agenda"
;; ((org-agenda-list nil nil 1)
;; ;;(org-agenda-ndays 1)
;; ;; (sacha/org-agenda-load) ; ADD THIS LINE
;; ;; (sacha/org-agenda-clock) ; Add this line
;; ;;(tags "PROJECT-WAITING")
;; ;;(tags-todo "WAITING")
;; ;;(tags-todo "-MAYBE")
;; ))
;; ("w" todo "WAITING" nil)
;; ))
(setq org-todo-keywords '((sequence "TODO" "STARTED" "WAITING" "|" "DONE")
(sequence "REPORT" "BUG" "|" "FIXED")
(sequence "|" "CANCELED"))) ;; (6)
;;(setq org-agenda-include-diary t) ;; (7)
(setq org-agenda-include-all-todo t) ;; (8)
;; -- END
;; from http://sachachua.com/wp/2007/12/22/a-day-in-a-life-with-org/
;; http://sachachua.com/wp/2007/12/26/bugfix-time-estimation/
(defun sacha/org-agenda-load (match)
"Can be included in `org-agenda-custom-commands'."
(let ((inhibit-read-only t)
(time (sacha/org-calculate-free-time
;; today
(calendar-gregorian-from-absolute org-starting-day)
;; now if today AND after starting time, else start of day
(if (= org-starting-day
(time-to-days (current-time)))
(max
(let* ((now (decode-time))
(cur-hour (nth 2 now))
(cur-min (nth 1 now)))
(+ (* cur-hour 60) cur-min))
(let ((start (car (elt org-agenda-time-grid 2))))
(+ (* (/ start 100) 60) (% start 100))))
(let ((start (car (elt org-agenda-time-grid 2))))
(+ (* (/ start 100) 60) (% start 100))))
;; until the last time in my time grid
(let ((last (car (last (elt org-agenda-time-grid 2)))))
(+ (* (/ last 100) 60) (% last 100))))))
(goto-char (point-max))
(insert (format
"%.1f%% load: %d minutes to be scheduled, %d minutes free, %d minutes gap"
(/ (car time) (* .01 (cdr time)))
(car time)
(cdr time)
(- (cdr time) (car time))))))
(defun sacha/org-calculate-free-time (date start-time end-of-day)
"Return a cons cell of the form (TASK-TIME . FREE-TIME) for DATE, given START-TIME and END-OF-DAY.
DATE is a list of the form (MONTH DAY YEAR).
START-TIME and END-OF-DAY are the number of minutes past midnight."
(save-window-excursion
(let ((files org-agenda-files)
(total-unscheduled 0)
(total-gap 0)
file
rtn
rtnall
entry
(last-timestamp start-time)
scheduled-entries)
(while (setq file (car files))
(catch 'nextfile
(org-check-agenda-file file)
(setq rtn (org-agenda-get-day-entries file date :scheduled :timestamp))
(setq rtnall (append rtnall rtn)))
(setq files (cdr files)))
;; For each item on the list
(while (setq entry (car rtnall))
(let ((time (get-text-property 1 'time entry)))
(cond
((and time (string-match "\\([^-]+\\)-\\([^-]+\\)" time))
(setq scheduled-entries (cons (cons
(save-match-data (appt-convert-time (match-string 1 time)))
(save-match-data (appt-convert-time (match-string 2 time))))
scheduled-entries)))
((and time
(string-match "\\([^-]+\\)\\.+" time)
(string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry)))
(setq scheduled-entries
(let ((start (and (string-match "\\([^-]+\\)\\.+" time)
(appt-convert-time (match-string 2 time)))))
(cons (cons start
(and (string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry))
(+ start (string-to-number (match-string 2 (get-text-property 1 'txt entry))))))
scheduled-entries))))
((string-match "^[A-Z]+ \\(\\[#[A-Z]\\] \\)?\\([0-9]+\\)" (get-text-property 1 'txt entry))
(setq total-unscheduled (+ (string-to-number
(match-string 2 (get-text-property 1 'txt entry)))
total-unscheduled)))))
(setq rtnall (cdr rtnall)))
;; Sort the scheduled entries by time
(setq scheduled-entries (sort scheduled-entries (lambda (a b) (< (car a) (car b)))))
(while scheduled-entries
(let ((start (car (car scheduled-entries)))
(end (cdr (car scheduled-entries))))
(cond
;; are we in the middle of this timeslot?
((and (>= last-timestamp start)
(<= last-timestamp end))
;; move timestamp later, no change to time
(setq last-timestamp end))
;; are we completely before this timeslot?
((< last-timestamp start)
;; add gap to total, skip to the end
(setq total-gap (+ (- start last-timestamp) total-gap))
(setq last-timestamp end)))
(setq scheduled-entries (cdr scheduled-entries))))
(if (< last-timestamp end-of-day)
(setq total-gap (+ (- end-of-day last-timestamp) total-gap)))
(cons total-unscheduled total-gap))))
;; end
(defun sacha/org-clock-in-if-starting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "STARTED")
(not (string= last-state state)))
(org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-in-if-starting)
(defadvice org-clock-in (after sacha activate)
"Set this task's status to 'STARTED'."
(org-todo "STARTED"))
(defun sacha/org-clock-out-if-waiting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "WAITING")
(not (string= last-state state)))
(org-clock-out)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-out-if-waiting)
(defun sacha/org-clock-in-if-starting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "STARTED")
(not (string= last-state state)))
(org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-in-if-starting)
(defadvice org-clock-in (after sacha activate)
"Set this task's status to 'STARTED'."
(org-todo "STARTED"))
(defun sacha/org-clock-out-if-waiting ()
"Clock in when the task is marked STARTED."
(when (and (string= state "WAITING")
(not (string= last-state state)))
(org-clock-out)))
(add-hook 'org-after-todo-state-change-hook
'sacha/org-clock-out-if-waiting)
;; The following lines are always needed. Choose your own keys.
(global-set-key "\C-cl" 'org-store-link)
;(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(defun clipboard()
"open clipboard file."
(interactive)
(find-file "~/clipboard"))
;;http://kldp.org/node/95647
;; Emacs 문장 단위 명령과 구두점 뒤 스페이스 두 개
(setq sentence-end-double-space nil)
;;;=====================================================================
;;; using emacsclientw
;;;=====================================================================
(server-start)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; customize menu
(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 nil nil (cua-base))
'(emacsw32-style-frame-title t)
'(font-latex-fontify-sectioning 1.1)
'(ido-mode (quote both) nil (ido))
'(menuacc-mode nil)
'(org-agenda-files (quote ("d:/work/org/journal.org" "d:/work/org/2008.org" "d:/work/org/todo.org")))
'(recentf-mode t)
'(safe-local-variable-values (quote ((TeX . UTF-8) (noweb-doc-mode . latex-mode) (noweb-code-mode . c-mode) (noweb-code-mode . C-mode))))
'(swbuff-y-mode t)
'(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify))))
(custom-set-faces
;; custom-set-faces 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.
)