org-roam 느린 함수를 memoize로 극복
Org-roam으로 관리하는 노드 개수가 늘면서 언제부턴가 노드를 검색하는 org-roam-node-find 함수와 노드를 삽입하는 org-roam-node-insert 함수가 느려지고 있다. 여기서 org-roam은 Emacs에 구현한 개인 지식 관리 모드다. Emacs 맛 Ob...
Org-roam으로 관리하는 노드 개수가 늘면서 언제부턴가 노드를 검색하는 org-roam-node-find 함수와 노드를 삽입하는 org-roam-node-insert 함수가 느려지고 있다. 여기서 org-roam은 Emacs에 구현한 개인 지식 관리 모드다. Emacs 맛 Ob...
Emacs를 설치하고 Doom Emacs 세팅한 후 실행하면 뭔가 비주얼이 이상하다. 필요한 폰트를 설치 안 했구나. Mermaid 같을 걸 실행하면 실패한다. 필요한 프로그램을 설치 안 했구나. 이런 걸 미리 편하게 검사할 수 있지 않을까? 설치하는 김에 한 번에 설치를 다 하게...
org-mode에 웹 링크를 삽입할 일이 있으면 Org-cliplink를 사용하고 있다. 인증이 필요한 Confluence 페이지는 org-cliplink로 가져올 수 없어서 기능 추가를 했다.
ohyecloudy.com/lifelog/와 ohyecloudy.com/pnotes/ 블로그에 개시된 과거 글을 보면 끊긴 링크가 많다. 참고한 링크가 실린 웹사이트보다 더 오래 살아남아서 어쩔 수 없는 걸까? 링크를 건 글 중에 좋은 글도 많았는데, 지금은 볼 수 없어서 아쉽다.
머신마다 다르게 설정할 게 있다면 auth-source를 사용해 퉁치고 있다. 단순 문자열이면 상관이 없는데, 리스트 같은 자료형을 사용하려니 꽤 귀찮다. 물론 리스트도 사용은 가능하다. 문자열을 받아서 eval 함수를 호출해 Emacs Lisp 자료형으로 만들면 된다. 하지만 한...
Emacs 하단에 있는 Echo Area에 간단한 문서를 즉시 볼 수 있게 해주는 Emacs 패키지다. 겸손한 알림이 가장 큰 장점이다. 관련된 정보가 있다면 슬그머니 Echo Area에 보여준다. 문서 작성을 방해하지 않는다.
Emacs-libvterm (vterm) is fully-fledged terminal emulator inside GNU Emacs based on libvterm, a C library. As a result of using compiled code (instead of ...
vertico에서 한글 증분 완성(incremental completion)을 지원하려고 timer를 적용했다. 0.01초마다 입력을 검사해서 완성 후보를 골라서 출력한다. vertico 모드가 종료될 때 이 timer를 잘 해제해야 한다. 제대로 해제가 안 되면 편집 중에도 이 ...
windows 환경에서는 git-for-windows/build-extra를 설치해 MSYS2와 MinGW를 사용하고 있다. ’windows에서 bash를 emacs shell로 사용 - ohyecloudy.com’ 글에 적은 것처럼 bash를 emacs shell로 사용하기 위해...
소스 광산(source mine)이란 뭔가?
(defun my/org-copy-link-at-point () (interactive) (message "%S" (org-element-context)) )
’매일 동료가 어제 커밋한 코드를 읽는 방법 ver.2022 - ohyecloudy.com’ 글처럼 동료가 커밋한 코드를 읽는 루틴을 만들었다. 최근 코드 리뷰 툴이 깃랩(gitlab)에서 HelixSwarm으로 바뀌어서 HelixSwarm API를 사용한 함수를 구현했다.
C# IDE로 라이더(rider)를 사용하고 있다. 간간히 emacs로 열어서 편집할 일이 생겨서 ’emacs server - 파일을 한 곳에서 열자’ 글에서 세팅한 것처럼 라이더에서도 현재 파일을 emacs로 열 수 있게 세팅했다.
org mode 구획 제목(heading) 사이에 빈 줄을 넣는 걸 선호한다. org mode로 볼 때야 있던 없던 상관이 없다. 간혹 그냥 텍스트를 볼 때가 있는데, 빈 줄이 있고 없고가 가독성에 큰 영향을 준다. 그래서 구획 제목 사이에 빈 줄을 넣는 걸 선호한다.
auth-source란?
evil package를 사용한다면 repeat-evil 함수에 바인딩된 . 키를 눌러 최근 수정 명령어를 반복할 수 있다. 수정 명령어 반복은 잘 되지만 일반 모드에서 emacs 함수 호출은 반복이 되지 않는다. 될 때도 있는데, 지원하는 명령어가 따로 있는 것 같다.
원하는 URL을 조합해 웹브라우저로 여는 대화형 함수 만들기 - elixir 문서 편하게 검색 글로 적은 것처럼 emacs에서 elixir 문서 검색 단어를 입력받아 주소를 조합해 웹브라우저로 여는 함수를 만들어 사용하고 있다. 써보니 편해서 이걸 더 확장했다.
doom emacs를 사용하면서 리더 키(leader key)를 적극적으로 사용하고 있다. 써보니 편하다. 거칠게 요약하면 키바인딩의 prefix다. 리더인 SPC 키를 누르면 이후 단축키가 도움말로 뜬다. 다르게 말하면 단축키의 시작이다. normal mode에서 SPC 키를 누...
org mode에서 커서를 링크에 두고 RET 키를 누르면 현재 윈도우에 링크를 연다. 디폴트 동작으로 다른 윈도우로 링크를 열게 할까 했다. C-o, C-i 키로 이전, 이후 커서 위치 점프가 더 편해서 doom emacs 디폴트 설정을 유지하게 했다. 그래도 가끔은 다른 윈도우...
The advice feature lets you add to the existing definition of a function, by advising the function. This is a cleaner method than redefining the whole fun...
emacs에서 문자열 입력을 받아서 웹 브라우저로 검색하는 대화형 함수를 짜고 있다. 문자열 입력뿐만 아니라 선택 영역도 지원하고 싶어서 찾아보게 됐다. 선택 영역이 있으면 그걸 사용하고 없으면 문자열 입력을 받게 하고 싶다.
(doom! :lang (sh +lsp +powershell) ; she sells {ba,z,fi}sh shells on the C xor )
emacs에서 링크를 열 때, OS에서 정의한 웹 브라우저(web browser)를 사용해서 연다. 회사에서 사용하는 웹 브라우저를 기본 웹 브라우저로 세팅해서 개인적으로 사용하는 웹 브라우저와 분리해서 쓰고 있다. emacs에서 여는 링크도 기본 웹 브라우저로 열리는 게 불편해서...
M-x 키를 누르든지 해서 미니 버퍼(minibuffer)에 입력할 경우 전체 문자를 지울 일이 생긴다. 그럴 때마다 백스페이스(backspace)키를 꾹 누르고 있거나 C-backspace 를 눌러 단어 단위로 지우곤 했다. 전체를 선택해서 지우는 방법이 있을 것 같아 찾아봤다.
이력서를 쓸 일이 있어서 microsoft word 앱을 실행했다. 당최 익숙해지지 않는다. plain text에 너무 익숙해졌다. 글을 쓰는 것과 예쁘게 꾸미는 걸 분리하고 싶은데, word로는 못하겠다. 약간의 시간 여유가 있어 이참에 LaTeX로 이력서를 써볼까 하는 생각이 ...
doom emacs로 설정하는 방법을 설명한다. doom emacs 설정 프레임워크를 사용하지 않는다면 doom emacs 모듈에서 사용하는 패키지 정보를 참고해서 구축하면 된다.
mermaid는 plantuml처럼 텍스트로 다이어그램을 만드는 프로그램이다. github도 지원하고 gitlab도 지원한다. plantuml보다 더 대세가 된 것 같아 쓰기 시작했다.
2013년부터 진지하게 emacs를 사용하고 있다. 지금까지 핸드메이드 init.el 설정 파일을 유지했다. 필요한 설정을 메뉴얼에서 찾거나 관련 블로그에서 정보를 얻어서 세팅했다. 조금씩 emacs가 내 손에 맞아떨어지는 재미가 있었다.
redmine 이슈 번호를 #1234 같은 식으로 사용한 문서가 있다. 이슈 번호를 복사하고 웹페이지를 열어 /issues 주소 뒤에 1234 이슈 번호를 붙여서 확인하는 게 귀찮아서 간단한 함수를 만들었다. 이슈 번호가 있는 줄에서 #숫자 를 찾아서 URL을 생성해 웹브라우저로 ...
interactive 함수에서 리스트 요소(element) 중에 하나를 고르게 하고 싶다. ’emacs - Adding Completion to (interactive) - stackoverflow.com’ 글에서 좋은 예제를 발견했다.
time-less-p, time-equal-p 같은 비교 함수 및 time-subtract, time-add 같은 계산 함수를 사용하려면 lisp timestamp로 변환해야 한다.
(parse-time-string "2020-12-03T06:58:28.649Z")
org-mode에서 웹 페이지 링크를 삽입할 때, C-c C-l 키를 눌러서 링크와 제목을 따서 추가했는데, 이걸 편하게 해주는 rexim/org-cliplink 패키지를 찾았다.
(setq initial-frame-alist '((fullscreen . maximized)))
evernote에 적은 코드를 emacs에 붙인다. 이상한 게 보인다. 배경색보다 좀 더 밝은 스페이스 같다. 마치 들여쓰기를 표시해주는 것처럼 보인다.
elixir 문서를 보고 싶은 모듈이 있다. https://hexdocs.pm/elixir/ 사이트를 방문한다. 검색 필드에 모듈이나 함수 이름으로 찾는다. 번거롭다고 말하려고 했는데, 과정을 써보니 간단하다. 하지만 이 간단한 작업도 반복되니 번거롭다. elixir 프로그래밍을 ...
휴가일 때, slack status를 휴가 로 바꾸고 있다. 멘션을 하려고 아이디를 타이핑하다 보면 휴가 상태가 바로 보여서 압박감을 준다. 진짜 급한 일이 아니면 휴가 중에 멘션을 받지 않는 좋은 효과가 있어서 휴가를 쓰면 꼭 설정한다.
마크다운(markdown) 같은 마크업(markup) 언어는 코드 블럭(code block) 문법을 지원한다. 구문 강조(Syntax highlighting)를 하거나 본문과 달리 고정 폭 글꼴을 사용해 렌더링할 수 있게 pre 태그로 감싸서 익스포트하기 위해서다.
org mode에서 < 문자를 입력하면 자동으로 > 문자를 추가해서 불편하다. < 문자 쌍을 org mode에서 딱히 사용하지도 않는다. electric-pair-mode를 활성화한 후로 이랬던 것 같다.
괄호 쌍을 만들어주는 패키지를 추가했다. 코드를 추가할 땐, 불편함이 없다. 아니 닫는 괄호를 신경 쓰지 않아도 되니 편하다. 하지만 코드를 수정할 때, 필요 없는 닫는 괄호가 추가돼서 불편하다. 괄호 쌍을 만들어주는 패키지를 추가했다면 선택한 코드를 괄호로 감싸는 기능을 추가해야...
(progn (show-paren-mode t) (setq ;; 괄호만 강조 show-paren-style 'parenthesis ;; 괄호 강조를 즉시 보여준다 show-paren-display 0 ;; 괄호 입력 후 내용 입력시 괄호를 강조 ...
ELISP> (delete 'c '(a b c d)) (a b d)
M-x org-columns 입력해 column view를 활성화하면 자동 줄 바꿈이 비활성화된다. 제목(heading)에 있는 속성(property)을 컬럼으로 보여줘 한눈에 잘 들어오는데, 자동 줄 바꿈이 비활성화 돼서 본문이 제대로 안 보인다.
gitlab todo 기능 마음에 든다. 날 멘션(@mention) 하거나 담당자(assignee)로 설정했을 때, gitlab 시스템이 todo 목록으로 추가한다. 한눈에 내가 읽거나 답변해야 할 목록을 볼 수 있다. gitlab 기본 페이지로 해놓고 쓰고 있다.
(add-hook 'before-save-hook 'delete-trailing-whitespace)
Unordered list items start with ‘-’, ‘+’, or ‘*’10 as bullets. Ordered list items start with a numeral followed by either a period or a right par...
Pure Emacs-Lisp Init Skeleton 글에서 몰랐던 use-package 패키지 설정을 배웠다. 특히 imenu 지원 변수가 반가웠다.
즉석 구문 검사(on-the-fly syntax checking) 패키지다. emacs 내장 flymake를 사용하다가 지원하는 언어가 많은 flycheck로 갈아탔다.
매주 반복하는 게 있다. 주간 계획을 세운다. 주간 계획에는 매일 반복하는 작업이 있는데, 이걸 적을 때마다 복사해서 날짜를 밀어주고 있다. org-clone-subtree-with-time-shift 함수를 모르고 무식하게 하고 있었다.
Unordered list items start with ‘-’, ‘+’, or ‘*’10 as bullets. - 2.7 Plain lists
modeline을 doom modeline으로 바꾸니 2013년부터 사용해 지겨워진 solarized light 테마도 바꾸고 싶다. 밝은 테마를 오래 써서 이번엔 어두운 테마를 쓰고 싶다. doom modeline을 찾을 때, 같이 본 doom themes로 결정했다.
아이콘이 눈에 띈다. 화려하고 정보가 풍부하다. smart modeline에서 doom modeline으로 갈아탔다.
org mode를 9.1.9 버전에서 9.2.1 버전으로 업그레이드했다. <#orgmode 최신 버전 사용하기> 글을 참고해 최신 버전으로 설치했다. emacs 26.1 버전에는 org mode 9.1.9 버전이 설치되어 있다.
vagrant@ubuntu-xenial:~$ sudo su root root@ubuntu-xenial:/home/vagrant# ls -la hello -rw-r--r-- 1 root root 6 Mar 23 23:29 hello root@ubuntu-xenial:/home/vag...
버퍼에서 클립보드를 사용하는 방법과 같다. evil-mode가 통하지 않는 미니버퍼에서 살아남으려면 익혀야 한다.
M-x shell
gnu emacs 다운로드 파일 이름 구성이 달라졌다. 의존 라이브러리 포함이 기본이 됐다. 64bit는 emacs-26.1-x86_64.zip 파일을 받으면 된다. emacs-26.1-x86_64-no-deps.zip 파일은 의존 라이브러리가 없는 파일이다.
emacs는 파일을 열어 수정하면 auto-save 파일을 만든다. # 문자로 귀마개(earmuffs)를 씌운다. foo 파일을 수정하고 있으면 #foo# 파일을 만든다.
<TRAMP로 원격 파일을 로컬 파일처럼 편집> 글은 쓰면서 macOS에서 테스트했다. windows에서 똑같이 테스트해봤다. windows에서 bash를 emacs shell로 사용하고 있어서 ssh 명령어를 실행할 수 있다. 잘 되겠지?
RET 키 누르면 호출하는 org-return 함수는 들여쓰기를 하지 않는다. 들여쓰기 안 하는 줄 바꿈을 쓸 일이 없다. RET 키 누르면 들여쓰기까지 해줬으면 좋겠다.
라이브러리 개인 설정은 어디에 둬야 할까? 라이브러리를 로드한 후에 두면 된다. 위치에 상관없이 정의하고 특정 라이브러리가 로드된 후에 실행할 수 있을까? 버전 컨트롤 안 하는 init.local.el 파일에 라이브러리 로드 후에 실행할 설정 파일을 추가하고 싶다.
merge request는 org todo로 만들어서 잘 쓰고 있다. merge request 단위로는 계속 읽고 있는데, 아쉽게도 이게 다가 아니다. master에 직접 push도 허용하고 있어서 연관된 merge request가 없는 커밋(commit)도 있다. 주로 아티스트 ...
<#orgmode org block 배경 색상> 바꾸면서 배웠다. emacs lisp에서 backquote를 처음 써봤다.
(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 c...
<#gitlab issue 또는 merge request의 링크와 제목 삽입하기> 글에서 짠 함수를 사용하려면 personal access tokens가 필요하다. github에 올려놓은 init.el 파일에 적어놓는 건 아닌 것 같다. id와 password를 공개 장...
```elisp (defconst my/solarized-light-red “#FF6E64”) (defconst my/solarized-light-green “#B4C342”) (defconst my/solarized-light-orange “#F2804F”)
버퍼 인코딩(encoding) 확인
emacs가 느리다. 내부 프로세스를 가장 먼저 의심한다. 버그로 여러 개가 띄어졌는지. 필요 없는 프로세스가 살아있는지 확인한다.
elixir 언어에 소스코드 포매팅 기능(mix format)이 추가됐다. emacs 공식 elixir mode에서 지원하려나 싶어 찾아보니 반영되려면 좀 더 있어야겠다. Subscribe 버튼을 쾅 누르고 반영되기 전까지는 mix-format 패키지를 사용하려고 한다.
’When/why should I use progn?’ 질문한 사람처럼 나도 궁금했다. progn 특수 형식(special form)은 언제 쓰는 건가? 안 써도 똑같이 실행되던데.
REST(Representational State Transfer) 웹서비스를 테스트할 수 있는 프로그램이 필요했다. 뭘 외부에서 찾나? emacs 패키지 저장소인 MELPA에서 검색해보면 될 것을.
(use-package yasnippet-snippets :ensure t) (use-package yasnippet :ensure t :config (yas-global-mode 1))
picasaweb 이미지를 로컬에 다운로드하고 이미지 주소를 교체하는 스크립트를 짰다. 기존에 올린 이미지는 google photos로 자동으로 이관됐다. 엑박 안 뜨고 잘 나오지만 레거시 지원으로 유지되는 거라서 불안하다. 그래서 간단한 스크립트를 짰다.
(add-hook 'emacs-lisp-mode-hook #'(lambda () (modify-syntax-entry ?_ "w") (modify-syntax-entry ?- "w")))
macOS Sierra를 사용하고 싶어도 Karabiner 때문에 참고 있었다. Karabiner는 지원이 끊겼고 Karabiner-Elements만 사용할 수 있는데, stable 버전까지는 먼 것 같아서.
(defun unity-open-editor-log () (interactive) (let ((path (format "C:/Users/%s/AppData/Local/Unity/Editor/Editor.log" (getenv "USER...
| C-x o | other-window | | C-x 0 | delete-window | | C-x 1 | delete-other-windows | | C-x 2 | split-window-below | | C-x 3 | split-window-ri...
| C-c p s s | projectile-ag |
(setq org-clock-idle-time 15)
projectile은 project 단위로 뭔가 할 수 있게 해준다. project는 작업 단위. 파일을 찾을 때, 내용을 검색할 때, 항상 / 디렉터리를 타깃으로 하지 않는다. 대상 디렉터리가 존재하기 마련. 이 블로그는 로컬에서 글을 쓸 때, ~/project/emacsian ...
(org-clock-persistence-insinuate) (setq org-clock-persist t) (setq org-clock-in-resume t) (setq org-clock-persist-query-resume nil)
(setq-default c-default-style "bsd" c-basic-offset 4)
DejaVu Sans Mono 폰트 잘 썼는데, 1:2 비율인 한글 폰트를 못 찾겠다. 반듯한 org table을 보고 싶은데 말이야. 그래서 작별하려고. 오랫동안 잘 썼다.
```bat SET ecPath=C:\emacs\bin\emacsclientw.exe SET ecOption=-na C:\emacs\bin\runemacs.exe REG ADD “HKCR*\shell\Open with Emacs” /t REG_SZ /v “” /d “...
(use-package smart-mode-line :ensure t :config (add-to-list 'rm-blacklist " WS" t) (add-to-list 'rm-blacklist " Undo-Tree" t) (add-to-list 'rm-blac...
(use-package org :pin org :ensure org-plus-contrib :config (require 'ox-confluence))
MSYS2 pacman으로 ag를 설치해서 사용하는데, 한글 검색이 안 된다. 커맨드 라인에서도 이런가?
(when (eq system-type 'darwin) (setq mac-command-modifier 'meta) (setq mac-option-modifier 'super))
]0;:/Users/ohyecloudy/.dotfiles ohyecloudy@air5 ~/.dotfiles (master) $
;; This function is just an example. ;;; Here either two or three semicolons are appropriate. (defun foo (x) ;;; And now, the first part of the function: ...
(use-package company :ensure t :init (add-hook 'after-init-hook 'global-company-mode) :config (setq company-idle-delay 0) (setq company-show-numb...
```elisp (add-to-list ‘package-archives ‘(“org” . “http://orgmode.org/elpa/”) t)
* headline|
M-x lgrep
(use-package ranger :ensure t :config (ranger-override-dired-mode t))
package 설치 코드와 추가 설정 코드를 따로 관리했다. 그러다 보니 init.el 파일 크기가 커져서 분리하고 분리하다 보니 관리 안 되고. 설치와 설정을 같은 코드 블럭으로 관리할 수 있는 use-package 패키지를 설치했다.
path를 만들 때, 가장 귀찮은 건 디렉터리 구분자를 넣는 것이다. 귀찮은 사람이 어디 한둘이겠나? 그래서 대부분 Path.Combine 같은 helper 함수를 만들어 놓는다.
(when windows? (let ((git-dir "C:/Program Files/Git") (bash-dir "C:/Program Files/Git/bin")) ;;... ))
Update <2018-09-01 Sat> gnu emacs 26 이상에는 GnuTLS DLLs가 포함되어 있다. 따로 설치 안 해도 된다.
(defalias 'list-buffers 'ibuffer) (setq ibuffer-expert t) (setq ibuffer-default-sorting-mode 'major-mode) (add-hook 'ibuffer-mode-hook '(lambda () ...
Win-r calc
일감에 table을 붙여넣을 일이 있으면 항상 org-mode를 사용한다.
vim 키바인딩을 사용할 수 있는 evil-mode를 사용하고 있다.
$ git config --global core.editor emacs
;;; prettify-symbols-mode (add-hook 'prog-mode-hook 'prettify-symbols-mode)
trailing whitespace 제거 스크립트를 emacs로 열면 python-mode 활성화가 안 된다.
잘 만든 패키지에 올라타자. 최근까지 업데이트가 잘 되는 elpy를 선택. MELPA에도 등록돼있다.
딱히 기본 모드 라인(mode line)에 불만을 가진 건 아니었다. 어쩌다 보니 변경하게 됐는데, 더 깔끔해진 것 같다.
```elisp ;; whitespace mode (custom-set-faces ‘(whitespace-line ((nil (:bold t :background “yellow”)))) ‘(whitespace-trailing ((nil (:bold t :backgro...
같은 디렉토리에 ~ 꼬리를 달아서 백업 파일을 남기는 게 기본 설정이다. 안전빵이니 백업을 남기는 건 좋은데, 지저분하다. 조금만 쪼물락 거리면 원하는 곳에 원하는 만큼 남길 수 있다.
OS X 기준으로 설명. 요즘 Windows에서 clojure 만질 일이 없다.
(defalias 'yes-or-no-p 'y-or-n-p)
(require 'server) (server-start)
10 Specific Ways to Improve Your Productivity With Emacs를 봤다. 난 이렇게 고수가 툭툭 던져주는 팁이 좋다. 유용한 항목이 많기 때문이다. 간단히 3개만 정리.
(setq windows? (eq system-type 'windows-nt)) (when windows? (let ((bash-dir "C:/Program Files (x86)/Git/bin")) (setq explicit-shell-file-name ...
M-x package-install <RET> color-theme-solarized
’입력기(input method), Windows IME와 충돌 해결’처럼 OS X도 처리해서 깔끔하게 사용하자.
키보드에 없는 문자인 한글을 어떻게 쓸 수 있는 걸까? 입력기(input method)가 그 역할을 해준다.
버전 24부터는 패키지 매니저인 package.el 이 디폴트 패키지다. ELPA(Emacs Lisp Package Archive)로 부터 원하는 패키지를 가져오자. 아직 패키지 업그레이드는 좀 불편하다.
init file을 쓰담쓰담 하다 보면 변경 사항을 반영해야 한다. 이왕이면 바로 반영됐으면 좋겠다. 수정하고 emacs 다시 실행해서 반영했는지 확인하고 다시 수정하고. 이렇게 수정하기는 싫다. 괴로워.
초기화 명령들을 담고 있는 파일을 vim에선 vimrc 라고 부르고 emacs는 init file 이라고 부른다. dotemacs 가 좀 더 간지나지만 메뉴얼에서 init file 이라고 부르니 이 용어를 사용한다.
| effort | Headline | Time | | |--------+---------------------------------+-----------+------| | | *Total time* ...