From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: flet / my-filt problem Date: Mon, 30 Jul 2012 17:31:09 -0600 Message-ID: <87hasoj076.fsf@gmx.com> References: <87k3xk9ahb.fsf@med.uni-goettingen.de> <87vch4j3cj.fsf@gmx.com> <87fw8898h0.fsf@med.uni-goettingen.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:56213) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SvzQx-0002dZ-Vx for emacs-orgmode@gnu.org; Mon, 30 Jul 2012 19:31:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SvzQw-0007dK-Dj for emacs-orgmode@gnu.org; Mon, 30 Jul 2012 19:31:31 -0400 Received: from mailout-us.gmx.com ([74.208.5.67]:51087) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1SvzQw-0007ct-7F for emacs-orgmode@gnu.org; Mon, 30 Jul 2012 19:31:30 -0400 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: Andreas Leha Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Andreas Leha writes: > Eric Schulte writes: > >> Andreas Leha writes: >> >>> Hi all, >>> >>> with the current HEAD (commit 0202adb1c02908a75a7845438381e40d811fd99a) >>> from master I get an error during the export of >>> one of my files complaining about an undefined my-filt function. >>> >>> Replacing org-flet with flet in ob-comint.el (line 78) introduces a >>> compiler warning, but solves the problem. >>> >>> I am on emacs 24.1.50.1. >>> >> >> Hi Andreas, >> >> Does replacing `org-flet' in line 78 of ob-comint.el with `org-labels' >> solve this problem? >> >> Thanks, > > Hi Eric, > > thanks for the quick response. But org-labels does not solve the > problems for me. > > Backtrace is attached. Don't know if this is interesting... > Ugh, I wish Emacs wouldn't replace an existing function with a new function which not only has a different name, but also has different functionality. Does the attached patch resolve this bad behavior? Thanks, --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-let-instead-of-flet-so-function-name-may-be-used.patch >From 39e85dc85a4ba364302fee9319dbf50cb61e9ba7 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Mon, 30 Jul 2012 17:29:32 -0600 Subject: [PATCH] let* instead of flet so function name may be used * lisp/ob-comint.el (org-babel-comint-with-output): Use let* instead of flet so function name may be used in a hook. --- lisp/ob-comint.el | 68 +++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/lisp/ob-comint.el b/lisp/ob-comint.el index f7403dc..8a7dbc8 100644 --- a/lisp/ob-comint.el +++ b/lisp/ob-comint.el @@ -74,40 +74,40 @@ or user `keyboard-quit' during execution of body." (remove-echo (cadr (cdr meta))) (full-body (cadr (cdr (cdr meta))))) `(org-babel-comint-in-buffer ,buffer - (let ((string-buffer "") dangling-text raw) - (org-flet ((my-filt (text) - (setq string-buffer (concat string-buffer text)))) - ;; setup filter - (add-hook 'comint-output-filter-functions 'my-filt) - (unwind-protect - (progn - ;; got located, and save dangling text - (goto-char (process-mark (get-buffer-process (current-buffer)))) - (let ((start (point)) - (end (point-max))) - (setq dangling-text (buffer-substring start end)) - (delete-region start end)) - ;; pass FULL-BODY to process - ,@body - ;; wait for end-of-evaluation indicator - (while (progn - (goto-char comint-last-input-end) - (not (save-excursion - (and (re-search-forward - (regexp-quote ,eoe-indicator) nil t) - (re-search-forward - comint-prompt-regexp nil t))))) - (accept-process-output (get-buffer-process (current-buffer))) - ;; thought the following this would allow async - ;; background running, but I was wrong... - ;; (run-with-timer .5 .5 'accept-process-output - ;; (get-buffer-process (current-buffer))) - ) - ;; replace cut dangling text - (goto-char (process-mark (get-buffer-process (current-buffer)))) - (insert dangling-text)) - ;; remove filter - (remove-hook 'comint-output-filter-functions 'my-filt))) + (let* ((string-buffer "") + (my-filt (lambda (text) (setq string-buffer (concat string-buffer text)))) + dangling-text raw) + ;; setup filter + (add-hook 'comint-output-filter-functions 'my-filt) + (unwind-protect + (progn + ;; got located, and save dangling text + (goto-char (process-mark (get-buffer-process (current-buffer)))) + (let ((start (point)) + (end (point-max))) + (setq dangling-text (buffer-substring start end)) + (delete-region start end)) + ;; pass FULL-BODY to process + ,@body + ;; wait for end-of-evaluation indicator + (while (progn + (goto-char comint-last-input-end) + (not (save-excursion + (and (re-search-forward + (regexp-quote ,eoe-indicator) nil t) + (re-search-forward + comint-prompt-regexp nil t))))) + (accept-process-output (get-buffer-process (current-buffer))) + ;; thought the following this would allow async + ;; background running, but I was wrong... + ;; (run-with-timer .5 .5 'accept-process-output + ;; (get-buffer-process (current-buffer))) + ) + ;; replace cut dangling text + (goto-char (process-mark (get-buffer-process (current-buffer)))) + (insert dangling-text)) + ;; remove filter + (remove-hook 'comint-output-filter-functions 'my-filt)) ;; remove echo'd FULL-BODY from input (if (and ,remove-echo ,full-body (string-match -- 1.7.11.3 --=-=-= Content-Type: text/plain -- Eric Schulte http://cs.unm.edu/~eschulte --=-=-=--