emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* making work by pasting code and examples
@ 2017-06-30 14:57 Michael Ax
  2017-06-30 18:28 ` Kaushal Modi
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Ax @ 2017-06-30 14:57 UTC (permalink / raw)
  To: Org-mode

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

when i paste blog content mixing text & code i usually want to wrap bits 
of the paste in an org-structure-template.

i do it by
- mark a region
- cut the region
- type <x tab to get the template
- paste the region

i would like to not cut and paste.

any tips on advising or an advise for the org-structure-template expander?
i would like it to check the lossage and be smart about wrapping itself 
around the stuff i mean.



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

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

* Re: making work by pasting code and examples
  2017-06-30 14:57 making work by pasting code and examples Michael Ax
@ 2017-06-30 18:28 ` Kaushal Modi
  2017-06-30 18:33   ` Kaushal Modi
  0 siblings, 1 reply; 4+ messages in thread
From: Kaushal Modi @ 2017-06-30 18:28 UTC (permalink / raw)
  To: Michael Ax, Org-mode

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

On Fri, Jun 30, 2017 at 10:59 AM Michael Ax <michaelax@gmail.com> wrote:

> when i paste blog content mixing text & code i usually want to wrap bits
> of the paste in an org-structure-template.
>
> i do it by
> - mark a region
> - cut the region
> - type <x tab to get the template
> - paste the region
>
> i would like to not cut and paste.
>
> any tips on advising or an advise for the org-structure-template expander?
> i would like it to check the lossage and be smart about wrapping itself
> around the stuff i mean.
>

I have been using this[1] for the last year and a half and it works pretty
awesome. You would need to install the hydra package. The examples in the
comments pretty much describes your use case.

How to use the below:

1. Install the hydra package.
2. Evaluate the below code.
3. In an org buffer, select some text.
4. Press "<x" (no tab needed).. and the selected text will be wrapped in
"#+BEGIN_EXAMPLE" and "#+END_EXAMPLE".

=====
(defun modi/org-template-expand (str &optional lang)
  "Expand org template."
  (let (beg old-beg end content)
    ;; Save restriction to automatically undo the upcoming
`narrow-to-region'
    (save-restriction
      (when (use-region-p)
        (setq beg (region-beginning))
        (setq end (region-end))
        ;; Note that regardless of the direction of selection, we will
always
        ;; have (region-beginning) < (region-end).
        (save-excursion
          ;; If `point' is at `end', exchange point and mark so that now the
          ;; `point' is now at `beg'
          (when (> (point) (mark))
            (exchange-point-and-mark))
          ;; Insert a newline if `beg' is *not* at beginning of the line.
          ;; Example: You have ^abc$ where ^ is bol and $ is eol.
          ;;          "bc" is selected and <e is pressed to result in:
          ;;            a
          ;;            #+BEGIN_EXAMPLE
          ;;            bc
          ;;            #+END_EXAMPLE
          (when (/= beg (line-beginning-position))
            (electric-indent-just-newline 1)
            (setq old-beg beg)
            (setq beg (point))
            ;; Adjust the `end' due to newline
            (setq end (+ end (- beg old-beg)))))
        (save-excursion
          ;; If `point' is at `beg', exchange point and mark so that now the
          ;; `point' is now at `end'
          (when (< (point) (mark))
            (exchange-point-and-mark))
          ;; If the `end' position is at the beginning of a line decrement
          ;; the position by 1, so that the resultant position is eol on
          ;; the previous line.
          (when (= end (line-beginning-position))
            (setq end (1- end)))
          ;; Insert a newline if `point'/`end' is *not* at end of the line.
          ;; Example: You have ^abc$ where ^ is bol and $ is eol.
          ;;          "a" is selected and <e is pressed to result in:
          ;;            #+BEGIN_EXAMPLE
          ;;            a
          ;;            #+END_EXAMPLE
          ;;            bc
          (when (not (looking-at "\\s-*$"))
            (electric-indent-just-newline 1)))
        ;; Narrow to region so that the text surround the region does
        ;; not mess up the upcoming `org-try-structure-completion' eval
        (narrow-to-region beg end)
        (setq content (delete-and-extract-region beg end)))
      (insert str)
      (org-try-structure-completion)
      (when (string= "<s" str)
        (cond
         (lang
          (insert lang)
          (forward-line))
         ((and content (not lang))
          (insert "???")
          (forward-line))
         (t
          )))
      ;; At this point the cursor will be between the #+BEGIN and #+END
lines
      (when content
        (insert content)
        (deactivate-mark)))))

(defhydra hydra-org-template (:color blue
                              :hint nil)
  "
org-template:  _c_enter        _s_rc          _e_xample           _v_erilog
       _t_ext           _I_NCLUDE:
               _l_atex         _h_tml         _V_erse             _m_atlab
        _L_aTeX:         _H_TML:
               _a_scii         _q_uote        _E_macs-lisp        _S_hell
       _i_ndex:         _A_SCII:
               ^^              ^^             ^^                  _p_ython
        ^^               ^^
"
  ("s" (modi/org-template-expand "<s")) ; #+BEGIN_SRC ... #+END_SRC
  ("E" (modi/org-template-expand "<s" "emacs-lisp"))
  ("v" (modi/org-template-expand "<s" "systemverilog"))
  ("m" (modi/org-template-expand "<s" "matlab"))
  ("S" (modi/org-template-expand "<s" "shell"))
  ("p" (modi/org-template-expand "<s" "python"))
  ("t" (modi/org-template-expand "<s" "text"))
  ("e" (modi/org-template-expand "<e")) ; #+BEGIN_EXAMPLE ... #+END_EXAMPLE
  ("x" (modi/org-template-expand "<e")) ; #+BEGIN_EXAMPLE ... #+END_EXAMPLE
  ("q" (modi/org-template-expand "<q")) ; #+BEGIN_QUOTE ... #+END_QUOTE
  ("V" (modi/org-template-expand "<v")) ; #+BEGIN_VERSE ... #+END_VERSE
  ("c" (modi/org-template-expand "<c")) ; #+BEGIN_CENTER ... #+END_CENTER
  ("l" (modi/org-template-expand "<l")) ; #+BEGIN_EXPORT latex ...
#+END_EXPORT
  ("L" (modi/org-template-expand "<L")) ; #+LaTeX:
  ("h" (modi/org-template-expand "<h")) ; #+BEGIN_EXPORT html ...
#+END_EXPORT
  ("H" (modi/org-template-expand "<H")) ; #+HTML:
  ("a" (modi/org-template-expand "<a")) ; #+BEGIN_EXPORT ascii ...
#+END_EXPORT
  ("A" (modi/org-template-expand "<A")) ; #+ASCII:
  ("i" (modi/org-template-expand "<i")) ; #+INDEX: line
  ("I" (modi/org-template-expand "<I")) ; #+INCLUDE: line
  ("<" self-insert-command "<")
  ("o" nil "quit"))

(defun modi/org-template-maybe ()
  "Insert org-template if point is at the beginning of the line, or is a
region is selected. Else call `self-insert-command'."
  (interactive)
  (let ((regionp (use-region-p)))
    (if (or regionp
            (and (not regionp)
                 (looking-back "^")))
        (hydra-org-template/body)
      (self-insert-command 1))))

