---
title: "#LLM: 이맥스 URL 북마크 관리"
url: "https://notes.junghanacs.com/notes/20241218T154517"
author: "Junghan Kim"
date: "2024-12-18T15:45:00+09:00"
lastmod: "2024-12-18T15:45:00+09:00"
tags: ["bookmark"]
description: "이맥스에서 URL 북마크를 저장하고 관리하는 방법을 정리한 짧은 로그이다."
---

> [!abstract] 이 노트에 대하여
> 
> EWW와 bookmark, org-capture를 이용해 웹 주소를 Emacs 안에서 관리하는 방법을 정리한다. 웹 읽기와 링크 수집을 텍스트 워크플로우로 끌어들이는 기초 메모다.

## BIBLIOGRAPHY

## 2024-12-18

@user 이맥스에서 url 북마크 활용하는 방법?

@assistant 이맥스에서 URL 북마크를 활용하는 방법은 다음과 같습니다:

1.  **EWW (Emacs Web Wowser) 사용**:
    -   `M-x eww` 명령어를 사용하여 웹 브라우저를 열고, `B` 키를 눌러 북마크를 추가할 수 있습니다. 북마크 목록은 `M-x eww-list-bookmarks` 로 확인할 수 있습니다.

2.  **북마크 파일 설정**:
    -   기본적으로 EWW는 `~/.emacs.d/eww-bookmarks` 파일에 북마크를 저장합니다. 이 파일을 직접 편집하거나 다른 파일로 설정할 수도 있습니다.

3.  **북마크 관리**:
    -   `M-x bookmark-bmenu-list` 명령어를 사용하면 모든 북마크를 관리할 수 있는 버퍼가 열립니다. 여기서 북마크를 편집, 삭제, 정렬할 수 있습니다.

4.  **org-mode와 통합**:
    -   `org-mode` 를 사용하여 북마크를 관리할 수도 있습니다. `org-capture` 를 설정하여 URL을 쉽게 저장할 수 있습니다. 예를 들어, `org-capture-templates` 에 다음과 같은 설정을 추가할 수 있습니다:
        ```elisp
        (setq org-capture-templates
              '(("w" "Web site" entry (file+headline "~/org/links.org" "Web Links")
                 "* [[%c][%?]]")))
        ```
        이 설정으로 웹사이트를 쉽게 캡처할 수 있습니다.

5.  **외부 북마크 파일 사용**:
    -   이맥스에서 `bookmark.el` 을 사용하여 북마크를 관리할 수 있습니다. `M-x bookmark-set` 으로 북마크를 설정하고, `M-x bookmark-jump` 로 북마크로 이동할 수 있습니다.

이 방법들을 통해 이맥스에서 URL 북마크를 효과적으로 활용할 수 있습니다.

@user 아래는 어느 이맥스 설정 파일에 url-bookmarks 관련 코드인데, cc/url-bookmarks가 없거든 아래 코드를 어떻게 동작하게 만들 수 있을까?

```elisp

(load-file (concat user-emacs-directory "url-bookmarks.el"))

(defun alist-keys (alist)
  "Return keys of an ALIST."
  (mapcar 'car alist))

(defun cc/open-url (key)
  "Open a URL referenced by KEY defined in `cc/url-bookmarks'."
  (interactive (list (completing-read-default "Open URL: "
                                              (alist-keys cc/url-bookmarks))))
  (browse-url (cdr (assoc key cc/url-bookmarks))))
