Emacs – Upgrade new emacs-live version.

기록하는 습관을 들이자.

emacs-live가 ~/.emacs.d/에 설치 되어있는지 확인하고, 만약 확인이 된다면 아래의 명령어를 입력해준다. 단 이때 git 저장소로부터 다운받아 설치가 되어 있어야 한다.

$ cd ~/.emacs.d/
$ git pull

이상.

Emacs – 프로젝트 생성

기존 프로젝트 의존성이 맞지 않아 오류가 발생된다.

새로 프로젝트를 생성한다면 아래의 설정대로 만들어주어야 한다.

기존 버전으로 사용할 경우 아래의 문제가 발생된다. midje 사용하고, lein repl을 사용했을 경우 cider쪽에서 some-> 함수를 찾지 못하는 문제가 발생한다.

오류를 줄이기 위한 가장 좋은 방법은 최신버전을 사용하는 것이다. (물론 최신버전에 또다른 오류가 발생될 수 있으나, 의존성 처리를 미리미리 해두는게 좋다.)

Global로 설정된 버전들 – cider-nrepl “0.9.1” – clojure “1.4.0”

최신 버전 – cider-nrepl “0.13.0” – clojure “1.8.0”

:dependencies [[cider/cider-nrepl "0.13.0"]]
:repl-options {:nrepl-middleware
                 [cider.nrepl.middleware.apropos/wrap-apropos
                  cider.nrepl.middleware.classpath/wrap-classpath
                  cider.nrepl.middleware.complete/wrap-complete
                  cider.nrepl.middleware.debug/wrap-debug
                  cider.nrepl.middleware.format/wrap-format
                  cider.nrepl.middleware.info/wrap-info
                  cider.nrepl.middleware.inspect/wrap-inspect
                  cider.nrepl.middleware.macroexpand/wrap-macroexpand
                  cider.nrepl.middleware.ns/wrap-ns
                  cider.nrepl.middleware.pprint/wrap-pprint
                  cider.nrepl.middleware.pprint/wrap-pprint-fn
                  cider.nrepl.middleware.refresh/wrap-refresh
                  cider.nrepl.middleware.resource/wrap-resource
                  cider.nrepl.middleware.stacktrace/wrap-stacktrace
                  cider.nrepl.middleware.test/wrap-test
                  cider.nrepl.middleware.trace/wrap-trace
                  cider.nrepl.middleware.out/wrap-out
                  cider.nrepl.middleware.undef/wrap-undef
                  cider.nrepl.middleware.version/wrap-version]}

위 내용을 정리하는 이유는 Midje와 cider 버전 차이가 맞지 않아 발생되는 문제로, lein과 사용되는 lein midje :autotest를 사용할 경우 아무 문제 없다. 하지만 문서상 lein midje ****보다는 lein repl에서 autotest명령을 수행함으로 써 하는 방식을 더 권장하고 있다.

사용해보니 왜 그렇게 권장하는지 알 수 있다.

