X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/61655fd96ce959e47ad8d047387e5585843fc789..026b174672c427b035009911de305992a94098d6:/lisp/bookmark.el diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 482cdf9275..7ea54a8e2b 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -1,6 +1,6 @@ ;;; bookmark.el --- set bookmarks, maybe annotate them, jump to them later -;; Copyright (C) 1993-1997, 2001-2013 Free Software Foundation, Inc. +;; Copyright (C) 1993-1997, 2001-2014 Free Software Foundation, Inc. ;; Author: Karl Fogel ;; Maintainer: Karl Fogel @@ -130,8 +130,9 @@ recently set ones come first, oldest ones come last)." :group 'bookmark) (defcustom bookmark-bmenu-use-header-line t - "Non-nil means to use an immovable header line, as opposed to inline -text at the top of the buffer." + "Non-nil means to use an immovable header line. +This is as opposed to inline text at the top of the buffer." + :version "24.4" :type 'boolean :group 'bookmark) @@ -170,7 +171,7 @@ A non-nil value may result in truncated bookmark names." (defcustom bookmark-search-delay 0.2 "Time before `bookmark-bmenu-search' updates the display." :group 'bookmark - :type 'integer) + :type 'number) (defface bookmark-menu-heading '((t (:inherit font-lock-type-face))) @@ -481,19 +482,18 @@ equivalently just return ALIST without NAME.") (defun bookmark-make-record () "Return a new bookmark record (NAME . ALIST) for the current location." (let ((record (funcall bookmark-make-record-function))) + ;; Set up default name if the function does not provide one. + (unless (stringp (car record)) + (if (car record) (push nil record)) + (setcar record (or bookmark-current-bookmark (bookmark-buffer-name)))) ;; Set up defaults. (bookmark-prop-set record 'defaults (delq nil (delete-dups (append (bookmark-prop-get record 'defaults) (list bookmark-current-bookmark - (bookmark-buffer-name)))))) - ;; Set up default name. - (if (stringp (car record)) - ;; The function already provided a default name. - record - (if (car record) (push nil record)) - (setcar record (or bookmark-current-bookmark (bookmark-buffer-name))) - record))) + (car record) + (bookmark-buffer-name)))))) + record)) (defun bookmark-store (name alist no-overwrite) "Store the bookmark NAME with data ALIST. @@ -863,31 +863,25 @@ It takes one argument, the name of the bookmark, as a string.") map) "Keymap for editing an annotation of a bookmark.") - -(defun bookmark-edit-annotation-mode (bookmark-name-or-record) - "Mode for editing the annotation of bookmark BOOKMARK-NAME-OR-RECORD. -When you have finished composing, type \\[bookmark-send-annotation]. - -\\{bookmark-edit-annotation-mode-map}" - (interactive) - (kill-all-local-variables) - (make-local-variable 'bookmark-annotation-name) - (setq bookmark-annotation-name bookmark-name-or-record) - (use-local-map bookmark-edit-annotation-mode-map) - (setq major-mode 'bookmark-edit-annotation-mode - mode-name "Edit Bookmark Annotation") +(defun bookmark-insert-annotation (bookmark-name-or-record) (insert (funcall bookmark-edit-annotation-text-func bookmark-name-or-record)) (let ((annotation (bookmark-get-annotation bookmark-name-or-record))) (if (and annotation (not (string-equal annotation ""))) - (insert annotation))) - (run-mode-hooks 'text-mode-hook)) + (insert annotation)))) + +(define-derived-mode bookmark-edit-annotation-mode + text-mode "Edit Bookmark Annotation" + "Mode for editing the annotation of bookmarks. +When you have finished composing, type \\[bookmark-send-annotation]. + +\\{bookmark-edit-annotation-mode-map}") (defun bookmark-send-edited-annotation () "Use buffer contents as annotation for a bookmark. Lines beginning with `#' are ignored." (interactive) - (if (not (eq major-mode 'bookmark-edit-annotation-mode)) + (if (not (derived-mode-p 'bookmark-edit-annotation-mode)) (error "Not in bookmark-edit-annotation-mode")) (goto-char (point-min)) (while (< (point) (point-max)) @@ -907,7 +901,10 @@ Lines beginning with `#' are ignored." (defun bookmark-edit-annotation (bookmark-name-or-record) "Pop up a buffer for editing bookmark BOOKMARK-NAME-OR-RECORD's annotation." (pop-to-buffer (generate-new-buffer-name "*Bookmark Annotation Compose*")) - (bookmark-edit-annotation-mode bookmark-name-or-record)) + (bookmark-insert-annotation bookmark-name-or-record) + (bookmark-edit-annotation-mode) + (set (make-local-variable 'bookmark-annotation-name) + bookmark-name-or-record)) (defun bookmark-buffer-name () @@ -1113,12 +1110,9 @@ then offer interactively to relocate BOOKMARK-NAME-OR-RECORD." (setq bookmark-current-bookmark bookmark-name-or-record)) nil) -(put 'bookmark-error-no-filename - 'error-conditions - '(error bookmark-errors bookmark-error-no-filename)) -(put 'bookmark-error-no-filename - 'error-message - "Bookmark has no associated file (or directory)") +(define-error 'bookmark-errors nil) +(define-error 'bookmark-error-no-filename + "Bookmark has no associated file (or directory)" 'bookmark-errors) (defun bookmark-default-handler (bmk-record) "Default handler to jump to a particular bookmark location. @@ -1304,8 +1298,8 @@ is greater than `bookmark-alist-modification-count'." ;;;###autoload (defun bookmark-write () - "Write bookmarks to a file (reading the file name with the minibuffer). -Don't use this in Lisp programs; use `bookmark-save' instead." + "Write bookmarks to a file (reading the file name with the minibuffer)." + (declare (interactive-only bookmark-save)) (interactive) (bookmark-maybe-load-default-file) (bookmark-save t)) @@ -1426,8 +1420,7 @@ explicitly. If you load a file containing bookmarks with the same names as bookmarks already present in your Emacs, the new bookmarks will get -unique numeric suffixes \"<2>\", \"<3>\", ... following the same -method buffers use to resolve name collisions." +unique numeric suffixes \"<2>\", \"<3>\", etc." (interactive (list (read-file-name (format "Load bookmarks from: (%s) "