From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Thien-Thi Nguyen Newsgroups: gmane.emacs.devel Subject: Re: ewoc--adjust ugliness Date: 27 May 2006 04:40:35 -0400 Message-ID: References: <7dbe73ed0605260349v104c2d7al17f59064c303f8ac@mail.gmail.com> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1148719264 22794 80.91.229.2 (27 May 2006 08:41:04 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 27 May 2006 08:41:04 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat May 27 10:41:02 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1FjuM0-0003zN-DR for ged-emacs-devel@m.gmane.org; Sat, 27 May 2006 10:41:00 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FjuLz-0000iU-R7 for ged-emacs-devel@m.gmane.org; Sat, 27 May 2006 04:40:59 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FjuLf-0000iO-Pw for emacs-devel@gnu.org; Sat, 27 May 2006 04:40:39 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FjuLd-0000hE-76 for emacs-devel@gnu.org; Sat, 27 May 2006 04:40:38 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FjuLc-0000gz-Vi for emacs-devel@gnu.org; Sat, 27 May 2006 04:40:37 -0400 Original-Received: from [67.59.132.6] (helo=mail.agora-net.com) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1FjuQh-0000F9-OT for emacs-devel@gnu.org; Sat, 27 May 2006 04:45:51 -0400 Original-Received: from ttn by mail.agora-net.com with local (Exim 4.50) id 1FjuLb-0002xR-Ne for emacs-devel@gnu.org; Sat, 27 May 2006 04:40:35 -0400 Original-To: emacs-devel@gnu.org In-Reply-To: Original-Lines: 154 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:55355 Archived-At: Stefan Monnier writes: > Why not [more elegant `ewoc--wrap'] indeed, much better! * emacs-lisp/ewoc.el (ewoc): Add member `hf-pp' to this structure. (ewoc--wrap): New func. (ewoc-create): Take additional arg NOSEP. If nil, wrap node and header/footer pretty-printers. Save header/footer pretty-printer. (ewoc-set-hf): Use ewoc's header/footer pretty-printer. thi _______________________________________________________________________ diff -c -r1.30 ewoc.el *** ewoc.el 26 May 2006 08:29:13 -0000 1.30 --- ewoc.el 27 May 2006 08:38:29 -0000 *************** *** 186,192 **** (:constructor ewoc--create (buffer pretty-printer header footer dll)) (:conc-name ewoc--)) ! buffer pretty-printer header footer dll last-node) (defmacro ewoc--set-buffer-bind-dll-let* (ewoc varlist &rest forms) "Execute FORMS with ewoc--buffer selected as current buffer, --- 186,192 ---- (:constructor ewoc--create (buffer pretty-printer header footer dll)) (:conc-name ewoc--)) ! buffer pretty-printer header footer dll last-node hf-pp) (defmacro ewoc--set-buffer-bind-dll-let* (ewoc varlist &rest forms) "Execute FORMS with ewoc--buffer selected as current buffer, *************** *** 257,268 **** (goto-char m) (funcall pp (ewoc--node-data node)) (ewoc--adjust m (point) R))) ;;; =========================================================================== ;;; Public members of the Ewoc package ;;;###autoload ! (defun ewoc-create (pretty-printer &optional header footer) "Create an empty ewoc. The ewoc will be inserted in the current buffer at the current position. --- 257,275 ---- (goto-char m) (funcall pp (ewoc--node-data node)) (ewoc--adjust m (point) R))) + + (defun ewoc--wrap (func) + (lexical-let ((ewoc--user-pp func)) + (lambda (data) + (funcall ewoc--user-pp data) + (insert "\n")))) + ;;; =========================================================================== ;;; Public members of the Ewoc package ;;;###autoload ! (defun ewoc-create (pretty-printer &optional header footer nosep) "Create an empty ewoc. The ewoc will be inserted in the current buffer at the current position. *************** *** 275,288 **** Optional second and third arguments HEADER and FOOTER are strings, possibly empty, that will always be present at the top and bottom, ! respectively, of the ewoc." (let* ((dummy-node (ewoc--node-create 'DL-LIST 'DL-LIST)) (dll (progn (setf (ewoc--node-right dummy-node) dummy-node) (setf (ewoc--node-left dummy-node) dummy-node) dummy-node)) ! (new-ewoc ! (ewoc--create (current-buffer) ! pretty-printer nil nil dll)) (pos (point)) head foot) (ewoc--set-buffer-bind-dll new-ewoc --- 282,301 ---- Optional second and third arguments HEADER and FOOTER are strings, possibly empty, that will always be present at the top and bottom, ! respectively, of the ewoc. ! ! Normally, a newline is automatically inserted after the header, ! the footer and every node's printed representation. Optional ! fourth arg NOSEP non-nil inhibits this." (let* ((dummy-node (ewoc--node-create 'DL-LIST 'DL-LIST)) (dll (progn (setf (ewoc--node-right dummy-node) dummy-node) (setf (ewoc--node-left dummy-node) dummy-node) dummy-node)) ! (wrap (if nosep 'identity 'ewoc--wrap)) ! (new-ewoc (ewoc--create (current-buffer) ! (funcall wrap pretty-printer) ! nil nil dll)) ! (hf-pp (funcall wrap 'insert)) (pos (point)) head foot) (ewoc--set-buffer-bind-dll new-ewoc *************** *** 290,297 **** (unless header (setq header "")) (unless footer (setq footer "")) (setf (ewoc--node-start-marker dll) (copy-marker pos) ! foot (ewoc--insert-new-node dll footer 'insert) ! head (ewoc--insert-new-node foot header 'insert) (ewoc--footer new-ewoc) foot (ewoc--header new-ewoc) head)) ;; Return the ewoc --- 303,311 ---- (unless header (setq header "")) (unless footer (setq footer "")) (setf (ewoc--node-start-marker dll) (copy-marker pos) ! foot (ewoc--insert-new-node dll footer hf-pp) ! head (ewoc--insert-new-node foot header hf-pp) ! (ewoc--hf-pp new-ewoc) hf-pp (ewoc--footer new-ewoc) foot (ewoc--header new-ewoc) head)) ;; Return the ewoc *************** *** 596,607 **** "Set the HEADER and FOOTER of EWOC." (ewoc--set-buffer-bind-dll-let* ewoc ((head (ewoc--header ewoc)) ! (foot (ewoc--footer ewoc))) (setf (ewoc--node-data head) header (ewoc--node-data foot) footer) (save-excursion ! (ewoc--refresh-node 'insert head) ! (ewoc--refresh-node 'insert foot)))) (provide 'ewoc) --- 610,622 ---- "Set the HEADER and FOOTER of EWOC." (ewoc--set-buffer-bind-dll-let* ewoc ((head (ewoc--header ewoc)) ! (foot (ewoc--footer ewoc)) ! (hf-pp (ewoc--hf-pp ewoc))) (setf (ewoc--node-data head) header (ewoc--node-data foot) footer) (save-excursion ! (ewoc--refresh-node hf-pp head) ! (ewoc--refresh-node hf-pp foot)))) (provide 'ewoc)