$ lein repl
$ (use 'midje.repl)
$ (autotest) 

이맥스 – 루비 제작자 “맷츠”, 어떻게 이맥스가 내 인생을 바꿧나?

원문

  1. 이맥스가 내 인생을 어떻게 바꿧나? “Yukihiro Matsumoto” – Matz @yukihiro_matz

  2. 1980

  3. 프로그래밍을 시작했다.

  4. ~

  5. BASIC

  6. 400 단계

  7. 1988

  8. 이맥스와의 만남

  9. Sun-3 위에서

  10. 200명 학부생들과 공유

  11. 이맥스를 시도했었다.

  12. 하지만 사용하지는 않았다.

  13. 이맥스는 금지 되어었다.

  14. 이맥스는 너무 많고 소중한 메모리가 소비하였다.

  15. 우리는 무료 소프트웨어를 받을 수 있는 자유가 있었다.

  16. 우리는 소스코드를 읽을 수 있는 자유가 있었다.

  17. 난 이맥스 소스코드를 다운받았다.

  18. 그리고 이를 연구하였다.

  19. 이맥스는 나의 첫번째 리스프 인터프리터였고,

  20. 나는 이맥스로부터 많은 언어에 대해서 배울 수 있었다.

  21. 포인터들 안에서 내장되어 있는 정수들 (?)

  22. 가비지 컬렉션을 청소했다.

  23. 리스프와 ‘C’ 사이에서의 대회로 불리었고

  24. 나는 리스프가 어떻게 동작하는지 이해할 수 있었다.

  25. 나는 리스프 오브텍트에 매료되었고

  26. 리스프 오브젝트는 C로부터 선언되었다. (?)

  27. 그리고 나는 Sparc Station을 얻었다. (SPARCstation(aka Sun-4) 시리즈는 1989년에 소개되었다.)

  28. 나는 이맥스를 사용하기 위해 다시 시작했고

  29. 이맥스는 나의 한부분이 되었다.

  30. 만약 이맥스에서 아무것도 좋아하지 않았다면, 나는 이것들을 바꿀수가 있었다.

  31. 이맥스는 완전하게 개조가 가능하였다.

  32. 이맥스는 프로그래머가 원하는 모든것을 바꿀 수 있다는걸 깨닫게 해주었으며,

  33. 이 모든것은 자유였다.

  34. 카바인딩 생각없이 모든 것을 바꿀 수 있었다. (?)

  35. 나는 이맥스 없이 아무것도 쓰고 싶지 않았다.

  36. 프로그램들, 문서 그리고 메일들까지

  37. 그래서 나는 내 전용 메일 클라이언트로 썼다.

  38. 이름하여 “email”

  39. 이맥스 리스프 안에서

  40. 이게 나의 첫번째 보잘거 없지 않은 리스프 프로그램이였다.

  41. 나는 매일 이것을 사용했다.

  42. 1993

  43. 나는 루비 개발을 시작했다.

  44. 이맥스 구현으로의 영향력은

  45. 태그 포인터들안에서 인티저는 코드였고,

  46. 이것은 간단한 영역과 가비지 컬렉션을 소비하여 사용하였다.

  47. 비슷한 오브젝트 모델에서 리스프로 사용했고 (여기서 리스프의 오브젝트의 “object”란 내부적으로 표현되 코드이고, OOP를 말하는 것이 아니다.)

  48. 그리고 나는 맨위에 OO 시스템과 같은 스몰토크를 넣었고

  49. 문법적으로 ALGOL/Ada/Eiffel들을 원했다.

  50. 하지만 이맥스 중독자로, 나는 언어 모드가 필요했었고,

  51. auto-indent는 필요한 것이었다.

  52. 1993년으로 돌아가, 문법이 표현된 언어를 위한 auto-indenting 언어 모드는 없었고

  53. 그래서 나는 ruby-mode.el를 만들었다.

  54. 이맥스 리스프와 정규식 표현을 다뤄야만 했고

  55. 매주 그렇게

  56. auto-indentation구현을 어떻게든 성공했다.

  57. 언어의 “end”를 위해

  58. 만약 진행하기 위한 ruby-mode를 만들지 않았다면,

  59. 루비의 문법은 바뀌었을지도 모른다.

  60. C와 같은 또다른 하나

  61. 다른 스크립트언어와 너무 비슷한

  62. 결과적으로 루비 현재의 인기를 차지하지 못햇을 것이다.

  63. 개요

  64. 1) 이맥스는 소프트웨어에 대한 자유를 가르쳐주었다.

  65. 2) 이맥스는 코드를 어떻게 읽는지 가르쳐주었다.

  66. 3) 이맥스는 리스프의 힘을 가르쳐 주었다.

  67. 4) 이맥스는 언어의 핵심이 어떻게 구현되는지 가르쳐 주었다.

  68. 5) 이맥스는 가비지 컬렉션이 어떻게 구현되는지 가르쳐 주었다.

  69. 6) 이맥스는 코드와 디버그를 도와주었다.

  70. 7) 이맥는 텍스트, 메일, 문서 작성과 편집을 도와주었다.

  71. 8) 이맥스는 효과적인 프로그래머가 될수 있도록 도와주었다.

  72. 9) 이맥스는 나를 해커로 만들어 주었다.

  73. 10) 이맥는 내 인생을 바꿔주었다.

  74. 영원히

  75. 감사합니다.

이맥스 – 텍스트 정렬하기

날씨 탓일까요? 뭔가 막혀있는 느낌이 자꾸 드네요. 이럴 땐 역시나 무엇인가에 몰두하는게 가장 좋더라고요.

