#gitlab issue 또는 merge request의 링크와 제목 삽입하기
위키로 Confluence를 사용하고 있다. gitlab 안에서는 #, ! 문자를 앞에 붙이면 자동으로 링크를 만들어 주는데, 밖이라 직접 링크를 만들어야 한다. confluence wiki markup으로 익스포트(export)하면 되니깐 org markup으로 작성하면 된다.
(defun parse-title (url)
(let ((title ""))
(with-temp-buffer
(url-insert-file-contents url)
(let* ((json-key-type 'string)
(content (json-read)))
(dolist (element content)
(when (string= (car element) "title")
(setq title (cdr element))))))
title))
응답(response)에서 제목(title)을 골라낸다. url-retrieve-synchronously 함수를 처음에 사용했다. header까지 있네. 필요 없는데, 어떻게 골라내나 찾았다. body만 삽입하는 url-insert-file-contents 함수가 있네. 귀찮은 일 안 해도 된다. json으로 변환 후 title을 찾았다.
(defun insert-gitlab-issue-link (id)
(interactive "nissue id: ")
(insert (format "[[%s/issues/%d][#%d]]" gitlab-base-url id id)))
issue 링크만 삽입할 일도 많아서 함수로 분리했다. insert 함수는 현재 버퍼에 텍스트를 추가한다. interactive 함수에 넘긴 “nissue id: ” 인자엔 사용자 입력을 받을 타입이 같이 있다. 바로 n 문자. 숫자를 입력받는다는 말이다. 유저가 입력한 숫자가 insert-gitlab-issue-link 함수 id 인자로 넘어온다.
(defun insert-gitlab-issue (id)
(interactive "nissue id: ")
(insert-gitlab-issue-link id)
(let ((url (format "%s/issues/%d?private_token=%s"
gitlab-api-base-url
id
gitlab-private-key)))
(insert (format " %s" (parse-title url)))))
issue 링크를 삽입하고 gitlab issue api를 사용해 얻은 제목을 추가한다.
편하다. 이런 것하고 나면 항상 드는 생각이 있다. “진작 할걸”
전체 코드는 ohyecloudy/dotfiles/commit/6b8dc56ae225aa59862bafa257b84314bf067dac - github.com 참고
참고
- URL - gnu.org
- 31.4 Inserting Text - gnu.org
- 20.2.2 Code Characters for interactive - gnu.org
- Go to body after url-retrieve-synchronously - emacs.stackexchange.com
C-x C-s C-x C-c