unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Anand Tamariya <atamariya@gmail.com>
To: emacs-devel@gnu.org
Subject: [Patch] Draw and scribble notes in GNU Emacs
Date: Thu, 9 Sep 2021 13:24:44 +0530	[thread overview]
Message-ID: <CADm7Y4nWYswRR-uk5ACZ5YTvC94mGX-ZRRUOm=hB8LkOLEZNSg@mail.gmail.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 963 bytes --]

Here's a proposal for drawing and scribbling notes in GNU Emacs.
*Features:*

   - Draw simple shapes and text
   - Scribble freehand
   - Visual selection using mouse
   - Zoom
   - Undo/delete selection
   - Erase

*Code: https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el
<https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el>*
*Screenshots:*
https://lifeofpenguin.blogspot.com/2021/08/scribble-notes-in-gnu-emacs.html
*Video:* https://youtu.be/oj2OR5ytHx

I have few questions:
- Can this be included in Emacs core?
- I've copied two functions from Lars (
https://github.com/larsmagne/ewp/blob/master/ewp.el ). How should
attribution work in this case?

Additionally, following are mandatory patches for svg.el:
- polyline point uses CSV pairs separated by space.
- id should ideally be unique. This will allow changing element type when
different element with same id is added.
- If value is nil, don't include the attribute in the print output.

[-- Attachment #1.2: Type: text/html, Size: 1540 bytes --]

[-- Attachment #2: diff.txt --]
[-- Type: text/plain, Size: 1741 bytes --]

diff --git a/lisp/svg.el b/lisp/svg.el
index 7aadbc2359..45870e0bfe 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -154,9 +154,9 @@ svg-polyline
    (dom-node
     'polyline
     `((points . ,(mapconcat (lambda (pair)
-			      (format "%s %s" (car pair) (cdr pair)))
+			      (format "%s,%s" (car pair) (cdr pair)))
 			    points
-			    ", "))
+			    " "))
       ,@(svg--arguments svg args)))))
 
 (defun svg-polygon (svg points &rest args)
@@ -214,16 +214,17 @@ svg--encode-text
     (buffer-string)))
 
 (defun svg--append (svg node)
+  ;; id is expected to be unique.
   (let ((old (and (dom-attr node 'id)
 		  (dom-by-id svg
                              (concat "\\`" (regexp-quote (dom-attr node 'id))
                                      "\\'")))))
     (if old
-        ;; FIXME: This was (dom-set-attributes old (dom-attributes node))
-        ;; and got changed by commit f7ea7aa11f6211b5142bbcfc41c580d75485ca56
-        ;; without any explanation.
-	(setcdr (car old) (cdr node))
-      (dom-append-child svg node)))
+        ;; Remove old node. New node might be a different type.
+        (mapc (lambda (a)
+                  (dom-remove-node svg a))
+                old))
+    (dom-append-child svg node))
   (svg-possibly-update-image svg))
 
 (defun svg--image-data (image image-type datap)
@@ -311,7 +312,8 @@ svg-print
     (insert (format "<%s" (car dom)))
     (dolist (attr (nth 1 dom))
       ;; Ignore attributes that start with a colon.
-      (unless (= (aref (format "%s" (car attr)) 0) ?:)
+      (unless (or (= (aref (format "%s" (car attr)) 0) ?:)
+                  (null (cdr attr)))
         (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
     (insert ">")
     (dolist (elem (nthcdr 2 dom))

             reply	other threads:[~2021-09-09  7:54 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-09  7:54 Anand Tamariya [this message]
2021-09-09  8:33 ` [Patch] Draw and scribble notes in GNU Emacs Po Lu
2021-09-09 12:00   ` Eli Zaretskii
2021-09-09 12:23     ` Po Lu
2021-09-09 14:51       ` Lars Ingebrigtsen
2021-09-10 21:45         ` dalanicolai
2021-09-13  5:32           ` Anand Tamariya
2021-09-13  5:15   ` Anand Tamariya
2021-09-09 14:50 ` Lars Ingebrigtsen
2021-09-13  5:36   ` Anand Tamariya
2021-09-13  8:25     ` Lars Ingebrigtsen
2021-09-13  8:31       ` Anand Tamariya
2021-09-13  8:47         ` Lars Ingebrigtsen

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='CADm7Y4nWYswRR-uk5ACZ5YTvC94mGX-ZRRUOm=hB8LkOLEZNSg@mail.gmail.com' \
    --to=atamariya@gmail.com \
    --cc=emacs-devel@gnu.org \
    /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).