unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Third <alan@idiocy.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Image transformations
Date: Mon, 17 Jun 2019 22:13:32 +0100	[thread overview]
Message-ID: <20190617211332.GA55597@breton.holly.idiocy.org> (raw)
In-Reply-To: <83d0jdv68i.fsf@gnu.org>

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

On Sun, Jun 16, 2019 at 07:34:53PM +0300, Eli Zaretskii wrote:
> > Date: Sun, 16 Jun 2019 16:22:59 +0100
> > From: Alan Third <alan@idiocy.org>
> > Cc: emacs-devel@gnu.org
> > 
> > In another part of this thread you pointed out that crop and image
> > slices are doing basically the same thing. I hadn’t realised that.
> > Given that that’s the case, I think we should just get rid of the crop
> > function.
> 
> I agree, but please make sure the slices are indeed a 100% replacement
> (I cannot yet do that because I don't have a working :crop support to
> try it).

As far as I can tell they are perhaps a 90% replacement, the only real
difference is that the interactive keybinds from image.el don’t work
(r for rotate, + for scale up, etc.). They can probably be made to
work, but to be honest I’m not sure it matters. If someone is cropping
an image I can’t think of any use cases where they’d want to then
provide the user the ability to play with that image interactively.

Perhaps I’m just not imaginative enough.