이맥스 – 텍스트 정렬하기

이건 왜 몰랐을까? 아래와 같이 정렬되지 않은 텍스트를 일정한 규칙에 의해서 정렬할때 align-regexp기능을 사용할 수 있습니다.

rooney = 21
haha = 20
ray = 17

만약 문자 “=” 을 기준으로 정렬을 하고 싶다면, align-regexp을 치고 문자로 “=”을 입력해주세요.

결과는 아래와 같이 정렬된 것을 볼 수 있습니다.

rooney = 21
haha   = 20
ray    = 17

약간 고급스럽게 아래와 같이 사용 할 수 있습니다.

California 423,970 km²
Taiwan 36,008 km²
Japan 377,944 km²
Germany 357,021 km²
Iraq 438,317 km²
Iran 1,648,195 km²
Korea (North+South) 219,140 km²
Mexico 1,964,375 km²

위에 것을 아래와 같이

Taiwan                 36,008 km²
Korea (North+South)   219,140 km²
Japan                 377,944 km²
Germany               357,021 km²
California            423,970 km²
Iraq                  438,317 km²
Iran                1,648,195 km²
Mexico              1,964,375 km²

먼저 전체 텍스트를 영역 지정하고, CTRL+u 그리고 나서 align-regex명령을 입력합니다. 정규식 입력 란에

.* \([0-9,]+\).*

을 입력하고, 그룹에 대해서는

-1

, 공백은

1

을 입력합니다. 반복 실행은

n

을 입력해줍니다.

위와 동일한 효과를 가질 수 있는 두가지 명렁어가 더 있습니다.

  • sort-regexp-fields
  • sort-columns

급하게 잡힌 약속에 나가봐야해서 이만 쓰겠습니다.

Emacs – 폴더에서 상호작용하며, 텍스트 찾아 바꾸기

텍스트 파일 버퍼 안에서가 아닌, 다수의 파일 여러개의 파일안에 특정 문자열을 변경하고 싶을 때 사용합니다.

원문

사용법

  1. dired을 실행, 디렉토리 목록에서 변경하고 싶은 파일을 선택 %m합니다.
  2. Q를 누르면 dired-do-query-replace-regexp.
  3. 정규식 또는 특정 문자열을 입력합니다. (elisp 정규식 패턴)
  4. 변경 될 문자열로 focus가 이동하게 되는데, 변경하고자 한다면 y, 아니면 n을 눌러 변경해줍니다. 만약 변경 중 취소하고 싶다면 Ctrl+g를 눌러주세요.
    • 파일안에 모든 문자열을 한번에 변경하고자 한다면, ! 또는 변경을 원하지 않는다면 N을 눌러주세요. (23버전 이후만 가능)
    • 모든 파일을 한번에 적용하고 싶다면, Y를 눌러주세요.
  5. 변경 된 (열려진 파일)을 저장하기 위해서, ibuffer를 이용, 모든 파일을 열어 저장하기 위해서 *****을 이용하여 마크 후 S를 눌러 저장해주세요. 파일을 닫기 위해서는 D를 사용합니다.

끄읕

Emacs > 맥을 위한 이맥스 Daemon 설정하기

