From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tomas Hlavaty Newsgroups: gmane.emacs.help Subject: Re: make a drawing with Emacs Date: Wed, 02 Sep 2020 23:10:29 +0200 Message-ID: <87sgbzsx4q.fsf@logand.com> References: <20200901145854.GF15433@tuxteam.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="29713"; mail-complaints-to="usenet@ciao.gmane.io" To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Wed Sep 02 23:12:02 2020 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kDa30-0007ag-63 for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 02 Sep 2020 23:12:02 +0200 Original-Received: from localhost ([::1]:53196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kDa2z-00006H-18 for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 02 Sep 2020 17:12:01 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:45874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kDa2i-000067-31 for help-gnu-emacs@gnu.org; Wed, 02 Sep 2020 17:11:44 -0400 Original-Received: from logand.com ([37.48.87.44]:54422) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kDa2g-00064u-8c for help-gnu-emacs@gnu.org; Wed, 02 Sep 2020 17:11:43 -0400 Original-Received: by logand.com (Postfix, from userid 1001) id 163501A4B04; Wed, 2 Sep 2020 23:10:34 +0200 (CEST) X-Mailer: emacs 26.3 (via feedmail 11-beta-1 I) In-Reply-To: <20200901145854.GF15433@tuxteam.de> Received-SPF: pass client-ip=37.48.87.44; envelope-from=tom@logand.com; helo=logand.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/02 17:10:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:123903 Archived-At: >> That might be an emacs-nox thing, perhaps? > > Your Emacs has to be able to display svg images. It is a shame that image code in emacs is completely dependent on unsafe foreign libraries and tightly coupled with graphics toolkits. > Your easiest bet is that you are just missing librsvg (package > librsvg2-2 or thereabouts, if you are on Debian) -- but of course, > your Emacs has to be compiled with SVG support built in (no idea > whether emacs-nox does). Here is an alternative which works even on console without any graphics toolkit compiled in: (require 'xml) (with-temp-buffer (xml-print '((svg ((xmlns . "http://www.w3.org/2000/svg") (viewBox . "0 0 100 100")) (circle ((cx . "50") (cy . "50") (r . "20")))))) (write-file "/tmp/a.svg")) The /tmp/a.svg file will contain the SVG image. Now the nice part of doing it in pure Elisp is that you can refactor the code into useful functions as you need. For example: (defun svg (x y w h &rest body) `((svg ((xmlns . "http://www.w3.org/2000/svg") (viewBox . ,(format "%s %s %s %s" x y w h))) ,@body))) (defun svg-circle (cx cy r) `(circle ((cx . ,(format "%s" cx) (cy . ,(format "%s" cy)) (r . ,(format "%s" r)))))) (with-temp-buffer (xml-print (svg 0 0 100 100 (svg-circle 50 50 20))) (write-file "/tmp/a.svg")) You can then display the generated image in the console using https://logand.com/sw/emacs-framebuffer/file/emacs-framebuffer.el.html