X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/114f9c96795aff3b51b9060d7c9c1b77debcc99a..489cd5bd5a0128d6c3bee49fa2c451f2927ddea9:/lisp/woman.el diff --git a/lisp/woman.el b/lisp/woman.el index b365126ecb..291ebcee74 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -1897,6 +1897,7 @@ Argument EVENT is the invoking mouse event." (setq woman-emulation value) (woman-reformat-last-file)) +(defvar bookmark-make-record-function) (put 'woman-mode 'mode-class 'special) (defun woman-mode () @@ -1934,6 +1935,9 @@ See `Man-mode' for additional details." ;; `make-local-variable' in case imenu not yet loaded! woman-imenu-generic-expression) (set (make-local-variable 'imenu-space-replacement) " ") + ;; Bookmark support. + (set (make-local-variable 'bookmark-make-record-function) + 'woman-bookmark-make-record) ;; For reformat ... ;; necessary when reformatting a file in its old buffer: (setq imenu--last-menubar-index-alist nil) @@ -2439,7 +2443,7 @@ Preserves location of `point'." (while (and (<= (setq N (1+ N)) 0) (cond ((memq (preceding-char) '(?\ ?\t)) - (delete-backward-char 1) t) + (delete-char -1) t) ((memq (following-char) '(?\ ?\t)) (delete-char 1) t) (t nil)))) @@ -3117,7 +3121,7 @@ If optional arg CONCAT is non-nil then join arguments." (if unquote (delete-char 1) (forward-char)) (re-search-forward "\"\\|$")) (if (eq (preceding-char) ?\") - (if unquote (delete-backward-char 1)) + (if unquote (delete-char -1)) (WoMan-warn "Unpaired \" in .%s arguments." request))) ;; (re-search-forward "[^\\\n] \\|$") ; inconsistent (skip-syntax-forward "^ ")) @@ -3876,10 +3880,14 @@ Optional argument NUMERIC, if non-nil, means the argument is numeric." ;; The first two cases below could be merged (maybe)! (let ((from (point))) ;; Discard zero width filler character used to hide leading dots - ;; and zero width characters. If on a line by itself, consume the - ;; newline as well, as this may interfere with (Bug#3651). - (while (re-search-forward "\\\\[&|^]\n?" to t) - (woman-delete-match 0)) + ;; and zero width characters. + (while (re-search-forward "\\\\[&|^]" to t) + (woman-delete-match 0) + ;; If on a line by itself, consume newline as well (Bug#3651). + (and (eq (char-before (match-beginning 0)) ?\n) + (eq (char-after (match-beginning 0)) ?\n) + (delete-char 1))) + (goto-char from) ;; Interrupt text processing -- CONTINUE current text with the ;; next text line (after any control lines, unless processing to @@ -4338,7 +4346,7 @@ The variable `tab-stop-list' is a list whose elements are either left tab stop columns or pairs (COLUMN . TYPE) where TYPE is R or C." ;; Based on tab-to-tab-stop in indent.el. ;; R & C tabs probably not quite right! - (delete-backward-char 1) + (delete-char -1) (let ((tabs tab-stop-list)) (while (and tabs (>= (current-column) (woman-get-tab-stop (car tabs)))) @@ -4392,7 +4400,7 @@ Needs doing properly!" (delete-char 1) (insert woman-unpadded-space-char) (goto-char (match-end 0)) - (delete-backward-char 1) + (delete-char -1) (insert-before-markers woman-unpadded-space-char) (subst-char-in-region (match-beginning 0) (match-end 0) @@ -4512,6 +4520,37 @@ logging the message." (recenter 0)))))))) nil) ; for woman-file-readable-p etc. +;;; Bookmark Woman support. +(declare-function bookmark-make-record-default + "bookmark" (&optional no-file no-context posn)) +(declare-function bookmark-prop-get "bookmark" (bookmark prop)) +(declare-function bookmark-default-handler "bookmark" (bmk)) +(declare-function bookmark-get-bookmark-record "bookmark" (bmk)) + +;; FIXME: woman.el and man.el should be better integrated so, for +;; example, bookmarks of one can be used with the other. + +(defun woman-bookmark-make-record () + "Make a bookmark entry for a Woman buffer." + `(,(Man-default-bookmark-title) + ,@(bookmark-make-record-default 'no-file) + (location . ,(concat "woman " woman-last-file-name)) + ;; Use the same form as man's bookmarks, as much as possible. + (man-args . ,woman-last-file-name) + (handler . woman-bookmark-jump))) + +;;;###autoload +(defun woman-bookmark-jump (bookmark) + "Default bookmark handler for Woman buffers." + (let* ((file (bookmark-prop-get bookmark 'man-args)) + ;; FIXME: we need woman-find-file-noselect, since + ;; save-window-excursion can't protect us from the case where + ;; woman-find-file creates a new frame. + (buf (save-window-excursion + (woman-find-file file) (current-buffer)))) + (bookmark-default-handler + `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark))))) + (provide 'woman) ;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651