* Can't add bookmarks for help pages @ 2012-06-09 18:09 Kelly Dean 2012-06-09 20:48 ` Drew Adams 0 siblings, 1 reply; 9+ messages in thread From: Kelly Dean @ 2012-06-09 18:09 UTC (permalink / raw) To: help-gnu-emacs Emacs lets me add bookmarks for man and info pages, but not for help pages (it says "Buffer not visiting a file or directory"). Not letting me bookmark help pages isn't user-friendly. ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-09 18:09 Can't add bookmarks for help pages Kelly Dean @ 2012-06-09 20:48 ` Drew Adams 2012-06-09 21:00 ` Drew Adams 2012-06-11 21:35 ` Kelly Dean 0 siblings, 2 replies; 9+ messages in thread From: Drew Adams @ 2012-06-09 20:48 UTC (permalink / raw) To: 'Kelly Dean', help-gnu-emacs > Emacs lets me add bookmarks for man and info pages, but not > for help pages (it says "Buffer not visiting a file or > directory"). Not letting me bookmark help pages isn't user-friendly. What do you mean by a help page? Do you mean the output, in buffer *Help*, from a help command/key such as `C-h f' or `C-h v'? If so, then no, normally you cannot bookmark that - but see below. With Bookmark+ [*] you can bookmark a buffer that is not associated with a file, but except for certain predefined buffer types, such as Info and Dired, to jump to the bookmark later that buffer must already be present (live). And it must already have the text that you expect. So that won't help you here, not right out of the box. But it's easy enough to do. You just need to define your own new bookmark type for it. To do that you need to define two functions: 1. A function that creates the bookmark record for that type. 2. A handler function the DTRT when you "jump" to the bookmark. Here's how: (defun my-make-help-record () "Create and return a `*Help*' bookmark record." (unless (car help-xref-stack-item) (error "Cannot create bookmark - help command not known")) `(,@(bookmark-make-record-default 'NO-FILE 'NO-CONTEXT) (filename . ,bmkp-non-file-filename) (buffer-name . "*Help*") (help-fn . ,(car help-xref-stack-item)) (help-arg . ,(cadr help-xref-stack-item)) (handler . my-jump-help-bookmark))) (defun my-jump-help-bookmark (bookmark) "Jump to `*Help*' bookmark BOOKMARK. Handler function for record returned by `my-make-help-record'. BOOKMARK is a bookmark name or a bookmark record." (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) (help-arg (bookmark-prop-get bookmark 'help-arg))) (funcall help-fn help-arg))) (add-hook 'help-mode-hook #'(lambda () (set (make-local-variable 'bookmark-make-record-function) 'my-make-help-record))) Then, whenever you are in buffer `*Help*', the normal bookmark-setting key, `C-x r m', creates a bookmark that will show that same help text in `*Help*' when you jump to it. It just calls the same help command with the same argument. E.g., if you used `C-h f forward-char' and you then set a bookmark in `*Help*', then jumping to it later would show again the help for function `forward-char', with the cursor at the same spot. But why would you want such a bookmark type (assuming this was what you had in mind)? Why not just use the help commands? Why would you want a bookmark for a specific bit of help text (e.g. for a specific variable), rather than just use a general command that works for any argument (e.g. any variable name)? Probably I'm missing what you really want to do. [*] http://www.emacswiki.org/cgi-bin/wiki/BookmarkPlus ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-09 20:48 ` Drew Adams @ 2012-06-09 21:00 ` Drew Adams 2012-06-11 21:35 ` Kelly Dean 1 sibling, 0 replies; 9+ messages in thread From: Drew Adams @ 2012-06-09 21:00 UTC (permalink / raw) To: 'Kelly Dean', help-gnu-emacs > (defun my-jump-help-bookmark (bookmark) > "Jump to `*Help*' bookmark BOOKMARK. > Handler function for record returned by `my-make-help-record'. > BOOKMARK is a bookmark name or a bookmark record." > (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) > (help-arg (bookmark-prop-get bookmark 'help-arg))) > (funcall help-fn help-arg))) Sorry, did I say the cursor would be at the recorded position? Then make that: (defun my-jump-help-bookmark (bookmark) "..." (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) (help-arg (bookmark-prop-get bookmark 'help-arg)) (position (bookmark-prop-get bookmark 'position))) (funcall help-fn help-arg) (with-current-buffer "*Help*" (goto-char position)))) Or if you want buffer `*Help*' to be current, then replace the last sexp, (with-current...), with these two sexps: (pop-to-buffer "*Help*") (goto-char position) ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-09 20:48 ` Drew Adams 2012-06-09 21:00 ` Drew Adams @ 2012-06-11 21:35 ` Kelly Dean 2012-06-11 23:41 ` Drew Adams 1 sibling, 1 reply; 9+ messages in thread From: Kelly Dean @ 2012-06-11 21:35 UTC (permalink / raw) To: Drew Adams; +Cc: help-gnu-emacs --- On Sat, 6/9/12, Drew Adams <drew.adams@oracle.com> wrote: > What do you mean by a help page? Do you mean the > output, in buffer *Help*, from > a help command/key such as `C-h f' or `C-h v'? Yes. > But it's easy enough to do. You just need to define > your own new bookmark type > for it. To do that you need to define two functions: [snip] Thanks, but the first time I tried it (this is also the first time I tried Bookmark Plus), I got the message "bmkp-bookmark-name-member: Args out of range: 0, 0", and all of my bookmarks disappeared in the *Bookmark List* buffer. I killed and restarted Emacs, and when I pressed C-x r l, I got the same message again, and it doesn't list any bookmarks. I didn't lose any data which matters; I'm still just evaluating Emacs, not using it yet. While trying to reproduce the problem, I deleted the Bookmark Plus elc files which I'd generated, and deleted my-make-help-record and my-jump-help-bookmark from my init file, so the problem must be just with Bookmark Plus, or Emacs, or how I'm using them. Using Emacs 24.1: rm ~/.emacs.d/bookmarks emacs -Q C-x C-f foo ret C-x r m ret C-x C-c emacs #Using init file with just (setq load-path (cons "~/.emacs.d/lib" load-path)) (require 'bookmark+) C-x r l I get "bmkp-bookmark-name-member: Args out of range: 0, 0". I have the eight files from https://github.com/emacsmirror/bookmark-plus (dated May 16, 2012), and no elc files. Another try: rm ~/.emacs.d/bookmarks emacs #Using the same init file C-x C-f foo ret C-x r m ret I get "bmkp-autonamed-bookmark-p: Wrong type argument: stringp, nil" C-x r m foo ret C-x r l I get "let: Args out of range: 0, 0" C-x C-c Emacs writes (custom-set-variables '(bmkp-last-as-first-bookmark-file "~/.emacs.d/bookmarks")) to my init file without asking me first. > But why would you want such a bookmark type (assuming this > was what you had in > mind)? Why not just use the help commands? Why > would you want a bookmark for a > specific bit of help text (e.g. for a specific variable), > rather than just use a > general command that works for any argument (e.g. any > variable name)? I want to bookmark help pages in Emacs for the same reason that I bookmark web pages in my browser and bookmark man and info pages in Emacs: to put them on my reading list. Another reason is that I'm trying to be able to save all of my state (see my other post on this list, "Saving all state, not just some of it"), and had the idea that even though Emacs doesn't save my open help pages, I can at least bookmark them to remind me what to re-open after I restart Emacs. BTW, I happened to skim through bookmark+-mac.el and noticed this: ;; In particular, ALWAYS LOAD `bookmark+-mac.el' (not ;; `bookmark+-mac.elc') BEFORE YOU BYTE-COMPILE new versions of ;; the files, in case there have been any changes to Lisp macros ;; (in `bookmark+-mac.el'). ;; ;; (This is standard procedure for Lisp: code that depends on ;; macros needs to be byte-compiled anew after loading the ;; updated macros.) If I byte-compile Bookmark Plus, then in a few months when I update, I'm going to forget your warning, and I'm going to suffer whatever consequences result. Maybe the new packaging system in Emacs 24 helps with such dependency issues? ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-11 21:35 ` Kelly Dean @ 2012-06-11 23:41 ` Drew Adams 0 siblings, 0 replies; 9+ messages in thread From: Drew Adams @ 2012-06-11 23:41 UTC (permalink / raw) To: 'Kelly Dean'; +Cc: help-gnu-emacs > Thanks, but the first time I tried it (this is also the first > time I tried Bookmark Plus), I got the message > "bmkp-bookmark-name-member: Args out of range: 0, 0", and all > of my bookmarks disappeared in the *Bookmark List* buffer. > > I killed and restarted Emacs, and when I pressed C-x r l, I got > the same message again, and it doesn't list any bookmarks. I > didn't lose any data which matters; I'm still just evaluating > Emacs, not using it yet. 1. Thanks for the report, Kelly. Sorry for your trouble. 2. It is a good idea to back up your bookmark file(s) from time to time, and in particular before you try any new bookmark-related code. ;-) 3. That problem should be fixed now. Please download file bookmark+-1.el again. > While trying to reproduce the problem, I deleted the Bookmark Plus > elc files which I'd generated Good. It's a good idea to test first with source files, before trying byte-compiled versions. > and deleted my-make-help-record and my-jump-help-bookmark from my init > file, so the problem must be just with Bookmark Plus, or > Emacs, or how I'm using them. > Using Emacs 24.1: FWIW, `M-x emacs-version' gives more precise info about the version. There are lots of "Emacs 24.1" out there, and they can be quite different. > Another try: > rm ~/.emacs.d/bookmarks > emacs #Using the same init file > C-x C-f foo ret > C-x r m ret > I get "bmkp-autonamed-bookmark-p: Wrong type argument: stringp, nil" You entered an empty bookmark name, and apparently no default name was available. So you ended up with a bookmark with an empty name. This should be prevented now - try the latest bookmark+-1.el. > C-x r m foo ret > C-x r l > I get "let: Args out of range: 0, 0" > C-x C-c That's the first problem you mentioned, I think. > Emacs writes (custom-set-variables > '(bmkp-last-as-first-bookmark-file "~/.emacs.d/bookmarks")) > to my init file without asking me first. Yes, it does. This is a feature. It's your choice, but it's opt-out, not opt-in. You can turn it off by customizing option `bmkp-last-as-first-bookmark-file' (setting it to nil). See: (1) the doc string of option `bmkp-last-as-first-bookmark-file' (2) http://www.emacswiki.org/cgi-bin/wiki/BookmarkPlus#toc37 If you want to have a better idea of what Bookmark+ does and why, take a look at the doc. If you're worried about what it might do, read about it before using it. > BTW, I happened to skim through bookmark+-mac.el and noticed this: > ;; In particular, ALWAYS LOAD `bookmark+-mac.el' (not > ;; `bookmark+-mac.elc') BEFORE YOU BYTE-COMPILE new versions of > ;; the files, in case there have been any changes to Lisp macros > ;; (in `bookmark+-mac.el'). > ;; > ;; (This is standard procedure for Lisp: code that depends on > ;; macros needs to be byte-compiled anew after loading the > ;; updated macros.) > > If I byte-compile Bookmark Plus, then in a few months when I > update, I'm going to forget your warning, and I'm going to > suffer whatever consequences result. Maybe the new packaging > system in Emacs 24 helps with such dependency issues? As the note says, this is standard practice for Lisp. If the only code that uses a particular macro is in the same file as the macro definition (and occurs after it), then the caveat is a no-op. Otherwise, users of Lisp code that defines and uses macros need to be aware of this in general. It is not specific to Bookmark+. Yes, autoloading can help take care of this. Bookmark+ still needs a few autoload tweaks to get it to play well with package.el etc. But it is good to know about Lisp macros and get in the habit of loading them first, before byte-compiling code that uses them. The good news is that that macros file does not change very often. Again, sorry for your trouble. Please try downloading bookmark+-1.el again. Let me know if you run into another problem. You can email me off list if you prefer. ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <mailman.2514.1339265379.855.help-gnu-emacs@gnu.org>]
* Re: Can't add bookmarks for help pages [not found] <mailman.2514.1339265379.855.help-gnu-emacs@gnu.org> @ 2012-06-11 13:34 ` Stefan Monnier 2012-06-11 21:00 ` Drew Adams 0 siblings, 1 reply; 9+ messages in thread From: Stefan Monnier @ 2012-06-11 13:34 UTC (permalink / raw) To: help-gnu-emacs > Emacs lets me add bookmarks for man and info pages, but not for help pages > (it says "Buffer not visiting a file or directory"). Not letting me bookmark > help pages isn't user-friendly. Agreed. Patches to add bookmark support to help buffers would be welcome. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-11 13:34 ` Stefan Monnier @ 2012-06-11 21:00 ` Drew Adams 2012-06-12 1:03 ` Stefan Monnier 2012-06-12 17:24 ` Drew Adams 0 siblings, 2 replies; 9+ messages in thread From: Drew Adams @ 2012-06-11 21:00 UTC (permalink / raw) To: 'Stefan Monnier', help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 213 bytes --] > > Not letting me bookmark help pages isn't user-friendly. > > Agreed. Patches to add bookmark support to help buffers would > be welcome. Attached. How about a patch to upgrade bookmark.el to Bookmark+? ;-) [-- Attachment #2: help-mode-2012-06-11.patch --] [-- Type: application/octet-stream, Size: 2122 bytes --] diff -c help-mode-patched-2012-06-11.el help-mode.el *** help-mode-patched-2012-06-11.el Mon Jun 11 13:49:28 2012 --- help-mode.el Mon Jun 11 11:27:18 2012 *************** *** 274,282 **** Commands: \\{help-mode-map}" (set (make-local-variable 'revert-buffer-function) ! 'help-mode-revert-buffer) ! (set (make-local-variable 'bookmark-make-record-function) ! 'help-bookmark-make-record)) ;;;###autoload (defun help-mode-setup () --- 274,280 ---- Commands: \\{help-mode-map}" (set (make-local-variable 'revert-buffer-function) ! 'help-mode-revert-buffer)) ;;;###autoload (defun help-mode-setup () *************** *** 793,830 **** (with-output-to-temp-buffer (help-buffer) (insert string))) - \f - ;; Bookmark support - - (defvar bookmark-make-record-function) - - (declare-function bookmark-prop-get "bookmark" (bookmark prop)) - - (defun help-bookmark-make-record () - "Create and return a help-mode bookmark record. - Implements `bookmark-make-record-function' for help-mode buffers." - (unless (car help-xref-stack-item) - (error "Cannot create bookmark - help command not known")) - `(,@(bookmark-make-record-default 'NO-FILE 'NO-CONTEXT) - (buffer-name . "*Help*") - (help-fn . ,(car help-xref-stack-item)) - (help-arg . ,(cadr help-xref-stack-item)) - (position . ,(point)) - (handler . help-bookmark-jump))) - - ;;;###autoload - (defun help-bookmark-jump (bookmark) - "Jump to help-mode bookmark BOOKMARK. - Handler function for record returned by `help-bookmark-make-record'. - BOOKMARK is a bookmark name or a bookmark record." - (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) - (help-arg (bookmark-prop-get bookmark 'help-arg)) - (position (bookmark-prop-get bookmark 'position))) - (funcall help-fn help-arg) - (pop-to-buffer "*Help*") - (goto-char position))) - - (provide 'help-mode) ;;; help-mode.el ends here --- 791,796 ---- Diff finished. Mon Jun 11 13:53:50 2012 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Can't add bookmarks for help pages 2012-06-11 21:00 ` Drew Adams @ 2012-06-12 1:03 ` Stefan Monnier 2012-06-12 17:24 ` Drew Adams 1 sibling, 0 replies; 9+ messages in thread From: Stefan Monnier @ 2012-06-12 1:03 UTC (permalink / raw) To: Drew Adams; +Cc: help-gnu-emacs >> Agreed. Patches to add bookmark support to help buffers would >> be welcome. > Attached. Thanks, installed. > How about a patch to upgrade bookmark.el to Bookmark+? ;-) No idea. Send the bits you think are cleanest first, Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: Can't add bookmarks for help pages 2012-06-11 21:00 ` Drew Adams 2012-06-12 1:03 ` Stefan Monnier @ 2012-06-12 17:24 ` Drew Adams 1 sibling, 0 replies; 9+ messages in thread From: Drew Adams @ 2012-06-12 17:24 UTC (permalink / raw) To: 'Stefan Monnier', help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 406 bytes --] > > > Not letting me bookmark help pages isn't user-friendly. > > > > Agreed. Patches to add bookmark support to help buffers would > > be welcome. > > Attached. My bad. I was unclear about the *Help* xref stack. That patch worked for help functions that expect an argument but not for ones that expect no arg. The attached patch (against the latest help-mode.el) should DTRT. Sorry for the noise. [-- Attachment #2: help-mode-2012-06-12.patch --] [-- Type: application/octet-stream, Size: 1986 bytes --] diff -c "help-mode-BZR-2012-06-12.el" "help-mode-patched-2012-06-12.el" *** help-mode.el Tue Jun 12 10:00:12 2012 --- help-mode-patched-2012-06-12.el Tue Jun 12 10:02:46 2012 *************** *** 806,814 **** (unless (car help-xref-stack-item) (error "Cannot create bookmark - help command not known")) `(,@(bookmark-make-record-default 'NO-FILE 'NO-CONTEXT) - (buffer-name . "*Help*") (help-fn . ,(car help-xref-stack-item)) ! (help-arg . ,(cadr help-xref-stack-item)) (position . ,(point)) (handler . help-bookmark-jump))) --- 806,813 ---- (unless (car help-xref-stack-item) (error "Cannot create bookmark - help command not known")) `(,@(bookmark-make-record-default 'NO-FILE 'NO-CONTEXT) (help-fn . ,(car help-xref-stack-item)) ! (help-args . ,(cdr help-xref-stack-item)) (position . ,(point)) (handler . help-bookmark-jump))) *************** *** 817,826 **** "Jump to help-mode bookmark BOOKMARK. Handler function for record returned by `help-bookmark-make-record'. BOOKMARK is a bookmark name or a bookmark record." ! (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) ! (help-arg (bookmark-prop-get bookmark 'help-arg)) ! (position (bookmark-prop-get bookmark 'position))) ! (funcall help-fn help-arg) (pop-to-buffer "*Help*") (goto-char position))) --- 816,825 ---- "Jump to help-mode bookmark BOOKMARK. Handler function for record returned by `help-bookmark-make-record'. BOOKMARK is a bookmark name or a bookmark record." ! (let ((help-fn (bookmark-prop-get bookmark 'help-fn)) ! (help-args (bookmark-prop-get bookmark 'help-args)) ! (position (bookmark-prop-get bookmark 'position))) ! (apply help-fn help-args) (pop-to-buffer "*Help*") (goto-char position))) Diff finished at Tue Jun 12 10:22:26 ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-06-12 17:24 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-09 18:09 Can't add bookmarks for help pages Kelly Dean 2012-06-09 20:48 ` Drew Adams 2012-06-09 21:00 ` Drew Adams 2012-06-11 21:35 ` Kelly Dean 2012-06-11 23:41 ` Drew Adams [not found] <mailman.2514.1339265379.855.help-gnu-emacs@gnu.org> 2012-06-11 13:34 ` Stefan Monnier 2012-06-11 21:00 ` Drew Adams 2012-06-12 1:03 ` Stefan Monnier 2012-06-12 17:24 ` Drew Adams
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).