```

@assistant `cc/url-bookmarks` 가 정의되지 않은 경우, 아래와 같은 방법으로 코드를 수정하여 동작하게 만들 수 있습니다:

1.  **직접 URL 목록을 정의**: `cc/url-bookmarks` 를 직접 정의하여 사용할 수 있습니다.
    ```elisp
    (defvar cc/url-bookmarks
      '(("Google" . "https://www.google.com")
        ("Emacs Wiki" . "https://www.emacswiki.org")
        ;; 여기에 원하는 URL을 추가하세요
        ))
    
    (load-file (concat user-emacs-directory "url-bookmarks.el"))
    
    (defun alist-keys (alist)
      "Return keys of an ALIST."
      (mapcar 'car alist))
    
    (defun cc/open-url (key)
      "Open a URL referenced by KEY defined in `cc/url-bookmarks'."
      (interactive (list (completing-read-default "Open URL: "
                                                  (alist-keys cc/url-bookmarks))))
      (browse-url (cdr (assoc key cc/url-bookmarks))))
    ```

2.  **외부 파일에서 로드**: 만약 `url-bookmarks.el` 파일이 존재하지 않는다면, `cc/url-bookmarks` 를 정의하는 다른 파일을 로드할 수 있습니다.
    ```elisp
    (defvar cc/url-bookmarks-file (concat user-emacs-directory "my-url-bookmarks.el"))
    
    (when (file-exists-p cc/url-bookmarks-file)
      (load-file cc/url-bookmarks-file))
    
    (unless (boundp 'cc/url-bookmarks)
      (setq cc/url-bookmarks
            '(("Google" . "https://www.google.com")
              ("Emacs Wiki" . "https://www.emacswiki.org")
              ;; 여기에 원하는 URL을 추가하세요
              )))
    
    (defun alist-keys (alist)
      "Return keys of an ALIST."
      (mapcar 'car alist))
    
    (defun cc/open-url (key)
      "Open a URL referenced by KEY defined in `cc/url-bookmarks'."
      (interactive (list (completing-read-default "Open URL: "
                                                  (alist-keys cc/url-bookmarks))))
      (browse-url (cdr (assoc key cc/url-bookmarks))))
    ```

이 방법을 통해 `cc/url-bookmarks` 가 정의되지 않은 경우에도 코드가 동작하도록 만들 수 있습니다. `my-url-bookmarks.el` 파일을 만들어 URL 목록을 정의하거나, 기본 URL 목록을 직접 설정하여 사용할 수 있습니다.

@user my-url-bookmarks.el 파일을 예시로 만들어줄래?

@assistant 물론입니다. 아래는 `my-url-bookmarks.el` 파일의 예시입니다:

```elisp
;;; my-url-bookmarks.el --- Custom URL bookmarks for Emacs

;; Define the URL bookmarks
(defvar cc/url-bookmarks
  '(("Google" . "https://www.google.com")
    ("Emacs Wiki" . "https://www.emacswiki.org")
    ("GitHub" . "https://github.com")
    ("Emacs Home" . "https://www.gnu.org/software/emacs/")
    ("Stack Overflow" . "https://stackoverflow.com")
    ;; 여기에 원하는 URL을 추가하세요
    ))

(provide 'my-url-bookmarks)

;;; my-url-bookmarks.el ends here
```

이 파일을 Emacs 설정 디렉토리(보통 `~/.emacs.d/`)에 저장하면 됩니다. 이 파일을 로드하면 `cc/url-bookmarks` 변수가 정의되어 사용할 수 있습니다. 필요에 따라 URL 목록을 수정하거나 추가할 수 있습니다.

@user 별도로 여기에 북마크를 추가하는 방법도 알려줘

@assistant `my-url-bookmarks.el` 파일에 북마크를 추가하는 방법은 다음과 같습니다:

1.  **직접 편집**: 파일을 직접 열어 새로운 북마크를 추가합니다. 예를 들어, 새로운 북마크를 추가하려면 파일을 열고 다음과 같이 추가하면 됩니다:
    ```elisp
    ("New Bookmark" . "https://example.com")
    ```
    이렇게 하면 `cc/url-bookmarks` 변수에 새로운 북마크가 추가됩니다.

2.  **Emacs 내에서 편집**: Emacs 내에서 `my-url-bookmarks.el` 파일을 편집할 수도 있습니다. 다음과 같은 명령어를 사용하여 파일을 열고 편집할 수 있습니다:
    -   `M-x find-file` 명령어를 사용하여 `my-url-bookmarks.el` 파일을 엽니다.
    -   파일을 열고, 새로운 북마크를 추가한 후 저장합니다.

3.  **Emacs Lisp 코드로 추가**: Emacs Lisp 코드를 사용하여 북마크를 동적으로 추가할 수도 있습니다. 예를 들어, 다음과 같은 코드를 사용하여 새로운 북마크를 추가할 수 있습니다:
    ```elisp
    (add-to-list 'cc/url-bookmarks '("New Bookmark" . "https://example.com"))
    ```
    이 코드는 `cc/url-bookmarks` 변수에 새로운 북마크를 추가합니다. 이 코드를 실행하려면, Emacs에서 `M-x eval-expression` (또는 `M-:`)을 사용하여 코드를 입력하고 실행하면 됩니다.

4.  **Emacs Lisp 함수로 추가**: 다음과 같은 함수를 정의하여 북마크를 쉽게 추가할 수 있습니다:
    ```elisp
    (defun cc/add-url-bookmark (name url)
      "Add a new URL bookmark with NAME and URL."
      (interactive "sEnter bookmark name: \nsEnter URL: ")
      (add-to-list 'cc/url-bookmarks (cons name url))
      (message "Bookmark added: %s -> %s" name url))
    ```
    이 함수를 사용하려면, `M-x cc/add-url-bookmark` 를 실행하여 북마크 이름과 URL을 입력하면 됩니다.

이 방법들을 통해 `my-url-bookmarks.el` 파일에 북마크를 쉽게 추가할 수 있습니다. 필요에 따라 파일을 직접 편집하거나 Emacs Lisp 코드를 사용하여 북마크를 관리할 수 있습니다.

@user
