From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xebar Saram Subject: Re: [ANN] org-dp-wrap-in-block Date: Sat, 7 Mar 2015 08:37:09 +0200 Message-ID: References: <87y4ukefci.fsf@gmail.com> <87k364e07m.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=089e0103e4e4c48ad80510ad0736 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YU8ML-00071a-Mr for emacs-orgmode@gnu.org; Sat, 07 Mar 2015 01:37:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YU8MJ-0003DH-Az for emacs-orgmode@gnu.org; Sat, 07 Mar 2015 01:37:13 -0500 Received: from mail-pd0-x235.google.com ([2607:f8b0:400e:c02::235]:46428) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YU8MI-0003D9-R3 for emacs-orgmode@gnu.org; Sat, 07 Mar 2015 01:37:11 -0500 Received: by pdev10 with SMTP id v10so20206787pde.13 for ; Fri, 06 Mar 2015 22:37:09 -0800 (PST) In-Reply-To: <87k364e07m.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Thorsten Jolitz Cc: org mode --089e0103e4e4c48ad80510ad0736 Content-Type: text/plain; charset=UTF-8 H Thorsten i know this is a *very* late response but life/work has dragged me in last few months and only now i have time to take a look at org-dp :) if you remember i have near to null coding skills but i am trying to make sense of stuff looking at the github site and the org-dp.el examples i understand (or at least i think i do) that org-dp is very complex and covers not just wrapping in source code lines/areas but what i basically need is to assign hotkeys to specific wrapping. mainly these: 1. a hotkey to quick wrap in language X a line 2. a hotkey to quick wrap in language X y lines 3. a hotkey to quick wrap in language X a selection any tips and how to start/create these keybinds? is there a more comprehensive documentation on org-dp somewhere else i may have overlooked? thx alot! z On Tue, Aug 19, 2014 at 10:41 PM, Thorsten Jolitz wrote: > Xebar Saram writes: > > Hi, > > > will use it over the next few days and report bug (if any) that i find > > good, thanks. > > As a hint, here the global keybindings I defined in my init.el (my > default use-case is to simply wrap in a plain emacs-lisp src-block). > > You can define all kinds of functions that don't prompt the user anymore > by giving a list like > > '(elem-type contents replace affiliated args) > > as second arg to `org-dp-wrap-in-block', and in that list you can > specify any kind of customized block. > > #+BEGIN_SRC emacs-lisp > (when (require 'org-dp-lib nil t) > > (defun tj/wrap-in-elisp-block () > (org-dp-wrap-in-block > nil '(src-block nil nil nil (:language "emacs-lisp")))) > > (global-set-key (kbd "C-c w w") 'org-dp-wrap-in-block) > > (global-set-key (kbd "C-c w l") > (lambda () > (interactive) > (let ((current-prefix-arg '(4))) > (call-interactively > 'org-dp-wrap-in-block)))) > > (global-set-key (kbd "C-c w e") > (lambda () > (interactive) > (beginning-of-line) > (tj/wrap-in-elisp-block))) > > (global-set-key (kbd "C-c w a") > (lambda () > (interactive) > (backward-sexp) > (beginning-of-line) > (tj/wrap-in-elisp-block))) ) > #+END_SRC > > > > On Tue, Aug 19, 2014 at 5:14 PM, Thorsten Jolitz > > wrote: > > > > Hi List, > > > > I've written the "eierlegende Wollmilchsau" of wrap-in-block > > functions > > (i.e. the 'all-inclusive mother of all wrap-in-block functions'). > > > > To check it out, you need to > > 1. Clone or fork the git repo (https://github.com/tj64/org-dp) > > 2. (add-to-list 'load-path "/path/to/org-dp/") and > > 3. (require 'org-dp-lib') in your init file > > > > `org-dp-wrap-in-block' works on/with all kinds of Org blocks, and > > can be > > called interactively or non-interactively. > > > > It > > > > - inserts a new block when called on an empty line without > > arguments > > > > - wraps sexp or region or '+/- X lines from point' into a newly > > created > > block > > > > - when called with point inside a block, it either > > > > + unwraps the blocks content, i.e. deletes the surrounding block > > or > > > > + replaces the surrounding block with a different block > > > > It takes full account of affiliated keywords. In case of > > src-blocks, > > it puts src-block parameters on the block's headline, but with > > `org-dp-toggle-headers' its easy to toggle between parameters > > > > ,---- > > | #+begin_src R :noweb yes > > `---- > > > > and headers > > > > ,---- > > | #+header: :noweb yes > > | #+begin_src R > > `---- > > > > This function takes into account so many options that > > combinatorics hits > > you badly when trying to test all of them. Everything I tried > > works now > > with the current version, but its not unlikely that daily usage > > will > > discover some bugs or untreated corner cases. Please report them > > with > > backtrace. > > > > The good news is that besides its complexity, its not one > > mega-convoluted monolithic function for a single task only. > > Instead I > > outfactored the core functionality into the 'org-dp.el' library > > ("Declarative Programming with Org Elements") which offers > > potentially > > massive time (and headache) savings when programming with Org > > Elements > > on the local level. > > > > 'org-dp' acts on the internal representation of Org elements, and > > due to > > the total uniformity of this representation it is possible to do > > diverse > > actions on diverse elements in a very uniform way, thus the 3 > > functions > > > > - `org-dp-create' > > > > - `org-dp-rewire' > > > > - `org-dp-prompt' > > > > should be all you need for all kinds of programming > > tasks. `org-dp-wrap-in-block' is one example of how to program > > with > > org-dp, `org-dp-toggle-headers' is another one. > > > > Hope that this is useful. > > > > PS > > > > For the sake of completeness, here the docstring of > > `org-dp-wrap-in-block': > > > > ,----[ C-h f org-dp-wrap-in-block RET ] > > | org-dp-wrap-in-block is an interactive Lisp function in > > | `org-dp-lib.el'. > > | > > | It is bound to C-c w w. > > | > > | (org-dp-wrap-in-block &optional LINES USER-INFO) > > | > > | Wrap sexp-at-point or region in Org block. > > | > > | A region instead of the sexp-at-point is wrapped if either > > | > > | - optional arg LINES is an (positive or negative) integer or > > | > > | - the region is active > > | > > | In the first case the region is determined by moving +/- LINES > > | forward/backward from point using `forward-line', in the second > > | case the active region is used. > > | > > | If point is already inside of a block, modify it or unwrap its > > | content/value instead of wrapping it in another block, except if > > | explicitly asked for by user. > > | > > | If USER-INFO is given, it should be a list in the format > > returned by > > | `org-dp-prompt', i.e. > > | > > | (elem-type contents replace affiliated args) > > | > > | Look up that function's docstring for more information about the > > | list's elements. A non-nil USER-INFO suppresses calls to > > | `org-dp-prompt' and is used instead of its return value. > > `---- > > > > -- > > cheers, > > Thorsten > > > > > > > > > > -- > cheers, > Thorsten > > > --089e0103e4e4c48ad80510ad0736 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
H Thorsten

