Skip to content

Commit aaeec51

Browse files
committed
Support bookmarking topic buffers
Closes #555.
1 parent ad381dd commit aaeec51

1 file changed

Lines changed: 33 additions & 9 deletions

File tree

lisp/forge-topic.el

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
;;; Code:
2424

25+
(require 'bookmark)
2526
(require 'bug-reference)
2627
(require 'eieio-custom)
2728
(require 'markdown-mode)
@@ -1297,15 +1298,16 @@ This mode itself is never used directly."
12971298
(defun forge-topic-setup-buffer (topic)
12981299
(let* ((repo (forge-get-repository topic))
12991300
(name (format "*forge: %s %s*" (oref repo slug) (oref topic slug)))
1300-
(magit-generate-buffer-name-function (lambda (_mode _value) name)))
1301-
(magit-setup-buffer-internal
1302-
(pcase-exhaustive (eieio-object-class topic)
1303-
('forge-discussion #'forge-discussion-mode)
1304-
('forge-issue #'forge-issue-mode)
1305-
('forge-pullreq #'forge-pullreq-mode))
1306-
t `((forge-buffer-topic ,topic))
1307-
name (or (forge-get-worktree repo) "/"))
1308-
(forge-topic-mark-read topic)))
1301+
(magit-generate-buffer-name-function (lambda (_mode _value) name))
1302+
(buffer (magit-setup-buffer-internal
1303+
(pcase-exhaustive (eieio-object-class topic)
1304+
('forge-discussion #'forge-discussion-mode)
1305+
('forge-issue #'forge-issue-mode)
1306+
('forge-pullreq #'forge-pullreq-mode))
1307+
t `((forge-buffer-topic ,topic))
1308+
name (or (forge-get-worktree repo) "/"))))
1309+
(forge-topic-mark-read topic)
1310+
buffer))
13091311

13101312
(defun forge-topic-refresh-buffer ()
13111313
(let ((topic (closql-reload forge-buffer-topic)))
@@ -1386,6 +1388,28 @@ This mode itself is never used directly."
13861388
(cl-defmethod magit-buffer-value (&context (major-mode forge-topic-mode))
13871389
(oref forge-buffer-topic slug))
13881390

1391+
;;; Bookmarks
1392+
1393+
(cl-defmethod magit-bookmark-name
1394+
(&context (major-mode forge-topic-mode))
1395+
(concat (oref (forge-get-repository forge-buffer-topic) slug)
1396+
(oref forge-buffer-topic slug)))
1397+
1398+
(cl-defmethod magit-bookmark-get-value
1399+
(bookmark &context (major-mode forge-topic-mode))
1400+
(bookmark-prop-set bookmark 'forge-topic (oref forge-buffer-topic id)))
1401+
1402+
(cl-defmethod magit-bookmark-get-buffer-create
1403+
(bookmark (_mode (derived-mode forge-topic-mode)))
1404+
(let ((magit-display-buffer-function #'identity)
1405+
(magit-display-buffer-noselect t))
1406+
(forge-topic-setup-buffer
1407+
(forge-get-topic (bookmark-prop-get bookmark 'forge-topic)))))
1408+
1409+
(put 'forge-discussion-mode 'magit-bookmark-variables t)
1410+
(put 'forge-issue-mode 'magit-bookmark-variables t)
1411+
(put 'forge-pullreq-mode 'magit-bookmark-variables t)
1412+
13891413
;;; Headers
13901414

13911415
(cl-defmacro forge--define-topic-header

0 commit comments

Comments
 (0)