From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: Bug: org-in-src-block-p always returns nil [8.2.7b (8.2.7b-1-ga5beff-elpaplus @ /Users/ryan/.emacs.d/.cask/24.3.1/elpa/org-plus-contrib-20140714/)] Date: Fri, 08 Aug 2014 10:21:39 +0200 Message-ID: <877g2jo0h8.fsf@nicolasgoaziou.fr> References: <53E3FF50.2050409@thompsonclan.org> <53E40782.2070701@thompsonclan.org> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:34015) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XFfQ9-0004AA-QX for emacs-orgmode@gnu.org; Fri, 08 Aug 2014 04:21:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XFfQ0-0007pq-JH for emacs-orgmode@gnu.org; Fri, 08 Aug 2014 04:21:05 -0400 Received: from relay6-d.mail.gandi.net ([2001:4b98:c:538::198]:52849) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XFfQ0-0007pb-E7 for emacs-orgmode@gnu.org; Fri, 08 Aug 2014 04:20:56 -0400 In-Reply-To: <53E40782.2070701@thompsonclan.org> (Ryan's message of "Thu, 07 Aug 2014 16:10:58 -0700") 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: Ryan Cc: emacs-orgmode@gnu.org Hello, Ryan writes: > Actually, my implementation has a bug. org-element-at-point also > returns the element if point is actually on one of the blank lines > between that element and the next. So I've rewritten it to handle that > case by computing the content end position and comparing point to > that. Thank you. Here are a few notes about this implementation. > (defun org-in-src-block-p (&optional inside) > "Whether point is in a code source block. > When INSIDE is non-nil, don't consider we are within a src block > when point is at #+BEGIN_SRC or #+END_SRC." > (save-match-data > (let* ((elem (org-element-at-point)) > (elem-type (car elem)) (elem-type (org-element-type elem)) > (props (cadr elem)) > (end (plist-get props :end)) You don't need PROPS. (end (org-element-property :end elem)) > (pb (plist-get props :post-blank)) > (content-end > (save-excursion > (goto-char end) > (forward-line (- pb)) > (point))) Using PB is incorrect. (contend-end (save-excursion (goto-char end) (skip-chars-backward " \r\t\n") (line-beginning-position))) > (case-fold-search t)) > (and > ;; Elem is a src block > (eq elem-type 'src-block) > ;; Make sure point is not on one of the blank lines after the > ;; element. > (< (point) content-end) > ;; If INSIDE is non-nil, then must not be at block delimiter > (not > (and > inside > (save-excursion > (beginning-of-line) > (looking-at ".*#\\+\\(begin\\|end\\)_src")))))))) Test is simply (and (eq elem-type 'src-block) (if inside (and (> (line-beginning-position) (org-element-property :post-affiliated elem)) (< (point) contents-end)) (<= (line-beginning-position) contents-end))) Note that this is not yet possible to re-implement `org-in-src-block-p' with `org-element-at-point' as the former is used for fontification. It would be sub-optimal to use it that way, since you can call once `org-element-at-point' and fontify the element under point accordingly to its type. Regards, -- Nicolas Goaziou