unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Cc: emacs-devel@gnu.org
Subject: Re: Printing
Date: Fri, 04 May 2012 23:06:43 -0400	[thread overview]
Message-ID: <jwv1umzba5f.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <wlprf97xlv.wl%mituharu@math.s.chiba-u.ac.jp> (YAMAMOTO Mitsuharu's message of "Sun, 19 Apr 2009 19:21:16 +0900")

Hi,

I'd be interested to see this pushed further.  Maybe you could make
a branch in the bzr repository for it?


        Stefan


>>>>> "YAMAMOTO" == YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> writes:

>>>>> On Tue, 07 Apr 2009 18:46:01 +0900, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said:

>>>> I tried making a really preliminary proof-of-concept cairo port. :-)
>>>> It's still rough and has several glitches/limitations, but at least
>>>> it can generate a "resolution-independent screenshot" PDF as
>>>> attached.  Maybe I'll clean up the code this weekend and hopefully
>>>> post a patch.

>>> Here's the patch for the Emacs 23.0.92 pretest (not the trunk HEAD).

>>> * No configure support.  The easiest way would be to compile it with
>>> the GTK+ support that is already linked with cairo libs.  Add
>>> -DUSE_CAIRO to CFLAGS to activate the cairo code.

>>> * Currently, texts, rectangles (filling and stroking), and trapezoids
>>> for reliefs are drawn using cairo by hooking the corresponding
>>> drawing routine calls in xterm.c.

> This time, I combined the cairo drawing code with GTK+ print dialogs
> code, which is actually almost the same as examples in the GTK+
> reference.  The added primitives are:

> (x-page-setup-dialog): Pop up a page setup dialog.
> (x-get-page-setup): Return the value of the current page setup.
>   It returns an alist like
>   ((orientation . portrait)
>    (width . 559.2755905511812) (height . 783.5697637795276)
>    (left-margin . 18.0) (right-margin . 18.0)
>    (top-margin . 18.0) (bottom-margin . 40.32000000000001))
> (x-print-frames-dialog FRAMES): Pop up a print dialog to print the
>   current contents of FRAMES.

> The last one is intended to be called after some pagination (in Lisp)
> that creates a frame per page.  Below is a simple example.

