Ah, I was looking at https://www.gnu.org/software/emacs/manual/html_node/elisp/Pixel-Specification.html, this isn't documented but indeed it scales.

```elisp
#("" 0 1
  (face all-the-icons-lpurple font-lock-face all-the-icons-lpurple fontified t display
        (image :type svg :data "<svg viewBox=\"0 0 512 512\" width=\"512\" height=\"512\"> <path d=\"...snip...\"></path></svg>" :scale 1 :transform-smoothing t :width (1 . em) :ascent center :margin 1)
        front-sticky nil rear-nonsticky t))
```

But this doesn't seem to work, I suppose px is not a unit?

```elisp
#("" 0 1
  (face all-the-icons-lpurple font-lock-face all-the-icons-lpurple fontified t display
        (image :type svg :data "<svg viewBox=\"0 0 512 512\" width=\"512\" height=\"512\"> <path d=\"...snip...\"></path></svg>" :scale 1 :transform-smoothing t :width (- (1 . em) (1 . px)) :ascent center :margin 1)
        front-sticky nil rear-nonsticky t))
```

I like this approach a lot, but I do need pixel precision calculated on demand because I need to add a 1px margin between icons. If I don't subtract 2 px back from the dimensions, the icons will be wider than a character.

Jimmy


On Mon, Sep 18, 2023 at 7:19 PM Alan Third <alan@idiocy.org> wrote:
On Mon, Sep 18, 2023 at 06:42:33PM +0100, Jimmy Yuen Ho Wong wrote:
> In the SVG branch in all-the-icons, all the icons are inserted with a
> `:width` and `:height` properties set on the image, and the face is applied
> to the propertized string. i.e.
>
> ```elisp
> ELISP> (all-the-icons-icon-for-file "test.js")
> #("" 0 1
>   (face all-the-icons-lpurple font-lock-face all-the-icons-lpurple
> fontified t display
>         (image :type svg :data "<svg viewBox=\"0 0 512 512\" width=\"512\"
> height=\"512\"> <path d=\"...snip...\"></path></svg>" :scale 1
> :transform-smoothing t :width 14 :height 14 :ascent center :margin 1)
>         front-sticky nil rear-nonsticky t))
> ```

Do you need to set the size in pixels? If you set the size in em's
(from Emacs 28 up) then it will scale automatically.

--
Alan Third