GitLab 이슈 문자열을 찾아 웹브라우저로 이슈 페이지 열기
redmine 이슈 번호를 #1234
같은 식으로 사용한 문서가 있다. 이슈 번호를 복사하고 웹페이지를 열어 /issues
주소 뒤에 1234
이슈 번호를 붙여서 확인하는 게 귀찮아서 간단한 함수를 만들었다. 이슈 번호가 있는 줄에서 #숫자
를 찾아서 URL을 생성해 웹브라우저로 열어주는 함수다.
(require 'subr-x)
(defun open-issue-page ()
(interactive)
(when (not (boundp 'issue-base-page)) (throw 'issue-base-page "not bound"))
(let* ((line (thing-at-point 'line))
;; issue number를 못 찾았을 때, number가 nil이 돼야 하는데, 공백 문자가 들어간다
;; 원인을 못 찾아서 string trim을 한 후 길이를 재서 검사한다.
(number (find-issue-number line)))
(if (> (length (string-trim number)) 0)
(browse-url (format "%s/%s" issue-base-page number))
(message "failed find issue number - %s" line))))
(defun find-issue-number (line)
(save-match-data
(string-match "#\\([0-9]+\\)" line)
(match-string 1 line)))
open-issue-page
라는 함수를 만들었다. 대화형(interactive) 함수로 만들어서 M-x open-issue-page
로 쉽게 호출할 수 있다.
issue-base-page
변수를 사용한다. 간편하게 변수를 빼서 조금의 확장성을 추가한다. (setq issue-base-page "https://mycompany/issues")
같은 식으로 설정해서 사용한다. redmine을 위해 만들었지만, 주소를 gitlab으로 바꾸면 gitlab에서도 사용할 수 있다.
thing-at-point 함수를 사용해서 커서 위치에 라인 문자열을 가져온다.
가져온 문자열에서 이슈 번호를 찾기 위해 정규식(regular expression)을 사용한다. string-match 함수를 사용하고 \\(
\\)
를 사용해 만든 그룹에 접근하려고 match-string 함수를 사용한다. match 함수는 전역 변수(global variable)를 사용하는데, 다른 match 함수 호출에 영향을 주지 않으려고 save-match-data 함수를 사용해서 match 데이터를 복원해준다.
이제 url을 만들어서 browse-url 함수로 웹브라우저로 연다.
링크
- 33.2 Examining Buffer Contents - gnu.org
- 35.4 Regular Expression Searching - gnu.org
- 35.6.4 Saving and Restoring the Match Data - gnu.org
- 35.6.2 Simple Match Data Access - gnu.org
- 46.3 Following URLs - gnu.org
- The One DevOps Platform - GitLab - about.gitlab.com
- Overview - Redmine - redmine.org
C-x C-s C-x C-c