unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: dalanicolai <dalanicolai@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: larsi@gnus.org, Emacs Devel <emacs-devel@gnu.org>
Subject: Re: new package: sketch-mode
Date: Wed, 15 Sep 2021 17:42:39 +0200	[thread overview]
Message-ID: <CACJP=3=tGUVKcZ1nHj+bb-DArJ17SJBY0SHq9JuFrY+unLP1xw@mail.gmail.com> (raw)
In-Reply-To: <CACJP=3=4izKQ5R1WZqoDDfESM4dAjyWjN5eKvxJajFH9SMW++A@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 10065 bytes --]

Ah... once more the link to the package

https://github.com/dalanicolai/sketch-mode

On Wed, 15 Sept 2021 at 17:42, dalanicolai <dalanicolai@gmail.com> wrote:

> Hi Stefan (et al.)
>
> The paperwork is ready. Do I need to send the contract somewhere?
>
> Also thank you for the patch and the tip. I have applied the patch, and I
> am checking things regularly by byte-compiling the file.
> I am still getting some
>
> `... function` is for interactive use only
>
> warnings, but I am not sure how to best deal with that, so I better ask
> here (they all refer to transient suffixes)
>
> I worked a little more on the package, so that it has become again a
> little nicer. Of course, there are still many possibilities to improve it,
> but it is a nice start (e.g. would be nice to merge some canvas-mode
> features in it, i.e. freehand drawing and mouse
> selection/moving objects, then it would become a very nice(r) alternative
> to
> https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio
> ; just noticed that package very recently).
>
> Daniel
>
> On Tue, 31 Aug 2021 at 00:45, Stefan Monnier <monnier@iro.umontreal.ca>
> wrote:
>
>> > 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)
>>
>>

[-- Attachment #2: Type: text/html, Size: 12529 bytes --]

  reply	other threads:[~2021-09-15 15:42 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
2021-09-15 15:42       ` dalanicolai
2021-09-15 15:42         ` dalanicolai [this message]
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='CACJP=3=tGUVKcZ1nHj+bb-DArJ17SJBY0SHq9JuFrY+unLP1xw@mail.gmail.com' \
    --to=dalanicolai@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=larsi@gnus.org \
    --cc=monnier@iro.umontreal.ca \
    /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).