emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Org-mode outside Org-mode
@ 2013-03-15 15:39 Thorsten Jolitz
  2013-03-15 16:47 ` Thomas S. Dye
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Thorsten Jolitz @ 2013-03-15 15:39 UTC (permalink / raw)
  To: emacs-orgmode


Hi List, 

there is a now a tutorial on Worg describing the recently announced new
libraries for using (concepts and functionality of) Org-mode when
outside Org-mode:

,-----------------------------------------------------------
| http://orgmode.org/worg/org-tutorials/org-outside-org.html
`-----------------------------------------------------------

Besides using the 'well-known' orgstruct-minor-mode, you can now:

- use outline-minor-mode with *outshine.el* extensions and structure
  your file with outshine-style headlines, giving your source-code files
  the look&feel of Org-mode files. Should work in any major-mode.

- use *outorg.el* to edit complete subtrees or the whole file as
  Org-mode in a temporary Org-mode edit-buffer. Depends on outshine.

- use *navi-mode.el* to open an occur-like indirect buffer for
  super-fast navigation and structure-editing (as well as other common
  actions on subtrees) in the associated original-buffer - all with
  one-key commands in a read-only buffer. A kind of customizable
  remote-control for the original-buffer with many views combining
  headline and keyword searches and easy switching between the
  associated buffers. Depends somehow on outshine too, but to a much
  lesser degree than outorg.el

And of course you have Francois Pinard's *poporg.el* and can (completely
independent from orgstruct or outshine):

- edit atomic comment-sections (anywhere in a source-code buffer, no
  matter what major-mode) in a temporary Org-mode edit-buffer. Thus,
  while *outorg* gives you a whole subtree with headline and source-code
  blocks in a temporary Org-mode edit-buffer, *poporg* gives you only
  the comment-string near point and nothing else, so that both libraries
  complement each other really well in their usage.

For more details see the tutorial on Worg.

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-03-15 15:39 Org-mode outside Org-mode Thorsten Jolitz
@ 2013-03-15 16:47 ` Thomas S. Dye
  2013-04-03 18:23 ` Samuel Wales
  2013-04-24 14:20 ` Alexander Vorobiev
  2 siblings, 0 replies; 17+ messages in thread
From: Thomas S. Dye @ 2013-03-15 16:47 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Aloha Thorsten,

What a joy to find the following bit on Worg!

    To sum it up in one sentence: Outline with Outshine outshines
    Outline

All the best,
Tom

-- 
Thomas S. Dye
http://www.tsdye.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-03-15 15:39 Org-mode outside Org-mode Thorsten Jolitz
  2013-03-15 16:47 ` Thomas S. Dye
@ 2013-04-03 18:23 ` Samuel Wales
  2013-04-04 14:09   ` Thorsten Jolitz
  2013-04-24 14:20 ` Alexander Vorobiev
  2 siblings, 1 reply; 17+ messages in thread
From: Samuel Wales @ 2013-04-03 18:23 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Great write-up, Thorsten.

There is a whole other set of options also.  I don't know if they are
close enough for you to include, but it's worth pointing them out.

These are in the general category of Org annotations.  Instead of
editing Org in a temporary buffer, you use a real, permanent Org file
(can include an agenda file).

There are two types of options: those that allow you to use Org to
annotate external files without changing those files, and those that
allow you to annotate external files by putting persistent markers in
them.

In both types, you can in principle do C-c ' to get to your Org agenda
files location from your external files, and the same thing in
reverse.

The existing mechanisms include org-pua.el, org-registry.el, and
org-annotate.el.

In principle, you should be able to annotate web pages in w3m.el and
dired entries and info notes also.

To me, there is a lot of possibility here.

It should also be possible to put an ID marker in an external file,
which corresponds exactly to the Org IDs in a canonical entry in your
agenda files.  Then C-c ' can bounce between the external file and
your agenda file.

Samuel

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-03 18:23 ` Samuel Wales
@ 2013-04-04 14:09   ` Thorsten Jolitz
  2013-04-04 20:17     ` Samuel Wales
  0 siblings, 1 reply; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-04 14:09 UTC (permalink / raw)
  To: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> Great write-up, Thorsten.

