emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: shortcut keys for mark ups


From: Bernt Hansen
Subject: [Orgmode] Re: shortcut keys for mark ups
Date: Wed, 07 Jan 2009 17:16:02 -0500
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux)

Patrick Drechsler <address@hidden> writes:

> Bernt Hansen schrieb:
> [snipped nice code]
>
> How can I extend this function to wrap the current selection into a
>
> #+BEGIN_SRC
> ...code...
> #+END_SRC
>
> string while also interactively asking the user for a language string?
>
> -----------------------------------------------------------------
> ;;  ============================================================
> ;; Puts current selection between #+BEGIN_SRC and #+END_SRC
> ;; and ask for language
> ;;  ============================================================
> ;; TODO:
> ;;  1. Retrieve beginning (C-SPACE) and
> ;;     end of selection (current position)
> ;;  2. Ask for language and insert that string
> ;;     after `#+BEGIN_SRC '
> (defun my-wrap-src ()
>   (interactive)
>   (save-excursion
>     (beginning-of-line)
>     (insert "#+BEGIN_SRC\n")
>     (end-of-line)
>     (insert "\n#+END_SRC")))
> (define-key org-mode-map (kbd "<f9> s") 'my-wrap-src)
> -----------------------------------------------------------------
>
> Example org code before function call:
>
> -----------------------------------------------------------------
> * Sample Code
> public class Bla {
>       public static void main(String[] args) {
>               System.out.println("Hello");
>       }
> }
> -----------------------------------------------------------------
>
> With the code above:
>
> - Mark the region: C-SPACE on the letter `p' of the string `public'
> and moving the cursor behind the last closing curly bracket.
>
> - String after being asked for a language: `java'
>
> Example org code after function call:
>
> -----------------------------------------------------------------
> * Sample Code
> #+BEGIN_SRC java
> public class Bla {
>       public static void main(String[] args) {
>               System.out.println("Hello");
>       }
> }
> #+END_SRC
> -----------------------------------------------------------------

Something like this maybe?  It's not 100% to spec. I find regions that
are entire lines easier to work with so the end point would be the
beginning of the first line not in the region (not after the })
For me - triple clicking and dragging selects entire lines which works
well for this.

------------------------------------------------------------------------
(defun my-wrap-src ()
  (interactive)
  (let ((beg (region-beginning))
        (end (region-end))
        (src (read-from-minibuffer "Source type: " "java")))
    (save-excursion
      (goto-char (region-end))
      (insert "#+END_SRC\n")
      (goto-char (region-beginning))
      (insert "#+BEGIN_SRC " src "\n"))))
------------------------------------------------------------------------

If you want your behaviour you probably jsut have to change 
      (insert "#+END_SRC\n")
to
      (insert "\n#+END_SRC")
but that's untested.

HTH,
-Bernt




reply via email to

[Prev in Thread] Current Thread [Next in Thread]