* TAB for non-editing modes @ 2007-09-22 1:18 Dan Nicolaescu 2007-09-22 8:22 ` Lennart Borgman (gmail) 2007-09-22 15:47 ` TAB for non-editing modes Richard Stallman 0 siblings, 2 replies; 42+ messages in thread From: Dan Nicolaescu @ 2007-09-22 1:18 UTC (permalink / raw) To: emacs-devel For info, help, man, woman TAB does something like "goto the next link". TAB does not do anything for pcvs, dired, log-view and maybe others. It would be nice if TAB would do something for these modes too. A navigational semantic like info/help/man do seems that would be intuitive (it should certainly be better than the current "error because the buffer is read-only" behavior). (similarly for backtab) Thoughts? ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 1:18 TAB for non-editing modes Dan Nicolaescu @ 2007-09-22 8:22 ` Lennart Borgman (gmail) 2007-09-25 20:29 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Juri Linkov 2007-09-22 15:47 ` TAB for non-editing modes Richard Stallman 1 sibling, 1 reply; 42+ messages in thread From: Lennart Borgman (gmail) @ 2007-09-22 8:22 UTC (permalink / raw) To: Dan Nicolaescu; +Cc: emacs-devel Dan Nicolaescu wrote: > For info, help, man, woman TAB does something like "goto the next > link". > > TAB does not do anything for pcvs, dired, log-view and maybe > others. It would be nice if TAB would do something for these modes > too. > A navigational semantic like info/help/man do seems that would be > intuitive (it should certainly be better than the current "error > because the buffer is read-only" behavior). > (similarly for backtab) > > Thoughts? Good and important idea. I think this is what most users would expect since both the modes you mention and programs like web browsers behaves this way. ^ permalink raw reply [flat|nested] 42+ messages in thread
* S-SPC for non-editing modes (was: TAB for non-editing modes) 2007-09-22 8:22 ` Lennart Borgman (gmail) @ 2007-09-25 20:29 ` Juri Linkov 2007-09-25 21:14 ` Drew Adams 0 siblings, 1 reply; 42+ messages in thread From: Juri Linkov @ 2007-09-25 20:29 UTC (permalink / raw) To: lennart.borgman; +Cc: dann, emacs-devel >> For info, help, man, woman TAB does something like "goto the next link". >> >> TAB does not do anything for pcvs, dired, log-view and maybe >> others. It would be nice if TAB would do something for these modes >> too. A navigational semantic like info/help/man do seems that would be >> intuitive (it should certainly be better than the current "error >> because the buffer is read-only" behavior). >> (similarly for backtab) >> >> Thoughts? > > Good and important idea. I think this is what most users would expect > since both the modes you mention and programs like web browsers behaves > this way. BTW, should we bind S-SPC in some read-only modes to the same command as is bound to DEL? In most browsers S-SPC is a synonym of DEL which scrolls the page backwards, and possibly users might expect it to work the same as in Emacs, particularly in Info and view-mode. What I propose is at least to add two following bindings: (define-key Info-mode-map [?\S- ] 'Info-scroll-down) (define-key view-mode-map [?\S- ] 'View-scroll-page-backward) to info.el and view.el. Currently S-SPC is translated to SPC in these modes which is useless. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: S-SPC for non-editing modes (was: TAB for non-editing modes) 2007-09-25 20:29 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Juri Linkov @ 2007-09-25 21:14 ` Drew Adams 2007-09-25 21:59 ` S-SPC for non-editing modes Juri Linkov 2007-09-25 22:09 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Andreas Schwab 0 siblings, 2 replies; 42+ messages in thread From: Drew Adams @ 2007-09-25 21:14 UTC (permalink / raw) To: Juri Linkov, lennart.borgman; +Cc: dann, emacs-devel > BTW, should we bind S-SPC in some read-only modes to the same command > as is bound to DEL? In most browsers S-SPC is a synonym of DEL which > scrolls the page backwards, and possibly users might expect it to work > the same as in Emacs, particularly in Info and view-mode. What I propose > is at least to add two following bindings: > > (define-key Info-mode-map [?\S- ] 'Info-scroll-down) > (define-key view-mode-map [?\S- ] 'View-scroll-page-backward) > > to info.el and view.el. Currently S-SPC is translated to SPC in > these modes which is useless. Spend, spend, spend. Why not save a few bindings for a future rainy day? ;-) The argument that we should do this because most browsers do it is a good one, if true (I take your word for it). But the argument that S-SPC is currently useless because it is unbound is not a reason to bind it for this purpose. Are new users really finding their habits so terribly violated by Emacs that we need to make changes such as this? PageUp and PageDown are also used in most browsers, and Emacs supports them. How much is enough? Go ahead, if you really think it's helpful. If a better use for S-SPC comes up, I'll argue to change it then. ;-) ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: S-SPC for non-editing modes 2007-09-25 21:14 ` Drew Adams @ 2007-09-25 21:59 ` Juri Linkov 2007-09-25 22:12 ` Drew Adams 2007-09-25 22:09 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Andreas Schwab 1 sibling, 1 reply; 42+ messages in thread From: Juri Linkov @ 2007-09-25 21:59 UTC (permalink / raw) To: Drew Adams; +Cc: dann, lennart.borgman, emacs-devel > But the argument that S-SPC is currently useless because it is unbound is > not a reason to bind it for this purpose. It is not unbound, it duplicates SPC. > Are new users really finding their habits so terribly violated by Emacs that > we need to make changes such as this? PageUp and PageDown are also used in > most browsers, and Emacs supports them. How much is enough? Emacs supports PageUp and PageDown, but in very inconvenient way: typing PageUp on the first screen doesn't move point to the beginning of the buffer. > Go ahead, if you really think it's helpful. If a better use for S-SPC comes > up, I'll argue to change it then. ;-) I know a better use, but only for editing modes where S-SPC could insert a non-breaking space. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: S-SPC for non-editing modes 2007-09-25 21:59 ` S-SPC for non-editing modes Juri Linkov @ 2007-09-25 22:12 ` Drew Adams 0 siblings, 0 replies; 42+ messages in thread From: Drew Adams @ 2007-09-25 22:12 UTC (permalink / raw) To: Juri Linkov; +Cc: dann, lennart.borgman, emacs-devel > > But the argument that S-SPC is currently useless because it is > > unbound is not a reason to bind it for this purpose. > > It is not unbound, it duplicates SPC. S-SPC is not specifically bound. It is mapped to SPC by default. But this quibble is unimportant. > > Are new users really finding their habits so terribly violated > > by Emacs that we need to make changes such as this? PageUp and > > PageDown are also used in most browsers, and Emacs supports > > them. How much is enough? > > Emacs supports PageUp and PageDown, but in very inconvenient way: > typing PageUp on the first screen doesn't move point to the beginning of > the buffer. OK. Should that be changed? Why have two different behaviors for such scrolling? Better to duplicate whichever behavior is best. Unless there is a need for each. > > Go ahead, if you really think it's helpful. If a better use for > > S-SPC comes up, I'll argue to change it then. ;-) > > I know a better use, but only for editing modes where S-SPC could insert a > non-breaking space. I was thinking of that also. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: S-SPC for non-editing modes (was: TAB for non-editing modes) 2007-09-25 21:14 ` Drew Adams 2007-09-25 21:59 ` S-SPC for non-editing modes Juri Linkov @ 2007-09-25 22:09 ` Andreas Schwab 1 sibling, 0 replies; 42+ messages in thread From: Andreas Schwab @ 2007-09-25 22:09 UTC (permalink / raw) To: Drew Adams; +Cc: Juri Linkov, dann, lennart.borgman, emacs-devel "Drew Adams" <drew.adams@oracle.com> writes: > Go ahead, if you really think it's helpful. If a better use for S-SPC comes > up, I'll argue to change it then. ;-) Since S-SPC cannot normally be input from a tty it is unlikely to become the standard key binding for a command. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 1:18 TAB for non-editing modes Dan Nicolaescu 2007-09-22 8:22 ` Lennart Borgman (gmail) @ 2007-09-22 15:47 ` Richard Stallman 2007-09-22 16:35 ` Dan Nicolaescu 1 sibling, 1 reply; 42+ messages in thread From: Richard Stallman @ 2007-09-22 15:47 UTC (permalink / raw) To: Dan Nicolaescu; +Cc: emacs-devel TAB does not do anything for pcvs, dired, log-view and maybe others. It would be nice if TAB would do something for these modes too. It seems harmless to add that functionality in modes that are read-only and have distinguishable links. I don't see that this is very useful in Dired, though. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 15:47 ` TAB for non-editing modes Richard Stallman @ 2007-09-22 16:35 ` Dan Nicolaescu 2007-09-22 19:01 ` Drew Adams 2007-09-23 15:04 ` Richard Stallman 0 siblings, 2 replies; 42+ messages in thread From: Dan Nicolaescu @ 2007-09-22 16:35 UTC (permalink / raw) To: rms; +Cc: emacs-devel Richard Stallman <rms@gnu.org> writes: > TAB does not do anything for pcvs, dired, log-view and maybe > others. It would be nice if TAB would do something for these modes > too. > > It seems harmless to add that functionality in modes that are > read-only and have distinguishable links. I don't see that this > is very useful in Dired, though. Why not? I'd rather have TAB run dired-next-line instead of throwing an error "Buffer is read-only" as it does now. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: TAB for non-editing modes 2007-09-22 16:35 ` Dan Nicolaescu @ 2007-09-22 19:01 ` Drew Adams 2007-09-22 21:23 ` Lennart Borgman (gmail) ` (2 more replies) 2007-09-23 15:04 ` Richard Stallman 1 sibling, 3 replies; 42+ messages in thread From: Drew Adams @ 2007-09-22 19:01 UTC (permalink / raw) To: emacs-devel > > TAB does not do anything for pcvs, dired, log-view and maybe others > > It would be nice if TAB would do something for these modes too. > > > > It seems harmless to add that functionality in modes that are > > read-only and have distinguishable links. I don't see that this > > is very useful in Dired, though. > > Why not? I'd rather have TAB run dired-next-line instead of throwing > an error "Buffer is read-only" as it does now. That is truly a waste of a key binding, IMO. `n' does that already. I have nothing against giving `TAB' a useful binding in Dired, but there is no sense duplicating `n' for that. If no truly useful Dired binding for `TAB' can be found now, then let's leave it alone - something will come up eventually. The problem with binding it now to something that is not particularly useful is that that binding can become cast in stone, a sacred cow that is later defended against replacing with a truly useful binding. If we don't bind `TAB' in Dired to something useful now, we might consider unbinding it there, more precisely, binding it to `undefined'. It is silly for `TAB' to invoke `indent-for-tab-command' in Dired. Generalizing this (note: a topic change) - Similarly for other bindings that invoke commands that modify the buffer - why not bind them to `undefined'? I do that in read-only buffers such as *Buffer List*. Besides preventing the read-only error message, it prevents users from thinking that a key sequence might be unavailable for their own use. I made this suggestion on 2004-10-17 in thread "bind buffer-modifying keys to `undefined' in buffers where nomodification should occur?". Kim suggested perhaps using `ignore' instead of `undefined', but he pointed out some problems with `C-h b' for `ignore'. RMS said he didn't want to make such a change then, because the release of Emacs 22 was imminent (;-)). Perhaps this or something similar could be reconsidered now. FWIW, I do this rather primitively, by just having a list of buffer-modifying commands and then binding them to `undefined'. Perhaps a better mechanism could be devised. Here is the code I use. As you can see, I neglected to include `indent-for-tab-command', and there are no doubt other buffer-modifying commands that might be included. (defun undefine-keys-bound-to (command keymap &optional oldmap) "Bind to `undefined' all keys currently bound to COMMAND in KEYMAP. If optional argument OLDMAP is specified, rebinds in KEYMAP as `undefined' all keys that are currently bound to COMMAND in OLDMAP but are not bound in KEYMAP." (unless (where-is-internal command keymap 'first-only) (substitute-key-definition command 'undefined keymap oldmap))) (defcustom buffer-modifying-cmds '(delete-char quoted-insert transpose-chars kill-region yank kill-word indent-new-comment-line kill-sentence fill-paragraph transpose-words yank-pop zap-to-char just-one-space indent-for-comment delete-indentation kill-sexp split-line transpose-sexps backward-kill-sentence) "*Buffer-modifying commands used in `undefine-killer-commands'." :type '(repeat symbol)) (defun undefine-killer-commands (keymap &optional oldmap) "Bind `undefined' to KEYMAP keys bound to buffer-modifying commands. If optional arg OLDMAP is specified, rebinds in KEYMAP as `undefined' the keys that are currently bound to buffer-modifying commands in OLDMAP but are not bound in KEYMAP. The buffer-modifying commands used: `buffer-modifying-cmds'." (mapcar (lambda (cmd) (undefine-keys-bound-to cmd keymap oldmap)) buffer-modifying-cmds)) A typical use: (undefine-killer-commands Buffer-menu-mode-map (current-global-map)) ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 19:01 ` Drew Adams @ 2007-09-22 21:23 ` Lennart Borgman (gmail) 2007-09-22 21:40 ` Drew Adams 2007-09-22 21:51 ` Dan Nicolaescu 2007-09-23 15:05 ` Richard Stallman 2 siblings, 1 reply; 42+ messages in thread From: Lennart Borgman (gmail) @ 2007-09-22 21:23 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Drew Adams wrote: >> Why not? I'd rather have TAB run dired-next-line instead of throwing >> an error "Buffer is read-only" as it does now. > > That is truly a waste of a key binding, IMO. `n' does that already. I have > nothing against giving `TAB' a useful binding in Dired, but there is no > sense duplicating `n' for that. From a usability point of view I think it is worth pointing out that TAB/S-TAB is very often used for "go to next/prev field". A new user would probably expect that kind of use in dired too. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: TAB for non-editing modes 2007-09-22 21:23 ` Lennart Borgman (gmail) @ 2007-09-22 21:40 ` Drew Adams 0 siblings, 0 replies; 42+ messages in thread From: Drew Adams @ 2007-09-22 21:40 UTC (permalink / raw) To: emacs-devel > >> Why not? I'd rather have TAB run dired-next-line instead of throwing > >> an error "Buffer is read-only" as it does now. > > > > That is truly a waste of a key binding, IMO. `n' does that > > already. I have nothing against giving `TAB' a useful binding > > in Dired, but there is no sense duplicating `n' for that. > > From a usability point of view I think it is worth pointing out that > TAB/S-TAB is very often used for "go to next/prev field". A new user > would probably expect that kind of use in dired too. Are there "fields" in Dired? If not, what you say is also true for a buffer foo.txt: TAB and S-TAB should navigate (where?). Making things easier for new users is as much a concern for me as for you, I think, but key binding is not a place where we should bend over backwards to placate what a new user might happen to be used to. Unless there is no other reason not to. Which there is - there are always better reasons to choose key bindings, and the number of reasonable key sequences is limited. New users and old alike do not need Yet Another Way to get to the next line in Dired. Please. We already have `dired-next-line' bound to `n', `SPC', `C-n', and `down'. Isn't that enough? `TAB' will come in handy for something very useful in Dired one day, I'm sure of it. Patience, Grasshopper, patience. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 19:01 ` Drew Adams 2007-09-22 21:23 ` Lennart Borgman (gmail) @ 2007-09-22 21:51 ` Dan Nicolaescu 2007-09-22 22:16 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams 2007-09-22 22:44 ` TAB for non-editing modes Drew Adams 2007-09-23 15:05 ` Richard Stallman 2 siblings, 2 replies; 42+ messages in thread From: Dan Nicolaescu @ 2007-09-22 21:51 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel "Drew Adams" <drew.adams@oracle.com> writes: > > > TAB does not do anything for pcvs, dired, log-view and maybe > others > > > It would be nice if TAB would do something for these modes too. > > > > > > It seems harmless to add that functionality in modes that are > > > read-only and have distinguishable links. I don't see that this > > > is very useful in Dired, though. > > > > Why not? I'd rather have TAB run dired-next-line instead of throwing > > an error "Buffer is read-only" as it does now. > > That is truly a waste of a key binding, IMO. `n' does that already. I have > nothing against giving `TAB' a useful binding in Dired, but there is no > sense duplicating `n' for that. > > If no truly useful Dired binding for `TAB' can be found now, then let's > leave it alone - something will come up eventually. The problem with binding > it now to something that is not particularly useful is that that binding can > become cast in stone, a sacred cow that is later defended against replacing > with a truly useful binding. > > If we don't bind `TAB' in Dired to something useful now, we might consider > unbinding it there, more precisely, binding it to `undefined'. It is silly > for `TAB' to invoke `indent-for-tab-command' in Dired. Duplication is not a good way to evaluate this, we have many keys that are duplicated. The question is it useful? Is it intuitive to use? Is it consistent with other uses of the same key? IMO the answer is YES to all those questions. > Generalizing this (note: a topic change) - Please start another thread with this, with a different subject. ^ permalink raw reply [flat|nested] 42+ messages in thread
* bind commands that change buffer contents to `undefined' when read-only? 2007-09-22 21:51 ` Dan Nicolaescu @ 2007-09-22 22:16 ` Drew Adams 2007-09-23 0:37 ` bind commands that change buffer contents to `undefined' whenread-only? Drew Adams 2007-09-22 22:44 ` TAB for non-editing modes Drew Adams 1 sibling, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-22 22:16 UTC (permalink / raw) To: emacs-devel >> Generalizing this (note: a topic change) - > > Please start another thread with this, with a different subject. OK. The rest of this is from my mail with subject "TAB for editing modes": ------8<------------------ Why not bind commands that modify buffer content to `undefined' when the buffer is read-only? I do that in read-only buffers such as *Buffer List*. Besides preventing the read-only error message, it prevents users from thinking that a key sequence might be unavailable for their own use. I made this suggestion on 2004-10-17 in thread "bind buffer-modifying keys to `undefined' in buffers where nomodification should occur?". Kim suggested perhaps using `ignore' instead of `undefined', but he pointed out some problems with `C-h b' for `ignore'. RMS said he didn't want to make such a change then, because the release of Emacs 22 was imminent (;-)). Perhaps this or something similar could be reconsidered now. FWIW, I do this rather primitively, by just having a list of buffer-modifying commands and then binding them to `undefined'. Perhaps a better mechanism could be devised. Here is the code I use. As you can see, I neglected to include `indent-for-tab-command', and there are no doubt other buffer-modifying commands that might be included. (defun undefine-keys-bound-to (command keymap &optional oldmap) "Bind to `undefined' all keys currently bound to COMMAND in KEYMAP. If optional argument OLDMAP is specified, rebinds in KEYMAP as `undefined' all keys that are currently bound to COMMAND in OLDMAP but are not bound in KEYMAP." (unless (where-is-internal command keymap 'first-only) (substitute-key-definition command 'undefined keymap oldmap))) (defcustom buffer-modifying-cmds '(delete-char quoted-insert transpose-chars kill-region yank kill-word indent-new-comment-line kill-sentence fill-paragraph transpose-words yank-pop zap-to-char just-one-space indent-for-comment delete-indentation kill-sexp split-line transpose-sexps backward-kill-sentence) "*Buffer-modifying commands used in `undefine-killer-commands'." :type '(repeat symbol)) (defun undefine-killer-commands (keymap &optional oldmap) "Bind `undefined' to KEYMAP keys bound to buffer-modifying commands. If optional arg OLDMAP is specified, rebinds in KEYMAP as `undefined' the keys that are currently bound to buffer-modifying commands in OLDMAP but are not bound in KEYMAP. The buffer-modifying commands used: `buffer-modifying-cmds'." (mapcar (lambda (cmd) (undefine-keys-bound-to cmd keymap oldmap)) buffer-modifying-cmds)) A typical use: (undefine-killer-commands Buffer-menu-mode-map (current-global-map)) ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' whenread-only? 2007-09-22 22:16 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams @ 2007-09-23 0:37 ` Drew Adams 2007-09-23 1:20 ` bind commands that change buffer contents to `undefined'whenread-only? Drew Adams 0 siblings, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-23 0:37 UTC (permalink / raw) To: emacs-devel > (defcustom buffer-modifying-cmds > '(delete-char quoted-insert transpose-chars kill-region yank kill-word > indent-new-comment-line kill-sentence fill-paragraph > transpose-words yank-pop zap-to-char just-one-space > indent-for-comment delete-indentation kill-sexp split-line > transpose-sexps backward-kill-sentence) > "*Buffer-modifying commands used in `undefine-killer-commands'." > :type '(repeat symbol)) That definition is pretty old and skimpy. FWIW, here are some more such commands. Many of these are not bound to keys by default, but including them wouldn't hurt. (defcustom buffer-modifying-cmds '(align-newline-and-indent backward-delete-char backward-delete-char-untabify backward-kill-paragraph backward-kill-sentence backward-kill-sexp backward-kill-word bookmark-insert bookmark-insert-location canonically-space-region capitalize-region capitalize-word c-backslash-region c-context-line-break center-line center-paragraph center-region c-fill-paragraph c-hungry-delete-backwards c-hungry-delete-forward c-indent-command c-indent-defun c-indent-exp clear-rectangle clipboard-kill-region comint-kill-input comint-truncate-buffer comment-dwim comment-indent-new-line comment-kill comment-region comment-or-uncomment-region complete-symbol compose-last-chars compose-region dabbrev-completion dabbrev-expand decompose-region delete-backward-char delete-blank-lines delete-char delete-horizontal-space delete-indentation delete-matching-lines delete-non-matching-lines delete-pair delete-rectangle delete-region delete-trailing-whitespace delete-whitespace-rectangle delimit-columns-region downcase-region downcase-word edit-picture expand-abbrev expand-region-abbrevs fill-individual-paragraphs fill-nonuniform-paragraphs fill-paragraph fill-region fill-region-as-paragraph format-insert-file flush-lines ido-insert-buffer ido-insert-file increase-left-margin increase-right-margin indent-code-rigidly indent-for-comment indent-for-tab-command indent-line-function indent-new-comment-line indent-pp-sexp indent-region indent-rigidly insert-abbrevs insert-buffer insert-file insert-file-literally insert-kbd-macro insert-pair insert-parentheses insert-register insert-zippyism join-line justify-current-line just-one-space keep-lines kill-backward-up-list kill-comment kill-line kill-paragraph kill-rectangle kill-region kill-sentence kill-sexp kill-whole-line kill-word lisp-complete-symbol lisp-fill-paragraph lisp-indent-line morse-region mouse-kill mouse-yank-at-click mouse-yank-secondary newline newline-and-indent open-line open-rectangle query-replace query-replace-regexp quoted-insert reindent-then-newline-and-indent replace-regexp replace-string repunctuate-sentences reverse-region rot13-region self-insert-command set-justification-center set-justification-full set-justification-left set-justification-none set-justification-right set-left-margin set-right-margin skeleton-pair-insert-maybe smiley-region sort-columns sort-fields sort-lines sort-numeric-fields sort-pages sort-paragraphs split-line string-insert-rectangle string-rectangle studlify-region table-delete-column table-delete-row table-heighten-cell table-insert table-insert-column table-insert-row table-insert-sequence table-justify table-shorten-cell table-span-cell table-split-cell table-split-cell-horizontally table-split-cell-vertically table-widen-cell tab-to-tab-stop tabify texinfo-format-region tildify-region time-stamp todo-insert-item translate-region transpose-chars transpose-lines transpose-paragraphs transpose-sentences transpose-sexps transpose-words ucs-insert uncomment-region unmorse-region untabify upcase-region upcase-word vc-insert-headers whitespace-cleanup whitespace-cleanup-region yank yank-pop yank-rectangle zap-to-char) "*Buffer-modifying commands used in `undefine-killer-commands'." :type '(repeat symbol)) ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined'whenread-only? 2007-09-23 0:37 ` bind commands that change buffer contents to `undefined' whenread-only? Drew Adams @ 2007-09-23 1:20 ` Drew Adams 2007-09-23 1:49 ` Stefan Monnier 0 siblings, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-23 1:20 UTC (permalink / raw) To: emacs-devel Scrap the implementation I sent. Sorry about that. The general idea is OK, but it must not override any existing local binding of the key. It's not enough to check that the command is not bound in the local map; the key also must not be bound in the local map. So, for instance, even though `self-insert-command' is not bound in `dired-mode-map', that's not enough to determine that we should substitute `undefined' for the bindings of all keys that are globally bound to `self-insert-command'. `R', for instance is bound in `dired-mode-map', so it must not be rebound to `undefined'. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined'whenread-only? 2007-09-23 1:20 ` bind commands that change buffer contents to `undefined'whenread-only? Drew Adams @ 2007-09-23 1:49 ` Stefan Monnier 2007-09-23 2:18 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams 0 siblings, 1 reply; 42+ messages in thread From: Stefan Monnier @ 2007-09-23 1:49 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel > Scrap the implementation I sent. Sorry about that. The general idea is OK, > but it must not override any existing local binding of the key. > It's not enough to check that the command is not bound in the local map; the > key also must not be bound in the local map. So, for instance, even though > `self-insert-command' is not bound in `dired-mode-map', that's not enough to > determine that we should substitute `undefined' for the bindings of all keys > that are globally bound to `self-insert-command'. `R', for instance is bound > in `dired-mode-map', so it must not be rebound to `undefined'. That's not a problem. Your suggestion is really just an extension of `suppress-keymap' and should be used similarly: by putting those `undefined' bindings first and then adding the local bindings. Stefan ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 1:49 ` Stefan Monnier @ 2007-09-23 2:18 ` Drew Adams 2007-09-23 18:16 ` Stefan Monnier 0 siblings, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-23 2:18 UTC (permalink / raw) To: emacs-devel > That's not a problem. Your suggestion is really just an extension of > `suppress-keymap' and should be used similarly: by putting those > `undefined' bindings first and then adding the local bindings. Yes, that would be OK for Emacs. In my own use, however, the various keymaps can be already defined before I get to them. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 2:18 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams @ 2007-09-23 18:16 ` Stefan Monnier 2007-09-23 20:42 ` Drew Adams 2007-09-24 18:19 ` bind commands that change buffer contents to `undefined' when read-only? Richard Stallman 0 siblings, 2 replies; 42+ messages in thread From: Stefan Monnier @ 2007-09-23 18:16 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel >> That's not a problem. Your suggestion is really just an extension of >> `suppress-keymap' and should be used similarly: by putting those >> `undefined' bindings first and then adding the local bindings. > Yes, that would be OK for Emacs. In my own use, however, the various keymaps > can be already defined before I get to them. In any case I don't like much this idea of adding explicit `undefined' bindings, just in order to get a "undefined" message rather than a "buffer is read-only" error. So maybe a better direction is to change the toplevel so that using a command with a "*" (or a call to barf-if-buffer-read-only) in its interactive spec when the buffer is read-only will signal "undefined" rather than signalling the error. And similarly C-h k may give information such as "the global binding is foo but is of no use in this buffer because it's read-only". Stefan ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 18:16 ` Stefan Monnier @ 2007-09-23 20:42 ` Drew Adams 2007-09-24 1:25 ` Stefan Monnier 2007-09-24 15:24 ` Davis Herring 2007-09-24 18:19 ` bind commands that change buffer contents to `undefined' when read-only? Richard Stallman 1 sibling, 2 replies; 42+ messages in thread From: Drew Adams @ 2007-09-23 20:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel > In any case I don't like much this idea of adding explicit `undefined' > bindings, just in order to get a "undefined" message rather than > a "buffer is read-only" error. > > So maybe a better direction is to change the toplevel so that using > a command with a "*" (or a call to barf-if-buffer-read-only) in its > interactive spec when the buffer is read-only will signal > "undefined" rather than signalling the error. And similarly C-h k > may give information such as "the global binding is foo but is of > no use in this buffer because it's read-only". Sounds OK to me at first, but: 1. We would need to make sure that all such bases were covered. `C-h k' is one thing; `C-h b' might be another; the read-only error text is another; and there are perhaps others. 2. It doesn't really help users see that such keys are, in effect, available for binding in such read-only contexts. That was a main motivation behind my proposal. A user might check `C-h b' in Dired, for example, and s?he would see what? A long message explaining what you suggested, for each such key? Is it as clear to read something like that as it is to read `undefined'? I don't think so. And we might end up complicating the code that way, having different kinds of such messages for different contexts (error message, `C-h b' binding list, `C-h k', and so on). I don't think you have given any reason _why_ you "don't like much this idea"; you've just stated a preference. What are the disadvantages you see to this idea? Deciding on a good way to handle this should involve weighing the pros & cons. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 20:42 ` Drew Adams @ 2007-09-24 1:25 ` Stefan Monnier 2007-09-24 2:02 ` Drew Adams 2007-09-24 15:24 ` Davis Herring 1 sibling, 1 reply; 42+ messages in thread From: Stefan Monnier @ 2007-09-24 1:25 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel > 2. It doesn't really help users see that such keys are, in effect, available > for binding in such read-only contexts. That was a main motivation behind my *All* keys are available for binding. The only thing that really matters in this respect is whether the user uses the predefined binding or not. If not, then the key is available, regardless of whether the associated command is useless or not. E.g. the user is free to rebind C-M-t to anything she wants. I wouldn't do it because I often use this binding, but if she doesn't then I see no reason for her not to do it. Stefan ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 1:25 ` Stefan Monnier @ 2007-09-24 2:02 ` Drew Adams 0 siblings, 0 replies; 42+ messages in thread From: Drew Adams @ 2007-09-24 2:02 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel > > 2. It doesn't really help users see that such keys are, in > > effect, available for binding in such read-only contexts. > > That was a main motivation behind my > > *All* keys are available for binding. The only thing that really > matters in this respect is whether the user uses the predefined > binding or not. If not, then the key is available, regardless of > whether the associated command is useless or not. Of course. I, for one, am more likely to choose a key binding as "available" if it is undefined - that's what I meant. But yes, you are strictly correct: all keys are available for rebinding. And yes, being bound to command `undefined' is not strictly being undefined either... But it indicates that the current mode/buffer/map has declared no a priori use for that key. That's a good indication to a user that s?he will miss nothing by binding that key. I'd say it's practically an invitation. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 20:42 ` Drew Adams 2007-09-24 1:25 ` Stefan Monnier @ 2007-09-24 15:24 ` Davis Herring 2007-09-24 16:12 ` Drew Adams 1 sibling, 1 reply; 42+ messages in thread From: Davis Herring @ 2007-09-24 15:24 UTC (permalink / raw) To: Drew Adams; +Cc: Stefan Monnier, emacs-devel > 2. It doesn't really help users see that such keys are, in effect, > available for binding in such read-only contexts. That was a main > motivation behind my proposal. Exactly how much help does an semi-knowledgeable user (who knows enough to want to bind a key) need beyond the error? "Hmm... dired... I'd like a key to convert DOS to Unix line endings. How about M-u for "Make Unix"? That sounds good." M-u Buffer is read-only: #<buffer contrib> "Huh?" C-h c M-u M-u is bound to upcase-word "Oh, that's a nice command. But it doesn't work...?" M-u Buffer is read-only: #<buffer contrib> "Yup, it's taken, but it doesn't work here. A shame, too. I could have used it!" I don't see the reaction to C-h c proceeding like that, but rather "Aha. Good to know, but I can obviously use it here, since it doesn't work anyway." Davis PS - Never mind that there's no command to which to bind a key that does what this hypothetical user wants. They found the defun scrawled on a blackboard in a sewer or something. -- This product is sold by volume, not by mass. If it appears too dense or too sparse, it is because mass-energy conversion has occurred during shipping. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 15:24 ` Davis Herring @ 2007-09-24 16:12 ` Drew Adams 2007-09-24 17:38 ` Davis Herring 2007-09-24 18:14 ` Stefan Monnier 0 siblings, 2 replies; 42+ messages in thread From: Drew Adams @ 2007-09-24 16:12 UTC (permalink / raw) To: herring; +Cc: Stefan Monnier, emacs-devel > > 2. It doesn't really help users see that such keys are, in effect, > > available for binding in such read-only contexts. That was a main > > motivation behind my proposal. > > Exactly how much help does an semi-knowledgeable user (who knows enough to > want to bind a key) need beyond the error? > ... > I don't see the reaction to C-h c proceeding like that, but rather > "Aha. Good to know, but I can obviously use it here, since it doesn't > work anyway." It's not about the reaction to `C-h c' or to the read-only error message. It's about a user looking for available keys to bind in a particular context. Are you assuming that a user looking for available keys to bind starts with that error message, that is, by trying a key and seeing if it produces an error? A user is more likely to try `C-h b' to see which keys are available. Especially if s?he wants to find multiple available bindings for a set of related commands. Have you never done that: check to see which keys are not bound in the current mode? So, yes, such an isolated error message might (though a bit indirectly) help a user to see that that particular key is, in effect, available. But: a. It is an indirect indication. It requires understanding that since that key cannot be used here because the buffer is read-only, it is, in effect, available for some other use. It is far clearer to simply tell the user that the key is `undefined'. b. The information is after the fact (after trying that particular key). c. It provides information for only that one key - it does not help you see that _all_ "such keys" are also available, and it doesn't tell you what those keys are. d. It helps only if you start by trying that key, not if you try to look up the current bindings (`C-h b') to see all that might be available. Please see also the rest of the referenced email - in particular, point #1 and this part of #2: > I don't think you have given any reason _why_ you "don't like much this > idea"; you've just stated a preference. What are the disadvantages you see > to this idea? Deciding on a good way to handle this should > involve weighing the pros & cons. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 16:12 ` Drew Adams @ 2007-09-24 17:38 ` Davis Herring 2007-09-24 21:49 ` Drew Adams 2007-09-24 18:14 ` Stefan Monnier 1 sibling, 1 reply; 42+ messages in thread From: Davis Herring @ 2007-09-24 17:38 UTC (permalink / raw) To: Drew Adams; +Cc: Stefan Monnier, emacs-devel > It's not about the reaction to `C-h c' or to the read-only error message. > It's about a user looking for available keys to bind in a particular > context. > > Are you assuming that a user looking for available keys to bind starts > with that error message, that is, by trying a key and seeing if it > produces an error? I've often done something like that: chosen a key first, then made sure it was available (though perhaps with C-h c instead for safety). > A user is more likely to try `C-h b' to see which keys are available. > Especially if s?he wants to find multiple available bindings for a set of > related commands. Have you never done that: check to see which keys are > not bound in the current mode? I wrote unbound.el (http://www.emacswiki.org/cgi-bin/wiki/unbound.el); does that count? C-h b is so verbose that it's useless to me. And anyone who is trying to find bindings for a whole family of commands is probably sufficiently clued to just look at C-h m (and its description of the local map) directly. > So, yes, such an isolated error message might (though a bit indirectly) > help > a user to see that that particular key is, in effect, available. But: > > a. It is an indirect indication. It requires understanding that since that > key cannot be used here because the buffer is read-only, it is, in effect, > available for some other use. It is far clearer to simply tell the user > that the key is `undefined'. Er, it's clearer to tell them that if that is in fact the case! But that supposes your conclusion, that they should be undefined. The status quo is that, aside from self-inserters that we don't even really think of as commands (but rather as "keyboard keys"), major modes override keys only when they have something better to assign them. This means that some useless commands slip through; more on this under (c). > b. The information is after the fact (after trying that particular key). This is redundant with your (c): how would any key-specific help tell you anything -before- you told it what key you were interested in? > c. It provides information for only that one key - it does not help you > see that _all_ "such keys" are also available, and it doesn't tell you > what those keys are. I think you may have (accidentally?) found the real point here. What are "such keys"? Our presumed definition is "buffer-modifying keys in modes associated with read-only buffers", but this is vague, incomplete, and insufficiently specific all at once: Vague: Is M-: a "buffer-modifying key"? What about C-u M-:? Incomplete: C-x 4 a never modifies the current buffer, but is quite useless in, say, *Messages*. Should we unbind it there? (If so, in what map?) Similarly I -hope- `ffap' is useless to most people in hexl-mode. Unspecific: I often find it useful to "hack" a Dired listing by making the buffer writable and then using something like M-x keep-lines. Obviously M-x wouldn't be unbound, so this would continue to work, but why shouldn't I also be able to use M-z in such a case? Summary: trying to second-guess the global map by deciding that some of its keys are "useless" in some environment is trying to be too clever. Instead: (continued) > d. It helps only if you start by trying that key, not if you try to look > up the current bindings (`C-h b') to see all that might be available. And here you have the solution. Let's take your list of modifying commands (and any other commands that might be useless in some environment or another) and add a simple command that runs `where-is' on it, dropping any results that say "not bound". Then a user can run the new M-x what-keys-are-useless (with a better name) and have all and only the relevant information, without any change to any keymaps. > Please see also the rest of the referenced email - in particular, point #1 > and this part of #2: > >> I don't think you have given any reason _why_ you "don't like much this >> idea"; you've just stated a preference. What are the disadvantages you >> see to this idea? Deciding on a good way to handle this should >> involve weighing the pros & cons. Please do not tell me (I know this was not originally written to me, but you have written similar things so directly) that I have not justified my statements simply because you do not agree with the justifications. I said that I didn't think the use case (of a person looking for keys to bind) was significantly improved by your proposal, which is why I don't like it. (Now, with more thought, I think I have come up with a better proposal as well as better-understood why I prefer it.) Never mind the necessary bias in favor of the status quo (necessary to avoid endlessly reconsidering equally justified alternatives): it is up to the proponent of a proposal to give -more- justification for it than can be given for anything else. Davis -- This product is sold by volume, not by mass. If it appears too dense or too sparse, it is because mass-energy conversion has occurred during shipping. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 17:38 ` Davis Herring @ 2007-09-24 21:49 ` Drew Adams 0 siblings, 0 replies; 42+ messages in thread From: Drew Adams @ 2007-09-24 21:49 UTC (permalink / raw) To: herring; +Cc: Stefan Monnier, emacs-devel > I wrote unbound.el (http://www.emacswiki.org/cgi-bin/wiki/unbound.el); > does that count? Cool; I didn't know about that - great idea. What about adding that to Emacs? It could perhaps be invoked with `C-h <something>'. Or it could perhaps be invoked with some simple binding from the `C-h b' display. (See also the EOM.) > C-h b is so verbose that it's useless to me. I agree that it's too verbose, but I still find it useful. It is all that dead-tilde, dead-asciitilde etc. stuff and the self-insert-command stuff that gets in the way. (No, I don't see the dead-tilde stuff in emacs -Q, but I see it in my Emacs, and I have no idea where it's from or what it's for.) Actually, a better use for `C-u C-h b' might be to show what we see now (verbose), and let plain `C-h b' exclude some of the uninteresting stuff (e.g. self-insert-command). > And anyone who is trying to find bindings for a whole family of > commands is probably sufficiently clued to just look at C-h m > (and its description of the local map) directly. That's why I mentioned `C-h b', but same idea. `C-h m' usually doesn't give you any indication of unbound keys, AFAIK. It sometimes lists the bindings, but that is anyway part of what you see in `C-h b'. In that case, `C-h m' too would be improved by my suggestion to bind such keys to `undefined'. > > So, yes, such an isolated error message might (though a bit indirectly) > > help a user to see that that particular key is, in effect, available. > > But: > > > > a. It is an indirect indication. It requires understanding that > > since that key cannot be used here because the buffer is > > read-only, it is, in effect, available for some other use. > > It is far clearer to simply tell the user that the key is > > `undefined'. > > Er, it's clearer to tell them that if that is in fact the case! But that > supposes your conclusion, that they should be undefined. Right. _If_ they should be shown to users as "undefined" and thus available for defining, _then_ binding them to `undefined' is a better way to show that than relying upon read-only error messages. I said that before. > The status quo is that, aside from self-inserters that we don't > even really think of as commands (but rather as "keyboard keys"), > major modes override keys only when they have something better > to assign them. This means that some useless commands slip > through; more on this under (c). > > > b. The information is after the fact (after trying that particular key). > > This is redundant with your (c): how would any key-specific help tell you > anything -before- you told it what key you were interested in? If that specific key were bound to `undefined', then _any_ mention of its binding would show you that information, not just a read-only error. Whatever the context where that particular key's binding is shown, it is indicated that that key is available. > > c. It provides information for only that one key - it does not help you > > see that _all_ "such keys" are also available, and it doesn't tell you > > what those keys are. > > I think you may have (accidentally?) found the real point here. Not accidentally, and not the only real point here. > What are "such keys"? Our presumed definition is "buffer-modifying > keys in modes associated with read-only buffers", but this is vague, > incomplete, and insufficiently specific all at once: That's why I submitted a specific possible list, for discussion. And that's why the list is a customizable variable (as opposed, for example, to using a symbol property for each such command's symbol). Programs or users can adjust the list contextually, as needed. For instance, Dired mode could bind that variable to a list of commands that is appropriate, and then call the function that binds commands to `undefined'. > Vague: Is M-: a "buffer-modifying key"? What about C-u M-:? It wasn't on my list. Are you suggesting to include it? I would say it should be excluded. > Incomplete: C-x 4 a never modifies the current buffer, but is quite > useless in, say, *Messages*. Should we unbind it there? (If so, in what > map?) Similarly I -hope- `ffap' is useless to most people in hexl-mode. Agreed. There are many commands, some of which might be bound to keys, that modify buffers. Not all of them should be part of the list of "such keys". I did not include `C-x 4 a' either. Are you suggesting to include it? > Unspecific: I often find it useful to "hack" a Dired listing by making the > buffer writable and then using something like M-x keep-lines. Obviously > M-x wouldn't be unbound, so this would continue to work, but why shouldn't > I also be able to use M-z in such a case? I'm not sure I follow you, but if I do, no, you would not be able to. If that kind of thing is thought to be generally useful, then we might modulate what I proposed, so that the key is undefined only when the buffer is read-only. I don't have a particular mechanism in mind for that now, not having thought about it. > Summary: trying to second-guess the global map by deciding that some of > its keys are "useless" in some environment is trying to be too clever. Maybe you're right. As you know, I am typically against Emacs trying to be too clever. In practice, I haven't found a difficulty with what I'm proposing (and I've used it for years), but maybe others could try it and pound on it a bit to see if they find it limiting. > Instead: (continued) > > > d. It helps only if you start by trying that key, not if you try to look > > up the current bindings (`C-h b') to see all that might be available. > > And here you have the solution. Let's take your list of modifying > commands (and any other commands that might be useless in some environment > or another) and add a simple command that runs `where-is' on it, dropping > any results that say "not bound". Then a user can run the new M-x > what-keys-are-useless (with a better name) and have all and only the > relevant information, without any change to any keymaps. That's just what I do in order to bind those keys to `undefined': (defun undefine-keys-bound-to (command keymap) "Undefine all keys bound only by inheritance to COMMAND in KEYMAP. If a key is bound to COMMAND in KEYMAP, but it is not bound directly in KEYMAP, then bind it to `undefined' in KEYMAP." (dolist (key (where-is-internal command keymap)) (when (and key (not (lookup-key keymap key))) (define-key keymap key 'undefined)))) (defun undefine-killer-commands (keymap) "Undefine KEYMAP keys that are bound to buffer-modifying commands. For each key in KEYMAP that is indirectly bound to one of the commands in `buffer-modifying-cmds', rebind it to `undefined'." (mapcar (lambda (cmd) (undefine-keys-bound-to cmd keymap)) buffer-modifying-cmds)) But as Stefan, I think, pointed out, if this is built into Emacs it would not need to be done in this after-the-fact way. And your point is to leave it up to the user, via a `what-keys-are-useless' command. That's a good argument. > Never mind the necessary bias in favor of the status quo (necessary to > avoid endlessly reconsidering equally justified alternatives): it is up to > the proponent of a proposal to give -more- justification for it than can > be given for anything else. I agree with that, of course; absolutely. And I think your `what-keys-are-useless' proposal is OK. But the name should perhaps be changed - maybe `list-available-keys' or some such. And the listing could distinguish keys that are truly unbound from those that are bound to commands that might be inappropriate in the current mode. And the latter might be divided into groups such as Richard suggested (local/global buffer modifiers). IOW, the display would make it clear _why_ certain keys might be inappropriate in the current context - e.g., they try to modify a read-only buffer. Perhaps that is the best solution. It would also satisfy those who would like to be able to pseudo-kill in a read-only buffer. The new command could have the `C-h' prefix, perhaps `C-h u' (for "unbound" or "undefined" or "useless" keys, as opposed to `C-h b' for "bound" keys). A disadvantage of that solution is that it is not readily apparent in other listings and other mention of such keys that they are available (as mentioned above). A user only gets that information upon demand. I could live with that; it's still better than no indication at all of what's available. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 16:12 ` Drew Adams 2007-09-24 17:38 ` Davis Herring @ 2007-09-24 18:14 ` Stefan Monnier 2007-09-25 10:44 ` Richard Stallman 1 sibling, 1 reply; 42+ messages in thread From: Stefan Monnier @ 2007-09-24 18:14 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel > A user is more likely to try `C-h b' to see which keys are available. Could be, but to tell you the truth I've never seen anyone use C-h b (OK, I adimit I've used it a couple times, but always only to see what it does, not to see the info it gives me). And the result is always so long anyway that I doubt a user would bother to go through it to find a useful keybinding. Instead, I expect he'd try a keybinding which he finds convenient/intuitive/menmonic. Or maybe he wouldn't even try it and would go ahead and blindly bind the key and only (much) later he may learn that the key he chose so may years ago actually had another useful meaning. Stefan ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 18:14 ` Stefan Monnier @ 2007-09-25 10:44 ` Richard Stallman 2007-09-25 18:00 ` bind commands that change buffer contents to `undefined' whenread-only? Drew Adams 0 siblings, 1 reply; 42+ messages in thread From: Richard Stallman @ 2007-09-25 10:44 UTC (permalink / raw) To: Stefan Monnier; +Cc: drew.adams, emacs-devel > A user is more likely to try `C-h b' to see which keys are available. Could be, but to tell you the truth I've never seen anyone use C-h b (OK, I adimit I've used it a couple times, but always only to see what it does, not to see the info it gives me). I've decided not to change the way these things work, so this thread is not going to do something useful. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: bind commands that change buffer contents to `undefined' whenread-only? 2007-09-25 10:44 ` Richard Stallman @ 2007-09-25 18:00 ` Drew Adams 0 siblings, 0 replies; 42+ messages in thread From: Drew Adams @ 2007-09-25 18:00 UTC (permalink / raw) To: rms, Stefan Monnier; +Cc: emacs-devel > I've decided not to change the way these things work, so this > thread is not going to do something useful. OK. Let me mention in parting on this that in my own code I now respect the value of `kill-read-only-ok': If it is non-nil, then I don't bind commands that kill text to `undefined'. IOW: (defcustom buffer-modifying-cmds (append (and kill-read-only-ok '(backward-kill-paragraph backward-kill-sentence backward-kill-sexp backward-kill-word clipboard-kill-region comint-kill-input comment-kill kill-backward-up-list kill-comment kill-line kill-paragraph kill-rectangle kill-region kill-sentence kill-sexp kill-whole-line kill-word mouse-kill)) '(align-newline-and-indent backward-delete-char backward-delete-char-untabify bookmark-insert bookmark-insert-location canonically-space-region capitalize-region capitalize-word c-backslash-region c-context-line-break center-line center-paragraph center-region c-fill-paragraph c-hungry-delete-backwards c-hungry-delete-forward c-indent-command c-indent-defun c-indent-exp clear-rectangle comint-truncate-buffer comment-dwim comment-indent-new-line comment-region comment-or-uncomment-region complete-symbol compose-last-chars compose-region dabbrev-completion dabbrev-expand decompose-region delete-backward-char delete-blank-lines delete-char delete-horizontal-space delete-indentation delete-matching-lines delete-non-matching-lines delete-pair delete-rectangle delete-region delete-trailing-whitespace delete-whitespace-rectangle delimit-columns-region downcase-region downcase-word edit-picture expand-abbrev expand-region-abbrevs fill-individual-paragraphs fill-nonuniform-paragraphs fill-paragraph fill-region fill-region-as-paragraph format-insert-file flush-lines ido-insert-buffer ido-insert-file increase-left-margin increase-right-margin indent-code-rigidly indent-for-comment indent-for-tab-command indent-line-function indent-new-comment-line indent-pp-sexp indent-region indent-rigidly insert-abbrevs insert-buffer insert-file insert-file-literally insert-kbd-macro insert-pair insert-parentheses insert-register insert-zippyism join-line justify-current-line just-one-space keep-lines lisp-complete-symbol lisp-fill-paragraph lisp-indent-line morse-region newline newline-and-indent open-line open-rectangle query-replace query-replace-regexp quoted-insert reindent-then-newline-and-indent replace-regexp replace-string repunctuate-sentences reverse-region rot13-region self-insert-command set-justification-center set-justification-full set-justification-left set-justification-none set-justification-right set-left-margin set-right-margin skeleton-pair-insert-maybe smiley-region sort-columns sort-fields sort-lines sort-numeric-fields sort-pages sort-paragraphs split-line string-insert-rectangle string-rectangle studlify-region table-delete-column table-delete-row table-heighten-cell table-insert table-insert-column table-insert-row table-insert-sequence table-justify table-shorten-cell table-span-cell table-split-cell table-split-cell-horizontally table-split-cell-vertically table-widen-cell tab-to-tab-stop tabify texinfo-format-region tildify-region time-stamp todo-insert-item translate-region transpose-chars transpose-lines transpose-paragraphs transpose-sentences transpose-sexps transpose-words ucs-insert uncomment-region unmorse-region untabify upcase-region upcase-word vc-insert-headers whitespace-cleanup whitespace-cleanup-region yank yank-pop yank-rectangle zap-to-char)) "*Buffer-modifying commands used in `undefine-killer-commands'." :type '(repeat symbol)) ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-23 18:16 ` Stefan Monnier 2007-09-23 20:42 ` Drew Adams @ 2007-09-24 18:19 ` Richard Stallman 2007-09-25 14:15 ` Stefan Monnier 1 sibling, 1 reply; 42+ messages in thread From: Richard Stallman @ 2007-09-24 18:19 UTC (permalink / raw) To: Stefan Monnier; +Cc: drew.adams, emacs-devel So maybe a better direction is to change the toplevel so that using a command with a "*" (or a call to barf-if-buffer-read-only) in its interactive spec when the buffer is read-only will signal "undefined" rather than signalling the error. That is clean and simple, but I think it is a change for the worse. Sorry, but no thanks. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: bind commands that change buffer contents to `undefined' when read-only? 2007-09-24 18:19 ` bind commands that change buffer contents to `undefined' when read-only? Richard Stallman @ 2007-09-25 14:15 ` Stefan Monnier 0 siblings, 0 replies; 42+ messages in thread From: Stefan Monnier @ 2007-09-25 14:15 UTC (permalink / raw) To: rms; +Cc: drew.adams, emacs-devel > So maybe a better direction is to change the toplevel so that using > a command with a "*" (or a call to barf-if-buffer-read-only) in its > interactive spec when the buffer is read-only will signal "undefined" > rather than signalling the error. > That is clean and simple, but I think it is a change for the worse. As a matter of fact, I agree ;-) > Sorry, but no thanks. Thanks, Stefan ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: TAB for non-editing modes 2007-09-22 21:51 ` Dan Nicolaescu 2007-09-22 22:16 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams @ 2007-09-22 22:44 ` Drew Adams 2007-09-23 14:48 ` Bastien 2007-09-23 23:59 ` Juri Linkov 1 sibling, 2 replies; 42+ messages in thread From: Drew Adams @ 2007-09-22 22:44 UTC (permalink / raw) To: emacs-devel > Duplication is not a good way to evaluate this, we have many keys that > are duplicated. Yes, for this command alone, we have `n', `SPC', `C-n', and `down'. `C-n' and `down' often go together. `n' is a shortcut for `C-n', since Dired is read-only. `SPC' and `DEL' are sometimes used in Emacs (e.g. View, Info) to browse down and up (forward or back). But in Dired we've broken that, since `DEL' unmarks entries instead. Same thing for Buffer Menu. I wouldn't mind if `SPC' removed the current mark and moved down, in analogy with `DEL', but it's probably too late to change that. > The question is it useful? Is it intuitive to use? Is it consistent > with other uses of the same key? IMO the answer is YES to all those > questions. The question is not just whether it useful, but how useful it is. When there are already umpteen other simple keys bound to a command that is not particularly important, is it worthwhile to waste another key on it? Especially a key such as `TAB', which has important associations and uses in other contexts: - `TAB' is used for indenting, which can be context-dependent. Someday perhaps we will have a notion of indenting for Dired. (No idea what such indentation might mean - perhaps for inserted subdirs?) - `TAB' is used for completion - both minibuffer and buffer text. Someday perhaps we will have some notion of "completing" a file or directory entry in Dired. (No idea what such completion might mean.) - `TAB' is used for field navigation (particularly outside Emacs), as Lennart mentioned. Someday perhaps we will have fields of some sort in Dired. Maybe you are thinking of a file/directory name in Dired as a field. Perhaps that's what you think of as "consistent with other uses of the same key". In that case, it would make sense, but I don't see `TAB' as very helpful for this in Dired today. Perhaps if we had a notion of "current column" and various operations were permitted on the data in the current Dired column (e.g. change file permissions, change the date), then `TAB' could move to the next "field" in the current column. IOW, if a user changed the current column to `Permissions', then `TAB' would move to the next `Permissions' field, where you could change a permission (other than by `M', which acts regardless of the current cursor column). I'm not familiar with wdired, but perhaps it has such a notion of field, so that some editing commands get their specific effect from the kind of field the cursor is in. I don't know. In that case, letting `TAB' move among fields might be useful. Anyway, this is not all that important. I just don't like to see good keys wasted. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 22:44 ` TAB for non-editing modes Drew Adams @ 2007-09-23 14:48 ` Bastien 2007-09-23 23:59 ` Juri Linkov 1 sibling, 0 replies; 42+ messages in thread From: Bastien @ 2007-09-23 14:48 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel "Drew Adams" <drew.adams@oracle.com> writes: > Especially a key such as `TAB', which has important associations and uses in > other contexts: > > - `TAB' is used for indenting, which can be context-dependent. Someday > perhaps we will have a notion of indenting for Dired. (No idea what such > indentation might mean - perhaps for inserted subdirs?) > > - `TAB' is used for completion - both minibuffer and buffer text. Someday > perhaps we will have some notion of "completing" a file or directory entry > in Dired. (No idea what such completion might mean.) > > - `TAB' is used for field navigation (particularly outside Emacs), as > Lennart mentioned. Someday perhaps we will have fields of some sort in > Dired. Add to this list: - `TAB' is used to cycle through folding states in Org-mode (only when the point is at the beginning of a headline). If dired-mode were able to (un)fold directories *in the same window* then `TAB' would be the key of choice. -- Bastien ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 22:44 ` TAB for non-editing modes Drew Adams 2007-09-23 14:48 ` Bastien @ 2007-09-23 23:59 ` Juri Linkov 1 sibling, 0 replies; 42+ messages in thread From: Juri Linkov @ 2007-09-23 23:59 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel > - `TAB' is used for indenting, which can be context-dependent. Someday > perhaps we will have a notion of indenting for Dired. (No idea what such > indentation might mean - perhaps for inserted subdirs?) > > - `TAB' is used for completion - both minibuffer and buffer text. Someday > perhaps we will have some notion of "completing" a file or directory entry > in Dired. (No idea what such completion might mean.) FWIW, I use a combination of two functionalities with the same TAB key. If TAB is typed on a symbol, then it is used for completion. Otherwise - for indenting: (defun my-lisp-indent-or-complete () (interactive) (if (and (memq (char-syntax (preceding-char)) (list ?w ?_)) (not (bobp))) (lisp-complete-symbol) (indent-for-tab-command))) (define-key emacs-lisp-mode-map [tab] 'my-lisp-indent-or-complete) This even works without a modification with the latest changes Dan made to use TAB to indent the active region. > - `TAB' is used for field navigation (particularly outside Emacs), as > Lennart mentioned. Someday perhaps we will have fields of some sort in > Dired. I've TAB bound in dired to the command that navigates to the next/previous directory, and I find this useful: (defun my-dired-move-to-next-dir (arg) (interactive "P") (if (not (memq ?R (append dired-actual-switches nil))) (dired-next-dirline-cycle 1) (progn (dired-next-subdir 1)))) (define-key dired-mode-map [tab] 'my-dired-move-to-next-dir) Another good binding for TAB in dired would be `other-window' like it is used in most commander-like file managers to switch to another file panel. I tried this once but have found that this is useful only in a configuration where both Emacs windows contain dired buffers. However, a habit of using TAB to switch between dired buffers fails when one of dired buffers gets replaced with a visited file, and typing TAB in a file buffer doesn't switch back to the dired buffer in another window, because TAB has another binding in the file buffer. > I'm not familiar with wdired, but perhaps it has such a notion of field, so > that some editing commands get their specific effect from the kind of field > the cursor is in. I don't know. In that case, letting `TAB' move among > fields might be useful. Yes, wdired has editable fields where TAB would be useful, but wdired is a separate mode, so this fact is irrelevant here. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 19:01 ` Drew Adams 2007-09-22 21:23 ` Lennart Borgman (gmail) 2007-09-22 21:51 ` Dan Nicolaescu @ 2007-09-23 15:05 ` Richard Stallman 2007-09-23 16:43 ` Drew Adams 2 siblings, 1 reply; 42+ messages in thread From: Richard Stallman @ 2007-09-23 15:05 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel If no truly useful Dired binding for `TAB' can be found now, then let's leave it alone - something will come up eventually. I think that is wise. Similarly for other bindings that invoke commands that modify the buffer - why not bind them to `undefined'? I do that in read-only buffers such as *Buffer List*. Besides preventing the read-only error message, it prevents users from thinking that a key sequence might be unavailable for their own use. suppress-keymap already does this with self-inserting commands. Your idea is to do this with the other normal commands that alter the text. Doing this with kill commands would take away a feature: you can use them in read-only buffers to copy text to the kill ring. That feature may not be very useful in read-only buffers, but I am not convinced it is an improvement to make it entirely unavailable there. Aside from that, I think it is more coherent for global buffer-modifying commands to give errors "buffer read-only" in read-only buffers, rather than acting as if they did not exist. For TAB, which varies between modes anyway, making it undefined might be good. ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: TAB for non-editing modes 2007-09-23 15:05 ` Richard Stallman @ 2007-09-23 16:43 ` Drew Adams 2007-09-24 0:11 ` Johan Bockgård 0 siblings, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-23 16:43 UTC (permalink / raw) To: rms; +Cc: emacs-devel > Similarly for other bindings that invoke commands that modify > the buffer - why not bind them to `undefined'? I do that in > read-only buffers such as *Buffer List*. Besides preventing > the read-only error message, it prevents users from thinking > that a key sequence might be unavailable for their own use. > > suppress-keymap already does this with self-inserting commands. Your > idea is to do this with the other normal commands that alter the text. Yes. And for the same reasons. Individual character insertion is but one way to modify a buffer. There are other ways, both local and global, as you point out. > Doing this with kill commands would take away a feature: you can use > them in read-only buffers to copy text to the kill ring. That feature > may not be very useful in read-only buffers, but I am not convinced it > is an improvement to make it entirely unavailable there. Granted. But it could be argued that this "feature" is really a bug that we exploit (because it seems useful) ;-). Because it is inconsistent with normal use (killing) of those commands/keys, it promotes user error and possibly confusion. The user does not even get proper feedback about this "trick" - s?he still gets the read-only error message/reminder, and there is no indication that anything was copied. I don't know if this "feature" is even documented. Emacs has no lack of copy (vs kill) commands - it's better for users to get in the consistent habit of using the copy commands (not using kill commands in read-only buffers). You might have a habit to break, but that's all. > Aside from that, I think it is more coherent for global > buffer-modifying commands to give errors "buffer read-only" in > read-only buffers, rather than acting as if they did not exist. By the qualifier "global", I assume you do not mean things such as `backward-delete-char-untabify'. So I guess you are agreeing to extending `suppress-keymap' (or creating an additional function that extends it) to such "local" buffer modifying commands. Is that right? > For TAB, which varies between modes anyway, making it undefined > might be good. Here, I see you suggesting that there are even some "global" buffer-modifying keys that should be undefined - namely `TAB', at least. Is that right? I don't disagree with your reservation for global buffer modifiers, but that (e.g. the `TAB' case) really means that it would be good to take a look at such commands on a case-by-case basis. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-23 16:43 ` Drew Adams @ 2007-09-24 0:11 ` Johan Bockgård 2007-09-24 0:33 ` Drew Adams 0 siblings, 1 reply; 42+ messages in thread From: Johan Bockgård @ 2007-09-24 0:11 UTC (permalink / raw) To: emacs-devel "Drew Adams" <drew.adams@oracle.com> writes: >> Doing this with kill commands would take away a feature: you can use >> them in read-only buffers to copy text to the kill ring. That feature >> may not be very useful in read-only buffers, but I am not convinced it >> is an improvement to make it entirely unavailable there. > > Granted. But it could be argued that this "feature" is really a bug that we > exploit (because it seems useful) ;-). Because it is inconsistent with > normal use (killing) of those commands/keys, it promotes user error and > possibly confusion. The user does not even get proper feedback about this > "trick" - s?he still gets the read-only error message/reminder, and there is > no indication that anything was copied. I don't know if this "feature" is > even documented. Of course it is. There even exists an option to remove the read-only error--`kill-read-only-ok'. -- Johan Bockgård ^ permalink raw reply [flat|nested] 42+ messages in thread
* RE: TAB for non-editing modes 2007-09-24 0:11 ` Johan Bockgård @ 2007-09-24 0:33 ` Drew Adams 2007-09-24 0:46 ` Johan Bockgård 0 siblings, 1 reply; 42+ messages in thread From: Drew Adams @ 2007-09-24 0:33 UTC (permalink / raw) To: emacs-devel > >> Doing this with kill commands would take away a feature: you can use > >> them in read-only buffers to copy text to the kill ring. That feature > >> may not be very useful in read-only buffers, but I am not convinced it > >> is an improvement to make it entirely unavailable there. > > > > Granted. But it could be argued that this "feature" is really a > > bug that we exploit (because it seems useful) ;-). Because it is > > inconsistent with normal use (killing) of those commands/keys, > > it promotes user error and possibly confusion. The user does not > > even get proper feedback about this "trick" - s?he still gets > > the read-only error message/reminder, and there is no indication > > that anything was copied. I don't know if this "feature" is > > even documented. > > Of course it is. There even exists an option to remove the read-only > error--`kill-read-only-ok'. Cough; hack. Why is this better than using the corresponding standard copy commands? What do we gain by this complexity and inconsistency? ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-24 0:33 ` Drew Adams @ 2007-09-24 0:46 ` Johan Bockgård 0 siblings, 0 replies; 42+ messages in thread From: Johan Bockgård @ 2007-09-24 0:46 UTC (permalink / raw) To: emacs-devel "Drew Adams" <drew.adams@oracle.com> writes: >> Of course it is. There even exists an option to remove the read-only >> error--`kill-read-only-ok'. > > Cough; hack. > > Why is this better than using the corresponding standard copy commands? There are no copy commands for killing lines, sentences, paragraphs,... -- Johan Bockgård ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-22 16:35 ` Dan Nicolaescu 2007-09-22 19:01 ` Drew Adams @ 2007-09-23 15:04 ` Richard Stallman 2007-09-24 0:56 ` Dan Nicolaescu 1 sibling, 1 reply; 42+ messages in thread From: Richard Stallman @ 2007-09-23 15:04 UTC (permalink / raw) To: Dan Nicolaescu; +Cc: emacs-devel Why not? I'd rather have TAB run dired-next-line instead of throwing an error "Buffer is read-only" as it does now. I don't see much of an advantage in making TAB synonymous with SPC. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-23 15:04 ` Richard Stallman @ 2007-09-24 0:56 ` Dan Nicolaescu 2007-09-24 18:20 ` Richard Stallman 0 siblings, 1 reply; 42+ messages in thread From: Dan Nicolaescu @ 2007-09-24 0:56 UTC (permalink / raw) To: rms; +Cc: emacs-devel Richard Stallman <rms@gnu.org> writes: > Why not? I'd rather have TAB run dired-next-line instead of throwing > an error "Buffer is read-only" as it does now. > > I don't see much of an advantage in making TAB synonymous with SPC. AFAICT there are 4 operations in dired that have a semantic that means something like "move to some some other element" (which is what modern GUIs do with TAB when not used in an editing context): dired-next-line dired-next-dirline dired-next-subdir dired-next-marked-file Which one do you think would be the best to bind to TAB? Can you see a better binding? Again, users nowadays expect TAB to do something useful. IMHO it would be better for users for us to offer some functionality for TAB in dired instead of doing nothing, that does not help anyone. ^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: TAB for non-editing modes 2007-09-24 0:56 ` Dan Nicolaescu @ 2007-09-24 18:20 ` Richard Stallman 0 siblings, 0 replies; 42+ messages in thread From: Richard Stallman @ 2007-09-24 18:20 UTC (permalink / raw) To: Dan Nicolaescu; +Cc: emacs-devel dired-next-line dired-next-dirline dired-next-subdir dired-next-marked-file Which one do you think would be the best to bind to TAB? Can you see a better binding? I think we should not define TAB in Dired mode until we have a better reason to do so. ^ permalink raw reply [flat|nested] 42+ messages in thread
end of thread, other threads:[~2007-09-25 22:12 UTC | newest] Thread overview: 42+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-09-22 1:18 TAB for non-editing modes Dan Nicolaescu 2007-09-22 8:22 ` Lennart Borgman (gmail) 2007-09-25 20:29 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Juri Linkov 2007-09-25 21:14 ` Drew Adams 2007-09-25 21:59 ` S-SPC for non-editing modes Juri Linkov 2007-09-25 22:12 ` Drew Adams 2007-09-25 22:09 ` S-SPC for non-editing modes (was: TAB for non-editing modes) Andreas Schwab 2007-09-22 15:47 ` TAB for non-editing modes Richard Stallman 2007-09-22 16:35 ` Dan Nicolaescu 2007-09-22 19:01 ` Drew Adams 2007-09-22 21:23 ` Lennart Borgman (gmail) 2007-09-22 21:40 ` Drew Adams 2007-09-22 21:51 ` Dan Nicolaescu 2007-09-22 22:16 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams 2007-09-23 0:37 ` bind commands that change buffer contents to `undefined' whenread-only? Drew Adams 2007-09-23 1:20 ` bind commands that change buffer contents to `undefined'whenread-only? Drew Adams 2007-09-23 1:49 ` Stefan Monnier 2007-09-23 2:18 ` bind commands that change buffer contents to `undefined' when read-only? Drew Adams 2007-09-23 18:16 ` Stefan Monnier 2007-09-23 20:42 ` Drew Adams 2007-09-24 1:25 ` Stefan Monnier 2007-09-24 2:02 ` Drew Adams 2007-09-24 15:24 ` Davis Herring 2007-09-24 16:12 ` Drew Adams 2007-09-24 17:38 ` Davis Herring 2007-09-24 21:49 ` Drew Adams 2007-09-24 18:14 ` Stefan Monnier 2007-09-25 10:44 ` Richard Stallman 2007-09-25 18:00 ` bind commands that change buffer contents to `undefined' whenread-only? Drew Adams 2007-09-24 18:19 ` bind commands that change buffer contents to `undefined' when read-only? Richard Stallman 2007-09-25 14:15 ` Stefan Monnier 2007-09-22 22:44 ` TAB for non-editing modes Drew Adams 2007-09-23 14:48 ` Bastien 2007-09-23 23:59 ` Juri Linkov 2007-09-23 15:05 ` Richard Stallman 2007-09-23 16:43 ` Drew Adams 2007-09-24 0:11 ` Johan Bockgård 2007-09-24 0:33 ` Drew Adams 2007-09-24 0:46 ` Johan Bockgård 2007-09-23 15:04 ` Richard Stallman 2007-09-24 0:56 ` Dan Nicolaescu 2007-09-24 18:20 ` Richard Stallman
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.