(참조)[https://gist.github.com/ambethia/304964]

여러가지 스크립트가 포함되어 있는 이맥스를 실핼할 때 반복적인 시간이 소요 되는데 이를 해소 할 수 있는 방법을 소개합니다.

맥에 이맥스가 이미 설치 되어 있다는 가정하에 문서를 작성하였습니다.

이맥스 데몬 어플리케이션 생성하기

맥에서 ‘Script Editor’를 열어 아래의 내용을 입력해주세요.

tell application "Terminal"
do shell script "/Applications/Emacs.app/Contents/MacOS/Emacs --daemon"
endtell

저장 할 때는 File > Export, 그리고 File Format : Application을 선택하여 Applications/ 폴더에 저장해주세요.

이상 이맥스 데몬 어플리케이션을 생성하였습니다.

이제 맥이 실행될 때 이 앱을 실행 시켜주기 위해서 어플리케이션을 등록해 봅시다.

  • System Preferences > Accounts 열기
  • 계정 선택 후 Login Items탭 선택
  • ‘+’버튼을 눌러 Emacs Daemon을 선택
  • hide 체크방식에 대해서는 생각할 필요 없음. (나중에 앱 아이콘을 없앨 예정)

이맥스 클라이언트 어플리케이션 생성하기

다시 한번 Script Editor를 열어 아래의 내용을 넣어주세요.

tell application "Terminal"
do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c"
endtell

저장 할 때는 위와 동일하게 Application타입을 선택해주시고, Emacs Client 이름으로 Applications/폴더에 저장해주세요.

새로 생성한 Emacs Client에 아이콘 적용하기

  • Finder를 열어 Application Folder 선택해주세요.
  • Emacs application선택 후 우측 버튼 > Show Package Contents를 선택해주세요.
  • Contents/Resources 폴더 안에 Emacs.icns를 Emacs Client 폴더안에 있는 Content/resources 폴더에 넣어주세요. 그리고 기존에 있던 applet.icns를 삭제하시고 Emacs.icns파일을 applet.icns파일 이름으로 변경해주세요.

Emacs Client가 동작 되는 동안 Dock에서 Emacs 아이콘을 숨겨보자.

  • Application folder에 있는 Emacs Application (Emacs Client가 아님), Show Package Contents로 열어주세요.
  • Info.plist파일을 열어 Add child를 통해 키 NSUIElement, 값 1을 설정해주세요.

모든 설정이 완료 되었네요.

그럼 즐거운 이맥스 라이프!!

emacs – building emacs 24.x

environment is MAC OS X version 10.7.2.

you can use as following step.

[code]
$ git clone git://git.savannah.gnu.org/emacs.git
$ wget http://cloud.github.com/downloads/typester/emacs/feature-fullscreen.patch
$ cd emacs
$ patch -p1 -i ../feature-fullscreen.patch
$ sh autogen.sh
$ ./configure –with-ns
$ make && make install
$ mv nextstep/Emacs.app /Applications/
[/code]

To toggle full-screen mode iside emacs:
M-x ns-toggle-fullscreen

you can check about version 24.x from following site.
http://www.masteringemacs.org/articles/2011/12/06/what-is-new-in-emacs-24-part-1/

other link
solarized theme
full-screen description

Emacs – Keyboard Macro

아주 오랜된 일이다.
신입 시절 삼성으로 파견 나가있을 때 내 반복 작업을 도와준 놈이다.

key des
C-x ( 녹화 시작
C-x ) 녹화 끝
C-x e 녹화된 매크로 실행
C-u 10 C-x e 매크로 10회 실행

원문

Emacs – Function:add-to-list

Symbol element & optional append compare-fn
add-to-list는 리스트 항목에 새로운 항목을 추가 할때 사용합니다.
만약 리스트 항목의 맴버가 아니라면 그 리스트 항목 맨 앞에 값을 추가합니다.

그리고 업데이트 후 리스트 값을 반환하며, 그게 아니라면 기존 리스트 값만 반환합니다.

add-to-list 부르기 전에 심볼의 값은 리스트가 되는 것이 낫습니다. ??
add-to-list는 리스트에 존재하는 맴버변수를 대비하여 비교 연산을 하기 위해 compare-fn을 사용합니다.

만약 compare-fn이 nil이면 equal 함수를 사용합니다.

일반적으로 element가 추가되었다면, 기존 심볼 앞에 추가가 됩니다. 하지만 추가적인 argument로 nil을 추가하게 되면 맨 뒤에 붙게 됩니다.

그 argument 심볼은 절대적이지 않습니다;

add-to-list는 set 과 비슷하고, setq와 비슷하지 않은
정식 함수입니다.

그 argument 는 당신이 원하는대로 사용할 수 있습니다.

아래는 add-to-list를 사용하기 위한 몇가지 시나리오입니다.
[code]
(setq foo ‘(a b))
-> (a b)

(add-to-list ‘foo ‘c) ;; c 가 추가되었습니다.
-> (c a b)

(add-to-list ‘foo ‘c) ;; 아무 변화 없습니다.
-> (c a b)

(add-to-list ‘foo ‘b) ;; foo 심볼이 변경 되었습니다.
-> (c a b)
[/code]

add-to-list를 동등한 표현으로 아래와 같이 할 수 있습니다.
[code]
(or (member value var)
(setq var (cons value var)))
[/code]

원문