[HN Gopher] Racket-embed-images-in-source-text
___________________________________________________________________
Racket-embed-images-in-source-text
Author : spdegabrielle
Score : 38 points
Date : 2024-12-27 12:00 UTC (2 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| WiggleGuy wrote:
| Hey, that's my former professor! Hi Shriram!
| diath wrote:
| On a related note, one of the features in TempleOS was images
| embedded in source code along with an image editor within the
| code editor: https://www.youtube.com/shorts/196Dv3gFslU
| Tempest1981 wrote:
| Seems clean. Does the Racket IDE already support images?
| soegaard wrote:
| Yes.
|
| https://www.youtube.com/watch?v=z18shcK6mhk
| perihelions wrote:
| I like these kinds of ideas. I've spent a lot of time thinking
| about similar ones. Here's my rough translation of this
| particular concept to Emacs: (defun imagify-
| buffer () (interactive) (font-lock-ensure)
| (save-excursion (goto-char (point-min))
| (while (re-search-forward (rx
| "(%image \"" (group (1+ (or alphanumeric "+"
| "/" "="))) "\")") nil t)
| (when (equal 'font-lock-comment-face
| (get-char-property (match-beginning 0) 'face))
| (let* ((replaced-string (match-string 0))
| (base64 (match-string 1)) (image (create-
| image (base64-decode-string
| base64) nil t :scale 4.0)))
| (goto-char (match-beginning 0)) (kill-region
| (match-beginning 0) (match-end 0)) (insert-
| image image replaced-string)))))) (defun insert-
| image-thingy (filename) (interactive "f")
| (let* ((s (with-temp-buffer (set-buffer-
| multibyte nil) (insert-file-contents-
| literally filename) (buffer-substring-no-
| properties (point-min) (point-max)))) (base64
| (base64-encode-string s t)) (thingy (format ";;
| (%%image \"%s\")" base64))) (insert thingy)
| (imagify-buffer))) (add-hook 'emacs-lisp-mode-
| hook #'imagify-buffer) (add-hook 'lisp-interaction-mode-
| hook #'imagify-buffer) (imagify-buffer)
| ;; (%image "PHN2ZyBoZWlnaHQ9IjE4IiB2aWV3Qm94PSI0IDQgMTg4IDE4OCIgd
| 2lkdGg9IjE4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYX
| RoIGQ9Im00IDRoMTg4djE4OGgtMTg4eiIgZmlsbD0iI2Y2MCIvPjxwYXRoIGQ9Im0
| 3My4yNTIxNzU2IDQ1LjAxIDIyLjc0NzgyNDQgNDcuMzkxMzAwODMgMjIuNzQ3ODI0
| NC00Ny4zOTEzMDA4M2gxOS41NjU2OTYzMWwtMzQuMzIzNTIwNzEgNjQuNDg2NjE0N
| jh2NDEuNDkzMzg1MzJoLTE1Ljk4di00MS40OTMzODUzMmwtMzQuMzIzNTIwNzEtNj
| QuNDg2NjE0Njh6IiBmaWxsPSIjZmZmIi8+PC9zdmc+")
|
| This adaptation hooks onto an Emacs language mode--Emacs Lisp
| mode, in this snippet--and searches for, and translates, a regex
| syntax (%image) appearing in the comments section. This
| piggybacks on the language mode's own parser (the 'font-lock-
| comment-face thingy). The image-handling part is core Emacs
| functionality; like DrRacket it does support these things
| natively.
| neilv wrote:
| He's doing this only because Racket has the unusual feature of
| supporting images as "self-eval" values in the source code.
|
| In other languages, all you'd want is the byte string (maybe
| BASE64-encoded, maybe with byte escape sequences), and you
| wouldn't need a fancy reader extension: just put a byte string
| literal.
|
| A variation on the byte string literal you might see is when
| people create a minilanguage out of strings. For example, if you
| want to represent a 2x pixel map image with a fairly small color
| map... you might just have a string literal of ASCII characters
| for each row, where each ASCII character maps to an RGB color (or
| transparent) that you specify, with a simple function to
| translate it to binary. Then it looks like ASCII art in your
| source code.
|
| Vector images, OTOH, are more likely to have a textual language
| already (e.g., SVG), so of course you can just embed that as
| strings in your source file.
| adammarples wrote:
| I read the readme, I read all the links. I didn't see a single
| image. Why are developers like this.
| IshKebab wrote:
| I really wish IDEs would support showing images inline in code. I
| can't count the number of times I've wanted to include a nice
| diagram in a comment but I instead had to resort to describing
| the diagram with words, or a shitty ASCII art diagram.
|
| There's a very long standing VSCode issue for this.
|
| https://github.com/microsoft/vscode/issues/3220
___________________________________________________________________
(page generated 2024-12-29 23:00 UTC)