i know this is a *very* late= response but life/work has dragged me in last few months and only now i ha= ve time to take a look at org-dp :)

if you remembe= r i have near to null coding skills but i am trying to make sense of stuff = looking at the github site and the org-dp.el examples

<= div>i understand (or at least i think i do) that org-dp is very complex and= covers not just wrapping in source code lines/areas but what i basically n= eed is to assign hotkeys to specific wrapping. mainly these:

=
1. a hotkey to quick wrap in language X a line
2. a ho= tkey to quick wrap in language X y lines
3. a hotkey to quick= wrap in language X a selection

any tips and h= ow to start/create these keybinds? is there a more comprehensive documentat= ion on org-dp somewhere else i may have overlooked?

thx alot!

z


<= div>

On Tue, Aug 19, 2014 at 10:41 PM, Thorsten Jolitz <= tjolitz@gmail.com> wrote:
Xebar Saram <zeltakc@gmail.com> writes:

Hi,

> will use it over the next few days and report bug (if any) that i find=

good, thanks.

As a hint, here the global keybindings I defined in my init.el (my
default use-case is to simply wrap in a plain emacs-lisp src-block).

You can define all kinds of functions that don't prompt the user anymor= e
by giving a list like

=C2=A0'(elem-type contents replace affiliated args)

