emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: Carsten Dominik <carsten.dominik@gmail.com>
Cc: emacs org-mode mailing list <emacs-orgmode@gnu.org>
Subject: Re: outline-minor-mode and code editing / export
Date: Tue, 09 Jun 2009 09:22:59 -0400	[thread overview]
Message-ID: <878wk1mtho.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <49673B8D-315B-4CE6-8BEB-67AB13B70649@gmail.com> (Carsten Dominik's message of "Mon, 8 Jun 2009 08:54:56 +0200")

Carsten Dominik <carsten.dominik@gmail.com> writes:

> On Jun 7, 2009, at 7:19 PM, Dan Davison wrote:
>
>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>>
>>> Hi Dan,
>>>
>>> an alternative solution would be to turn off the major mode hook for
>>> org-edit-src.  Would that be good or bad?  It is probably never a
>>> good idea to have code folded in these snippet buffers?
>>
>> I think you're right that it's a personal customisation and it's not
>> really org's job to defend against it. I don't think the major mode
>> hook
>> should be disabled, as there'll be other things that users might
>> want to
>> configure, and retain in org-edit-src and htmlized versions. Do you
>> think it would be of sufficient general utility to add hooks to org to
>> cover this? (in which, e.g., outline-major-mode could be turned off?).
>> I.e. something like
>>
>> 1. org-edit-src-mode-hook *
>> 2. org-export-preprocess-src-buffer-hook
>>
>> Or maybe those should be the same hook?
>
> Yes, I would think so.  The hooks is called `org-src-mode-hook'.

Great, thanks.

>
>>
>> Dan
>>
>> * Btw, a trivial thing, but I wonder if it would be appropriate to
>> rename
>> org-exit-edit-mode as something like org-edit-src-mode; it now has two
>> keybindings only one of which is to do with exiting.
>
> I don't understand this point.  Please try again :-)

No problem. We currently have this in org-src.el:

(define-minor-mode org-exit-edit-mode
  "Minor mode installing a single key binding, \"C-c '\" to exit special edit.")

However, the scope of that minor mode has now expanded, and as well as
the docstring being out of date, its name is misleading, as it is now
concerned with more than just *exit* (saving as well).

What I propose is that we rename org-exit-edit-mode as org-src-mode, and
that that minor mode is turned on when editing source blocks with C-c ',
and when processing with htmlize.  Because of the way you named the hook
you just created, the minor mode would automatically inherit it as its
minor mode hook. I think this would logically tie together your recent
changes (expansion of functionality in the edit buffer, and addition of
org-src-mode-hook), and would leave the door open for future additions
to org-src-mode.

I've quickly made these changes, and tested that the minor mode hook had
the desired effect (for me) on export and source code editing. Here's my
patch that does what I propose.

Dan

diff --git a/lisp/org-exp.el b/lisp/org-exp.el
index 4e98bb9..b8fb201 100644
--- a/lisp/org-exp.el
+++ b/lisp/org-exp.el
@@ -2219,7 +2219,7 @@ INDENT was the original indentation of the block."
 				(funcall mode)
 			      (fundamental-mode))
 			    (font-lock-fontify-buffer)
-			    (run-hooks 'org-src-mode-hook)
+			    (org-src-mode)
 			    (set-buffer-modified-p nil)
 			    (org-export-htmlize-region-for-paste
 			     (point-min) (point-max))))
diff --git a/lisp/org-src.el b/lisp/org-src.el
index 401c628..524f6d6 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -116,9 +116,9 @@ This is needed for font-lock setup.")
 
 ;;; Editing source examples
 
-(defvar org-exit-edit-mode-map (make-sparse-keymap))
-(define-key org-exit-edit-mode-map "\C-c'" 'org-edit-src-exit)
-(define-key org-exit-edit-mode-map "\C-x\C-s" 'org-edit-src-save)
+(defvar org-src-mode-map (make-sparse-keymap))
+(define-key org-src-mode-map "\C-c'" 'org-edit-src-exit)
+(define-key org-src-mode-map "\C-x\C-s" 'org-edit-src-save)
 (defvar org-edit-src-force-single-line nil)
 (defvar org-edit-src-from-org-mode nil)
 (defvar org-edit-src-picture nil)
@@ -127,8 +127,14 @@ This is needed for font-lock setup.")
 (defvar org-edit-src-overlay nil)
 (defvar org-edit-src-nindent nil)
 
-(define-minor-mode org-exit-edit-mode
-  "Minor mode installing a single key binding, \"C-c '\" to exit special edit.")
+(define-minor-mode org-src-mode
+  "Minor mode for language major mode buffers generated by org.
+This minor mode is turned on in two situations:
+- when editing a source code snippet with \"C-c '\".
+- When formatting a source code snippet for export with htmlize.
+There is a mode hook, and keybindings for org-edit-src-exit and
+org-edit-src-save
+")
 
 (defun org-edit-src-code ()
   "Edit the source code example at point.
@@ -187,7 +193,7 @@ the edited version."
 	(org-do-remove-indentation)
 	(let ((org-inhibit-startup t))
 	  (funcall lang-f)
-	  (run-hooks 'org-src-mode-hook))
+	  (org-src-mode))
 	(set (make-local-variable 'org-edit-src-force-single-line) single)
 	(set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p)
 	(when lfmt
@@ -197,7 +203,6 @@ the edited version."
 	  (while (re-search-forward "^," nil t)
 	    (replace-match "")))
 	(goto-line (1+ (- line begline)))
-	(org-exit-edit-mode)
 	(org-set-local 'org-edit-src-beg-marker beg)
 	(org-set-local 'org-edit-src-end-marker end)
 	(org-set-local 'org-edit-src-overlay ovl)




>
> - Carsten
>
>
>>
>>
>>>
>>> - Carsten
>>>
>>> On Jun 6, 2009, at 9:32 PM, Dan Davison wrote:
>>>
>>>> In turn on outline-minor-mode in the language major modes that I
>>>> use, so
>>>> that code starts up folded, via a call to org-content that is made
>>>> in my
>>>> major-mode hook. I'm finding that this has two undesirable
>>>> consequences
>>>> for org-mode, as follows. I have also described a possible solution,
>>>> as
>>>> implemented by the patch at the end.
>>>>
>>>> 1. The code appears folded on HTML export
>>>>
>>>>  solution: add this line to org-export-format-source-code-or-example
>>>>  (if (fboundp 'show-all) (show-all))
>>>>
>>>> 2. org-edit-src-save does not remember the visibility state, so C-x
>>>> C-s
>>>>  causes a jump to a different visibility state
>>>>
>>>>  solution: save the value of org-cycle-global-status and, when the
>>>>  edit buffer is re-entered, call one of {org-overview,
>>>>  org-content,show-all} accordingly
>>>>
>>>> Dan
>>>>
>>>> p.s. Carsten: the first hunk in the second diff (org.el) refers to a
>>>> patch that I submitted a few days ago and which you said had been
>>>> applied. http://article.gmane.org/gmane.emacs.orgmode/14154
>>>> However, I
>>>> believe it is not in the current git. Apologies if I have got (git)
>>>> confused, but if not I do believe there is still a need for it or an
>>>> equivalent solution: without this change I go to end of edit buffer,
>>>> hit
>>>> return a few times, and then C-x C-s fails (leaves me in org
>>>> buffer).
>>>>
>>>>
>>>>
>>>>
>>>> diff --git a/lisp/org-exp.el b/lisp/org-exp.el
>>>> index 0dcd956..5f0ad88 100644
>>>> --- a/lisp/org-exp.el
>>>> +++ b/lisp/org-exp.el
>>>> @@ -2215,7 +2215,6 @@ INDENT was the original indentation of the
>>>> block."
>>>> 			    (if (functionp mode)
>>>> 				(funcall mode)
>>>> 			      (fundamental-mode))
>>>> -			    (if (fboundp 'show-all) (show-all))
>>>> 			    (font-lock-fontify-buffer)
>>>> 			    (set-buffer-modified-p nil)
>>>> 			    (org-export-htmlize-region-for-paste
>>>> diff --git a/lisp/org.el b/lisp/org.el
>>>> index d124b1a..1eb5e74 100644
>>>> --- a/lisp/org.el
>>>> +++ b/lisp/org.el
>>>> @@ -6875,9 +6875,7 @@ the language, a switch telling of the content
>>>> should be in a single line."
>>>> 	code)
>>>>  (goto-char (point-min))
>>>>  (if (looking-at "[ \t\n]*\n") (replace-match ""))
>>>> -  (when (re-search-forward "\n[ \t\n]*\\'" nil t)
>>>> -    (replace-match "")
>>>> -    (setq line (min line (org-current-line))))
>>>> +  (if (re-search-forward "\n[ \t\n]*\\'" nil t) (replace-match ""))
>>>>  (when (org-bound-and-true-p org-edit-src-force-single-line)
>>>>    (goto-char (point-min))
>>>>    (while (re-search-forward "\n" nil t)
>>>> @@ -6916,18 +6914,11 @@ the language, a switch telling of the
>>>> content should be in a single line."
>>>> (defun org-edit-src-save ()
>>>>  "Save parent buffer with current state source-code buffer."
>>>>  (interactive)
>>>> -  (let ((p (point)) (m (mark))
>>>> -       (visibility org-cycle-global-status) msg)
>>>> +  (let ((p (point)) (m (mark)) msg)
>>>>    (org-edit-src-exit)
>>>>    (save-buffer)
>>>>    (setq msg (current-message))
>>>>    (org-edit-src-code)
>>>> -    (when visibility
>>>> -      (setq org-cycle-global-status visibility)
>>>> -      (cond
>>>> -       ((equal org-cycle-global-status 'overview) (org-overview))
>>>> -       ((equal org-cycle-global-status 'contents) (org-content))
>>>> -       ((equal org-cycle-global-status 'all) (show-all))))
>>>>    (push-mark m 'nomessage)
>>>>    (goto-char (min p (point-max)))
>>>>    (message (or msg ""))))
>>>>
>>>>
>>>> _______________________________________________
>>>> Emacs-orgmode mailing list
>>>> Remember: use `Reply All' to send replies to the list.
>>>> Emacs-orgmode@gnu.org
>>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>>
>>>
>>>
>>> _______________________________________________
>>> Emacs-orgmode mailing list
>>> Remember: use `Reply All' to send replies to the list.
>>> Emacs-orgmode@gnu.org
>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

  reply	other threads:[~2009-06-09 13:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-06 19:32 outline-minor-mode and code editing / export Dan Davison
2009-06-06 19:45 ` Dan Davison
2009-06-07 15:56 ` Carsten Dominik
2009-06-07 17:19   ` Dan Davison
2009-06-08  6:54     ` Carsten Dominik
2009-06-09 13:22       ` Dan Davison [this message]
2009-06-09 17:29         ` Carsten Dominik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878wk1mtho.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).