|
22 | 22 |
|
23 | 23 | ;;; Code: |
24 | 24 |
|
| 25 | +(require 'bookmark) |
25 | 26 | (require 'bug-reference) |
26 | 27 | (require 'eieio-custom) |
27 | 28 | (require 'markdown-mode) |
@@ -1297,15 +1298,16 @@ This mode itself is never used directly." |
1297 | 1298 | (defun forge-topic-setup-buffer (topic) |
1298 | 1299 | (let* ((repo (forge-get-repository topic)) |
1299 | 1300 | (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)) |
1309 | 1311 |
|
1310 | 1312 | (defun forge-topic-refresh-buffer () |
1311 | 1313 | (let ((topic (closql-reload forge-buffer-topic))) |
@@ -1386,6 +1388,28 @@ This mode itself is never used directly." |
1386 | 1388 | (cl-defmethod magit-buffer-value (&context (major-mode forge-topic-mode)) |
1387 | 1389 | (oref forge-buffer-topic slug)) |
1388 | 1390 |
|
| 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 | + |
1389 | 1413 | ;;; Headers |
1390 | 1414 |
|
1391 | 1415 | (cl-defmacro forge--define-topic-header |
|
0 commit comments