[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Org-mode outside Org-mode
From: |
Thorsten Jolitz |
Subject: |
Re: [O] Org-mode outside Org-mode |
Date: |
Wed, 24 Apr 2013 20:39:20 +0200 |
User-agent: |
Gnus/5.130002 (Ma Gnus v0.2) Emacs/24.3 (gnu/linux) |
Alexander Vorobiev <address@hidden> writes:
Hi Alexander,
> First of all, thank you for the tutorial and the code! Outshine has become
> a major component of my workflow, I use it in all my source code buffers (sql,
> R, elisp).
Thanks, I use it in all my elisp and PicoLisp buffers too, and I'm happy
that it works for you too.
Only with 'old-school' elisp buffers with '^;;;+ ' headlines there is
still one major headache with long lines of only ';' like this:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
that make the regexp matcher enter endless backtracking. I haven't found
a solution yet how to fontify the headlines in a different way (-> first
match the headline regexp, then calculate the headline level).
> I have one question/proposal regarding key bindings. Outshine binds TAB
> to outshine-cycle-subtree which only does something useful (calls
> outshine-cycle)
> when the point is on a header line, otherwise it prints a message. TAB is used
> heavily in various source code -related modes (yasnippets, smart-tab, etc.
> http://www.emacswiki.org/emacs/TabCompletion is a great source for those) -
> the
> behavior which I don't want to lose. There is some support of other TAB
> behaviors in
> outline-cycle but it is not used (and it ignores the user-defined bindings).
That very same problem made me hate yasnippet ...
I think thats a very good proposal.
> A while back I wrote a macro (based on the advice in
> http://stackoverflow.com/a/2494384/973603) which allows to activate minor mode
> bindings when a condition is true and fall back to previous bindings
> otherwise:
I copied your macro to outshine.el (hope thats ok with you, I credit
you), but had errors at start-up so I modified it slightly:
,-----------------------------------------------------------------------------------
| ;; copied from Alexander Vorobiev
| ;; http://www.mail-archive.com/address@hidden/msg70648.html
| (defmacro outshine-define-key-with-fallback
| (keymap key def condition &optional mode)
| "Define key with fallback.
| Binds KEY to definition DEF in keymap KEYMAP, the binding is
| active when the CONDITION is true. Otherwise turns MODE off and
| re-enables previous definition for KEY. If MODE is nil, tries to
| recover it by stripping off \"-map\" from KEYMAP name."
| `(define-key ,keymap ,key (lambda () (interactive)
| (if ,condition ,def
| (let* ((,(if mode mode
| (let* ((keymap-str (symbol-name keymap))
| (mode-name-end (- (string-width keymap-str)
4)))
| (if (string= "-map" (substring keymap-str
mode-name-end))
| (intern (substring keymap-str 0 mode-name-end))
| (message "Could not deduce mode name from keymap
name"))
| ;; (\\"-map\\" missing?)")
| )) nil)
| (original-func (key-binding ,key)))
| (call-interactively original-func))))))
`-----------------------------------------------------------------------------------
This is what I get now if I press 'C-h k' and then TAB in an outshine buffer:
,---------------------------------------------------------------------------
| TAB (translated from <tab>) runs the command (lambda nil (interactive) (if
| (outline-on-heading-p) (outline-cycle 1) (let* ((outline-minor-mode nil)
| (original-func (key-binding (kbd "TAB")))) (call-interactively
| original-func)))), which is an interactive Lisp function.
|
| It is bound to TAB.
|
| (anonymous)
`---------------------------------------------------------------------------
This is still in a private branch and not merged with the master, it
seems to work, but could you check the macro and the message if they
look alright before merging it with master?
> So now I can just do
>
> (define-key-with-fallback outline-minor-mode-map (kbd "TAB") (outline-cycle 1)
> (outline-on-heading-p))
I applied that to several bindings in outshine.el that might conflict
with other libraries now.
> and have my yasnippets and smart indentation/completion active again. My
> question is am I reinventing
> the wheel? Is there a function/macro in org-mode or elsewhere that would allow
> me define key bindings
> with fallback?
I would be interested in this too, since I like to have the
M-<arrow-key> navigation keys from 'outline-mode-easy-bindings' in
Org-mode too, but they conflict with some org-table bindings.
--
cheers,
Thorsten
- Re: [O] Org-mode outside Org-mode, (continued)
- Re: [O] Org-mode outside Org-mode, Samuel Wales, 2013/04/04
- Re: [O] Org-mode outside Org-mode, Thorsten Jolitz, 2013/04/06
- Re: [O] Org-mode outside Org-mode, Eric Schulte, 2013/04/06
- Re: [O] Org-mode outside Org-mode, Bastien, 2013/04/07
- Re: [O] Org-mode outside Org-mode, Samuel Wales, 2013/04/11
- Re: [O] Org-mode outside Org-mode, Samuel Wales, 2013/04/13
- Re: [O] Org-mode outside Org-mode, Samuel Wales, 2013/04/11
- Re: [O] Org-mode outside Org-mode, Thorsten Jolitz, 2013/04/12
- Re: [O] Org-mode outside Org-mode, Samuel Wales, 2013/04/13
Re: [O] Org-mode outside Org-mode, Alexander Vorobiev, 2013/04/24