1 minute read

nil

위키로 Confluence를 사용하고 있다. gitlab 안에서는 #, ! 문자를 앞에 붙이면 자동으로 링크를 만들어 주는데, 밖이라 직접 링크를 만들어야 한다. org 버퍼에서 작성한 뒤 confluence wiki markup으로 익스포트(export)하면 되니, 일단 org 링크 형식으로 만들면 된다.

(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 함수를 썼더니 헤더까지 함께 들어왔다. 헤더를 걷어내는 대신 body만 삽입하는 url-insert-file-contents 함수를 찾아서 썼다. 조금 더 찾아보길 잘했다.

(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 참고

참고

C-x C-s C-x C-c