> > +       [x]   [m11 m12 tx]   [x']
> > +       [y] X [m21 m22 ty] = [y']
> > +       [1]   [  0   0  1]   [1 ]
> 
> Either we use a column vector, and it should be on the right of the
> matrix; or we use a row vector, in which case it should be on the
> left.  Which of these is the case?

It is the former. I fixed it before pushing.

> > diff --git a/test/manual/image-transforms-tests.el b/test/manual/image-transforms-tests.el
> > new file mode 100644
> > index 0000000000..d601b9397e
> > --- /dev/null
> > +++ b/test/manual/image-transforms-tests.el
> 
> This is great, but Windows only supports displaying images from files,
> so we will have to write these specs to files, and then display them.

That’s unfortunate. Patch attached.
-- 
Alan Third

[-- Attachment #2: 0001-Move-inline-SVG-images-to-separate-files.patch --]
[-- Type: text/plain, Size: 16821 bytes --]

From a9b7f48e7a1b4c1541226467919e263c0b3c8cea Mon Sep 17 00:00:00 2001
From: Alan Third <alan@idiocy.org>
Date: Mon, 17 Jun 2019 22:07:44 +0100
Subject: [PATCH] Move inline SVG images to separate files

* test/data/image/transform-crop-base.svg: New file.
* test/data/image/transform-crop-bottom-right.svg: New file.
* test/data/image/transform-crop-middle.svg: New file.
* test/data/image/transform-crop-top-left.svg: New file.
* test/data/image/transform-rotation-down.svg: New file.
* test/data/image/transform-rotation-left.svg: New file.
* test/data/image/transform-rotation-right.svg: New file.
* test/data/image/transform-rotation-up.svg: New file.
* test/data/image/transform-scaling-base.svg: New file.
* test/data/image/transform-scaling-large.svg: New file.
* test/data/image/transform-scaling-rotation-base.svg: New file.
* test/data/image/transform-scaling-rotation-x0.5-180.svg: New file.
* test/data/image/transform-scaling-rotation-x2--90.svg: New file.
* test/data/image/transform-scaling-rotation-x2-90.svg: New file.
* test/data/image/transform-scaling-small.svg: New file.
* test/manual/image-transforms-tests.el (test-rotation):
(test-cropping):
(test-transforms): Remove inline SVG image data and replace with new
image files.
(insert-test): Construct paths to new files and use them.
---
 test/data/image/transform-crop-base.svg       |   9 ++
 .../image/transform-crop-bottom-right.svg     |   4 +
 test/data/image/transform-crop-middle.svg     |   6 +
 test/data/image/transform-crop-top-left.svg   |   3 +
 test/data/image/transform-rotation-down.svg   |   3 +
 test/data/image/transform-rotation-left.svg   |   3 +
 test/data/image/transform-rotation-right.svg  |   3 +
 test/data/image/transform-rotation-up.svg     |   3 +
 test/data/image/transform-scaling-base.svg    |   6 +
 test/data/image/transform-scaling-large.svg   |   8 ++
 .../image/transform-scaling-rotation-base.svg |   6 +
 .../transform-scaling-rotation-x0.5-180.svg   |   6 +
 .../transform-scaling-rotation-x2--90.svg     |   6 +
 .../transform-scaling-rotation-x2-90.svg      |   6 +
 test/data/image/transform-scaling-small.svg   |   6 +
 test/manual/image-transforms-tests.el         | 108 +++++-------------
 16 files changed, 106 insertions(+), 80 deletions(-)
 create mode 100644 test/data/image/transform-crop-base.svg
 create mode 100644 test/data/image/transform-crop-bottom-right.svg
 create mode 100644 test/data/image/transform-crop-middle.svg
 create mode 100644 test/data/image/transform-crop-top-left.svg
 create mode 100644 test/data/image/transform-rotation-down.svg
 create mode 100644 test/data/image/transform-rotation-left.svg
 create mode 100644 test/data/image/transform-rotation-right.svg
 create mode 100644 test/data/image/transform-rotation-up.svg
 create mode 100644 test/data/image/transform-scaling-base.svg
 create mode 100644 test/data/image/transform-scaling-large.svg
 create mode 100644 test/data/image/transform-scaling-rotation-base.svg
 create mode 100644 test/data/image/transform-scaling-rotation-x0.5-180.svg
 create mode 100644 test/data/image/transform-scaling-rotation-x2--90.svg
 create mode 100644 test/data/image/transform-scaling-rotation-x2-90.svg
 create mode 100644 test/data/image/transform-scaling-small.svg

diff --git a/test/data/image/transform-crop-base.svg b/test/data/image/transform-crop-base.svg
new file mode 100644
index 0000000000..188f47ac29
--- /dev/null
+++ b/test/data/image/transform-crop-base.svg
@@ -0,0 +1,9 @@
+<svg height="30" width="30">
+  <rect x="0" y="0" width="10" height="10"/>
+  <rect x="10" y="10" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <line x1="10" y1="10" x2="20" y2="20" style="stroke:#000"/>
+  <line x1="20" y1="10" x2="10" y2="20" style="stroke:#000"/>
+  <rect x="20" y="20" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+</svg>
diff --git a/test/data/image/transform-crop-bottom-right.svg b/test/data/image/transform-crop-bottom-right.svg
new file mode 100644
index 0000000000..74e09f03da
--- /dev/null
+++ b/test/data/image/transform-crop-bottom-right.svg
@@ -0,0 +1,4 @@
+<svg height="10" width="10">
+  <rect x="0" y="0" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+</svg>
diff --git a/test/data/image/transform-crop-middle.svg b/test/data/image/transform-crop-middle.svg
new file mode 100644
index 0000000000..e707df1e55
--- /dev/null
+++ b/test/data/image/transform-crop-middle.svg
@@ -0,0 +1,6 @@
+<svg height="10" width="10">
+  <rect x="0" y="0" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <line x1="0" y1="0" x2="10" y2="10" style="stroke:#000"/>
+  <line x1="10" y1="0" x2="0" y2="10" style="stroke:#000"/>
+</svg>
diff --git a/test/data/image/transform-crop-top-left.svg b/test/data/image/transform-crop-top-left.svg
new file mode 100644
index 0000000000..0f62f89a05
--- /dev/null
+++ b/test/data/image/transform-crop-top-left.svg
@@ -0,0 +1,3 @@
+<svg height="10" width="10">
+  <rect x="0" y="0" width="10" height="10"/>
+</svg>
diff --git a/test/data/image/transform-rotation-down.svg b/test/data/image/transform-rotation-down.svg
new file mode 100644
index 0000000000..67f3e11e64
--- /dev/null
+++ b/test/data/image/transform-rotation-down.svg
@@ -0,0 +1,3 @@
+<svg height="9" width="9">
+  <polygon points="0,0 4,8 8,0"/>
+</svg>
diff --git a/test/data/image/transform-rotation-left.svg b/test/data/image/transform-rotation-left.svg
new file mode 100644
index 0000000000..33cfab6264
--- /dev/null
+++ b/test/data/image/transform-rotation-left.svg
@@ -0,0 +1,3 @@
+<svg height="9" width="9">
+  <polygon points="8,0 0,4 8,8"/>
+</svg>
diff --git a/test/data/image/transform-rotation-right.svg b/test/data/image/transform-rotation-right.svg
new file mode 100644
index 0000000000..60f247cf42
--- /dev/null
+++ b/test/data/image/transform-rotation-right.svg
@@ -0,0 +1,3 @@
+<svg height="9" width="9">
+  <polygon points="0,0 8,4 0,8"/>
+</svg>
diff --git a/test/data/image/transform-rotation-up.svg b/test/data/image/transform-rotation-up.svg
new file mode 100644
index 0000000000..57d545a99d
--- /dev/null
+++ b/test/data/image/transform-rotation-up.svg
@@ -0,0 +1,3 @@
+<svg height="9" width="9">
+  <polygon points="0,8 4,0 8,8"/>
+</svg>
diff --git a/test/data/image/transform-scaling-base.svg b/test/data/image/transform-scaling-base.svg
new file mode 100644
index 0000000000..e707df1e55
--- /dev/null
+++ b/test/data/image/transform-scaling-base.svg
@@ -0,0 +1,6 @@
+<svg height="10" width="10">
+  <rect x="0" y="0" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <line x1="0" y1="0" x2="10" y2="10" style="stroke:#000"/>
+  <line x1="10" y1="0" x2="0" y2="10" style="stroke:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-large.svg b/test/data/image/transform-scaling-large.svg
new file mode 100644
index 0000000000..0803f073dc
--- /dev/null
+++ b/test/data/image/transform-scaling-large.svg
@@ -0,0 +1,8 @@
+<svg height="20" width="20">
+  <rect x="0" y="0" width="20" height="20"
+        style="fill:none;stroke-width:2;stroke:#000"/>
+  <line x1="0" y1="0" x2="20" y2="20"
+        style="stroke-width:2;stroke:#000"/>
+  <line x1="20" y1="0" x2="0" y2="20"
+        style="stroke-width:2;stroke:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-rotation-base.svg b/test/data/image/transform-scaling-rotation-base.svg
new file mode 100644
index 0000000000..046a0523a2
--- /dev/null
+++ b/test/data/image/transform-scaling-rotation-base.svg
@@ -0,0 +1,6 @@
+<svg height="20" width="20">
+  <rect x="0" y="0" width="20" height="20"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <rect x="0" y="0" width="10" height="10"
+        style="fill:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-rotation-x0.5-180.svg b/test/data/image/transform-scaling-rotation-x0.5-180.svg
new file mode 100644
index 0000000000..8bbbb5ce03
--- /dev/null
+++ b/test/data/image/transform-scaling-rotation-x0.5-180.svg
@@ -0,0 +1,6 @@
+<svg height="10" width="10">
+  <rect x="0" y="0" width="10" height="10"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <rect x="5" y="5" width="5" height="5"
+        style="fill:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-rotation-x2--90.svg b/test/data/image/transform-scaling-rotation-x2--90.svg
new file mode 100644
index 0000000000..9c62df53e3
--- /dev/null
+++ b/test/data/image/transform-scaling-rotation-x2--90.svg
@@ -0,0 +1,6 @@
+<svg height="40" width="40">
+  <rect x="0" y="0" width="40" height="40"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <rect x="0" y="20" width="20" height="20"
+        style="fill:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-rotation-x2-90.svg b/test/data/image/transform-scaling-rotation-x2-90.svg
new file mode 100644
index 0000000000..189d0b1a15
--- /dev/null
+++ b/test/data/image/transform-scaling-rotation-x2-90.svg
@@ -0,0 +1,6 @@
+<svg height="40" width="40">
+  <rect x="0" y="0" width="40" height="40"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <rect x="20" y="0" width="20" height="20"
+        style="fill:#000"/>
+</svg>
diff --git a/test/data/image/transform-scaling-small.svg b/test/data/image/transform-scaling-small.svg
new file mode 100644
index 0000000000..2e51cb2901
--- /dev/null
+++ b/test/data/image/transform-scaling-small.svg
@@ -0,0 +1,6 @@
+<svg height="5" width="5">
+  <rect x="0" y="0" width="4" height="4"
+        style="fill:none;stroke-width:1;stroke:#000"/>
+  <line x1="0" y1="0" x2="4" y2="4" style="stroke:#000"/>
+  <line x1="4" y1="0" x2="0" y2="4" style="stroke:#000"/>
+</svg>
diff --git a/test/manual/image-transforms-tests.el b/test/manual/image-transforms-tests.el
index d601b9397e..739df2f2ac 100644
--- a/test/manual/image-transforms-tests.el
+++ b/test/manual/image-transforms-tests.el
@@ -28,10 +28,10 @@
 ;;; Code:
 
 (defun test-rotation ()
-  (let ((up "<svg height='9' width='9'><polygon points='0,8 4,0 8,8'/></svg>")
-        (down "<svg height='9' width='9'><polygon points='0,0 4,8 8,0'/></svg>")
-        (left "<svg height='9' width='9'><polygon points='8,0 0,4 8,8'/></svg>")
-        (right "<svg height='9' width='9'><polygon points='0,0 8,4 0,8'/></svg>"))
+  (let ((up "transform-rotation-up.svg")
+        (down "transform-rotation-down.svg")
+        (left "transform-rotation-left.svg")
+        (right "transform-rotation-right.svg"))
     (insert-header "Test Rotation: rotating an image")
     (insert-test "0" up up '(:rotation 0))
     (insert-test "360" up up '(:rotation 360))
@@ -45,28 +45,10 @@ test-rotation
   (insert "\n\n"))
 
 (defun test-cropping ()
-  (let ((image "<svg height='30' width='30'>
-                  <rect x='0' y='0' width='10' height='10'/>
-                  <rect x='10' y='10' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='10' y1='10' x2='20' y2='20' style='stroke:#000'/>
-                  <line x1='20' y1='10' x2='10' y2='20' style='stroke:#000'/>
-                  <rect x='20' y='20' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                </svg>")
-        (top-left "<svg height='10' width='10'>
-                     <rect x='0' y='0' width='10' height='10'/>
-                   </svg>")
-        (middle "<svg height='10' width='10'>
-                   <rect x='0' y='0' width='10' height='10'
-                         style='fill:none;stroke-width:1;stroke:#000'/>
-                   <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
-                   <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
-                 </svg>")
-        (bottom-right "<svg height='10' width='10'>
-                         <rect x='0' y='0' width='10' height='10'
-                               style='fill:none;stroke-width:1;stroke:#000'/>
-                       </svg>"))
+  (let ((image "transform-crop-base.svg")
+        (top-left "transform-crop-top-left.svg")
+        (middle "transform-crop-middle.svg")
+        (bottom-right "transform-crop-bottom-right.svg"))
     (insert-header "Test Crop: cropping an image")
     (insert-test "all params" top-left image '(:crop (10 10 0 0)))
     (insert-test "width/height only" middle image '(:crop (10 10)))
@@ -75,26 +57,9 @@ test-cropping
   (insert "\n\n"))
 
 (defun test-scaling ()
-  (let ((image "<svg height='10' width='10'>
-                  <rect x='0' y='0' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
-                  <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
-                </svg>")
-        (large "<svg height='20' width='20'>
-                  <rect x='0' y='0' width='20' height='20'
-                        style='fill:none;stroke-width:2;stroke:#000'/>
-                  <line x1='0' y1='0' x2='20' y2='20'
-                        style='stroke-width:2;stroke:#000'/>
-                  <line x1='20' y1='0' x2='0' y2='20'
-                        style='stroke-width:2;stroke:#000'/>
-                </svg>")
-        (small "<svg height='5' width='5'>
-                  <rect x='0' y='0' width='4' height='4'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='0' y1='0' x2='4' y2='4' style='stroke:#000'/>
-                  <line x1='4' y1='0' x2='0' y2='4' style='stroke:#000'/>
-                </svg>"))
+  (let ((image "transform-scaling-base.svg")
+        (large "transform-scaling-large.svg")
+        (small "transform-scaling-small.svg"))
     (insert-header "Test Scaling: resize an image (pixelization may occur)")
     (insert-test "1x" image image '(:scale 1))
     (insert-test "2x" large image '(:scale 2))
@@ -105,30 +70,10 @@ test-scaling
   (insert "\n\n"))
 
 (defun test-scaling-rotation ()
-  (let ((image "<svg height='20' width='20'>
-                  <rect x='0' y='0' width='20' height='20'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <rect x='0' y='0' width='10' height='10'
-                        style='fill:#000'/>
-                </svg>")
-        (x2-90 "<svg height='40' width='40'>
-                  <rect x='0' y='0' width='40' height='40'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <rect x='20' y='0' width='20' height='20'
-                        style='fill:#000'/>
-                </svg>")
-        (x2--90 "<svg height='40' width='40'>
-                   <rect x='0' y='0' width='40' height='40'
-                         style='fill:none;stroke-width:1;stroke:#000'/>
-                   <rect x='0' y='20' width='20' height='20'
-                         style='fill:#000'/>
-                 </svg>")
-        (x0.5-180 "<svg height='10' width='10'>
-                     <rect x='0' y='0' width='10' height='10'
-                           style='fill:none;stroke-width:1;stroke:#000'/>
-                     <rect x='5' y='5' width='5' height='5'
-                           style='fill:#000'/>
-                   </svg>"))
+  (let ((image "transform-scaling-rotation-base.svg")
+        (x2-90 "transform-scaling-rotation-x2-90.svg")
+        (x2--90 "transform-scaling-rotation-x2--90.svg")
+        (x0.5-180 "transform-scaling-rotation-x0.5-180.svg"))
     (insert-header "Test Scaling and Rotation: resize and rotate an image (pixelization may occur)")
     (insert-test "1x, 0 degrees" image image '(:scale 1 :rotation 0))
     (insert-test "2x, 90 degrees" x2-90 image '(:scale 2 :rotation 90.0))
@@ -149,16 +94,19 @@ insert-header
   (insert "\n"))
 
 (defun insert-test (description expected image params)
-  (indent-to 2)
-  (insert description)
-  (indent-to 40)
-  (insert-image (create-image expected 'svg t))
-  (indent-to 50)
-  (insert-image (apply #'create-image image 'svg t params))
-  (when (fboundp #'imagemagick-types)
-    (indent-to 60)
-    (insert-image (apply #'create-image image 'imagemagick t params)))
-  (insert "\n"))
+  (let* ((image-dir (concat source-directory "test/data/image"))
+         (expected (expand-file-name expected image-dir))
+        (image (expand-file-name image image-dir)))
+    (indent-to 2)
+    (insert description)
+    (indent-to 40)
+    (insert-image (create-image expected 'svg nil))
+    (indent-to 50)
+    (insert-image (apply #'create-image image 'svg nil params))
+    (when (fboundp #'imagemagick-types)
+      (indent-to 60)
+      (insert-image (apply #'create-image image 'imagemagick nil params)))
+    (insert "\n")))
 
 (defun test-transforms ()
   (interactive)
-- 
2.21.0


  reply	other threads:[~2019-06-17 21:13 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-11  5:10 Image transformations Eli Zaretskii
2019-06-11 20:02 ` Alan Third
2019-06-12 15:30   ` Eli Zaretskii
2019-06-12 22:07     ` Alan Third
2019-06-12 22:15       ` Alan Third
2019-06-13  4:16       ` Alp Aker
2019-06-13  5:41         ` Eli Zaretskii
2019-06-13  9:19           ` Alp Aker
2019-06-13 13:05             ` Eli Zaretskii
2019-06-13 15:57               ` Alp Aker
2019-06-13 16:20                 ` Eli Zaretskii
2019-06-13 19:00                   ` Richard Copley
2019-06-13 19:29                     ` Eli Zaretskii
2019-06-14 10:45                     ` Alp Aker
2019-06-14 10:55                       ` Richard Copley
2019-06-14 11:45                         ` YAMAMOTO Mitsuharu
2019-06-14 11:59                         ` Alp Aker
2019-06-13 16:12           ` Alan Third
2019-06-13 17:05             ` Eli Zaretskii
2019-06-13 19:35               ` Richard Copley
2019-06-13  5:48       ` Eli Zaretskii
2019-06-13 16:58         ` Alan Third
2019-06-13 17:11           ` Eli Zaretskii
2019-06-13 19:27             ` Alan Third
2019-06-13 19:39               ` Alan Third
2019-06-13 19:47               ` Eli Zaretskii
2019-06-13 22:26                 ` Alan Third
2019-06-14  7:05                   ` Eli Zaretskii
2019-06-14  9:57                     ` Stefan Monnier
2019-06-14 10:57                       ` Eli Zaretskii
2019-06-14 11:21                         ` Richard Copley
2019-06-14 12:06                           ` Eli Zaretskii
2019-06-14 12:49                             ` Richard Copley
2019-06-14 14:16                               ` Yuri Khan
2019-06-14 14:43                               ` Eli Zaretskii
2019-06-14 15:55                                 ` Richard Copley
2019-06-15 11:00                                   ` Alan Third
2019-06-15 11:34                                     ` Eli Zaretskii
2019-06-15 10:42                     ` Alan Third
2019-06-15 11:31                       ` Eli Zaretskii
2019-06-16 15:22                         ` Alan Third
2019-06-16 16:34                           ` Eli Zaretskii
2019-06-17 21:13                             ` Alan Third [this message]
2019-06-19 17:56                               ` Eli Zaretskii
2019-06-24 17:54                               ` Eli Zaretskii
2019-06-24 19:50                                 ` Stefan Monnier
2019-06-25  2:33                                   ` Eli Zaretskii
2019-06-25  3:28                                     ` Stefan Monnier
2019-06-25  4:34                                       ` Eli Zaretskii
2019-06-25 14:43                                         ` Stefan Monnier
2019-06-25 15:35                                           ` Eli Zaretskii
2019-06-26  0:28                                             ` YAMAMOTO Mitsuharu
2019-06-26 15:34                                               ` Eli Zaretskii
2019-06-27  3:37                                                 ` YAMAMOTO Mitsuharu
2019-06-27 13:13                                                   ` Eli Zaretskii
2019-06-25 18:33                                 ` Alan Third
2019-06-25 18:57                                   ` Eli Zaretskii
2019-06-27 13:59                                     ` Eli Zaretskii
2019-06-28 18:36                                       ` Alan Third
2019-06-28 19:50                                         ` Eli Zaretskii
2019-06-29 11:55                                           ` Eli Zaretskii
2019-06-29 19:51                                             ` Alan Third
2019-06-29 19:49                                           ` Alan Third
2019-06-29 19:53                                             ` Lars Ingebrigtsen
2019-06-30 14:38                                               ` Alan Third
2019-06-30 15:24                                                 ` Lars Ingebrigtsen
2019-07-25 19:40                                                   ` Lars Ingebrigtsen
2019-07-26  6:10                                                     ` Eli Zaretskii
2019-07-26  6:46                                                       ` Lars Ingebrigtsen
2019-07-26  8:06                                                         ` Eli Zaretskii
2019-07-26  8:23                                                           ` Lars Ingebrigtsen
2019-07-26  8:24                                                             ` Lars Ingebrigtsen
2019-07-26  8:33                                                               ` Eli Zaretskii
2019-07-26  8:58                                                                 ` Lars Ingebrigtsen
2019-07-26  9:13                                                                   ` Eli Zaretskii
2019-07-26 10:23                                                                     ` Lars Ingebrigtsen
2019-07-26 14:08                                                                   ` Stefan Monnier
2019-07-26  8:32                                                             ` Eli Zaretskii
2019-06-29 21:05                                             ` Stefan Monnier
2019-06-30 15:12                                             ` Eli Zaretskii
2019-06-30 19:10                                               ` Alan Third
2019-07-01 14:55                                                 ` Eli Zaretskii
2019-06-18 11:01                       ` Tak Kunihiro
2019-06-13 17:41           ` Eli Zaretskii

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=20190617211332.GA55597@breton.holly.idiocy.org \
    --to=alan@idiocy.org \
    --cc=eliz@gnu.org \
    --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).