> (defun test-print-buffer (buffer-or-name)
>   "Paginate and print buffer contents."
>   (interactive "bBuffer to export:")
>   (with-current-buffer buffer-or-name
>     (let* ((buffer (current-buffer))
> 	   (start-pos (point-min))
> 	   (end-pos (point-max))
> 	   (page-setup (if (fboundp 'x-get-page-setup)
> 			   (x-get-page-setup)
> 			 '((width . 559.0) (height . 783.0))))
> 	   (width-in-points (cdr (assq 'width page-setup)))
> 	   (height-in-points (cdr (assq 'height page-setup)))
> 	   buffers frames)
>       (unwind-protect
> 	  (progn
> 	    (with-selected-frame (selected-frame)
> 	      ;; Paginate and create a frame for each page.
> 	      (while (< start-pos end-pos)
> 		(let ((inhibit-quit t))
> 		  (set-buffer
> 		   (make-indirect-buffer
> 		    buffer (generate-new-buffer-name (buffer-name buffer)) t))
> 		  (push (current-buffer) buffers)
> 		  (setq kill-buffer-hook nil) ;; XXX
> 		  (select-frame (make-frame
> 				 '((internal-border-width . 0)
> 				   (vertical-scroll-bars . nil)
> 				   (left-fringe . 0) (right-fringe . 0)
> 				   (menu-bar-lines . 0) (tool-bar-lines . 0)
> 				   (line-spacing . 0)
> 				   (minibuffer . nil) (visibility . nil)
> 				   (cursor-type . nil)))
> 				'norecord)
> 		  (push (selected-frame) frames))
> 		(set-frame-size (selected-frame)
> 				(floor (/ width-in-points (frame-char-width)))
> 				(floor (/ height-in-points (frame-char-height))))
> 		(setq header-line-format nil)
> 		(setq mode-line-format nil)
> 		(set-window-start nil start-pos)
> 		(goto-char (window-end nil t))
> 		(while (and (< start-pos (point))
> 			    (not (pos-visible-in-window-p (1- (point)))))
> 		  (backward-char))
> 		(narrow-to-region start-pos (point))
> 		(setq start-pos (point))))
> 	    ;; Print the frames.
> 	    (if (null frames)
> 		(error "Buffer %s is empty" buffer-or-name)
> 	      (mapc 'make-frame-visible frames)
> 	      (if (fboundp 'x-print-frames-dialog)
> 		  (x-print-frames-dialog (reverse frames))
> 		;; Dummy stub just to reproduce an intermittent error
> 		;; in x-print-frames-dialog even without it.
> 		(dolist (frame frames)
> 		  (unless (eq (frame-visible-p frame) t)
> 		    (error "Frames to be printed must be visible.")))
> 		(redisplay t))))
> 	;; Clean up
> 	(mapc 'delete-frame frames)
> 	(mapc 'kill-buffer buffers)))))

> You can try printing with M-x test-print-buffer RET.  Because the
> current cairo drawing routines are hooked onto those in xterm.c in
> order to minimize the change, you'll see the actual frames on screen.
> Moreover, you might get an incorrect printed result because your
> window manager may clip the frames to fit in the screen size.
> Nevertheless, I think you can get the basic idea with this sample
> code.

> 				     YAMAMOTO Mitsuharu
> 				mituharu@math.s.chiba-u.ac.jp




  reply	other threads:[~2012-05-05  3:06 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-28 10:31 Printing Андрей Парамонов
2009-03-28 14:56 ` Printing Jan Djärv
2009-03-31  2:13   ` Printing YAMAMOTO Mitsuharu
2009-04-02  9:39     ` Printing YAMAMOTO Mitsuharu
2009-04-04  2:44       ` Printing YAMAMOTO Mitsuharu
2009-04-04  6:54         ` Printing Lennart Borgman
2009-04-04  7:25           ` Printing YAMAMOTO Mitsuharu
2009-04-04  9:40         ` Printing Leo
2009-04-04 22:00         ` Printing Richard M Stallman
2009-04-05  1:07           ` Printing YAMAMOTO Mitsuharu
2009-04-06  8:03         ` Printing Kenichi Handa
2009-04-06  8:45           ` Printing YAMAMOTO Mitsuharu
2009-04-06 11:47             ` Printing Kenichi Handa
2009-04-06 23:47               ` Printing YAMAMOTO Mitsuharu
2009-04-07  1:01                 ` Printing Kenichi Handa
2009-04-07  1:14                   ` Printing YAMAMOTO Mitsuharu
2009-04-08  1:19                     ` Future of display engine [Re: Printing] Kenichi Handa
2009-04-08  1:53                       ` YAMAMOTO Mitsuharu
2009-04-07  9:46         ` Printing YAMAMOTO Mitsuharu
2009-04-08  1:33           ` Printing Kenichi Handa
2009-05-01 23:30             ` Printing YAMAMOTO Mitsuharu
2009-04-19 10:21           ` Printing YAMAMOTO Mitsuharu
2012-05-05  3:06             ` Stefan Monnier [this message]
2012-05-07  3:38               ` Printing YAMAMOTO Mitsuharu
2012-05-07 11:25                 ` Printing Lennart Borgman
2012-05-08  1:04                   ` Printing YAMAMOTO Mitsuharu
2012-05-08  1:25                     ` Printing Lennart Borgman
2012-05-08  2:15                       ` Printing YAMAMOTO Mitsuharu
2012-05-08 10:59                         ` Printing Lennart Borgman
2012-05-09 14:50                   ` Printing Jason Rumney
2012-05-09 14:58                     ` Printing Lennart Borgman
2012-05-07 12:46                 ` Printing Stefan Monnier
2012-05-07 13:07                   ` Printing joakim
2012-05-07 17:20                   ` Printing Simon Leinen
2012-05-08  1:11                     ` Printing YAMAMOTO Mitsuharu
2009-03-28 15:46 ` Printing Michael Ekstrand
2009-03-28 18:37 ` Printing Stefan Monnier
2009-03-28 20:52   ` Printing Андрей Парамонов
2009-03-30 13:06     ` Printing Michael Ekstrand
2009-03-30 15:24       ` Printing Stefan Monnier
2009-03-30 18:38         ` Printing Eli Zaretskii
2009-03-31  1:56           ` Printing Stefan Monnier
2009-03-31  3:15             ` Printing Eli Zaretskii
2009-04-01  0:52               ` Printing Stefan Monnier
2009-04-01  3:14                 ` Printing Eli Zaretskii
2009-04-01  4:17                   ` Printing Miles Bader
2009-04-01 17:53                     ` Printing Eli Zaretskii
2009-04-01  4:24                   ` Printing Jason Rumney
2009-04-01 17:56                     ` Printing Eli Zaretskii
2009-04-01  8:11                   ` Printing Stephen J. Turnbull
2009-04-01 14:36                   ` Printing Stefan Monnier
2009-04-01 18:16                     ` Printing Eli Zaretskii
2009-04-01 23:42                       ` Printing Stefan Monnier
2009-04-02 13:02                       ` Printing Richard M Stallman
2009-04-02 19:37                         ` Printing Eli Zaretskii
2009-04-02 10:08                   ` Printing tomas
2009-04-02 10:52                     ` Printing Lennart Borgman
2009-04-02 11:51                       ` Printing tomas
2009-04-02 11:49                         ` Printing Lennart Borgman
2009-04-02 13:37                           ` Printing Stefan Monnier
2009-04-02 13:47                             ` Printing Óscar Fuentes
2009-04-02 13:55                               ` Printing Samuel Bronson
2009-04-02 14:24                                 ` Printing Óscar Fuentes
2009-04-02 14:34                                   ` Printing Lennart Borgman
2009-04-02 14:00                             ` Printing Lennart Borgman
2009-04-02 16:15                               ` Printing Stefan Monnier
2009-04-02 16:47                                 ` Printing Reiner Steib
2009-04-02 19:44                                 ` Printing Eli Zaretskii
2009-04-03  0:43                                   ` Printing Stefan Monnier
2009-04-02 20:56                                 ` Printing Lennart Borgman
2009-04-04  0:00                                   ` Printing Lennart Borgman
2009-04-04  0:36                                     ` Printing Stefan Monnier
2009-04-04  0:45                                       ` Printing Lennart Borgman
2009-04-04  1:05                                         ` Printing Óscar Fuentes
2009-04-04  6:52                                           ` Printing Lennart Borgman
2009-04-04  8:57                                     ` Printing Eli Zaretskii
2009-04-04  9:22                                       ` Printing Lennart Borgman
2009-04-04  9:49                                         ` Printing Eli Zaretskii
2009-03-28 20:30 ` Printing James Cloos
2009-03-29  2:15 ` Printing Richard M Stallman
2009-03-29  3:20   ` Printing Eli Zaretskii
2009-03-30  1:17     ` Printing Richard M Stallman
2009-03-30  3:10       ` Printing Eli Zaretskii
2009-03-30  6:36         ` Printing Lennart Borgman
2009-03-30 18:41           ` Printing Eli Zaretskii
2009-03-30 19:04             ` Printing Lennart Borgman
2009-03-30 20:48               ` Printing Eli Zaretskii
2009-03-30 20:53                 ` Printing Lennart Borgman
2009-03-30 20:59                   ` Printing Eli Zaretskii
2009-03-30 21:27                     ` Printing Lennart Borgman
2009-03-31  3:19                       ` Printing Eli Zaretskii
2009-03-30 21:46                   ` Printing Óscar Fuentes
2009-03-30 21:50         ` Printing Richard M Stallman
2009-03-31  3:18           ` Printing Eli Zaretskii
2009-03-31 19:14             ` Printing Richard M Stallman
2009-03-30 18:03   ` Printing Андрей Парамонов
  -- strict thread matches above, loose matches on Subject: below --
2009-04-01 17:22 Printing grischka
2009-04-01 18:55 ` Printing David De La Harpe Golden
2009-04-01 18:58   ` Printing David De La Harpe Golden
2009-04-01 20:51   ` Printing grischka
2009-04-01 21:19   ` Printing Lennart Borgman
2009-04-02  0:09   ` Printing David De La Harpe Golden
2009-04-01 23:32 ` Printing Stefan Monnier
2009-04-02  2:33   ` Printing grischka
2009-04-02  3:05     ` Printing Samuel Bronson
2009-04-02 13:41       ` Printing grischka
2009-04-02 13:31     ` Printing Stefan Monnier
2009-04-02 18:39       ` Printing grischka
2009-04-02 18:53         ` Printing Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwv1umzba5f.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    --cc=mituharu@math.s.chiba-u.ac.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).