thanks

> There is a whole other set of options also.  I don't know if they are
> close enough for you to include, but it's worth pointing them out.
>
> These are in the general category of Org annotations.  Instead of
> editing Org in a temporary buffer, you use a real, permanent Org file
> (can include an agenda file).
>
> There are two types of options: those that allow you to use Org to
> annotate external files without changing those files, and those that
> allow you to annotate external files by putting persistent markers in
> them.
>
> In both types, you can in principle do C-c ' to get to your Org agenda
> files location from your external files, and the same thing in
> reverse.
>
> The existing mechanisms include org-pua.el, org-registry.el, and
> org-annotate.el.
>
> In principle, you should be able to annotate web pages in w3m.el and
> dired entries and info notes also.
>
> To me, there is a lot of possibility here.

> It should also be possible to put an ID marker in an external file,
> which corresponds exactly to the Org IDs in a canonical entry in your
> agenda files.  Then C-c ' can bounce between the external file and
> your agenda file.

please see my recent post about 'navi-mode' for Org-mode buffers.
'navi-mode' actually is a kind of permanent associated buffer tightly
coupled to the original Org-mode or source code buffer. It uses markers
to allow bouncing between the associated 'twin-buffers', but non of the
libraries you mention. However, I worked out my own system to ensure
that the *Navi* buffer is always up-to-date after modifying the
original-buffer, and to locate point at a logical position in the
navi-buffer even when the view (on the original-buffer has changed
drastically).

The temporary editing of source-code in Org-mode buffers is inspired by
org-src.el (or Org Babel), its very fast and convenient, just like
editing source-code blocks in Org-mode. 

Just try it out, maybe it is similar to what you imagine (only with
different implementation). 

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-04 14:09   ` Thorsten Jolitz
@ 2013-04-04 20:17     ` Samuel Wales
  2013-04-05  9:51       ` Thorsten Jolitz
  0 siblings, 1 reply; 17+ messages in thread
From: Samuel Wales @ 2013-04-04 20:17 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Hi Thorsten,

IIUC, I don't think this is related.  The idea is not to edit source
code in Org buffers, and it is not to use a Navi buffer or to do
navigation.

The idea is to be in my-lisp.el, and do C-c ', and get to a canonical
entry in my-org.org, then do C-c ' again and get back to my-lisp.el.

The navi buffer seems like it wouldn't do that.

Samuel

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-04 20:17     ` Samuel Wales
@ 2013-04-05  9:51       ` Thorsten Jolitz
  2013-04-07  1:05         ` Eric Schulte
  2013-04-12  1:19         ` Samuel Wales
  0 siblings, 2 replies; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-05  9:51 UTC (permalink / raw)
  To: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

Hi Samuel,
   
> IIUC, I don't think this is related.  The idea is not to edit source
> code in Org buffers, and it is not to use a Navi buffer or to do
> navigation.
>
> The idea is to be in my-lisp.el, and do C-c ', and get to a canonical
> entry in my-org.org, then do C-c ' again and get back to my-lisp.el.
>
> The navi buffer seems like it wouldn't do that.

that sounds like a different idea. I have heard about programming
environments that keep comments and source-code in two different (but
sync'd) files to minimize distraction from the source code - maybe a
possible use case for your idea?

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-05  9:51       ` Thorsten Jolitz
@ 2013-04-07  1:05         ` Eric Schulte
  2013-04-07  7:49           ` Bastien
                             ` (2 more replies)
  2013-04-12  1:19         ` Samuel Wales
  1 sibling, 3 replies; 17+ messages in thread
From: Eric Schulte @ 2013-04-07  1:05 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 641 bytes --]

Thorsten Jolitz <tjolitz@gmail.com> writes:

