From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bastien Guerry Subject: [Accepted] How do I include text between a range of line numbers with #INCLUDE Date: Tue, 18 Jan 2011 01:26:50 +0100 (CET) Message-ID: <20110118002650.DF5124662A@myhost.localdomain> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=55614 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PezPi-00045k-0x for emacs-orgmode@gnu.org; Mon, 17 Jan 2011 19:27:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PezPg-00078s-4D for emacs-orgmode@gnu.org; Mon, 17 Jan 2011 19:27:09 -0500 Received: from mail-wy0-f195.google.com ([74.125.82.195]:57007) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PezPf-00078o-Q1 for emacs-orgmode@gnu.org; Mon, 17 Jan 2011 19:27:08 -0500 Received: by wyg36 with SMTP id 36so1627425wyg.6 for ; Mon, 17 Jan 2011 16:27:06 -0800 (PST) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Patch 529 (http://patchwork.newartisans.com/patch/529/) is now "Accepted". Maintainer comment: Added some cosmetic changes and a small rewrite of the doc This relates to the following submission: http://mid.gmane.org/%3CAANLkTi%3DEBSvP9ukR5LRJQxBk%2BDaBHK4vyM0pvdr%3D9-JR%40mail.gmail.com%3E Here is the original message containing the patch: > Content-Type: text/plain; charset="utf-8" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Subject: [Orgmode] How do I include text between a range of line numbers with > #INCLUDE > Date: Sun, 09 Jan 2011 00:28:01 -0000 > From: Puneeth Chaganti > X-Patchwork-Id: 529 > Message-Id: > To: Carsten Dominik > Cc: Venkatesh Choppella , emacs-orgmode@gnu.org > > Hi Carsten, > > On Sat, Jan 8, 2011 at 11:35 PM, Carsten Dominik > wrote: > > Hi Puneeth, > > > > can cou please augment the patch with a propert ChangeLog-like entry, and > > with documentation for the manual, and then resubmit? > > Here is a patch with a ChangeLog entry and documentation for the > manual. Please tell me if it looks OK. Also, I hope using > git-format-patch is the right way to send this page. If not, what is > the right way? > > Thanks, > Puneeth > > > >From 4a9be5b1a7a19c5d092ed14a86d29ad83122e9a8 Mon Sep 17 00:00:00 2001 > From: Puneeth Chaganti > Date: Sun, 9 Jan 2011 00:48:51 +0530 > Subject: [PATCH] Include only specified range of line numbers of a file > > * doc/org.texi (Include files): Document :lines. > * lisp/org-exp.el (org-export-handle-include-files): Support :lines > property. > (org-get-file-contents): New argument lines to include specify a range > of lines to include. > > On Fri, Jan 7, 2011 at 1:29 PM, Puneeth wrote: > > On Fri, Jan 7, 2011 at 10:03 AM, Venkatesh Choppella > > wrote: > >> I would like to include a part of a file (between a given range of > >> line numbers) instead of the whole file. Is there a way to do that > >> in org-mode? > > > > It isn't possible to include files using line numbers, as of now. > > Here's a quick patch that would add this feature. I have tested it > > with small files and works fine. Can somebody tell me if it looks > > good? > > > > :lines "5-10" will include the lines from 5 to 10, 10 excluded. > > :lines "-10" will include the lines from 1 to 10, 10 excluded. > > :lines "5-" will include the lines from 1 to the end of the file. > > > > HTH, > > Puneeth > --- > doc/org.texi | 11 +++++++++++ > lisp/org-exp.el | 24 ++++++++++++++++++++---- > 2 files changed, 31 insertions(+), 4 deletions(-) > > diff --git a/doc/org.texi b/doc/org.texi > index e83909d..62f90e9 100644 > --- a/doc/org.texi > +++ b/doc/org.texi > @@ -8891,6 +8891,17 @@ use > #+INCLUDE: "~/snippets/xx" :prefix1 " + " :prefix " " > @end example > > +You can also include a portion of a file, by specifying a range of line > +numbers using the @code{:lines} parameter. The line with the line number > +equal to the end of the range, will not be included. The start or/and the > +end limits of the range, may be omitted to use the obvious defaults. > + > +@example > +#+INCLUDE: "~/.emacs" :lines "5-10" @r{Include lines 5 to 10, 10 excluded} > +#+INCLUDE: "~/.emacs" :lines "-10" @r{Include lines 1 to 10, 10 excluded} > +#+INCLUDE: "~/.emacs" :lines "10-" @r{Include lines from 10 to EOF} > +@end example > + > @table @kbd > @kindex C-c ' > @item C-c ' > diff --git a/lisp/org-exp.el b/lisp/org-exp.el > index 3d466fa..ea81386 100644 > --- a/lisp/org-exp.el > +++ b/lisp/org-exp.el > @@ -2130,13 +2130,14 @@ TYPE must be a string, any of: > (defun org-export-handle-include-files () > "Include the contents of include files, with proper formatting." > (let ((case-fold-search t) > - params file markup lang start end prefix prefix1 switches all minlevel) > + params file markup lang start end prefix prefix1 switches all minlevel lines) > (goto-char (point-min)) > (while (re-search-forward "^#\\+INCLUDE:?[ \t]+\\(.*\\)" nil t) > (setq params (read (concat "(" (match-string 1) ")")) > prefix (org-get-and-remove-property 'params :prefix) > prefix1 (org-get-and-remove-property 'params :prefix1) > minlevel (org-get-and-remove-property 'params :minlevel) > + lines (org-get-and-remove-property 'params :lines) > file (org-symname-or-string (pop params)) > markup (org-symname-or-string (pop params)) > lang (and (member markup '("src" "SRC")) > @@ -2159,7 +2160,7 @@ TYPE must be a string, any of: > end (format "#+end_%s" markup)))) > (insert (or start "")) > (insert (org-get-file-contents (expand-file-name file) > - prefix prefix1 markup minlevel)) > + prefix prefix1 markup minlevel lines)) > (or (bolp) (newline)) > (insert (or end "")))) > all)) > @@ -2176,15 +2177,30 @@ TYPE must be a string, any of: > (when intersection > (error "Recursive #+INCLUDE: %S" intersection)))))) > > -(defun org-get-file-contents (file &optional prefix prefix1 markup minlevel) > +(defun org-get-file-contents (file &optional prefix prefix1 markup minlevel lines) > "Get the contents of FILE and return them as a string. > If PREFIX is a string, prepend it to each line. If PREFIX1 > is a string, prepend it to the first line instead of PREFIX. > If MARKUP, don't protect org-like lines, the exporter will > -take care of the block they are in." > +take care of the block they are in. If LINES is a string, > +include only the lines specified." > (if (stringp markup) (setq markup (downcase markup))) > (with-temp-buffer > (insert-file-contents file) > + (when lines > + (let (beg end) > + (setq lines (split-string lines "-") > + beg (if (string= "" (car lines)) > + (point-min) > + (goto-char (point-min)) > + (forward-line (1- (string-to-number (car lines)))) > + (point)) > + end (if (string= "" (cadr lines)) > + (point-max) > + (goto-char (point-min)) > + (forward-line (1- (string-to-number (cadr lines)))) > + (point))) > + (narrow-to-region beg end))) > (when (or prefix prefix1) > (goto-char (point-min)) > (while (not (eobp)) > -- > 1.7.1 >