as second arg to `org-dp-wrap-in-block', and in that list you can
specify any kind of customized block.

#+BEGIN_SRC emacs-lisp
(when (require 'org-dp-lib nil t)

=C2=A0 (defun tj/wrap-in-elisp-block ()
=C2=A0 =C2=A0 (org-dp-wrap-in-block
=C2=A0 =C2=A0 =C2=A0nil '(src-block nil nil nil (:language "emacs-= lisp"))))

=C2=A0 (global-set-key (kbd "C-c w w") 'org-dp-wrap-in-block)=

=C2=A0 (global-set-key (kbd "C-c w l")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda () =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inte= ractive)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let = ((current-prefix-arg '(4)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (call-interactively
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'org-dp-wrap-in-block))))

=C2=A0 (global-set-key (kbd "C-c w e")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda () =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inte= ractive)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (begi= nning-of-line)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (tj/w= rap-in-elisp-block)))

=C2=A0 (global-set-key (kbd "C-c w a")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda () =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inte= ractive)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (back= ward-sexp)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (begi= nning-of-line)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (tj/w= rap-in-elisp-block))) )
#+END_SRC


> On Tue, Aug 19, 2014 at 5:14 PM, Thorsten Jolitz <tjolitz@gmail.com>
> wrote:
>
>=C2=A0 =C2=A0 =C2=A0Hi List,
>
>=C2=A0 =C2=A0 =C2=A0I've written the "eierlegende Wollmilchsau= " of wrap-in-block
>=C2=A0 =C2=A0 =C2=A0functions
>=C2=A0 =C2=A0 =C2=A0(i.e. the 'all-inclusive mother of all wrap-in-= block functions').
>
>=C2=A0 =C2=A0 =C2=A0To check it out, you need to
>=C2=A0 =C2=A0 =C2=A01. Clone or fork the git repo (https://github.com/tj64/org-dp= )
>=C2=A0 =C2=A0 =C2=A02. (add-to-list 'load-path "/path/to/org-d= p/") and
>=C2=A0 =C2=A0 =C2=A03. (require 'org-dp-lib') in your init file=
>
>=C2=A0 =C2=A0 =C2=A0`org-dp-wrap-in-block' works on/with all kinds = of Org blocks, and
>=C2=A0 =C2=A0 =C2=A0can be
>=C2=A0 =C2=A0 =C2=A0called interactively or non-interactively.
>
>=C2=A0 =C2=A0 =C2=A0It
>
>=C2=A0 =C2=A0 =C2=A0- inserts a new block when called on an empty line = without
>=C2=A0 =C2=A0 =C2=A0arguments
>
>=C2=A0 =C2=A0 =C2=A0- wraps sexp or region or '+/- X lines from poi= nt' into a newly
>=C2=A0 =C2=A0 =C2=A0created
>=C2=A0 =C2=A0 =C2=A0block
>
>=C2=A0 =C2=A0 =C2=A0- when called with point inside a block, it either<= br> >
>=C2=A0 =C2=A0 =C2=A0+ unwraps the blocks content, i.e. deletes the surr= ounding block
>=C2=A0 =C2=A0 =C2=A0or
>
>=C2=A0 =C2=A0 =C2=A0+ replaces the surrounding block with a different b= lock
>
>=C2=A0 =C2=A0 =C2=A0It takes full account of affiliated keywords. In ca= se of
>=C2=A0 =C2=A0 =C2=A0src-blocks,
>=C2=A0 =C2=A0 =C2=A0it puts src-block parameters on the block's hea= dline, but with
>=C2=A0 =C2=A0 =C2=A0`org-dp-toggle-headers' its easy to toggle betw= een parameters
>
>=C2=A0 =C2=A0 =C2=A0,----
>=C2=A0 =C2=A0 =C2=A0| #+begin_src R :noweb yes
>=C2=A0 =C2=A0 =C2=A0`----
>
>=C2=A0 =C2=A0 =C2=A0and headers
>
>=C2=A0 =C2=A0 =C2=A0,----
>=C2=A0 =C2=A0 =C2=A0| #+header: :noweb yes
>=C2=A0 =C2=A0 =C2=A0| #+begin_src R
>=C2=A0 =C2=A0 =C2=A0`----
>
>=C2=A0 =C2=A0 =C2=A0This function takes into account so many options th= at
>=C2=A0 =C2=A0 =C2=A0combinatorics hits
>=C2=A0 =C2=A0 =C2=A0you badly when trying to test all of them. Everythi= ng I tried
>=C2=A0 =C2=A0 =C2=A0works now
>=C2=A0 =C2=A0 =C2=A0with the current version, but its not unlikely that= daily usage
>=C2=A0 =C2=A0 =C2=A0will
>=C2=A0 =C2=A0 =C2=A0discover some bugs or untreated corner cases. Pleas= e report them
>=C2=A0 =C2=A0 =C2=A0with
>=C2=A0 =C2=A0 =C2=A0backtrace.
>
>=C2=A0 =C2=A0 =C2=A0The good news is that besides its complexity, its n= ot one
>=C2=A0 =C2=A0 =C2=A0mega-convoluted monolithic function for a single ta= sk only.
>=C2=A0 =C2=A0 =C2=A0Instead I
>=C2=A0 =C2=A0 =C2=A0outfactored the core functionality into the 'or= g-dp.el' library
>=C2=A0 =C2=A0 =C2=A0("Declarative Programming with Org Elements&qu= ot;) which offers
>=C2=A0 =C2=A0 =C2=A0potentially
>=C2=A0 =C2=A0 =C2=A0massive time (and headache) savings when programmin= g with Org
>=C2=A0 =C2=A0 =C2=A0Elements
>=C2=A0 =C2=A0 =C2=A0on the local level.
>
>=C2=A0 =C2=A0 =C2=A0'org-dp' acts on the internal representatio= n of Org elements, and
>=C2=A0 =C2=A0 =C2=A0due to
>=C2=A0 =C2=A0 =C2=A0the total uniformity of this representation it is p= ossible to do
>=C2=A0 =C2=A0 =C2=A0diverse
>=C2=A0 =C2=A0 =C2=A0actions on diverse elements in a very uniform way, = thus the 3
>=C2=A0 =C2=A0 =C2=A0functions
>
>=C2=A0 =C2=A0 =C2=A0- `org-dp-create'
>
>=C2=A0 =C2=A0 =C2=A0- `org-dp-rewire'
>
>=C2=A0 =C2=A0 =C2=A0- `org-dp-prompt'
>
>=C2=A0 =C2=A0 =C2=A0should be all you need for all kinds of programming=
>=C2=A0 =C2=A0 =C2=A0tasks. `org-dp-wrap-in-block' is one example of= how to program
>=C2=A0 =C2=A0 =C2=A0with
>=C2=A0 =C2=A0 =C2=A0org-dp, `org-dp-toggle-headers' is another one.=
>
>=C2=A0 =C2=A0 =C2=A0Hope that this is useful.
>
>=C2=A0 =C2=A0 =C2=A0PS
>
>=C2=A0 =C2=A0 =C2=A0For the sake of completeness, here the docstring of=
>=C2=A0 =C2=A0 =C2=A0`org-dp-wrap-in-block':
>
>=C2=A0 =C2=A0 =C2=A0,----[ C-h f org-dp-wrap-in-block RET ]
>=C2=A0 =C2=A0 =C2=A0| org-dp-wrap-in-block is an interactive Lisp funct= ion in
>=C2=A0 =C2=A0 =C2=A0| `org-dp-lib.el'.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| It is bound to C-c w w.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| (org-dp-wrap-in-block &optional LINES USER-IN= FO)
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| Wrap sexp-at-point or region in Org block.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| A region instead of the sexp-at-point is wrapped = if either
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| - optional arg LINES is an (positive or negative)= integer or
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| - the region is active
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| In the first case the region is determined by mov= ing +/- LINES
>=C2=A0 =C2=A0 =C2=A0| forward/backward from point using `forward-line&#= 39;, in the second
>=C2=A0 =C2=A0 =C2=A0| case the active region is used.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| If point is already inside of a block, modify it = or unwrap its
>=C2=A0 =C2=A0 =C2=A0| content/value instead of wrapping it in another b= lock, except if
>=C2=A0 =C2=A0 =C2=A0| explicitly asked for by user.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| If USER-INFO is given, it should be a list in the= format
>=C2=A0 =C2=A0 =C2=A0returned by
>=C2=A0 =C2=A0 =C2=A0| `org-dp-prompt', i.e.
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| (elem-type contents replace affiliated args)
>=C2=A0 =C2=A0 =C2=A0|
>=C2=A0 =C2=A0 =C2=A0| Look up that function's docstring for more in= formation about the
>=C2=A0 =C2=A0 =C2=A0| list's elements. A non-nil USER-INFO suppress= es calls to
>=C2=A0 =C2=A0 =C2=A0| `org-dp-prompt' and is used instead of its re= turn value.
>=C2=A0 =C2=A0 =C2=A0`----
>
>=C2=A0 =C2=A0 =C2=A0--
>=C2=A0 =C2=A0 =C2=A0cheers,
>=C2=A0 =C2=A0 =C2=A0Thorsten
>
>
>
>

--
cheers,
Thorsten



--089e0103e4e4c48ad80510ad0736--