> Samuel Wales <samologist@gmail.com> writes:
>
> Hi Samuel,
>    
>> IIUC, I don't think this is related.  The idea is not to edit source
>> code in Org buffers, and it is not to use a Navi buffer or to do
>> navigation.
>>
>> The idea is to be in my-lisp.el, and do C-c ', and get to a canonical
>> entry in my-org.org, then do C-c ' again and get back to my-lisp.el.
>>

That could be handy.  For jumping back and for by function name, the
following simple implementation might be sufficient.  It relies on file
local variables to know which src and Org-mode files are related to each
other.


[-- Attachment #2: org-src-jump.el --]
[-- Type: application/emacs-lisp, Size: 1330 bytes --]

[-- Attachment #3: Type: text/plain, Size: 55 bytes --]


Cheers,

-- 
Eric Schulte
http://cs.unm.edu/~eschulte

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-07  1:05         ` Eric Schulte
@ 2013-04-07  7:49           ` Bastien
  2013-04-12  1:04           ` Samuel Wales
  2013-04-13 20:48           ` Samuel Wales
  2 siblings, 0 replies; 17+ messages in thread
From: Bastien @ 2013-04-07  7:49 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode, Thorsten Jolitz

Eric Schulte <schulte.eric@gmail.com> writes:

> That could be handy.

Indeed!  Nice hack to add to Worg, or even to contrib/?

Don't hesitate to spread the word :)

-- 
 Bastien

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-07  1:05         ` Eric Schulte
  2013-04-07  7:49           ` Bastien
@ 2013-04-12  1:04           ` Samuel Wales
  2013-04-13 20:48           ` Samuel Wales
  2 siblings, 0 replies; 17+ messages in thread
From: Samuel Wales @ 2013-04-12  1:04 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode, Thorsten Jolitz

On 4/6/13, Eric Schulte <schulte.eric@gmail.com> wrote:
>>> The idea is to be in my-lisp.el, and do C-c ', and get to a canonical
>>> entry in my-org.org, then do C-c ' again and get back to my-lisp.el.

> That could be handy.  For jumping back and for by function name, the
> following simple implementation might be sufficient.  It relies on file
> local variables to know which src and Org-mode files are related to each
> other.

Interesting implementation, thanks for coding it.

I was thinking about Org ID instead of local variables.

In the Org file, you have an entry with an Org ID and a property with
the source file location.

In the source file, you have a marker in a comment like this:

  ;; $[id 12345]

Where 12345 is an automatically-generated Org ID in the typical unique format.

The job of C-c ' in the source file is to search for the nearest ID
marker, then go to the entry that has that ID in the Org file.  The
job of C-c ' in the Org file is to get the Org ID, then search for the
marker that contains it in the source file.

Then the Org ID mechanism finds the Org file without requiring local variables.

(Or, of course, for read-only files, a bookmark-like mechanism can be
used to keep a database of search strings, indexed by the ID, to find
the location.  This means no need for Org ID in the source file and no
need for local variables.  But the ID method is more robust.)

Samuel

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-05  9:51       ` Thorsten Jolitz
  2013-04-07  1:05         ` Eric Schulte
@ 2013-04-12  1:19         ` Samuel Wales
  2013-04-12 10:44           ` Thorsten Jolitz
  1 sibling, 1 reply; 17+ messages in thread
From: Samuel Wales @ 2013-04-12  1:19 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

On 4/5/13, Thorsten Jolitz <tjolitz@gmail.com> wrote:
> that sounds like a different idea. I have heard about programming
> environments that keep comments and source-code in two different (but
> sync'd) files to minimize distraction from the source code - maybe a
> possible use case for your idea?

Yes.  The purpose for keeping them separate is to have one of them be
a complete Org file.

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-12  1:19         ` Samuel Wales
@ 2013-04-12 10:44           ` Thorsten Jolitz
  2013-04-13 20:45             ` Samuel Wales
  0 siblings, 1 reply; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-12 10:44 UTC (permalink / raw)
  To: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> On 4/5/13, Thorsten Jolitz <tjolitz@gmail.com> wrote:
>> that sounds like a different idea. I have heard about programming
>> environments that keep comments and source-code in two different (but
>> sync'd) files to minimize distraction from the source code - maybe a
>> possible use case for your idea?
>
> Yes.  The purpose for keeping them separate is to have one of them be
> a complete Org file.

If you structure your Emacs Lisp files the 'outshine way', you can
convert them into complete Org files fast and easily using 'outorg.el'.
Use

 ,----------
 | C-u C-c '
 `----------

from inside the elisp buffer, or 

,------
| C-u e
`------

in the associated *Navi:my-elisp-file* buffer. 

Both bindings call '(outorg-edit-as-org &optional ARG)' with ARG and
thus act on the complete buffer, not only the subtree at point.

Therefore, whenever you want to edit text, your Emacs Lisp source code
buffer becomes a (complete or partial) Org-mode buffer in a second,
while you are in emacs-lisp-mode most of the time when its about editing
code - only enhanced with Org-mode's look&feel by the activation of
'outline-minor-mode' with 'outshine.el' extensions.

When its not about whole Org-mode buffers or whole subtrees (with
headlines and code-blocks), but just about atomic comment-strings to be
edited in Org-mode buffers, then 'poporg.el' is the tool of choice.

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-12 10:44           ` Thorsten Jolitz
@ 2013-04-13 20:45             ` Samuel Wales
  2013-04-27  8:35               ` Thorsten Jolitz
  0 siblings, 1 reply; 17+ messages in thread
From: Samuel Wales @ 2013-04-13 20:45 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Hi Thorsten,

On 4/12/13, Thorsten Jolitz <tjolitz@gmail.com> wrote:
> If you structure your Emacs Lisp files the 'outshine way', you can
> convert them into complete Org files fast and easily using 'outorg.el'.

No, we are talking about different things.

With what I am talking about, you can:

  - put your Org notes in your main Org agenda files exactly where you want them
  - efficiently use planning information to create daily/weekly agenda entries
  - bounce to and from the exact location in your source code to the
exact Org entry

Therefore, the category of tools I suggested to you -- which consists
of annotation-like mechanisms -- is a completely different way of
tackling the problem of dealing with source code and Org
simultaneously.

Yet it is a way of dealing with them simultaneously, which is the
reason I suggested putting them in your document also, if you felt
like it.

I believe that your outshine and outorg methods cannot do all of those things.

Therefore, I believe that they do not solve the same problems at all.

Samuel

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-07  1:05         ` Eric Schulte
  2013-04-07  7:49           ` Bastien
  2013-04-12  1:04           ` Samuel Wales
@ 2013-04-13 20:48           ` Samuel Wales
  2 siblings, 0 replies; 17+ messages in thread
From: Samuel Wales @ 2013-04-13 20:48 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode, Thorsten Jolitz

Hi Eric,

Here is old not-working not-finished code that I abandoned.  But it
illustrates the goal.

Samuel

===

Maybe something like:

  - In source file, C-c ' to go to Org entry associated with nearest ID marker
    - C-u C-c ' to create ID marker and create its Org entry in your Org file
      - when it is created, you can refile it wherever
  - C-c ' in Org entry to go to associated source file ID marker

;; this is quick and dirty code
;;
;; it is brittle to store a file path.  it is much better to
;; incorporate ID markers into the Org ID system, then Org will
;; find the file using org-id-goto.  to tell the system where you
;; keep your source files, set a variable.
;;
;; doing so will eliminate the need to store a pathname property.
;;
;; maybe this can be refactored with detangling markers.
;;
;; see also annotation, which requires no marker, but is more
;; brittle and does not indicate that you have an annotation.
;; this should be merged with that.
(defconst alpha-org-id-pair-file-property "ID-pair-file")
(defun alpha-org-bounce-id-pair ()
  "The opposite of Org Babel.  C-c ' in source code to document
it in Org.  Same in documentation to go to source code."
  (interactive)
  (let ((id (org-id-get)))
    (if id
        (org-id-goto id)
      (let ((source (org-entry-get nil alpha-org-id-pair-file-property)))
        (find-file source)
        (re-search-forward id)
        (forward-line 1)))))
(defun* alpha-org-bounce-or-insert-id-pair (&key (comment ";; "))
  "Bounce to the other end of, or create, a (notes, ID
marker) pair.

Suppose you are editing an Emacs Lisp source code file.  You can
bounce between a special entry in your Org agenda file
\(e.g. notes.org\) and your external file \(e.g. file.el\)."
  (interactive)
  (let ((id (org-id-new "id-pair")))
    (save-excursion
      (alpha-org-insert-id-marker id :comment comment))
    (org-capture nil)))
(defun* alpha-org-insert-id-marker (id &key comment)
  "Insert an ID marker."
  (insert
   (concat (when comment comment)
           "$[id "
           id
           ;; (when link (concat " :link " link))
           ;; ;; (org-insert-link)
           ;; (when label (concat " :label \"" label "\""))
           "]"))
  (forward-line -1)
  (funcall indent-line-function))

On 4/6/13, Eric Schulte <schulte.eric@gmail.com> wrote:
> That could be handy.  For jumping back and for by function name, the
> following simple implementation might be sufficient.  It relies on file
> local variables to know which src and Org-mode files are related to each
> other.

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY
can get it.  There is NO hope without action.  This means YOU.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-03-15 15:39 Org-mode outside Org-mode Thorsten Jolitz
  2013-03-15 16:47 ` Thomas S. Dye
  2013-04-03 18:23 ` Samuel Wales
@ 2013-04-24 14:20 ` Alexander Vorobiev
  2013-04-24 18:39   ` Thorsten Jolitz
  2013-04-25 17:33   ` Thorsten Jolitz
  2 siblings, 2 replies; 17+ messages in thread
From: Alexander Vorobiev @ 2013-04-24 14:20 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 4284 bytes --]

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).

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).

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:

(defmacro 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))
                          (error "Could not deduce mode name from keymap
name (\"-map\" missing?)")))) nil)
                 (original-func (key-binding ,key)))
           (call-interactively original-func))))))

So now I can just do

(define-key-with-fallback outline-minor-mode-map (kbd "TAB") (outline-cycle
1) (outline-on-heading-p))

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?

Thanks again,
Alex


On Fri, Mar 15, 2013 at 10:39 AM, Thorsten Jolitz <tjolitz@gmail.com> wrote:

>
> Hi List,
>
> there is a now a tutorial on Worg describing the recently announced new
> libraries for using (concepts and functionality of) Org-mode when
> outside Org-mode:
>
> ,-----------------------------------------------------------
> | http://orgmode.org/worg/org-tutorials/org-outside-org.html
> `-----------------------------------------------------------
>
> Besides using the 'well-known' orgstruct-minor-mode, you can now:
>
> - use outline-minor-mode with *outshine.el* extensions and structure
>   your file with outshine-style headlines, giving your source-code files
>   the look&feel of Org-mode files. Should work in any major-mode.
>
> - use *outorg.el* to edit complete subtrees or the whole file as
>   Org-mode in a temporary Org-mode edit-buffer. Depends on outshine.
>
> - use *navi-mode.el* to open an occur-like indirect buffer for
>   super-fast navigation and structure-editing (as well as other common
>   actions on subtrees) in the associated original-buffer - all with
>   one-key commands in a read-only buffer. A kind of customizable
>   remote-control for the original-buffer with many views combining
>   headline and keyword searches and easy switching between the
>   associated buffers. Depends somehow on outshine too, but to a much
>   lesser degree than outorg.el
>
> And of course you have Francois Pinard's *poporg.el* and can (completely
> independent from orgstruct or outshine):
>
> - edit atomic comment-sections (anywhere in a source-code buffer, no
>   matter what major-mode) in a temporary Org-mode edit-buffer. Thus,
>   while *outorg* gives you a whole subtree with headline and source-code
>   blocks in a temporary Org-mode edit-buffer, *poporg* gives you only
>   the comment-string near point and nothing else, so that both libraries
>   complement each other really well in their usage.
>
> For more details see the tutorial on Worg.
>
> --
> cheers,
> Thorsten
>
>
>
>

[-- Attachment #2: Type: text/html, Size: 5689 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-24 14:20 ` Alexander Vorobiev
@ 2013-04-24 18:39   ` Thorsten Jolitz
  2013-04-25 17:33   ` Thorsten Jolitz
  1 sibling, 0 replies; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-24 18:39 UTC (permalink / raw)
  To: emacs-orgmode

Alexander Vorobiev <alexander.vorobiev@gmail.com> 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/emacs-orgmode@gnu.org/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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-24 14:20 ` Alexander Vorobiev
  2013-04-24 18:39   ` Thorsten Jolitz
@ 2013-04-25 17:33   ` Thorsten Jolitz
  1 sibling, 0 replies; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-25 17:33 UTC (permalink / raw)
  To: emacs-orgmode

Alexander Vorobiev <alexander.vorobiev@gmail.com> writes:

Hi Alexander, 

> 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 just pushed a new version of outshine.el on github (and updated the
Org-mode outside Org-mode article on Worg). I use a modified version of
your macro to bind TAB, M-<left-arrow> and M-<right-arrow>. I still
'take over' BACKTAB and M-<up-arrow> and M-<down-arrow> in outshine.el,
since the associated functions are usefull anywhere in an outshine
buffer.

Thanks for the tip and the code!

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: Org-mode outside Org-mode
  2013-04-13 20:45             ` Samuel Wales
@ 2013-04-27  8:35               ` Thorsten Jolitz
  0 siblings, 0 replies; 17+ messages in thread
From: Thorsten Jolitz @ 2013-04-27  8:35 UTC (permalink / raw)
  To: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

Hi Samuel,

>> If you structure your Emacs Lisp files the 'outshine way', you can
>> convert them into complete Org files fast and easily using 'outorg.el'.

> With what I am talking about, you can:
>
>   - put your Org notes in your main Org agenda files exactly where you want them
>   - efficiently use planning information to create daily/weekly agenda entries
>   - bounce to and from the exact location in your source code to the
> exact Org entry
>
> Therefore, the category of tools I suggested to you -- which consists
> of annotation-like mechanisms -- is a completely different way of
> tackling the problem of dealing with source code and Org
> simultaneously.
>
> Yet it is a way of dealing with them simultaneously, which is the
> reason I suggested putting them in your document also, if you felt
> like it.

I think I missed this mail. When you have a worked out system for such
a tool-chain, it would definitely be nice to describe it in the
'Org-mode outside Org-mode' tutorial on Worg. Maybe even giving the
whole thing a name like 'Source-file annotation with Org-mode' or so. 

Feel free to add a new item for this in the tutorial. When you don't
have write access to Worg, you could send it to me and I add it to the
article. 

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2013-04-27  8:35 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-15 15:39 Org-mode outside Org-mode Thorsten Jolitz
2013-03-15 16:47 ` Thomas S. Dye
2013-04-03 18:23 ` Samuel Wales
2013-04-04 14:09   ` Thorsten Jolitz
2013-04-04 20:17     ` Samuel Wales
2013-04-05  9:51       ` Thorsten Jolitz
2013-04-07  1:05         ` Eric Schulte
2013-04-07  7:49           ` Bastien
2013-04-12  1:04           ` Samuel Wales
2013-04-13 20:48           ` Samuel Wales
2013-04-12  1:19         ` Samuel Wales
2013-04-12 10:44           ` Thorsten Jolitz
2013-04-13 20:45             ` Samuel Wales
2013-04-27  8:35               ` Thorsten Jolitz
2013-04-24 14:20 ` Alexander Vorobiev
2013-04-24 18:39   ` Thorsten Jolitz
2013-04-25 17:33   ` Thorsten Jolitz

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

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).