From: Stefan Monnier <monnier@iro.umontreal.ca>
To: dalanicolai <dalanicolai@gmail.com>
Cc: emacs-devel@gnu.org, larsi@gnus.org
Subject: Re: new package: sketch-mode
Date: Mon, 30 Aug 2021 18:45:38 -0400 [thread overview]
Message-ID: <jwvpmtu8sfc.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <CACJP=3k264bV5V1nxjdgmSU2t59khtR+ftaUMfMwsxfZHQ8_VA@mail.gmail.com> (dalanicolai@gmail.com's message of "Fri, 27 Aug 2021 12:06:09 +0200")
> Cool! Thanks. Yeah, for sure I am happy with that. So I will fill in the
> paperform request.
Let me know when it's done.
> It might still take some work/time to prepare the package for ELPA though.
In the mean time, here's a patch which addresses some of the warnings
emitted by the byte-compiler. I strongly recommend to byte-compile your
code on a regular basis and pay attention to the warnings.
Stefan
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..aa3ed33912
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.elc
+/sketch-mode-autoloads.el
+/sketch-mode-pkg.el
diff --git a/sketch-mode.el b/sketch-mode.el
index bedd344eaa..d59672f63f 100644
--- a/sketch-mode.el
+++ b/sketch-mode.el
@@ -1,10 +1,10 @@
;;; sketch-mode.el --- Quickly create svg sketches using keyboard and mouse -*- lexical-binding: t; -*-
-;; Copyright (C) 2021 Daniel Nicolai
-
+;; Copyright (C) 2021 Free Software Foundation, Inc.
;; Author: D.L. Nicolai <dalanicolai@gmail.com>
;; Created: 17 Jul 2021
+;; Version: 0
;; Keywords: multimedia
;; URL: https://github.com/dalanicolai/sketch-mode
@@ -79,7 +79,7 @@
"Default size for sketch canvas.
Cons cell with car and cdr both integers, respectively
representing the image width and image height
-(default: '(800 . 600))."
+default: (800 . 600)."
:type '(cons integer integer))
(defcustom sketch-show-grid t
@@ -134,7 +134,7 @@ STOPS is a list of percentage/color pairs."
(svg--def
svg
(apply
- 'dom-node
+ #'dom-node
'marker
`((id . ,id)
(viewBox . "0 0 10 10")
@@ -174,8 +174,8 @@ transient."
(expt (- (cdr end-coords) (cdr start-coords)) 2))))
(defun sketch--rectangle-coords (start-coords end-coords)
- (let ((base-coords (cons (apply 'min (list (car start-coords) (car end-coords)))
- (apply 'min (list (cdr start-coords) (cdr end-coords))))))
+ (let ((base-coords (cons (apply #'min (list (car start-coords) (car end-coords)))
+ (apply #'min (list (cdr start-coords) (cdr end-coords))))))
(list (car base-coords)
(cdr base-coords)
(abs (- (car end-coords) (car start-coords)))
@@ -187,12 +187,13 @@ transient."
(abs (/ (- (car end-coords) (car start-coords)) 2))
(abs (/ (- (cdr end-coords) (cdr start-coords)) 2))))
+(defvar svg) ;FIXME: Use a longer name with `sketch-' prefix for dynbound vars!
+(defvar svg-canvas)
+(defvar svg-grid)
+(defvar svg-sketch)
+
(defun sketch--create-canvas (width height &optional grid-param)
"Create canvas for drawing svg using the mouse."
- (defvar svg)
- (defvar svg-canvas)
- (defvar svg-grid)
- (defvar svg-sketch)
(insert-image
(let ((width width)
(height height))
@@ -240,6 +241,8 @@ values"
(let ((width (if arg (car sketch-default-image-size) (read-number "Enter width: ") ))
(height (if arg 600 (read-number "Enter height: "))))
(switch-to-buffer (get-buffer-create "*sketch*"))
+ ;; FIXME: `defvar' can't be meaningfully inside a function like that.
+ ;; FIXME: Use a `sketch-' prefix for all dynbound vars.
(defvar-local sketch-elements nil)
(defvar-local grid-param 25)
(setq grid-param (if arg 25 (read-number "Enter grid parameter (enter 0 for no grid): ")))
@@ -304,7 +307,7 @@ values"
((fallback :initarg :fallback :initform nil)
(default :initarg :default :initform nil)))
-(cl-defmethod transient-infix-read ((obj sketch-variable:colors))
+(cl-defmethod transient-infix-read ((_obj sketch-variable:colors))
(read-color "Select color: "))
(cl-defmethod transient-infix-value ((obj sketch-variable:colors))
@@ -314,19 +317,24 @@ values"
(when default
(concat (oref obj argument) (substring-no-properties default))))))
+;; We always call the autoloaded `color-name-to-rgb' before calling this
+;; function, so we know it's available even tho the compiler doesn't.
+(declare-function color-rgb-to-hex "color"
+ (red green blue &optional digits-per-component))
+
(cl-defmethod transient-format-value ((obj sketch-variable:colors))
(let ((value (oref obj value))
(default (oref obj default)))
(if value
(format "%s (%s)"
(propertize value 'face (cons 'foreground-color value))
- (propertize (apply 'color-rgb-to-hex (color-name-to-rgb value))
+ (propertize (apply #'color-rgb-to-hex (color-name-to-rgb value))
'face 'transient-inactive-argument))
(if (string= default "none")
(propertize "none" 'face 'transient-inactive-argument)
(format "%s (%s)"
(propertize default 'face (cons 'foreground-color default))
- (propertize (apply 'color-rgb-to-hex (color-name-to-rgb default))
+ (propertize (apply #'color-rgb-to-hex (color-name-to-rgb default))
'face 'transient-inactive-argument))))))
;; (let* ((args (when transient-current-prefix (transient-args 'sketch-transient)))
@@ -474,7 +482,7 @@ values"
(defun sketch-create-label ()
(interactive)
(let* ((alphabet "abcdefghijklmnopqrstuvwxyz")
- (labels-list (mapcar 'string (concat alphabet (upcase alphabet))))
+ (labels-list (mapcar #'string (concat alphabet (upcase alphabet))))
(labels (sketch-labels-list)))
(while (member (car labels-list) labels)
(setq labels-list (cdr labels-list)))
@@ -489,7 +497,8 @@ values"
(dolist (coord args node)
(cl-decf (alist-get coord (cadr node)) amount)))
-(defun svg-translate (dx dy)
+;; FIXME: Use a `sketch-' prefix for all definitions.
+(defun sketch--svg-translate (dx dy)
(interactive)
(mapcar (lambda (node)
(pcase (car node)
@@ -607,7 +616,7 @@ values"
(transient-quit-one)
(switch-to-buffer-other-window buffer)
(erase-buffer)
- (pp svg-sketch (current-buffer)))
+ (pp sketch (current-buffer)))
(emacs-lisp-mode))
(transient-define-suffix sketch-copy-definition ()
@@ -621,9 +630,10 @@ values"
(interactive)
(setq svg-sketch (read (buffer-string))))
+(defvar sketch-undo-redo nil)
+
(transient-define-suffix sketch-undo ()
(interactive)
- (defvar sketch-undo-redo nil)
(let ((sketch-reverse (nreverse svg-sketch)))
(push (pop sketch-reverse) sketch-undo-redo)
(setq svg-sketch (nreverse sketch-reverse)))
@@ -660,7 +670,7 @@ values"
;; (if sketch-include-end-marker
;; "url(#arrow)"
;; "none"))))
- (apply 'svg-text svg-sketch text :x (car coords) :y (cdr coords) object-props))
+ (apply #'svg-text svg-sketch text :x (car coords) :y (cdr coords) object-props))
(sketch-redraw))
(transient-define-infix sketch-select-font ()
@@ -702,7 +712,7 @@ values"
(setq svg-canvas (svg-create new-width new-height :stroke "gray"))
(svg-marker svg-canvas "arrow" 8 8 "black" t)
(svg-rectangle svg-canvas 0 0 new-width new-height :fill "white")
- (setf (cddr svg-sketch) (svg-translate (car start-coords) (cdr start-coords)))
+ (setf (cddr svg-sketch) (sketch--svg-translate (car start-coords) (cdr start-coords)))
(sketch-redraw)))
(transient-define-suffix sketch-save ()
@@ -710,4 +720,4 @@ values"
(image-save))
(provide 'sketch-mode)
-;;; filename ends here
+;;; sketch-mode.el ends here
diff --git a/sketch-scratch.el b/sketch-scratch.el
index c9f60b21ad..6bf62552a7 100644
--- a/sketch-scratch.el
+++ b/sketch-scratch.el
@@ -1,3 +1,7 @@
+;;; sketch-scratch.el --- -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
;; (setq svg-scratch (svg-create 100 100))
;; (svg-rectangle svg-scratch 25 25 50 50 :id "a")
;; (svg-line svg-scratch 25 25 75 75 :id "b" :stroke-color "black")
@@ -10,6 +14,7 @@
(dolist (coord args node)
(cl-decf (alist-get coord (cadr node)) amount)))
+;; FIXME: Use a `sketch-' prefix for all definitions.
(defun svg-translate (dx dy)
(interactive)
(mapcar (lambda (node)
next prev parent reply other threads:[~2021-08-30 22:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-23 10:17 new package: sketch-mode dalanicolai
2021-08-23 13:31 ` Lars Ingebrigtsen
2021-08-24 21:57 ` Stefan Monnier
2021-08-27 10:06 ` dalanicolai
2021-08-30 22:45 ` Stefan Monnier [this message]
2021-09-15 15:42 ` dalanicolai
2021-09-15 15:42 ` dalanicolai
2021-09-15 20:03 ` Stefan Monnier
2021-09-18 11:25 ` dalanicolai
2021-08-30 6:00 ` Qiantan Hong
2021-08-30 14:20 ` dalanicolai
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=jwvpmtu8sfc.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=dalanicolai@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=larsi@gnus.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).