-;;; gnus-bookmark.el --- Set real bookmarks in Gnus
+;;; gnus-bookmark.el --- Bookmarks in Gnus
+
+;; Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+;; Author: Bastien Guerry <bzg AT altern DOT org>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
-;; Copyright 2006 Bastien Guerry
-;;
-;; Author: bzg AT altern DOT org
-;; Version: $Id: gnus-bookmark.el,v 0.5 2006/06/19 10:52:08 guerry Exp guerry $
-;; Keywords: Gnus bookmark
-;; Time-stamp: <2006-06-19 11:54:04 guerry>
-;; X-URL: <http://www.cognition.ens.fr/~guerry/u/gnus-bookmark.el>
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 2, or (at
-;; your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-;;
;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
-;; This file implements real bookmarks for Gnus, closely following the
-;; way bookmark.el handles bookmarks. Most of the code comes from
-;; bookmark.el.
+;; This file implements real bookmarks for Gnus, closely following the way
+;; `bookmark.el' handles bookmarks. Most of the code comes from
+;; `bookmark.el'.
;;
;; Set a Gnus bookmark:
;; M-x `gnus-bookmark-set' from the summary buffer.
-;;
+;;
;; Jump to a Gnus bookmark:
;; M-x `gnus-bookmark-jump'.
;;
;; - renaming bookmarks in gnus-bookmark-bmenu-list
;; - better (formatted string) display in bmenu-list
-;; Put this file into your load-path and the following into your
-;; ~/.emacs: (require 'gnus-bookmark)
-
-
-;;; History:
-;;
-;; Started in 04/2006.
+;; - Integrate the `gnus-summary-*-bookmark' functionality
+;; - Initialize defcustoms from corresponding `bookmark.el' variables?
;;; Code:
-(provide 'gnus-bookmark)
-(eval-when-compile
- (require 'cl))
+(require 'gnus-sum)
;; FIXME: should avoid using C-c (no?)
;; (define-key gnus-summary-mode-map "\C-crm" 'gnus-bookmark-set)
;; (define-key global-map "\C-crj" 'gnus-bookmark-jump)
;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list)
+;; FIXME: Add keybindings, see
+;; http://thread.gmane.org/gmane.emacs.gnus.general/63101/focus=63379
+;; http://thread.gmane.org/v9fxx9fkm4.fsf@marauder.physik.uni-ulm.de
+
+;; FIXME: Check if `gnus-bookmark.el' should use
+;; `bookmark-make-cell-function'.
+;; Cf. http://article.gmane.org/gmane.emacs.gnus.general/66076
+
(defgroup gnus-bookmark nil
"Setting, annotation and jumping to Gnus bookmarks."
:group 'gnus)
-
(defcustom gnus-bookmark-default-file
- (concat (getenv "HOME") "/.gnus.bmk")
+ (cond
+ ;; Backward compatibility with previous versions:
+ ((file-exists-p "~/.gnus.bmk") "~/.gnus.bmk")
+ (t (nnheader-concat gnus-directory "bookmarks.el")))
"The default Gnus bookmarks file."
:type 'string
:group 'gnus-bookmark)
+(defcustom gnus-bookmark-file-coding-system
+ (if (mm-coding-system-p 'iso-2022-7bit)
+ 'iso-2022-7bit)
+ "Coding system used for writing Gnus bookmark files."
+ :type '(symbol :tag "Coding system")
+ :group 'gnus-bookmark)
(defcustom gnus-bookmark-sort-flag t
"Non-nil means Gnus bookmarks are sorted by bookmark names.
:type 'boolean
:group 'gnus-bookmark)
-
(defcustom gnus-bookmark-bmenu-toggle-infos t
"Non-nil means show details when listing Gnus bookmarks.
List of details is defined in `gnus-bookmark-bookmark-inline-details'.
:type 'boolean
:group 'gnus-bookmark)
-
(defcustom gnus-bookmark-bmenu-file-column 30
- "*Column at which to display details in a buffer listing Gnus bookmarks.
+ "Column at which to display details in a buffer listing Gnus bookmarks.
You can toggle whether details are shown with \\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-toggle-infos]."
:type 'integer
:group 'gnus-bookmark)
-
(defcustom gnus-bookmark-use-annotations nil
- "*If non-nil, ask for an annotation when setting a bookmark."
+ "If non-nil, ask for an annotation when setting a bookmark."
:type 'boolean
:group 'gnus-bookmark)
-
(defcustom gnus-bookmark-bookmark-inline-details '(author)
"Details to be shown with `gnus-bookmark-bmenu-toggle-infos'.
The default value is \(subject\)."
(const :tag "Message-id" message-id)))
:group 'gnus-bookmark)
-
(defcustom gnus-bookmark-bookmark-details
'(author subject date group annotation)
"Details to be shown with `gnus-bookmark-bmenu-show-details'.
(const :tag "Annotation" annotation)))
:group 'gnus-bookmark)
-
(defface gnus-bookmark-menu-heading
'((t (:inherit font-lock-type-face)))
"Face used to highlight the heading in Gnus bookmark menu buffers."
- :group 'gnus-bookmark
- :version "22.1")
-
+ :version "23.1" ;; No Gnus
+ :group 'gnus-bookmark)
(defconst gnus-bookmark-end-of-version-stamp-marker
"-*- End Of Bookmark File Format Version Stamp -*-\n"
"This string marks the end of the version stamp in a Gnus bookmark file.")
-
(defconst gnus-bookmark-file-format-version 0
"The current version of the format used by bookmark files.
You should never need to change this.")
-
(defvar gnus-bookmark-after-jump-hook nil
"Hook run after `gnus-bookmark-jump' jumps to a Gnus bookmark.")
-
(defvar gnus-bookmark-alist ()
"Association list of Gnus bookmarks and their records.
The format of the alist is
So the cdr of each bookmark is an alist too.")
+(defmacro gnus-bookmark-mouse-available-p ()
+ "Return non-nil if a mouse is available."
+ (if (featurep 'xemacs)
+ '(device-on-window-system-p)
+ '(display-mouse-p)))
+
+(defun gnus-bookmark-remove-properties (string)
+ "Remove all text properties from STRING."
+ (set-text-properties 0 (length string) nil string)
+ string)
+
;;;###autoload
(defun gnus-bookmark-set ()
"Set a bookmark for this article."
;; Set the bookmark list
(setq gnus-bookmark-alist
(cons
- (list bmk-name
- (gnus-bookmark-make-cell
+ (list (gnus-bookmark-remove-properties bmk-name)
+ (gnus-bookmark-make-record
group message-id author date subject annotation))
gnus-bookmark-alist))))
(gnus-bookmark-bmenu-surreptitiously-rebuild-list)
(gnus-bookmark-write-file))
-
-(defun gnus-bookmark-make-cell
+(defun gnus-bookmark-make-record
(group message-id author date subject annotation)
"Return the record part of a new bookmark, given GROUP MESSAGE-ID AUTHOR DATE SUBJECT and ANNOTATION."
(let ((the-record
- `((group . ,group)
- (message-id . ,message-id)
- (author . ,author)
- (date . ,date)
- (subject . ,subject)
- (annotation . ,annotation))))
+ `((group . ,(gnus-bookmark-remove-properties group))
+ (message-id . ,(gnus-bookmark-remove-properties message-id))
+ (author . ,(gnus-bookmark-remove-properties author))
+ (date . ,(gnus-bookmark-remove-properties date))
+ (subject . ,(gnus-bookmark-remove-properties subject))
+ (annotation . ,(gnus-bookmark-remove-properties annotation)))))
the-record))
-
(defun gnus-bookmark-set-bookmark-name (group author subject)
"Set bookmark name from GROUP AUTHOR and SUBJECT."
(let* ((subject (split-string subject))
- (default-name-0
- (concat (car (reverse (split-string group "[\\.:]" t))) "-"
- (car (split-string author)) "-"
- (concat (car subject) "-"
- (cadr subject))))
+ (default-name-0 ;; Should be merged with -1?
+ (concat (car (nreverse (delete "" (split-string group "[\\.:]"))))
+ "-" (car (split-string author))
+ "-" (car subject) "-" (cadr subject)))
(default-name-1
;; Strip "[]" chars from the bookmark name:
- (replace-regexp-in-string "[]_[]" "" default-name-0))
+ (gnus-replace-in-string default-name-0 "[]_[]" ""))
(name (read-from-minibuffer
(format "Set bookmark (%s): " default-name-1)
nil nil nil nil
default-name-1
name)))
-
(defun gnus-bookmark-write-file ()
"Write currently defined Gnus bookmarks into `gnus-bookmark-default-file'."
(interactive)
;; Avoir warnings?
;; (message "Saving Gnus bookmarks to file %s..." gnus-bookmark-default-file)
(set-buffer (get-buffer-create " *Gnus bookmarks*"))
- (goto-char (point-min))
- (delete-region (point-min) (point-max))
+ (erase-buffer)
(gnus-bookmark-insert-file-format-version-stamp)
(pp gnus-bookmark-alist (current-buffer))
(condition-case nil
- (write-region (point-min) (point-max)
- gnus-bookmark-default-file)
+ (let ((coding-system-for-write gnus-bookmark-file-coding-system))
+ (write-region (point-min) (point-max)
+ gnus-bookmark-default-file))
(file-error (message "Can't write %s"
gnus-bookmark-default-file)))
(kill-buffer (current-buffer))
"Saving Gnus bookmarks to file %s...done"
gnus-bookmark-default-file))))
-
(defun gnus-bookmark-insert-file-format-version-stamp ()
"Insert text indicating current version of Gnus bookmark file format."
(insert
- (format ";;;; Gnus Bookmark Format Version %d ;;;;\n"
- gnus-bookmark-file-format-version))
+ (format ";;;; Gnus Bookmark Format Version %d %s;;;;\n"
+ gnus-bookmark-file-format-version
+ (if gnus-bookmark-file-coding-system
+ (concat "-*- coding: "
+ (symbol-name gnus-bookmark-file-coding-system)
+ "; -*- ")
+ "")))
(insert ";;; This format is meant to be slightly human-readable;\n"
";;; nevertheless, you probably don't want to edit it.\n"
";;; "
gnus-bookmark-end-of-version-stamp-marker))
-
;;;###autoload
(defun gnus-bookmark-jump (&optional bmk-name)
"Jump to a Gnus bookmark (BMK-NAME)."
(gnus-bookmark-maybe-load-default-file)
(let* ((bookmark (or bmk-name
(completing-read "Jump to bookmarked article: "
- (mapcar 'car gnus-bookmark-alist))))
- (bmk-cell (cadr (assoc bookmark gnus-bookmark-alist)))
- (group (cdr (assoc 'group bmk-cell)))
- (message-id (cdr (assoc 'message-id bmk-cell))))
- (require 'gnus)
- (if group (gnus-fetch-group group))
+ gnus-bookmark-alist)))
+ (bmk-record (cadr (assoc bookmark gnus-bookmark-alist)))
+ (group (cdr (assoc 'group bmk-record)))
+ (message-id (cdr (assoc 'message-id bmk-record))))
+ (when group
+ (unless (get-buffer gnus-group-buffer)
+ (gnus-no-server))
+ (gnus-activate-group group)
+ (gnus-group-quick-select-group 0 group))
(if message-id
(or (gnus-summary-goto-article message-id nil 'force)
(if (fboundp 'gnus-summary-insert-cached-articles)
(gnus-summary-goto-article message-id nil 'force))
(message "Message could not be found."))))))
-
(defvar gnus-bookmark-already-loaded nil)
-
(defun gnus-bookmark-alist-from-buffer ()
"Return a `gnus-bookmark-alist' from the current buffer.
The buffer must of course contain Gnus bookmark format information.
;; Else no hope of getting information here.
(error "Not Gnus bookmark format"))))
-
(defun gnus-bookmark-load (file)
"Load Gnus bookmarks from FILE (which must be in bookmark format)."
(interactive
(setq gnus-bookmark-alist blist))
(error "Not Gnus bookmark format")))))))
-
(defun gnus-bookmark-maybe-load-default-file ()
"Maybe load Gnus bookmarks in `gnus-bookmark-alist'."
(and (not gnus-bookmark-already-loaded)
(file-readable-p (expand-file-name gnus-bookmark-default-file))
(gnus-bookmark-load gnus-bookmark-default-file)))
-
(defun gnus-bookmark-maybe-sort-alist ()
"Return the gnus-bookmark-alist for display.
-If the gnus-bookmark-sort-flag is non-nil, then return a sorted copy of the alist."
- (if gnus-bookmark-sort-flag
- (setq gnus-bookmark-alist
- (sort (copy-alist gnus-bookmark-alist)
- (function
- (lambda (x y) (string-lessp (car x) (car y))))))))
-
+If the gnus-bookmark-sort-flag is non-nil, then return a sorted
+copy of the alist."
+ (when gnus-bookmark-sort-flag
+ (setq gnus-bookmark-alist
+ (sort (copy-alist gnus-bookmark-alist)
+ (function
+ (lambda (x y) (string-lessp (car x) (car y))))))))
;;;###autoload
(defun gnus-bookmark-bmenu-list ()
(if (interactive-p)
(switch-to-buffer (get-buffer-create "*Gnus Bookmark List*"))
(set-buffer (get-buffer-create "*Gnus Bookmark List*")))
- (let ((inhibit-read-only t))
+ (let ((inhibit-read-only t)
+ alist name start end)
(erase-buffer)
(insert "% Gnus Bookmark\n- --------\n")
(add-text-properties (point-min) (point)
;; sort before displaying
(gnus-bookmark-maybe-sort-alist)
;; Display gnus bookmarks
- (mapcar
- (lambda (full-record)
- ;; if a Gnus bookmark has an annotation, prepend a "*"
- ;; in the list of bookmarks.
- (let ((annotation (gnus-bookmark-get-annotation
- (gnus-bookmark-name-from-full-record full-record))))
- (if (and annotation (not (string-equal annotation "")))
- (insert " *")
- (insert " "))
- (let ((start (point)))
- (insert (gnus-bookmark-name-from-full-record full-record))
- (if (and (display-color-p) (display-mouse-p))
- (add-text-properties
- start
- (save-excursion (re-search-backward
- "[^ \t]")
- (1+ (point)))
- '(mouse-face highlight
- follow-link t
- help-echo "mouse-2: go to this article")))
- (insert "\n")
- )))
- gnus-bookmark-alist)
+ (setq alist gnus-bookmark-alist)
+ (while alist
+ (setq name (gnus-bookmark-name-from-full-record (pop alist)))
+ ;; if a Gnus bookmark has an annotation, prepend a "*"
+ ;; in the list of bookmarks.
+ (insert (if (member (gnus-bookmark-get-annotation name) (list nil ""))
+ " "
+ " *"))
+ (if (gnus-bookmark-mouse-available-p)
+ (add-text-properties
+ (prog1
+ (point)
+ (insert name))
+ (let ((end (point)))
+ (prog2
+ (re-search-backward "[^ \t]")
+ (1+ (point))
+ (goto-char end)
+ (insert "\n")))
+ `(mouse-face highlight follow-link t
+ help-echo ,(format "%s: go to this article"
+ (aref gnus-mouse-2 0))))
+ (insert name "\n")))
(goto-char (point-min))
(forward-line 2)
(gnus-bookmark-bmenu-mode)
(if gnus-bookmark-bmenu-toggle-infos
(gnus-bookmark-bmenu-toggle-infos t))))
-
(defun gnus-bookmark-bmenu-surreptitiously-rebuild-list ()
"Rebuild the Bookmark List if it exists.
Don't affect the buffer ring order."
(save-window-excursion
(gnus-bookmark-bmenu-list)))))
-
(defun gnus-bookmark-get-annotation (bookmark)
"Return the annotation of Gnus BOOKMARK, or nil if none."
(cdr (assq 'annotation (gnus-bookmark-get-bookmark-record bookmark))))
-
(defun gnus-bookmark-get-bookmark (bookmark)
- "Return the full entry for Gnus BOOKMARK in `guns-bmk-alist'.
+ "Return the full entry for Gnus BOOKMARK in `gnus-bookmark-alist'.
If BOOKMARK is not a string, return nil."
(when (stringp bookmark)
- (assoc-string bookmark gnus-bookmark-alist t)))
-
+ (assoc bookmark gnus-bookmark-alist)))
(defun gnus-bookmark-get-bookmark-record (bookmark)
"Return the guts of the entry for Gnus BOOKMARK in `gnus-bookmark-alist'.
That is, all information but the name."
(car (cdr (gnus-bookmark-get-bookmark bookmark))))
-
(defun gnus-bookmark-name-from-full-record (full-record)
"Return name of FULL-RECORD \(an alist element instead of a string\)."
(car full-record))
nil
(setq gnus-bookmark-bmenu-mode-map (make-keymap))
(suppress-keymap gnus-bookmark-bmenu-mode-map t)
- (define-key gnus-bookmark-bmenu-mode-map "q" 'quit-window)
+ (define-key gnus-bookmark-bmenu-mode-map "q" (if (fboundp 'quit-window)
+ 'quit-window
+ 'bury-buffer))
(define-key gnus-bookmark-bmenu-mode-map "\C-m" 'gnus-bookmark-bmenu-select)
(define-key gnus-bookmark-bmenu-mode-map "v" 'gnus-bookmark-bmenu-select)
(define-key gnus-bookmark-bmenu-mode-map "d" 'gnus-bookmark-bmenu-delete)
(define-key gnus-bookmark-bmenu-mode-map "s" 'gnus-bookmark-bmenu-save)
(define-key gnus-bookmark-bmenu-mode-map "t" 'gnus-bookmark-bmenu-toggle-infos)
(define-key gnus-bookmark-bmenu-mode-map "a" 'gnus-bookmark-bmenu-show-details)
- (define-key gnus-bookmark-bmenu-mode-map [mouse-2] 'gnus-bookmark-bmenu-select))
+ (define-key gnus-bookmark-bmenu-mode-map gnus-mouse-2
+ 'gnus-bookmark-bmenu-select-by-mouse))
;; Bookmark Buffer Menu mode is suitable only for specially formatted
;; data.
(setq buffer-read-only t)
(setq major-mode 'gnus-bookmark-bmenu-mode)
(setq mode-name "Bookmark Menu")
- (run-mode-hooks 'gnus-bookmark-bmenu-mode-hook))
+ (gnus-run-mode-hooks 'gnus-bookmark-bmenu-mode-hook))
;; avoid compilation warnings
(defvar gnus-bookmark-bmenu-toggle-infos nil)
(gnus-bookmark-bmenu-show-infos)
(setq gnus-bookmark-bmenu-toggle-infos t))))
-
(defun gnus-bookmark-bmenu-show-infos (&optional force)
"Show infos in bmenu, maybe FORCE display of infos."
(if (and (not force) gnus-bookmark-bmenu-toggle-infos)
(let ((start (save-excursion (end-of-line) (point))))
(move-to-column gnus-bookmark-bmenu-file-column t)
;; Strip off `mouse-face' from the white spaces region.
- (if (and (display-color-p) (display-mouse-p))
+ (if (gnus-bookmark-mouse-available-p)
(remove-text-properties start (point)
'(mouse-face nil help-echo nil))))
(delete-region (point) (progn (end-of-line) (point)))
(gnus-bookmark-insert-details bmrk)
(forward-line 1))))))))
-
(defun gnus-bookmark-insert-details (bmk-name)
"Insert the details of the article associated with BMK-NAME."
(let ((start (point)))
(insert (gnus-bookmark-get-details
bmk-name
gnus-bookmark-bookmark-inline-details))
- (if (and (display-color-p) (display-mouse-p))
+ (if (gnus-bookmark-mouse-available-p)
(add-text-properties
start
(save-excursion (re-search-backward
"[^ \t]")
(1+ (point)))
- '(mouse-face highlight
+ `(mouse-face highlight
follow-link t
- help-echo "mouse-2: go to this article"))))))
-
+ help-echo ,(format "%s: go to this article"
+ (aref gnus-mouse-2 0))))))))
(defun gnus-bookmark-kill-line (&optional newline-too)
"Kill from point to end of line.
(if (and newline-too (looking-at "\n"))
(delete-char 1))))
-
(defun gnus-bookmark-get-details (bmk-name details-list)
"Get details for a Gnus BMK-NAME depending on DETAILS-LIST."
(let ((details (cadr (assoc bmk-name gnus-bookmark-alist))))
(cdr (assoc info details)))
details-list " | ")))
-
(defun gnus-bookmark-bmenu-hide-infos (&optional force)
"Hide infos in bmenu, maybe FORCE."
(if (and (not force) gnus-bookmark-bmenu-toggle-infos)
(gnus-bookmark-kill-line)
(let ((start (point)))
(insert (car gnus-bookmark-bmenu-hidden-bookmarks))
- (if (and (display-color-p) (display-mouse-p))
+ (if (gnus-bookmark-mouse-available-p)
(add-text-properties
start
(save-excursion (re-search-backward
"[^ \t]")
(1+ (point)))
- '(mouse-face highlight
+ `(mouse-face highlight
follow-link t
help-echo
- "mouse-2: go to this bookmark in other window"))))
+ ,(format "%s: go to this bookmark in other window"
+ (aref gnus-mouse-2 0))))))
(setq gnus-bookmark-bmenu-hidden-bookmarks
(cdr gnus-bookmark-bmenu-hidden-bookmarks))
(forward-line 1))))))))
-
(defun gnus-bookmark-bmenu-check-position ()
"Return non-nil if on a line with a bookmark.
The actual value returned is gnus-bookmark-alist. Else
(t
gnus-bookmark-alist)))
-
(defun gnus-bookmark-bmenu-bookmark ()
"Return a string which is bookmark of this line."
(if (gnus-bookmark-bmenu-check-position)
(if gnus-bookmark-bmenu-toggle-infos
(gnus-bookmark-bmenu-toggle-infos t))))))
-
(defun gnus-bookmark-show-details (bookmark)
"Display the annotation for BOOKMARK in a buffer."
(let ((record (gnus-bookmark-get-bookmark-record bookmark))
- (details-list gnus-bookmark-bookmark-details))
+ (old-buf (current-buffer))
+ (details gnus-bookmark-bookmark-details)
+ detail)
(save-excursion
- (let ((old-buf (current-buffer)))
- (pop-to-buffer (get-buffer-create "*Gnus Bookmark Annotation*") t)
- (delete-region (point-min) (point-max))
- (mapcar
- (lambda (detail)
- (when (not (equal (cdr (assoc detail record)) ""))
- (insert (concat (symbol-name detail) ": "
- (cdr (assoc detail record))
- "\n"))))
- gnus-bookmark-bookmark-details)
- (goto-char (point-min))
- (pop-to-buffer old-buf)))))
-
+ (pop-to-buffer (get-buffer-create "*Gnus Bookmark Annotation*") t)
+ (erase-buffer)
+ (while details
+ (setq detail (pop details))
+ (unless (equal (cdr (assoc detail record)) "")
+ (insert (symbol-name detail) ": " (cdr (assoc detail record)) "\n")))
+ (goto-char (point-min))
+ (pop-to-buffer old-buf))))
(defun gnus-bookmark-bmenu-show-details ()
"Show the annotation for the current bookmark in another window."
(if (gnus-bookmark-bmenu-check-position)
(gnus-bookmark-show-details bookmark))))
-
(defun gnus-bookmark-bmenu-mark ()
"Mark bookmark on this line to be displayed by \\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-select]."
(interactive)
(forward-line 1)
(gnus-bookmark-bmenu-check-position))))
-
(defun gnus-bookmark-bmenu-unmark (&optional backup)
"Cancel all requested operations on bookmark on this line and move down.
Optional BACKUP means move up."
(forward-line (if backup -1 1))
(gnus-bookmark-bmenu-check-position))))
-
(defun gnus-bookmark-bmenu-backup-unmark ()
"Move up and cancel all requested operations on bookmark on line above."
(interactive)
(forward-line -1)
(gnus-bookmark-bmenu-check-position))))
-
(defun gnus-bookmark-bmenu-delete ()
"Mark Gnus bookmark on this line to be deleted.
To carry out the deletions that you've marked, use
(forward-line 1)
(gnus-bookmark-bmenu-check-position))))
-
(defun gnus-bookmark-bmenu-delete-backwards ()
"Mark bookmark on this line to be deleted, then move up one line.
To carry out the deletions that you've marked, use
(forward-line 1))
(gnus-bookmark-bmenu-check-position))
-
(defun gnus-bookmark-bmenu-select ()
"Select this line's bookmark; also display bookmarks marked with `>'.
You can mark bookmarks with the
(gnus-bookmark-jump bmrk)
(bury-buffer menu))))
+(defun gnus-bookmark-bmenu-select-by-mouse (event)
+ (interactive "e")
+ (mouse-set-point event)
+ (gnus-bookmark-bmenu-select))
(defun gnus-bookmark-bmenu-load ()
"Load the Gnus bookmark file and rebuild the bookmark menu-buffer."
;; This will call `gnus-bookmark-bmenu-list'
(call-interactively 'gnus-bookmark-load)))))
-
(defun gnus-bookmark-bmenu-execute-deletions ()
"Delete Gnus bookmarks marked with \\<Buffer-menu-mode-map>\\[Buffer-menu-delete] commands."
(interactive)
(gnus-bookmark-write-file)
(message "Deleting bookmarks...done")))
-
(defun gnus-bookmark-delete (bookmark &optional batch)
"Delete BOOKMARK from the bookmark list.
Removes only the first instance of a bookmark with that name. If
nil
(gnus-bookmark-bmenu-surreptitiously-rebuild-list)))
+(provide 'gnus-bookmark)
-\f
-;;;;##########################################################################
-;;;; User Options, Variables
-;;;;##########################################################################
-
-
-
-
-
+;; arch-tag: 779df694-366f-46e8-84b2-1d0340e6f525
;;; gnus-bookmark.el ends here