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