(define-key org-mode-map (kbd "<") #'modi/org-template-maybe)
=====

[1]:
https://github.com/kaushalmodi/.emacs.d/blob/4495b6126ddeb20959d438dbe2ad9de50e5ed336/setup-files/setup-org.el#L684-L1229
-- 

Kaushal Modi

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

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

* Re: making work by pasting code and examples
  2017-06-30 18:28 ` Kaushal Modi
@ 2017-06-30 18:33   ` Kaushal Modi
  2017-06-30 20:09     ` Michael Ax
  0 siblings, 1 reply; 4+ messages in thread
From: Kaushal Modi @ 2017-06-30 18:33 UTC (permalink / raw)
  To: Michael Ax, Org-mode

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

On Fri, Jun 30, 2017 at 2:28 PM Kaushal Modi <kaushal.modi@gmail.com> wrote:

Here's a working link:
https://github.com/kaushalmodi/.emacs.d/blob/5acb3a4db737df85d1cd7d70c56232ec8a40e8b4/setup-files/setup-org.el#L1121-L1229

(pasted link to an unpublished commit by mistake earlier)
-- 

Kaushal Modi

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

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

* Re: making work by pasting code and examples
  2017-06-30 18:33   ` Kaushal Modi
@ 2017-06-30 20:09     ` Michael Ax
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Ax @ 2017-06-30 20:09 UTC (permalink / raw)
  To: Org-mode

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

definitely awed now. will investigate - ty m

On 06/30/2017 08:33 PM, Kaushal Modi wrote:
> On Fri, Jun 30, 2017 at 2:28 PM Kaushal Modi <kaushal.modi@gmail.com 
> <mailto:kaushal.modi@gmail.com>> wrote:
>
> Here's a working link: 
> https://github.com/kaushalmodi/.emacs.d/blob/5acb3a4db737df85d1cd7d70c56232ec8a40e8b4/setup-files/setup-org.el#L1121-L1229
>

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

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

end of thread, other threads:[~2017-06-30 20:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-30 14:57 making work by pasting code and examples Michael Ax
2017-06-30 18:28 ` Kaushal Modi
2017-06-30 18:33   ` Kaushal Modi
2017-06-30 20:09     ` Michael Ax

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