commit a786ace08036889d250c2dba58d9622a1af67d49 Spenser Truex <truex@equwal.com> 2026-10-04 23:10:33 -0700 git mirror: update alt-hack0 and minimak-tty-xkb to their full histories
.../3cc9a7d269baad7a41d252e0525f4835893334ff.html | 65 +++ .../a09b18297800b617b3e407f952f0ce5ad2c999ec.html | 331 ++++++++++++++ .../bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html | 485 +++++++++++++++++++++ .../d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html | 27 ++ .../f109b78b9b2fd835ef21e266b019aa491847ef90.html | 25 ++ git/alt-hack0/file/README.md.html | 48 +- git/alt-hack0/file/all-fonts-bc.lisp.html | 47 ++ git/alt-hack0/file/all-fonts-default.lisp.html | 47 ++ git/alt-hack0/file/generator-bc.ros.html | 253 +++++++++++ git/alt-hack0/file/generator.ros.html | 379 +++++++++------- git/alt-hack0/file/glyphs.html | 2 +- git/alt-hack0/file/hack.html | 4 +- git/alt-hack0/file/script-bc.lisp.html | 14 + git/alt-hack0/file/script-default.lisp.html | 14 + git/alt-hack0/file/source.html | 2 +- git/alt-hack0/file/tarflat.html | 26 ++ git/alt-hack0/file/tt-hinting.html | 2 +- git/alt-hack0/files.html | 2 +- git/alt-hack0/index.html | 2 +- git/alt-hack0/refs.html | 2 +- git/index.html | 2 +- .../008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html | 81 ++++ git/minimak-tty-xkb/file/README.html | 57 ++- git/minimak-tty-xkb/files.html | 2 +- git/minimak-tty-xkb/index.html | 2 +- git/minimak-tty-xkb/refs.html | 2 +- 26 files changed, 1708 insertions(+), 215 deletions(-)
diff --git a/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html b/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html new file mode 100644 index 0000000..12b2177 --- /dev/null +++ b/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0 3cc9a7d2 - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit 3cc9a7d269baad7a41d252e0525f4835893334ff +Spenser Truex <truex@equwal.com> +2021-01-16 02:57:05 -0800 + +Re-symlink. + +</pre><pre> TODO | 1 - + glyphs | 2 +- + hack | 2 +- + source | 2 +- + tt-hinting | 2 +- + 5 files changed, 4 insertions(+), 5 deletions(-) +</pre><pre>diff --git a/TODO b/TODO +deleted file mode 100644 +index 597ec61..0000000 +--- a/TODO ++++ /dev/null +<span class="h">@@ -1 +0,0 @@</span> +<span class="d">-- Change these to be scripts which modify the existing layout from the keyboard rather than hand-coded modifications.</span> +diff --git a/glyphs b/glyphs +index b44b72b..d90c0ba 120000 +--- a/glyphs ++++ b/glyphs +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/github.com/source-foundry/alt-hack/glyphs/</span> +\ No newline at end of file +<span class="a">+/home/jose/src/gh/source-foundry/alt-hack/glyphs</span> +\ No newline at end of file +diff --git a/hack b/hack +index 535ab1c..37532e5 120000 +--- a/hack ++++ b/hack +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/github.com/source-foundry/hack</span> +\ No newline at end of file +<span class="a">+/home/jose/src/gh/source-foundry/hack</span> +\ No newline at end of file +diff --git a/source b/source +index 4df09a0..4742210 120000 +--- a/source ++++ b/source +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/github.com/source-foundry/hack/source/</span> +\ No newline at end of file +<span class="a">+/home/jose/src/gh/source-foundry/hack/source</span> +\ No newline at end of file +diff --git a/tt-hinting b/tt-hinting +index 3a4409a..405f0d0 120000 +--- a/tt-hinting ++++ b/tt-hinting +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/github.com/source-foundry/hack/postbuild_processing/tt-hinting</span> +\ No newline at end of file +<span class="a">+/home/jose/src/gh/source-foundry/hack/postbuild_processing/tt-hinting</span> +\ No newline at end of file</pre> +</div></body></html> diff --git a/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html b/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html new file mode 100644 index 0000000..9fe0b3b --- /dev/null +++ b/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html @@ -0,0 +1,331 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0 a09b1829 - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit a09b18297800b617b3e407f952f0ce5ad2c999ec +Spenser Truex <truex@equwal.com> +2023-08-10 13:15:50 -0300 + +Add bc scripts + +</pre><pre> Hack | 1 + + all-fonts-bc.lisp | 37 +++++++++ + generator-bc.ros | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + script-bc.lisp | 4 + + 4 files changed, 285 insertions(+) +</pre><pre>diff --git a/Hack b/Hack +new file mode 120000 +index 0000000..f59d596 +--- /dev/null ++++ b/Hack +<span class="h">@@ -0,0 +1 @@</span> +<span class="a">+/home/jose/src/repos/gh/source-foundry/hack</span> +\ No newline at end of file +diff --git a/all-fonts-bc.lisp b/all-fonts-bc.lisp +new file mode 100644 +index 0000000..2c35da0 +--- /dev/null ++++ b/all-fonts-bc.lisp +<span class="h">@@ -0,0 +1,37 @@</span> +<span class="a">+(defpackage :all-fonts</span> +<span class="a">+ (:use :cl)</span> +<span class="a">+ (:import-from :alexandria :map-combinations)</span> +<span class="a">+ (:import-from :uiop :run-program))</span> +<span class="a">+(in-package :all-fonts)</span> +<span class="a">+</span> +<span class="a">+(defparameter *groups*</span> +<span class="a">+ '(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi slabl traditional loop nogap)</span> +<span class="a">+ "Things you actually want to permute together.")</span> +<span class="a">+</span> +<span class="a">+(defparameter *exclusions*</span> +<span class="a">+ '((curve round)</span> +<span class="a">+ (backslash diamond dot forwardslash))</span> +<span class="a">+ "Things which you don't want specified at the same time.")</span> +<span class="a">+</span> +<span class="a">+(defun verify (spec)</span> +<span class="a">+ "Ensure that the spec is not bogus."</span> +<span class="a">+ (let ((group (not (set-difference spec *groups*)))</span> +<span class="a">+ (exclusion (not (some #'identity</span> +<span class="a">+ (mapcar #'(lambda (ex)</span> +<span class="a">+ (<= 2 (length (intersection spec ex))))</span> +<span class="a">+ *exclusions*)))))</span> +<span class="a">+ (values (and group exclusion)</span> +<span class="a">+ (if group (if exclusion 'group-and-exclusion 'group)</span> +<span class="a">+ (if exclusion 'exclusion 'unknown)))))</span> +<span class="a">+(defun gen-all-fonts ()</span> +<span class="a">+ (loop for x from 1 to (length *groups*)</span> +<span class="a">+ do (map-combinations</span> +<span class="a">+ (lambda (f)</span> +<span class="a">+ (when (verify f)</span> +<span class="a">+ (run-program (format nil "./generator-bc.ros --ttf --woff --woff2 ~(~{ ~A~}~)" f) :output t)</span> +<span class="a">+ ;; KLUDGE: Weird bug where everything ends up in the ttf folder</span> +<span class="a">+ (run-program (format nil "tar -vcf - Hack/build/ttf/* | xz -12 >'~(~{~A~}~).tar.xz'" f) :output t)</span> +<span class="a">+ (run-program "rm -Rf Hack/build")</span> +<span class="a">+ (run-program "mkdir Hack/build")))</span> +<span class="a">+ *groups*</span> +<span class="a">+ :length x)))</span> +diff --git a/generator-bc.ros b/generator-bc.ros +new file mode 100755 +index 0000000..9e8b33b +--- /dev/null ++++ b/generator-bc.ros +<span class="h">@@ -0,0 +1,243 @@</span> +<span class="a">+#!/bin/sh</span> +<span class="a">+#|-*- mode:lisp -*-|#</span> +<span class="a">+#|</span> +<span class="a">+exec ros -Q -- $0 "$@"</span> +<span class="a">+|#</span> +<span class="a">+;;; This file (c) Spenser Truex 2021</span> +<span class="a">+;;; MIT license.</span> +<span class="a">+</span> +<span class="a">+(progn ;;init forms</span> +<span class="a">+ (ros:ensure-asdf)</span> +<span class="a">+ #+quicklisp(ql:quickload '(:alexandria :uiop)</span> +<span class="a">+ :silent t))</span> +<span class="a">+</span> +<span class="a">+;;; EXAMPLE USAGE:</span> +<span class="a">+;;; cd alt-hack && ./generator.ros curve dot slabi</span> +<span class="a">+(defpackage :ros.script.generator.3783095582</span> +<span class="a">+ (:use :cl))</span> +<span class="a">+(in-package :ros.script.generator.3783095582)</span> +<span class="a">+(defvar *weights* '("Bold" "BoldItalic" "Italic" "Regular"))</span> +<span class="a">+</span> +<span class="a">+(defun uncomment (spec)</span> +<span class="a">+ (remove-if #'(lambda (item)</span> +<span class="a">+ (and (stringp item)</span> +<span class="a">+ (= 1 (length item))))</span> +<span class="a">+ spec))</span> +<span class="a">+</span> +<span class="a">+(defparameter *helpful-groups*</span> +<span class="a">+ '(;; Barry Cohen's additions</span> +<span class="a">+ (slabl "u006C-slab" "l"</span> +<span class="a">+ "u013C-slab" "ļ"</span> +<span class="a">+ "u013E-slab" "ľ"</span> +<span class="a">+ "u0142-slab" "ł"</span> +<span class="a">+ "u013A-slab" "ĺ"</span> +<span class="a">+ "u0140-slab" "ŀ")</span> +<span class="a">+ (traditional "u0025-traditional" "%")</span> +<span class="a">+ (nogap "u0026-nogap" "&")</span> +<span class="a">+ (loop "u0067-loop" "g"</span> +<span class="a">+ "u0123-loop" "ǵ"</span> +<span class="a">+ "u011F-loop" "ğ"</span> +<span class="a">+ "u01E7-loop" "ǧ"</span> +<span class="a">+ "u0121-loop" "ġ"</span> +<span class="a">+ "u011D-loop" "ĝ")</span> +<span class="a">+ (curve "u0028-curved" "("</span> +<span class="a">+ "u0029-curved" ")")</span> +<span class="a">+ (round "u0028-rounder" "("</span> +<span class="a">+ "u0029-rounder" ")")</span> +<span class="a">+ (backslash "u0030-backslash" "0")</span> +<span class="a">+ (diamond "u0030-diamond" "0")</span> +<span class="a">+ (dot "u0030-dotted" "0")</span> +<span class="a">+ (forwardslash "u0030-forwardslash" "0")</span> +<span class="a">+ (noslab1 "u0031-noslab" "1")</span> +<span class="a">+ (flattop3 "u0033-flattop" "3")</span> +<span class="a">+ (wider "u003C-wider" "<"</span> +<span class="a">+ "u003E-wider" ">")</span> +<span class="a">+ (knife "u0066-knife" "f")</span> +<span class="a">+ (slabi "u0069-slab" "i"</span> +<span class="a">+ "u00EC-slab" "ì"</span> +<span class="a">+ "u00ED-slab" "í"</span> +<span class="a">+ "u00EE-slab" "î"</span> +<span class="a">+ "u00EF-slab" "ï"</span> +<span class="a">+ "u0129-slab" "ĩ"</span> +<span class="a">+ "u012B-slab" "ī"</span> +<span class="a">+ "u012D-slab" "ĭ"</span> +<span class="a">+ "u012F-slab" "į"</span> +<span class="a">+ "u0131-slab" "ı"</span> +<span class="a">+ "u0456-slab" "і"</span> +<span class="a">+ "u0457-slab" "ї"))</span> +<span class="a">+ "Groups with extra information for user help.")</span> +<span class="a">+</span> +<span class="a">+(defun prune (test tree)</span> +<span class="a">+ (labels ((rec (tree acc)</span> +<span class="a">+ (cond</span> +<span class="a">+ ((null tree) (nreverse acc))</span> +<span class="a">+ ((consp (car tree))</span> +<span class="a">+ (rec (cdr tree)</span> +<span class="a">+ (cons (rec (car tree) nil) acc)))</span> +<span class="a">+ (t (rec (cdr tree)</span> +<span class="a">+ (if (funcall test (car tree))</span> +<span class="a">+ acc</span> +<span class="a">+ (cons (car tree) acc)))))))</span> +<span class="a">+ (rec tree nil)))</span> +<span class="a">+</span> +<span class="a">+(defun pprint-helpful-groups ()</span> +<span class="a">+ (let ((more-helpful (prune #'(lambda (s)</span> +<span class="a">+ (and (stringp s)</span> +<span class="a">+ (< 1 (length s))))</span> +<span class="a">+ *helpful-groups*)))</span> +<span class="a">+ (loop for g in more-helpful</span> +<span class="a">+ do (format t "~A:~%" (car g))</span> +<span class="a">+ do (format t "~{~A ~}~%" (cdr g)))))</span> +<span class="a">+(defparameter *groups*</span> +<span class="a">+ (mapcar #'uncomment *helpful-groups*)</span> +<span class="a">+ "Things you actually want to permute together.")</span> +<span class="a">+(defparameter *exclusions*</span> +<span class="a">+ '((curve round)</span> +<span class="a">+ (backslash diamond dot forwardslash))</span> +<span class="a">+ "Things which you don't want specified at the same time.")</span> +<span class="a">+(defparameter *formats*</span> +<span class="a">+ '("ttf" "woff" "woff2")</span> +<span class="a">+ "Valid parameters to call as formats.")</span> +<span class="a">+</span> +<span class="a">+(define-symbol-macro help</span> +<span class="a">+ (progn (pprint-lines</span> +<span class="a">+ "generator.ros OPTIONS* {SHOW | SPEC+}")</span> +<span class="a">+ (format t "These are valid OPTIONS: ~{~A ~}~%"</span> +<span class="a">+ (mapcar #'(lambda (f) (concatenate 'string "--" f))</span> +<span class="a">+ *formats*))</span> +<span class="a">+ (pprint-lines "SPEC should be a list of:")</span> +<span class="a">+ (pprint-helpful-groups)</span> +<span class="a">+ (pprint-lines</span> +<span class="a">+ "Keep in mind that it makes no sense to include"</span> +<span class="a">+ "the same character spec twice."</span> +<span class="a">+ "SHOW just finds all available glyphs in alt-hack."</span> +<span class="a">+ "TEST runs the test functions for ttf, woff and woff2.")))</span> +<span class="a">+</span> +<span class="a">+(defun find-keyword (keyword group)</span> +<span class="a">+ (when (not (null group))</span> +<span class="a">+ (let ((c (car group)))</span> +<span class="a">+ (if (eql keyword (car c))</span> +<span class="a">+ c</span> +<span class="a">+ (find-keyword keyword (cdr group))))))</span> +<span class="a">+</span> +<span class="a">+(defun folders (keyword)</span> +<span class="a">+ (cdr (find-keyword keyword *groups*)))</span> +<span class="a">+</span> +<span class="a">+(defun pprint-lines (&rest strings)</span> +<span class="a">+ (format t "~{~A~%~}" strings))</span> +<span class="a">+</span> +<span class="a">+(defun remove-hints ()</span> +<span class="a">+ (let ((files (uiop:directory-files #P"Hack/postbuild_processing/tt-hinting")))</span> +<span class="a">+ (dolist (f files)</span> +<span class="a">+ (with-open-file (si f :direction :input)</span> +<span class="a">+ (with-open-file (so f :direction :output</span> +<span class="a">+ :if-exists :supersede)</span> +<span class="a">+ (let ((line (read-line si nil nil)))</span> +<span class="a">+ (when (and line (char/= #\#(elt line 0)))</span> +<span class="a">+ (write-line (format nil "# ~S~%" line) so))))))))</span> +<span class="a">+</span> +<span class="a">+(defun put-glyphs! (ufolders)</span> +<span class="a">+ (dolist (arg ufolders)</span> +<span class="a">+ (dolist (weight *weights*)</span> +<span class="a">+ (dolist (f (uiop:directory-files</span> +<span class="a">+ (concatenate 'string "glyphs/" arg "/"</span> +<span class="a">+ (string-downcase weight) "/")))</span> +<span class="a">+ (uiop:copy-file f</span> +<span class="a">+ (concatenate 'string</span> +<span class="a">+ "Hack/source/Hack-"</span> +<span class="a">+ weight</span> +<span class="a">+ ".ufo/glyphs/"</span> +<span class="a">+ (pathname-name f)</span> +<span class="a">+ "."</span> +<span class="a">+ (pathname-type f)))))))</span> +<span class="a">+(defun make-it (&optional subcommand)</span> +<span class="a">+ ;; Cannot use uiop:launch-program since it is asynchronous.</span> +<span class="a">+ (uiop:run-program (if subcommand</span> +<span class="a">+ (list "make" subcommand)</span> +<span class="a">+ "make")</span> +<span class="a">+ :output *standard-output*</span> +<span class="a">+ :directory #P"Hack"</span> +<span class="a">+ :error-output *standard-output*))</span> +<span class="a">+(defun build (&rest make-commands)</span> +<span class="a">+ (dolist (m make-commands)</span> +<span class="a">+ (make-it m)))</span> +<span class="a">+</span> +<span class="a">+(defun verify (spec)</span> +<span class="a">+ "Ensure that the spec is not bogus."</span> +<span class="a">+ (let ((group (not (set-difference spec (mapcar #'car *groups*))))</span> +<span class="a">+ (exclusion (not (some #'identity</span> +<span class="a">+ (mapcar #'(lambda (ex)</span> +<span class="a">+ (<= 2 (length (intersection spec ex))))</span> +<span class="a">+ *exclusions*)))))</span> +<span class="a">+ (values (and group exclusion)</span> +<span class="a">+ (if group (if exclusion 'group-and-exclusion 'group)</span> +<span class="a">+ (if exclusion 'exclusion 'unknown)))))</span> +<span class="a">+</span> +<span class="a">+(defun show-characters ()</span> +<span class="a">+ (flet ((pprint-letters (letter-alist)</span> +<span class="a">+ (dolist (p letter-alist)</span> +<span class="a">+ (format t "~T~A~T~A~%"</span> +<span class="a">+ (string (cdr p)) (car p)))))</span> +<span class="a">+ (let ((dirs (uiop:subdirectories "glyphs")))</span> +<span class="a">+ (pprint-letters</span> +<span class="a">+ (loop</span> +<span class="a">+ for d in dirs</span> +<span class="a">+ collecting</span> +<span class="a">+ (let ((mat (car (last (pathname-directory d)))))</span> +<span class="a">+ (cons</span> +<span class="a">+ mat</span> +<span class="a">+ (code-char (read-from-string</span> +<span class="a">+ (concatenate 'string</span> +<span class="a">+ "#x"</span> +<span class="a">+ (subseq mat 1 (search "-" mat))))))))))))</span> +<span class="a">+(defun format-parser (argv)</span> +<span class="a">+ (when argv</span> +<span class="a">+ (let ((c (car argv)))</span> +<span class="a">+ (when (and (< 2 (length c))</span> +<span class="a">+ (string= "--" (subseq c 0 2)))</span> +<span class="a">+ (cons (subseq c 2) (format-parser (cdr argv)))))))</span> +<span class="a">+(defun should-help (argv)</span> +<span class="a">+ (or (null argv)</span> +<span class="a">+ (dolist (a argv)</span> +<span class="a">+ (when (or (search "-?" a)</span> +<span class="a">+ (search "-h" a)</span> +<span class="a">+ (search "help" a))</span> +<span class="a">+ (return t)))))</span> +<span class="a">+(defun should-test (argv)</span> +<span class="a">+ (string= (car argv) "test"))</span> +<span class="a">+</span> +<span class="a">+(define-symbol-macro test</span> +<span class="a">+ (progn (format t "Helping you:~%")</span> +<span class="a">+ (main "help")</span> +<span class="a">+ (format t "~%DONE. Trying TTF.")</span> +<span class="a">+ (main "--ttf")</span> +<span class="a">+ (format t "~%DONE. Trying WOFF.")</span> +<span class="a">+ (main "--woff")</span> +<span class="a">+ (format t "~%DONE. Trying WOFF2.")</span> +<span class="a">+ (main "--woff2")))</span> +<span class="a">+</span> +<span class="a">+(defun main (&rest argv)</span> +<span class="a">+ (declare (ignorable argv))</span> +<span class="a">+ (if (should-help argv)</span> +<span class="a">+ help</span> +<span class="a">+ (if (should-test argv)</span> +<span class="a">+ test</span> +<span class="a">+ (let ((formats (format-parser argv)))</span> +<span class="a">+ (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))</span> +<span class="a">+ (nthcdr (length formats) argv)))</span> +<span class="a">+ (formats (or formats "ttf woff woff2")))</span> +<span class="a">+ (if (and argv (string= "SHOW" (string-upcase (car argv))))</span> +<span class="a">+ (show-characters)</span> +<span class="a">+ (multiple-value-bind (bool name)</span> +<span class="a">+ (verify argv)</span> +<span class="a">+ (if bool</span> +<span class="a">+ (progn (remove-hints)</span> +<span class="a">+ (mapc #'put-glyphs!</span> +<span class="a">+ (mapcar #'folders argv))</span> +<span class="a">+ ;; Can't get woff2 on my system.</span> +<span class="a">+ (mapc #'build formats))</span> +<span class="a">+ (progn (format t "Invalid ~S in spec: ~{~A ~}~%"</span> +<span class="a">+ name</span> +<span class="a">+ argv))))))))))</span> +<span class="a">+</span> +<span class="a">+;;; vim: set ft=lisp lisp:</span> +diff --git a/script-bc.lisp b/script-bc.lisp +new file mode 100644 +index 0000000..cda6908 +--- /dev/null ++++ b/script-bc.lisp +<span class="h">@@ -0,0 +1,4 @@</span> +<span class="a">+(ql:quickload :alexandria)</span> +<span class="a">+(ql:quickload :uiop)</span> +<span class="a">+(load "all-fonts-bc.lisp")</span> +<span class="a">+(all-fonts::gen-all-fonts)</span></pre> +</div></body></html> diff --git a/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html b/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html new file mode 100644 index 0000000..b5e3bab --- /dev/null +++ b/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html @@ -0,0 +1,485 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0 bde80c5f - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit bde80c5f6759aab5ff6a61add0704a8f83f3f94b +Spenser Truex <truex@equwal.com> +2021-02-05 15:47:29 -0800 + +Add combinatoric script + +</pre><pre> README.md | 12 +++ + all-fonts-default.lisp | 37 +++++++ + alt-hack-new-glyphs | 1 + + generator.ros | 265 +++++++++++++++++++++++++++++++------------------ + glyphs | 2 +- + hack | 1 - + script-default.lisp | 4 + + source | 2 +- + tarflat | 16 +++ + tt-hinting | 2 +- + 10 files changed, 241 insertions(+), 101 deletions(-) +</pre><pre>diff --git a/README.md b/README.md +index 202b787..724d048 100644 +--- a/README.md ++++ b/README.md +<span class="h">@@ -1,5 +1,17 @@</span> + # Hack with an alternative zero. + +<span class="a">+Warning:</span> +<span class="a">+</span> +<span class="a">+Generating alt-hacks is confusing. Among the confusions:</span> +<span class="a">+- Installing binaries in your /home/user directory</span> +<span class="a">+- Undocumented dependencies (including the above!)</span> +<span class="a">+- alt-hacks script that I made is lazy about helping you and sucks. To use it:</span> +<span class="a">+$ sbcl</span> +<span class="a">+(ql:quickload :alexandria)</span> +<span class="a">+(ql:quickload :uiop)</span> +<span class="a">+(load "all-fonts.lisp)</span> +<span class="a">+(all-fonts::gen-all-fonts) ; spend forever generating an assload of stuff</span> +<span class="a">+</span> + [Released font downloads](https://www.equwal.com/alt-hacks.html) + + Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike +diff --git a/all-fonts-default.lisp b/all-fonts-default.lisp +new file mode 100644 +index 0000000..cc23e73 +--- /dev/null ++++ b/all-fonts-default.lisp +<span class="h">@@ -0,0 +1,37 @@</span> +<span class="a">+(defpackage :all-fonts</span> +<span class="a">+ (:use :cl)</span> +<span class="a">+ (:import-from :alexandria :map-combinations)</span> +<span class="a">+ (:import-from :uiop :run-program))</span> +<span class="a">+(in-package :all-fonts)</span> +<span class="a">+</span> +<span class="a">+(defparameter *groups*</span> +<span class="a">+ '(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi)</span> +<span class="a">+ "Things you actually want to permute together.")</span> +<span class="a">+</span> +<span class="a">+(defparameter *exclusions*</span> +<span class="a">+ '((curve round)</span> +<span class="a">+ (backslash diamond dot forwardslash))</span> +<span class="a">+ "Things which you don't want specified at the same time.")</span> +<span class="a">+</span> +<span class="a">+(defun verify (spec)</span> +<span class="a">+ "Ensure that the spec is not bogus."</span> +<span class="a">+ (let ((group (not (set-difference spec *groups*)))</span> +<span class="a">+ (exclusion (not (some #'identity</span> +<span class="a">+ (mapcar #'(lambda (ex)</span> +<span class="a">+ (<= 2 (length (intersection spec ex))))</span> +<span class="a">+ *exclusions*)))))</span> +<span class="a">+ (values (and group exclusion)</span> +<span class="a">+ (if group (if exclusion 'group-and-exclusion 'group)</span> +<span class="a">+ (if exclusion 'exclusion 'unknown)))))</span> +<span class="a">+(defun gen-all-fonts ()</span> +<span class="a">+ (loop for x from 1 to (length *groups*)</span> +<span class="a">+ do (map-combinations</span> +<span class="a">+ (lambda (f)</span> +<span class="a">+ (when (verify f)</span> +<span class="a">+ (run-program (format nil "./generator.ros --ttf --woff --woff2 ~(~{ ~A~}~)" f) :output t)</span> +<span class="a">+ ;; KLUDGE: Weird bug where everything ends up in the ttf folder</span> +<span class="a">+ (run-program (format nil "tar -vcf - Hack/build/ttf/* | xz -12 >'~(~{~A~}~).tar.xz'" f) :output t)</span> +<span class="a">+ (run-program "rm -Rf Hack/build")</span> +<span class="a">+ (run-program "mkdir Hack/build")))</span> +<span class="a">+ *groups*</span> +<span class="a">+ :length x)))</span> +diff --git a/alt-hack-new-glyphs b/alt-hack-new-glyphs +new file mode 160000 +index 0000000..4921583 +--- /dev/null ++++ b/alt-hack-new-glyphs +<span class="h">@@ -0,0 +1 @@</span> +<span class="a">+Subproject commit 4921583737a2368684eb7ce3fad4b68579a2596b</span> +diff --git a/generator.ros b/generator.ros +index 37f460d..9e6fbb5 100755 +--- a/generator.ros ++++ b/generator.ros +<span class="h">@@ -3,35 +3,19 @@</span> + #| + exec ros -Q -- $0 "$@" + |# +<span class="a">+;;; This file (c) Spenser Truex 2021</span> +<span class="a">+;;; MIT license.</span> +<span class="a">+</span> + (progn ;;init forms + (ros:ensure-asdf) +<span class="d">- #+quicklisp(ql:quickload '(:alexandria :str :uiop :let-over-lambda)</span> +<span class="d">- :silent t)</span> +<span class="d">- (asdf:load-system :utils) ;My utilities, has the COLLECT macro.</span> +<span class="d">- )</span> +<span class="a">+ #+quicklisp(ql:quickload '(:alexandria :uiop)</span> +<span class="a">+ :silent t))</span> + +<span class="a">+;;; EXAMPLE USAGE:</span> +<span class="a">+;;; cd alt-hack && ./generator.ros curve dot slabi</span> + (defpackage :ros.script.generator.3783095582 +<span class="d">- (:use :cl)</span> +<span class="d">- (:import-from</span> +<span class="d">- :alexandria</span> +<span class="d">- :flatten</span> +<span class="d">- :compose)</span> +<span class="d">- (:import-from :str :concat)</span> +<span class="d">- (:import-from :utils :collect :group :mapatoms)</span> +<span class="d">- (:import-from</span> +<span class="d">- :uiop</span> +<span class="d">- :copy-file</span> +<span class="d">- :resolve-symlinks</span> +<span class="d">- :directory-files</span> +<span class="d">- :subdirectories</span> +<span class="d">- :run-program))</span> +<span class="a">+ (:use :cl))</span> + (in-package :ros.script.generator.3783095582) +<span class="d">-;;; Uses a magic symlinks to deal with directories. Make sure they exist in your</span> +<span class="d">-;;; toplevel:</span> +<span class="d">-;;; - tt-hinting (in hack/post_processing)</span> +<span class="d">-;;; - glyphs (in alt-hack)</span> +<span class="d">-;;; - source (in hack)</span> +<span class="d">-;;; - hack</span> + (defvar *weights* '("Bold" "BoldItalic" "Italic" "Regular")) + + (defun uncomment (spec) +<span class="h">@@ -40,34 +24,80 @@ exec ros -Q -- $0 "$@"</span> + (= 1 (length item)))) + spec)) + +<span class="a">+(defparameter *helpful-groups*</span> +<span class="a">+ '(</span> +<span class="a">+ (curve "u0028-curved" "("</span> +<span class="a">+ "u0029-curved" ")")</span> +<span class="a">+ (round "u0028-rounder" "("</span> +<span class="a">+ "u0029-rounder" ")")</span> +<span class="a">+ (backslash "u0030-backslash" "0")</span> +<span class="a">+ (diamond "u0030-diamond" "0")</span> +<span class="a">+ (dot "u0030-dotted" "0")</span> +<span class="a">+ (forwardslash "u0030-forwardslash" "0")</span> +<span class="a">+ (noslab1 "u0031-noslab" "1")</span> +<span class="a">+ (flattop3 "u0033-flattop" "3")</span> +<span class="a">+ (wider "u003C-wider" "<"</span> +<span class="a">+ "u003E-wider" ">")</span> +<span class="a">+ (knife "u0066-knife" "f")</span> +<span class="a">+ (slabi "u0069-slab" "i"</span> +<span class="a">+ "u00EC-slab" "ì"</span> +<span class="a">+ "u00ED-slab" "í"</span> +<span class="a">+ "u00EE-slab" "î"</span> +<span class="a">+ "u00EF-slab" "ï"</span> +<span class="a">+ "u0129-slab" "ĩ"</span> +<span class="a">+ "u012B-slab" "ī"</span> +<span class="a">+ "u012D-slab" "ĭ"</span> +<span class="a">+ "u012F-slab" "į"</span> +<span class="a">+ "u0131-slab" "ı"</span> +<span class="a">+ "u0456-slab" "і"</span> +<span class="a">+ "u0457-slab" "ї"))</span> +<span class="a">+ "Groups with extra information for user help.")</span> +<span class="a">+</span> +<span class="a">+(defun prune (test tree)</span> +<span class="a">+ (labels ((rec (tree acc)</span> +<span class="a">+ (cond</span> +<span class="a">+ ((null tree) (nreverse acc))</span> +<span class="a">+ ((consp (car tree))</span> +<span class="a">+ (rec (cdr tree)</span> +<span class="a">+ (cons (rec (car tree) nil) acc)))</span> +<span class="a">+ (t (rec (cdr tree)</span> +<span class="a">+ (if (funcall test (car tree))</span> +<span class="a">+ acc</span> +<span class="a">+ (cons (car tree) acc)))))))</span> +<span class="a">+ (rec tree nil)))</span> +<span class="a">+</span> +<span class="a">+(defun pprint-helpful-groups ()</span> +<span class="a">+ (let ((more-helpful (prune #'(lambda (s)</span> +<span class="a">+ (and (stringp s)</span> +<span class="a">+ (< 1 (length s))))</span> +<span class="a">+ *helpful-groups*)))</span> +<span class="a">+ (loop for g in more-helpful</span> +<span class="a">+ do (format t "~A:~%" (car g))</span> +<span class="a">+ do (format t "~{~A ~}~%" (cdr g)))))</span> + (defparameter *groups* +<span class="d">- (mapcar #'uncomment</span> +<span class="d">- '((curve "u0028-curved" "("</span> +<span class="d">- "u0029-curved" ")")</span> +<span class="d">- (round "u0028-rounder" "("</span> +<span class="d">- "u0029-rounder" ")")</span> +<span class="d">- (backslash "u0030-backslash" "0")</span> +<span class="d">- (diamond "u0030-diamond" "0")</span> +<span class="d">- (dot "u0030-dotted" "0")</span> +<span class="d">- (forwardslash "u0030-forwardslash" "0")</span> +<span class="d">- (noslab1 "u0031-noslab" "1")</span> +<span class="d">- (flattop3 "u0033-flattop" "3")</span> +<span class="d">- (wider "u003C-wider" "<"</span> +<span class="d">- "u003E-wider" ">")</span> +<span class="d">- (knife "u0066-knife" "f")</span> +<span class="d">- (slabi "u0069-slab" "i"</span> +<span class="d">- "u00EC-slab" "ì"</span> +<span class="d">- "u00ED-slab" "í"</span> +<span class="d">- "u00EE-slab" "î"</span> +<span class="d">- "u00EF-slab" "ï"</span> +<span class="d">- "u0129-slab" "ĩ"</span> +<span class="d">- "u012B-slab" "ī"</span> +<span class="d">- "u012D-slab" "ĭ"</span> +<span class="d">- "u012F-slab" "į"</span> +<span class="d">- "u0131-slab" "ı"</span> +<span class="d">- "u0456-slab" "і"</span> +<span class="d">- "u0457-slab" "ї")))</span> +<span class="a">+ (mapcar #'uncomment *helpful-groups*)</span> + "Things you actually want to permute together.") +<span class="a">+(defparameter *exclusions*</span> +<span class="a">+ '((curve round)</span> +<span class="a">+ (backslash diamond dot forwardslash))</span> +<span class="a">+ "Things which you don't want specified at the same time.")</span> +<span class="a">+(defparameter *formats*</span> +<span class="a">+ '("ttf" "woff" "woff2")</span> +<span class="a">+ "Valid parameters to call as formats.")</span> +<span class="a">+</span> +<span class="a">+(define-symbol-macro help</span> +<span class="a">+ (progn (pprint-lines</span> +<span class="a">+ "generator.ros OPTIONS* {SHOW | SPEC+}")</span> +<span class="a">+ (format t "These are valid OPTIONS: ~{~A ~}~%"</span> +<span class="a">+ (mapcar #'(lambda (f) (concatenate 'string "--" f))</span> +<span class="a">+ *formats*))</span> +<span class="a">+ (pprint-lines "SPEC should be a list of:")</span> +<span class="a">+ (pprint-helpful-groups)</span> +<span class="a">+ (pprint-lines</span> +<span class="a">+ "Keep in mind that it makes no sense to include"</span> +<span class="a">+ "the same character spec twice."</span> +<span class="a">+ "SHOW just finds all available glyphs in alt-hack."</span> +<span class="a">+ "TEST runs the test functions for ttf, woff and woff2.")))</span> + + (defun find-keyword (keyword group) + (when (not (null group)) +<span class="h">@@ -79,30 +109,11 @@ exec ros -Q -- $0 "$@"</span> + (defun folders (keyword) + (cdr (find-keyword keyword *groups*))) + +<span class="d">-(defun pprint-letters (letter-alist)</span> +<span class="d">- (dolist (p letter-alist)</span> +<span class="d">- (format t "~S ~S~%"</span> +<span class="d">- (car p) (string (cdr p)))))</span> +<span class="d">-</span> +<span class="d">-(defun show-characters ()</span> +<span class="d">- (let ((dirs (subdirectories "glyphs")))</span> +<span class="d">- (pprint-letters</span> +<span class="d">- (collect (d dirs)</span> +<span class="d">- (let ((mat (car (last (pathname-directory d)))))</span> +<span class="d">- (cons mat</span> +<span class="d">- (code-char (read (make-string-input-stream</span> +<span class="d">- (concat "#x"</span> +<span class="d">- (subseq mat 1 (search "-" mat))))))))))))</span> +<span class="d">-</span> +<span class="d">-(defun help ()</span> +<span class="d">- (format t "~@{~A~%~}"</span> +<span class="d">- "generator.ros SPEC+"</span> +<span class="d">- "SPEC should be a list of:")</span> +<span class="d">- (format t "~{~T~A~%~}"</span> +<span class="d">- (remove-if #'stringp (flatten *groups*))))</span> +<span class="a">+(defun pprint-lines (&rest strings)</span> +<span class="a">+ (format t "~{~A~%~}" strings))</span> + + (defun remove-hints () +<span class="d">- (let ((files (directory-files #P"tt-hinting")))</span> +<span class="a">+ (let ((files (uiop:directory-files #P"Hack/postbuild_processing/tt-hinting")))</span> + (dolist (f files) + (with-open-file (si f :direction :input) + (with-open-file (so f :direction :output +<span class="h">@@ -115,44 +126,104 @@ exec ros -Q -- $0 "$@"</span> + (dolist (arg ufolders) + (dolist (weight *weights*) + (dolist (f (uiop:directory-files +<span class="d">- (concat "glyphs/" arg "/"</span> +<span class="d">- (string-downcase weight) "/")))</span> +<span class="d">- (copy-file f</span> +<span class="d">- (concat "hack/" "source/Hack-" weight</span> +<span class="d">- ".ufo/glyphs/"</span> +<span class="d">- (concat (pathname-name f) "."</span> +<span class="d">- (pathname-type f))))))))</span> +<span class="a">+ (concatenate 'string "glyphs/" arg "/"</span> +<span class="a">+ (string-downcase weight) "/")))</span> +<span class="a">+ (uiop:copy-file f</span> +<span class="a">+ (concatenate 'string</span> +<span class="a">+ "Hack/source/Hack-"</span> +<span class="a">+ weight</span> +<span class="a">+ ".ufo/glyphs/"</span> +<span class="a">+ (pathname-name f)</span> +<span class="a">+ "."</span> +<span class="a">+ (pathname-type f)))))))</span> + (defun make-it (&optional subcommand) + ;; Cannot use uiop:launch-program since it is asynchronous. +<span class="d">- (run-program (if subcommand</span> +<span class="a">+ (uiop:run-program (if subcommand</span> + (list "make" subcommand) + "make") + :output *standard-output* +<span class="d">- :directory (resolve-symlinks #P"hack")</span> +<span class="a">+ :directory #P"Hack"</span> + :error-output *standard-output*)) + (defun build (&rest make-commands) + (dolist (m make-commands) + (make-it m))) + + (defun verify (spec) +<span class="d">- (not (set-difference spec (mapcar #'car *groups*))))</span> +<span class="a">+ "Ensure that the spec is not bogus."</span> +<span class="a">+ (let ((group (not (set-difference spec (mapcar #'car *groups*))))</span> +<span class="a">+ (exclusion (not (some #'identity</span> +<span class="a">+ (mapcar #'(lambda (ex)</span> +<span class="a">+ (<= 2 (length (intersection spec ex))))</span> +<span class="a">+ *exclusions*)))))</span> +<span class="a">+ (values (and group exclusion)</span> +<span class="a">+ (if group (if exclusion 'group-and-exclusion 'group)</span> +<span class="a">+ (if exclusion 'exclusion 'unknown)))))</span> +<span class="a">+</span> +<span class="a">+(defun show-characters ()</span> +<span class="a">+ (flet ((pprint-letters (letter-alist)</span> +<span class="a">+ (dolist (p letter-alist)</span> +<span class="a">+ (format t "~T~A~T~A~%"</span> +<span class="a">+ (string (cdr p)) (car p)))))</span> +<span class="a">+ (let ((dirs (uiop:subdirectories "glyphs")))</span> +<span class="a">+ (pprint-letters</span> +<span class="a">+ (loop</span> +<span class="a">+ for d in dirs</span> +<span class="a">+ collecting</span> +<span class="a">+ (let ((mat (car (last (pathname-directory d)))))</span> +<span class="a">+ (cons</span> +<span class="a">+ mat</span> +<span class="a">+ (code-char (read-from-string</span> +<span class="a">+ (concatenate 'string</span> +<span class="a">+ "#x"</span> +<span class="a">+ (subseq mat 1 (search "-" mat))))))))))))</span> +<span class="a">+(defun format-parser (argv)</span> +<span class="a">+ (when argv</span> +<span class="a">+ (let ((c (car argv)))</span> +<span class="a">+ (when (and (< 2 (length c))</span> +<span class="a">+ (string= "--" (subseq c 0 2)))</span> +<span class="a">+ (cons (subseq c 2) (format-parser (cdr argv)))))))</span> +<span class="a">+(defun should-help (argv)</span> +<span class="a">+ (or (null argv)</span> +<span class="a">+ (dolist (a argv)</span> +<span class="a">+ (when (or (search "-?" a)</span> +<span class="a">+ (search "-h" a)</span> +<span class="a">+ (search "help" a))</span> +<span class="a">+ (return t)))))</span> +<span class="a">+(defun should-test (argv)</span> +<span class="a">+ (string= (car argv) "test"))</span> +<span class="a">+</span> +<span class="a">+(define-symbol-macro test</span> +<span class="a">+ (progn (format t "Helping you:~%")</span> +<span class="a">+ (main "help")</span> +<span class="a">+ (format t "~%DONE. Trying TTF.")</span> +<span class="a">+ (main "--ttf")</span> +<span class="a">+ (format t "~%DONE. Trying WOFF.")</span> +<span class="a">+ (main "--woff")</span> +<span class="a">+ (format t "~%DONE. Trying WOFF2.")</span> +<span class="a">+ (main "--woff2")))</span> + + (defun main (&rest argv) + (declare (ignorable argv)) +<span class="d">- (let ((f (first argv)))</span> +<span class="d">- (if (or (null argv)</span> +<span class="d">- (search "-?" f)</span> +<span class="d">- (search "--help" f)</span> +<span class="d">- (search "-h" f))</span> +<span class="d">- (help)</span> +<span class="d">- (let ((argv (mapcar (compose #'intern #'string-upcase) argv)))</span> +<span class="d">- (when (verify argv)</span> +<span class="d">- (remove-hints)</span> +<span class="d">- (mapc #'put-glyphs!</span> +<span class="d">- (mapcar #'folders argv))</span> +<span class="d">- ;; Can't get woff2 on my system.</span> +<span class="d">- ;; (make-it "woff2")</span> +<span class="d">- ;; (make-it)</span> +<span class="d">- (build "ttf" "woff"))))))</span> +<span class="a">+ (if (should-help argv)</span> +<span class="a">+ help</span> +<span class="a">+ (if (should-test argv)</span> +<span class="a">+ test</span> +<span class="a">+ (let ((formats (format-parser argv)))</span> +<span class="a">+ (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))</span> +<span class="a">+ (nthcdr (length formats) argv)))</span> +<span class="a">+ (formats (or formats "ttf woff woff2")))</span> +<span class="a">+ (if (and argv (string= "SHOW" (string-upcase (car argv))))</span> +<span class="a">+ (show-characters)</span> +<span class="a">+ (multiple-value-bind (bool name)</span> +<span class="a">+ (verify argv)</span> +<span class="a">+ (if bool</span> +<span class="a">+ (progn (remove-hints)</span> +<span class="a">+ (mapc #'put-glyphs!</span> +<span class="a">+ (mapcar #'folders argv))</span> +<span class="a">+ ;; Can't get woff2 on my system.</span> +<span class="a">+ (mapc #'build formats))</span> +<span class="a">+ (progn (format t "Invalid ~S in spec: ~{~A ~}~%"</span> +<span class="a">+ name</span> +<span class="a">+ argv))))))))))</span> + + ;;; vim: set ft=lisp lisp: +diff --git a/glyphs b/glyphs +index d90c0ba..5584ac7 120000 +--- a/glyphs ++++ b/glyphs +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/gh/source-foundry/alt-hack/glyphs</span> +\ No newline at end of file +<span class="a">+/home/jose/src/repos/gh/source-foundry/alt-hack/glyphs</span> +\ No newline at end of file +diff --git a/hack b/hack +deleted file mode 120000 +index 37532e5..0000000 +--- a/hack ++++ /dev/null +<span class="h">@@ -1 +0,0 @@</span> +<span class="d">-/home/jose/src/gh/source-foundry/hack</span> +\ No newline at end of file +diff --git a/script-default.lisp b/script-default.lisp +new file mode 100644 +index 0000000..938b3b8 +--- /dev/null ++++ b/script-default.lisp +<span class="h">@@ -0,0 +1,4 @@</span> +<span class="a">+(ql:quickload :alexandria)</span> +<span class="a">+(ql:quickload :uiop)</span> +<span class="a">+(load "all-fonts-default.lisp")</span> +<span class="a">+(all-fonts::gen-all-fonts)</span> +diff --git a/source b/source +index 4742210..8c1d058 120000 +--- a/source ++++ b/source +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/gh/source-foundry/hack/source</span> +\ No newline at end of file +<span class="a">+/home/jose/src/repos/gh/source-foundry/hack/source</span> +\ No newline at end of file +diff --git a/tarflat b/tarflat +new file mode 100755 +index 0000000..8baef2b +--- /dev/null ++++ b/tarflat +<span class="h">@@ -0,0 +1,16 @@</span> +<span class="a">+#!/bin/sh</span> +<span class="a">+PWD1=$(pwd)</span> +<span class="a">+flatfile () {</span> +<span class="a">+ mkdir -p out</span> +<span class="a">+ cd out || return 1</span> +<span class="a">+ tar -xf ../"$1"</span> +<span class="a">+ cd "$PWD1" || return 1</span> +<span class="a">+ cd "$PWD1"/out/Hack/build/ttf || return 1</span> +<span class="a">+ tar -cf - * | xz -12 >"$PWD1"/"$1.flat"</span> +<span class="a">+ mv "$PWD1"/"$1.flat" "$PWD1"/"$1"</span> +<span class="a">+ cd "$PWD1" || return 1</span> +<span class="a">+ rm -Rf out</span> +<span class="a">+}</span> +<span class="a">+</span> +<span class="a">+# can't use -exec on shell functions, so do this</span> +<span class="a">+find . -name '*.tar.xz' | while read -r file ; do flatfile "$(echo $file | sed 's/^\.\///')" ; done</span> +diff --git a/tt-hinting b/tt-hinting +index 405f0d0..63cc159 120000 +--- a/tt-hinting ++++ b/tt-hinting +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/gh/source-foundry/hack/postbuild_processing/tt-hinting</span> +\ No newline at end of file +<span class="a">+/home/jose/src/repos/gh/source-foundry/hack/postbuild_processing/tt-hinting</span> +\ No newline at end of file</pre> +</div></body></html> diff --git a/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html b/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html new file mode 100644 index 0000000..44046d7 --- /dev/null +++ b/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0 d56aaf01 - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit d56aaf015c47ed3118a4ec06c7493675a9d8ffb8 +Spenser Truex <truex@equwal.com> +2023-08-10 13:14:13 -0300 + +Change glyphs dir + +</pre><pre> glyphs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) +</pre><pre>diff --git a/glyphs b/glyphs +index 5584ac7..e0b60c2 120000 +--- a/glyphs ++++ b/glyphs +<span class="h">@@ -1 +1 @@</span> +<span class="d">-/home/jose/src/repos/gh/source-foundry/alt-hack/glyphs</span> +\ No newline at end of file +<span class="a">+alt-hack-new-glyphs/glyphs</span> +\ No newline at end of file</pre> +</div></body></html> diff --git a/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html b/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html new file mode 100644 index 0000000..a52aa7a --- /dev/null +++ b/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0 f109b78b - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit f109b78b9b2fd835ef21e266b019aa491847ef90 +Spenser Truex <truex@equwal.com> +2021-01-15 17:29:03 -0800 + +Add TODO + +</pre><pre> TODO | 1 + + 1 file changed, 1 insertion(+) +</pre><pre>diff --git a/TODO b/TODO +new file mode 100644 +index 0000000..597ec61 +--- /dev/null ++++ b/TODO +<span class="h">@@ -0,0 +1 @@</span> +<span class="a">+- Change these to be scripts which modify the existing layout from the keyboard rather than hand-coded modifications.</span></pre> +</div></body></html> diff --git a/git/alt-hack0/file/README.md.html b/git/alt-hack0/file/README.md.html index 684fb0b..34bcaaa 100644 --- a/git/alt-hack0/file/README.md.html +++ b/git/alt-hack0/file/README.md.html @@ -7,26 +7,38 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>README.md (781 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> # Hack with an alternative zero. +<p>README.md (1182 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> # Hack with an alternative zero. <a id="l2" href="#l2">2</a> -<a id="l3" href="#l3">3</a> [Released font downloads](https://www.equwal.com/alt-hacks.html) +<a id="l3" href="#l3">3</a> Warning: <a id="l4" href="#l4">4</a> -<a id="l5" href="#l5">5</a> Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike -<a id="l6" href="#l6">6</a> zeros with vertical strikes? Then this package is for you. Desktop (ttf) -<a id="l7" href="#l7">7</a> and web (woff) fonts included. -<a id="l8" href="#l8">8</a> -<a id="l9" href="#l9">9</a> Generated with [alt-hack](https://github.com/source-foundry/alt-hack) glyphs, -<a id="l10" href="#l10">10</a> and [the `generator.ros` Common Lisp script](https://github.com/equwal/alt-hack/tree/generator.ros). -<a id="l11" href="#l11">11</a> -<a id="l12" href="#l12">12</a> The zeros: -<a id="l13" href="#l13">13</a> [] +<a id="l5" href="#l5">5</a> Generating alt-hacks is confusing. Among the confusions: +<a id="l6" href="#l6">6</a> - Installing binaries in your /home/user directory +<a id="l7" href="#l7">7</a> - Undocumented dependencies (including the above!) +<a id="l8" href="#l8">8</a> - alt-hacks script that I made is lazy about helping you and sucks. To use it: +<a id="l9" href="#l9">9</a> $ sbcl +<a id="l10" href="#l10">10</a> (ql:quickload :alexandria) +<a id="l11" href="#l11">11</a> (ql:quickload :uiop) +<a id="l12" href="#l12">12</a> (load "all-fonts.lisp) +<a id="l13" href="#l13">13</a> (all-fonts::gen-all-fonts) ; spend forever generating an assload of stuff <a id="l14" href="#l14">14</a> -<a id="l15" href="#l15">15</a> [] +<a id="l15" href="#l15">15</a> [Released font downloads](https://www.equwal.com/alt-hacks.html) <a id="l16" href="#l16">16</a> -<a id="l17" href="#l17">17</a> The old zero: -<a id="l18" href="#l18">18</a> [] -<a id="l19" href="#l19">19</a> -<a id="l20" href="#l20">20</a> [Code (gist) to change your font in Emacs](https://gist.github.com/equwal/89b1ef5ac8d4d737cfd37f66e9ba4895). -<a id="l21" href="#l21">21</a> -<a id="l22" href="#l22">22</a> See a site using Hack with slashed zero [equwal.com](https://www.equwal.com/).</pre> +<a id="l17" href="#l17">17</a> Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike +<a id="l18" href="#l18">18</a> zeros with vertical strikes? Then this package is for you. Desktop (ttf) +<a id="l19" href="#l19">19</a> and web (woff) fonts included. +<a id="l20" href="#l20">20</a> +<a id="l21" href="#l21">21</a> Generated with [alt-hack](https://github.com/source-foundry/alt-hack) glyphs, +<a id="l22" href="#l22">22</a> and [the `generator.ros` Common Lisp script](https://github.com/equwal/alt-hack/tree/generator.ros). +<a id="l23" href="#l23">23</a> +<a id="l24" href="#l24">24</a> The zeros: +<a id="l25" href="#l25">25</a> [] +<a id="l26" href="#l26">26</a> +<a id="l27" href="#l27">27</a> [] +<a id="l28" href="#l28">28</a> +<a id="l29" href="#l29">29</a> The old zero: +<a id="l30" href="#l30">30</a> [] +<a id="l31" href="#l31">31</a> +<a id="l32" href="#l32">32</a> [Code (gist) to change your font in Emacs](https://gist.github.com/equwal/89b1ef5ac8d4d737cfd37f66e9ba4895). +<a id="l33" href="#l33">33</a> +<a id="l34" href="#l34">34</a> See a site using Hack with slashed zero [equwal.com](https://www.equwal.com/).</pre> </div></body></html> diff --git a/git/alt-hack0/file/all-fonts-bc.lisp.html b/git/alt-hack0/file/all-fonts-bc.lisp.html new file mode 100644 index 0000000..867b21f --- /dev/null +++ b/git/alt-hack0/file/all-fonts-bc.lisp.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/all-fonts-bc.lisp - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>all-fonts-bc.lisp (1592 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (defpackage :all-fonts +<a id="l2" href="#l2">2</a> (:use :cl) +<a id="l3" href="#l3">3</a> (:import-from :alexandria :map-combinations) +<a id="l4" href="#l4">4</a> (:import-from :uiop :run-program)) +<a id="l5" href="#l5">5</a> (in-package :all-fonts) +<a id="l6" href="#l6">6</a> +<a id="l7" href="#l7">7</a> (defparameter *groups* +<a id="l8" href="#l8">8</a> '(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi slabl traditional loop nogap) +<a id="l9" href="#l9">9</a> "Things you actually want to permute together.") +<a id="l10" href="#l10">10</a> +<a id="l11" href="#l11">11</a> (defparameter *exclusions* +<a id="l12" href="#l12">12</a> '((curve round) +<a id="l13" href="#l13">13</a> (backslash diamond dot forwardslash)) +<a id="l14" href="#l14">14</a> "Things which you don't want specified at the same time.") +<a id="l15" href="#l15">15</a> +<a id="l16" href="#l16">16</a> (defun verify (spec) +<a id="l17" href="#l17">17</a> "Ensure that the spec is not bogus." +<a id="l18" href="#l18">18</a> (let ((group (not (set-difference spec *groups*))) +<a id="l19" href="#l19">19</a> (exclusion (not (some #'identity +<a id="l20" href="#l20">20</a> (mapcar #'(lambda (ex) +<a id="l21" href="#l21">21</a> (<= 2 (length (intersection spec ex)))) +<a id="l22" href="#l22">22</a> *exclusions*))))) +<a id="l23" href="#l23">23</a> (values (and group exclusion) +<a id="l24" href="#l24">24</a> (if group (if exclusion 'group-and-exclusion 'group) +<a id="l25" href="#l25">25</a> (if exclusion 'exclusion 'unknown))))) +<a id="l26" href="#l26">26</a> (defun gen-all-fonts () +<a id="l27" href="#l27">27</a> (loop for x from 1 to (length *groups*) +<a id="l28" href="#l28">28</a> do (map-combinations +<a id="l29" href="#l29">29</a> (lambda (f) +<a id="l30" href="#l30">30</a> (when (verify f) +<a id="l31" href="#l31">31</a> (run-program (format nil "./generator-bc.ros --ttf --woff --woff2 ~(~{ ~A~}~)" f) :output t) +<a id="l32" href="#l32">32</a> ;; KLUDGE: Weird bug where everything ends up in the ttf folder +<a id="l33" href="#l33">33</a> (run-program (format nil "tar -vcf - Hack/build/ttf/* | xz -12 >'~(~{~A~}~).tar.xz'" f) :output t) +<a id="l34" href="#l34">34</a> (run-program "rm -Rf Hack/build") +<a id="l35" href="#l35">35</a> (run-program "mkdir Hack/build"))) +<a id="l36" href="#l36">36</a> *groups* +<a id="l37" href="#l37">37</a> :length x)))</pre> +</div></body></html> diff --git a/git/alt-hack0/file/all-fonts-default.lisp.html b/git/alt-hack0/file/all-fonts-default.lisp.html new file mode 100644 index 0000000..fa3dd6b --- /dev/null +++ b/git/alt-hack0/file/all-fonts-default.lisp.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/all-fonts-default.lisp - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>all-fonts-default.lisp (1560 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (defpackage :all-fonts +<a id="l2" href="#l2">2</a> (:use :cl) +<a id="l3" href="#l3">3</a> (:import-from :alexandria :map-combinations) +<a id="l4" href="#l4">4</a> (:import-from :uiop :run-program)) +<a id="l5" href="#l5">5</a> (in-package :all-fonts) +<a id="l6" href="#l6">6</a> +<a id="l7" href="#l7">7</a> (defparameter *groups* +<a id="l8" href="#l8">8</a> '(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi) +<a id="l9" href="#l9">9</a> "Things you actually want to permute together.") +<a id="l10" href="#l10">10</a> +<a id="l11" href="#l11">11</a> (defparameter *exclusions* +<a id="l12" href="#l12">12</a> '((curve round) +<a id="l13" href="#l13">13</a> (backslash diamond dot forwardslash)) +<a id="l14" href="#l14">14</a> "Things which you don't want specified at the same time.") +<a id="l15" href="#l15">15</a> +<a id="l16" href="#l16">16</a> (defun verify (spec) +<a id="l17" href="#l17">17</a> "Ensure that the spec is not bogus." +<a id="l18" href="#l18">18</a> (let ((group (not (set-difference spec *groups*))) +<a id="l19" href="#l19">19</a> (exclusion (not (some #'identity +<a id="l20" href="#l20">20</a> (mapcar #'(lambda (ex) +<a id="l21" href="#l21">21</a> (<= 2 (length (intersection spec ex)))) +<a id="l22" href="#l22">22</a> *exclusions*))))) +<a id="l23" href="#l23">23</a> (values (and group exclusion) +<a id="l24" href="#l24">24</a> (if group (if exclusion 'group-and-exclusion 'group) +<a id="l25" href="#l25">25</a> (if exclusion 'exclusion 'unknown))))) +<a id="l26" href="#l26">26</a> (defun gen-all-fonts () +<a id="l27" href="#l27">27</a> (loop for x from 1 to (length *groups*) +<a id="l28" href="#l28">28</a> do (map-combinations +<a id="l29" href="#l29">29</a> (lambda (f) +<a id="l30" href="#l30">30</a> (when (verify f) +<a id="l31" href="#l31">31</a> (run-program (format nil "./generator.ros --ttf --woff --woff2 ~(~{ ~A~}~)" f) :output t) +<a id="l32" href="#l32">32</a> ;; KLUDGE: Weird bug where everything ends up in the ttf folder +<a id="l33" href="#l33">33</a> (run-program (format nil "tar -vcf - Hack/build/ttf/* | xz -12 >'~(~{~A~}~).tar.xz'" f) :output t) +<a id="l34" href="#l34">34</a> (run-program "rm -Rf Hack/build") +<a id="l35" href="#l35">35</a> (run-program "mkdir Hack/build"))) +<a id="l36" href="#l36">36</a> *groups* +<a id="l37" href="#l37">37</a> :length x)))</pre> +</div></body></html> diff --git a/git/alt-hack0/file/generator-bc.ros.html b/git/alt-hack0/file/generator-bc.ros.html new file mode 100644 index 0000000..20a8fc0 --- /dev/null +++ b/git/alt-hack0/file/generator-bc.ros.html @@ -0,0 +1,253 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/generator-bc.ros - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>generator-bc.ros (8345 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh +<a id="l2" href="#l2">2</a> #|-*- mode:lisp -*-|# +<a id="l3" href="#l3">3</a> #| +<a id="l4" href="#l4">4</a> exec ros -Q -- $0 "$@" +<a id="l5" href="#l5">5</a> |# +<a id="l6" href="#l6">6</a> ;;; This file (c) Spenser Truex 2021 +<a id="l7" href="#l7">7</a> ;;; MIT license. +<a id="l8" href="#l8">8</a> +<a id="l9" href="#l9">9</a> (progn ;;init forms +<a id="l10" href="#l10">10</a> (ros:ensure-asdf) +<a id="l11" href="#l11">11</a> #+quicklisp(ql:quickload '(:alexandria :uiop) +<a id="l12" href="#l12">12</a> :silent t)) +<a id="l13" href="#l13">13</a> +<a id="l14" href="#l14">14</a> ;;; EXAMPLE USAGE: +<a id="l15" href="#l15">15</a> ;;; cd alt-hack && ./generator.ros curve dot slabi +<a id="l16" href="#l16">16</a> (defpackage :ros.script.generator.3783095582 +<a id="l17" href="#l17">17</a> (:use :cl)) +<a id="l18" href="#l18">18</a> (in-package :ros.script.generator.3783095582) +<a id="l19" href="#l19">19</a> (defvar *weights* '("Bold" "BoldItalic" "Italic" "Regular")) +<a id="l20" href="#l20">20</a> +<a id="l21" href="#l21">21</a> (defun uncomment (spec) +<a id="l22" href="#l22">22</a> (remove-if #'(lambda (item) +<a id="l23" href="#l23">23</a> (and (stringp item) +<a id="l24" href="#l24">24</a> (= 1 (length item)))) +<a id="l25" href="#l25">25</a> spec)) +<a id="l26" href="#l26">26</a> +<a id="l27" href="#l27">27</a> (defparameter *helpful-groups* +<a id="l28" href="#l28">28</a> '(;; Barry Cohen's additions +<a id="l29" href="#l29">29</a> (slabl "u006C-slab" "l" +<a id="l30" href="#l30">30</a> "u013C-slab" "ļ" +<a id="l31" href="#l31">31</a> "u013E-slab" "ľ" +<a id="l32" href="#l32">32</a> "u0142-slab" "ł" +<a id="l33" href="#l33">33</a> "u013A-slab" "ĺ" +<a id="l34" href="#l34">34</a> "u0140-slab" "ŀ") +<a id="l35" href="#l35">35</a> (traditional "u0025-traditional" "%") +<a id="l36" href="#l36">36</a> (nogap "u0026-nogap" "&") +<a id="l37" href="#l37">37</a> (loop "u0067-loop" "g" +<a id="l38" href="#l38">38</a> "u0123-loop" "ǵ" +<a id="l39" href="#l39">39</a> "u011F-loop" "ğ" +<a id="l40" href="#l40">40</a> "u01E7-loop" "ǧ" +<a id="l41" href="#l41">41</a> "u0121-loop" "ġ" +<a id="l42" href="#l42">42</a> "u011D-loop" "ĝ") +<a id="l43" href="#l43">43</a> (curve "u0028-curved" "(" +<a id="l44" href="#l44">44</a> "u0029-curved" ")") +<a id="l45" href="#l45">45</a> (round "u0028-rounder" "(" +<a id="l46" href="#l46">46</a> "u0029-rounder" ")") +<a id="l47" href="#l47">47</a> (backslash "u0030-backslash" "0") +<a id="l48" href="#l48">48</a> (diamond "u0030-diamond" "0") +<a id="l49" href="#l49">49</a> (dot "u0030-dotted" "0") +<a id="l50" href="#l50">50</a> (forwardslash "u0030-forwardslash" "0") +<a id="l51" href="#l51">51</a> (noslab1 "u0031-noslab" "1") +<a id="l52" href="#l52">52</a> (flattop3 "u0033-flattop" "3") +<a id="l53" href="#l53">53</a> (wider "u003C-wider" "<" +<a id="l54" href="#l54">54</a> "u003E-wider" ">") +<a id="l55" href="#l55">55</a> (knife "u0066-knife" "f") +<a id="l56" href="#l56">56</a> (slabi "u0069-slab" "i" +<a id="l57" href="#l57">57</a> "u00EC-slab" "ì" +<a id="l58" href="#l58">58</a> "u00ED-slab" "í" +<a id="l59" href="#l59">59</a> "u00EE-slab" "î" +<a id="l60" href="#l60">60</a> "u00EF-slab" "ï" +<a id="l61" href="#l61">61</a> "u0129-slab" "ĩ" +<a id="l62" href="#l62">62</a> "u012B-slab" "ī" +<a id="l63" href="#l63">63</a> "u012D-slab" "ĭ" +<a id="l64" href="#l64">64</a> "u012F-slab" "į" +<a id="l65" href="#l65">65</a> "u0131-slab" "ı" +<a id="l66" href="#l66">66</a> "u0456-slab" "і" +<a id="l67" href="#l67">67</a> "u0457-slab" "ї")) +<a id="l68" href="#l68">68</a> "Groups with extra information for user help.") +<a id="l69" href="#l69">69</a> +<a id="l70" href="#l70">70</a> (defun prune (test tree) +<a id="l71" href="#l71">71</a> (labels ((rec (tree acc) +<a id="l72" href="#l72">72</a> (cond +<a id="l73" href="#l73">73</a> ((null tree) (nreverse acc)) +<a id="l74" href="#l74">74</a> ((consp (car tree)) +<a id="l75" href="#l75">75</a> (rec (cdr tree) +<a id="l76" href="#l76">76</a> (cons (rec (car tree) nil) acc))) +<a id="l77" href="#l77">77</a> (t (rec (cdr tree) +<a id="l78" href="#l78">78</a> (if (funcall test (car tree)) +<a id="l79" href="#l79">79</a> acc +<a id="l80" href="#l80">80</a> (cons (car tree) acc))))))) +<a id="l81" href="#l81">81</a> (rec tree nil))) +<a id="l82" href="#l82">82</a> +<a id="l83" href="#l83">83</a> (defun pprint-helpful-groups () +<a id="l84" href="#l84">84</a> (let ((more-helpful (prune #'(lambda (s) +<a id="l85" href="#l85">85</a> (and (stringp s) +<a id="l86" href="#l86">86</a> (< 1 (length s)))) +<a id="l87" href="#l87">87</a> *helpful-groups*))) +<a id="l88" href="#l88">88</a> (loop for g in more-helpful +<a id="l89" href="#l89">89</a> do (format t "~A:~%" (car g)) +<a id="l90" href="#l90">90</a> do (format t "~{~A ~}~%" (cdr g))))) +<a id="l91" href="#l91">91</a> (defparameter *groups* +<a id="l92" href="#l92">92</a> (mapcar #'uncomment *helpful-groups*) +<a id="l93" href="#l93">93</a> "Things you actually want to permute together.") +<a id="l94" href="#l94">94</a> (defparameter *exclusions* +<a id="l95" href="#l95">95</a> '((curve round) +<a id="l96" href="#l96">96</a> (backslash diamond dot forwardslash)) +<a id="l97" href="#l97">97</a> "Things which you don't want specified at the same time.") +<a id="l98" href="#l98">98</a> (defparameter *formats* +<a id="l99" href="#l99">99</a> '("ttf" "woff" "woff2") +<a id="l100" href="#l100">100</a> "Valid parameters to call as formats.") +<a id="l101" href="#l101">101</a> +<a id="l102" href="#l102">102</a> (define-symbol-macro help +<a id="l103" href="#l103">103</a> (progn (pprint-lines +<a id="l104" href="#l104">104</a> "generator.ros OPTIONS* {SHOW | SPEC+}") +<a id="l105" href="#l105">105</a> (format t "These are valid OPTIONS: ~{~A ~}~%" +<a id="l106" href="#l106">106</a> (mapcar #'(lambda (f) (concatenate 'string "--" f)) +<a id="l107" href="#l107">107</a> *formats*)) +<a id="l108" href="#l108">108</a> (pprint-lines "SPEC should be a list of:") +<a id="l109" href="#l109">109</a> (pprint-helpful-groups) +<a id="l110" href="#l110">110</a> (pprint-lines +<a id="l111" href="#l111">111</a> "Keep in mind that it makes no sense to include" +<a id="l112" href="#l112">112</a> "the same character spec twice." +<a id="l113" href="#l113">113</a> "SHOW just finds all available glyphs in alt-hack." +<a id="l114" href="#l114">114</a> "TEST runs the test functions for ttf, woff and woff2."))) +<a id="l115" href="#l115">115</a> +<a id="l116" href="#l116">116</a> (defun find-keyword (keyword group) +<a id="l117" href="#l117">117</a> (when (not (null group)) +<a id="l118" href="#l118">118</a> (let ((c (car group))) +<a id="l119" href="#l119">119</a> (if (eql keyword (car c)) +<a id="l120" href="#l120">120</a> c +<a id="l121" href="#l121">121</a> (find-keyword keyword (cdr group)))))) +<a id="l122" href="#l122">122</a> +<a id="l123" href="#l123">123</a> (defun folders (keyword) +<a id="l124" href="#l124">124</a> (cdr (find-keyword keyword *groups*))) +<a id="l125" href="#l125">125</a> +<a id="l126" href="#l126">126</a> (defun pprint-lines (&rest strings) +<a id="l127" href="#l127">127</a> (format t "~{~A~%~}" strings)) +<a id="l128" href="#l128">128</a> +<a id="l129" href="#l129">129</a> (defun remove-hints () +<a id="l130" href="#l130">130</a> (let ((files (uiop:directory-files #P"Hack/postbuild_processing/tt-hinting"))) +<a id="l131" href="#l131">131</a> (dolist (f files) +<a id="l132" href="#l132">132</a> (with-open-file (si f :direction :input) +<a id="l133" href="#l133">133</a> (with-open-file (so f :direction :output +<a id="l134" href="#l134">134</a> :if-exists :supersede) +<a id="l135" href="#l135">135</a> (let ((line (read-line si nil nil))) +<a id="l136" href="#l136">136</a> (when (and line (char/= #\#(elt line 0))) +<a id="l137" href="#l137">137</a> (write-line (format nil "# ~S~%" line) so)))))))) +<a id="l138" href="#l138">138</a> +<a id="l139" href="#l139">139</a> (defun put-glyphs! (ufolders) +<a id="l140" href="#l140">140</a> (dolist (arg ufolders) +<a id="l141" href="#l141">141</a> (dolist (weight *weights*) +<a id="l142" href="#l142">142</a> (dolist (f (uiop:directory-files +<a id="l143" href="#l143">143</a> (concatenate 'string "glyphs/" arg "/" +<a id="l144" href="#l144">144</a> (string-downcase weight) "/"))) +<a id="l145" href="#l145">145</a> (uiop:copy-file f +<a id="l146" href="#l146">146</a> (concatenate 'string +<a id="l147" href="#l147">147</a> "Hack/source/Hack-" +<a id="l148" href="#l148">148</a> weight +<a id="l149" href="#l149">149</a> ".ufo/glyphs/" +<a id="l150" href="#l150">150</a> (pathname-name f) +<a id="l151" href="#l151">151</a> "." +<a id="l152" href="#l152">152</a> (pathname-type f))))))) +<a id="l153" href="#l153">153</a> (defun make-it (&optional subcommand) +<a id="l154" href="#l154">154</a> ;; Cannot use uiop:launch-program since it is asynchronous. +<a id="l155" href="#l155">155</a> (uiop:run-program (if subcommand +<a id="l156" href="#l156">156</a> (list "make" subcommand) +<a id="l157" href="#l157">157</a> "make") +<a id="l158" href="#l158">158</a> :output *standard-output* +<a id="l159" href="#l159">159</a> :directory #P"Hack" +<a id="l160" href="#l160">160</a> :error-output *standard-output*)) +<a id="l161" href="#l161">161</a> (defun build (&rest make-commands) +<a id="l162" href="#l162">162</a> (dolist (m make-commands) +<a id="l163" href="#l163">163</a> (make-it m))) +<a id="l164" href="#l164">164</a> +<a id="l165" href="#l165">165</a> (defun verify (spec) +<a id="l166" href="#l166">166</a> "Ensure that the spec is not bogus." +<a id="l167" href="#l167">167</a> (let ((group (not (set-difference spec (mapcar #'car *groups*)))) +<a id="l168" href="#l168">168</a> (exclusion (not (some #'identity +<a id="l169" href="#l169">169</a> (mapcar #'(lambda (ex) +<a id="l170" href="#l170">170</a> (<= 2 (length (intersection spec ex)))) +<a id="l171" href="#l171">171</a> *exclusions*))))) +<a id="l172" href="#l172">172</a> (values (and group exclusion) +<a id="l173" href="#l173">173</a> (if group (if exclusion 'group-and-exclusion 'group) +<a id="l174" href="#l174">174</a> (if exclusion 'exclusion 'unknown))))) +<a id="l175" href="#l175">175</a> +<a id="l176" href="#l176">176</a> (defun show-characters () +<a id="l177" href="#l177">177</a> (flet ((pprint-letters (letter-alist) +<a id="l178" href="#l178">178</a> (dolist (p letter-alist) +<a id="l179" href="#l179">179</a> (format t "~T~A~T~A~%" +<a id="l180" href="#l180">180</a> (string (cdr p)) (car p))))) +<a id="l181" href="#l181">181</a> (let ((dirs (uiop:subdirectories "glyphs"))) +<a id="l182" href="#l182">182</a> (pprint-letters +<a id="l183" href="#l183">183</a> (loop +<a id="l184" href="#l184">184</a> for d in dirs +<a id="l185" href="#l185">185</a> collecting +<a id="l186" href="#l186">186</a> (let ((mat (car (last (pathname-directory d))))) +<a id="l187" href="#l187">187</a> (cons +<a id="l188" href="#l188">188</a> mat +<a id="l189" href="#l189">189</a> (code-char (read-from-string +<a id="l190" href="#l190">190</a> (concatenate 'string +<a id="l191" href="#l191">191</a> "#x" +<a id="l192" href="#l192">192</a> (subseq mat 1 (search "-" mat)))))))))))) +<a id="l193" href="#l193">193</a> (defun format-parser (argv) +<a id="l194" href="#l194">194</a> (when argv +<a id="l195" href="#l195">195</a> (let ((c (car argv))) +<a id="l196" href="#l196">196</a> (when (and (< 2 (length c)) +<a id="l197" href="#l197">197</a> (string= "--" (subseq c 0 2))) +<a id="l198" href="#l198">198</a> (cons (subseq c 2) (format-parser (cdr argv))))))) +<a id="l199" href="#l199">199</a> (defun should-help (argv) +<a id="l200" href="#l200">200</a> (or (null argv) +<a id="l201" href="#l201">201</a> (dolist (a argv) +<a id="l202" href="#l202">202</a> (when (or (search "-?" a) +<a id="l203" href="#l203">203</a> (search "-h" a) +<a id="l204" href="#l204">204</a> (search "help" a)) +<a id="l205" href="#l205">205</a> (return t))))) +<a id="l206" href="#l206">206</a> (defun should-test (argv) +<a id="l207" href="#l207">207</a> (string= (car argv) "test")) +<a id="l208" href="#l208">208</a> +<a id="l209" href="#l209">209</a> (define-symbol-macro test +<a id="l210" href="#l210">210</a> (progn (format t "Helping you:~%") +<a id="l211" href="#l211">211</a> (main "help") +<a id="l212" href="#l212">212</a> (format t "~%DONE. Trying TTF.") +<a id="l213" href="#l213">213</a> (main "--ttf") +<a id="l214" href="#l214">214</a> (format t "~%DONE. Trying WOFF.") +<a id="l215" href="#l215">215</a> (main "--woff") +<a id="l216" href="#l216">216</a> (format t "~%DONE. Trying WOFF2.") +<a id="l217" href="#l217">217</a> (main "--woff2"))) +<a id="l218" href="#l218">218</a> +<a id="l219" href="#l219">219</a> (defun main (&rest argv) +<a id="l220" href="#l220">220</a> (declare (ignorable argv)) +<a id="l221" href="#l221">221</a> (if (should-help argv) +<a id="l222" href="#l222">222</a> help +<a id="l223" href="#l223">223</a> (if (should-test argv) +<a id="l224" href="#l224">224</a> test +<a id="l225" href="#l225">225</a> (let ((formats (format-parser argv))) +<a id="l226" href="#l226">226</a> (let ((argv (mapcar (lambda (g) (intern (string-upcase g))) +<a id="l227" href="#l227">227</a> (nthcdr (length formats) argv))) +<a id="l228" href="#l228">228</a> (formats (or formats "ttf woff woff2"))) +<a id="l229" href="#l229">229</a> (if (and argv (string= "SHOW" (string-upcase (car argv)))) +<a id="l230" href="#l230">230</a> (show-characters) +<a id="l231" href="#l231">231</a> (multiple-value-bind (bool name) +<a id="l232" href="#l232">232</a> (verify argv) +<a id="l233" href="#l233">233</a> (if bool +<a id="l234" href="#l234">234</a> (progn (remove-hints) +<a id="l235" href="#l235">235</a> (mapc #'put-glyphs! +<a id="l236" href="#l236">236</a> (mapcar #'folders argv)) +<a id="l237" href="#l237">237</a> ;; Can't get woff2 on my system. +<a id="l238" href="#l238">238</a> (mapc #'build formats)) +<a id="l239" href="#l239">239</a> (progn (format t "Invalid ~S in spec: ~{~A ~}~%" +<a id="l240" href="#l240">240</a> name +<a id="l241" href="#l241">241</a> argv)))))))))) +<a id="l242" href="#l242">242</a> +<a id="l243" href="#l243">243</a> ;;; vim: set ft=lisp lisp:</pre> +</div></body></html> diff --git a/git/alt-hack0/file/generator.ros.html b/git/alt-hack0/file/generator.ros.html index 12f1ace..8865a19 100644 --- a/git/alt-hack0/file/generator.ros.html +++ b/git/alt-hack0/file/generator.ros.html @@ -7,162 +7,233 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>generator.ros (4784 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh +<p>generator.ros (7905 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh <a id="l2" href="#l2">2</a> #|-*- mode:lisp -*-|# <a id="l3" href="#l3">3</a> #| <a id="l4" href="#l4">4</a> exec ros -Q -- $0 "$@" <a id="l5" href="#l5">5</a> |# -<a id="l6" href="#l6">6</a> (progn ;;init forms -<a id="l7" href="#l7">7</a> (ros:ensure-asdf) -<a id="l8" href="#l8">8</a> #+quicklisp(ql:quickload '(:alexandria :str :uiop :let-over-lambda) -<a id="l9" href="#l9">9</a> :silent t) -<a id="l10" href="#l10">10</a> (asdf:load-system :utils) ;My utilities, has the COLLECT macro. -<a id="l11" href="#l11">11</a> ) -<a id="l12" href="#l12">12</a> -<a id="l13" href="#l13">13</a> (defpackage :ros.script.generator.3783095582 -<a id="l14" href="#l14">14</a> (:use :cl) -<a id="l15" href="#l15">15</a> (:import-from -<a id="l16" href="#l16">16</a> :alexandria -<a id="l17" href="#l17">17</a> :flatten -<a id="l18" href="#l18">18</a> :compose) -<a id="l19" href="#l19">19</a> (:import-from :str :concat) -<a id="l20" href="#l20">20</a> (:import-from :utils :collect :group :mapatoms) -<a id="l21" href="#l21">21</a> (:import-from -<a id="l22" href="#l22">22</a> :uiop -<a id="l23" href="#l23">23</a> :copy-file -<a id="l24" href="#l24">24</a> :resolve-symlinks -<a id="l25" href="#l25">25</a> :directory-files -<a id="l26" href="#l26">26</a> :subdirectories -<a id="l27" href="#l27">27</a> :run-program)) -<a id="l28" href="#l28">28</a> (in-package :ros.script.generator.3783095582) -<a id="l29" href="#l29">29</a> ;;; Uses a magic symlinks to deal with directories. Make sure they exist in your -<a id="l30" href="#l30">30</a> ;;; toplevel: -<a id="l31" href="#l31">31</a> ;;; - tt-hinting (in hack/post_processing) -<a id="l32" href="#l32">32</a> ;;; - glyphs (in alt-hack) -<a id="l33" href="#l33">33</a> ;;; - source (in hack) -<a id="l34" href="#l34">34</a> ;;; - hack -<a id="l35" href="#l35">35</a> (defvar *weights* '("Bold" "BoldItalic" "Italic" "Regular")) -<a id="l36" href="#l36">36</a> -<a id="l37" href="#l37">37</a> (defun uncomment (spec) -<a id="l38" href="#l38">38</a> (remove-if #'(lambda (item) -<a id="l39" href="#l39">39</a> (and (stringp item) -<a id="l40" href="#l40">40</a> (= 1 (length item)))) -<a id="l41" href="#l41">41</a> spec)) -<a id="l42" href="#l42">42</a> -<a id="l43" href="#l43">43</a> (defparameter *groups* -<a id="l44" href="#l44">44</a> (mapcar #'uncomment -<a id="l45" href="#l45">45</a> '((curve "u0028-curved" "(" -<a id="l46" href="#l46">46</a> "u0029-curved" ")") -<a id="l47" href="#l47">47</a> (round "u0028-rounder" "(" -<a id="l48" href="#l48">48</a> "u0029-rounder" ")") -<a id="l49" href="#l49">49</a> (backslash "u0030-backslash" "0") -<a id="l50" href="#l50">50</a> (diamond "u0030-diamond" "0") -<a id="l51" href="#l51">51</a> (dot "u0030-dotted" "0") -<a id="l52" href="#l52">52</a> (forwardslash "u0030-forwardslash" "0") -<a id="l53" href="#l53">53</a> (noslab1 "u0031-noslab" "1") -<a id="l54" href="#l54">54</a> (flattop3 "u0033-flattop" "3") -<a id="l55" href="#l55">55</a> (wider "u003C-wider" "<" -<a id="l56" href="#l56">56</a> "u003E-wider" ">") -<a id="l57" href="#l57">57</a> (knife "u0066-knife" "f") -<a id="l58" href="#l58">58</a> (slabi "u0069-slab" "i" -<a id="l59" href="#l59">59</a> "u00EC-slab" "ì" -<a id="l60" href="#l60">60</a> "u00ED-slab" "í" -<a id="l61" href="#l61">61</a> "u00EE-slab" "î" -<a id="l62" href="#l62">62</a> "u00EF-slab" "ï" -<a id="l63" href="#l63">63</a> "u0129-slab" "ĩ" -<a id="l64" href="#l64">64</a> "u012B-slab" "ī" -<a id="l65" href="#l65">65</a> "u012D-slab" "ĭ" -<a id="l66" href="#l66">66</a> "u012F-slab" "į" -<a id="l67" href="#l67">67</a> "u0131-slab" "ı" -<a id="l68" href="#l68">68</a> "u0456-slab" "і" -<a id="l69" href="#l69">69</a> "u0457-slab" "ї"))) -<a id="l70" href="#l70">70</a> "Things you actually want to permute together.") -<a id="l71" href="#l71">71</a> -<a id="l72" href="#l72">72</a> (defun find-keyword (keyword group) -<a id="l73" href="#l73">73</a> (when (not (null group)) -<a id="l74" href="#l74">74</a> (let ((c (car group))) -<a id="l75" href="#l75">75</a> (if (eql keyword (car c)) -<a id="l76" href="#l76">76</a> c -<a id="l77" href="#l77">77</a> (find-keyword keyword (cdr group)))))) -<a id="l78" href="#l78">78</a> -<a id="l79" href="#l79">79</a> (defun folders (keyword) -<a id="l80" href="#l80">80</a> (cdr (find-keyword keyword *groups*))) -<a id="l81" href="#l81">81</a> -<a id="l82" href="#l82">82</a> (defun pprint-letters (letter-alist) -<a id="l83" href="#l83">83</a> (dolist (p letter-alist) -<a id="l84" href="#l84">84</a> (format t "~S ~S~%" -<a id="l85" href="#l85">85</a> (car p) (string (cdr p))))) -<a id="l86" href="#l86">86</a> -<a id="l87" href="#l87">87</a> (defun show-characters () -<a id="l88" href="#l88">88</a> (let ((dirs (subdirectories "glyphs"))) -<a id="l89" href="#l89">89</a> (pprint-letters -<a id="l90" href="#l90">90</a> (collect (d dirs) -<a id="l91" href="#l91">91</a> (let ((mat (car (last (pathname-directory d))))) -<a id="l92" href="#l92">92</a> (cons mat -<a id="l93" href="#l93">93</a> (code-char (read (make-string-input-stream -<a id="l94" href="#l94">94</a> (concat "#x" -<a id="l95" href="#l95">95</a> (subseq mat 1 (search "-" mat)))))))))))) -<a id="l96" href="#l96">96</a> -<a id="l97" href="#l97">97</a> (defun help () -<a id="l98" href="#l98">98</a> (format t "~@{~A~%~}" -<a id="l99" href="#l99">99</a> "generator.ros SPEC+" -<a id="l100" href="#l100">100</a> "SPEC should be a list of:") -<a id="l101" href="#l101">101</a> (format t "~{~T~A~%~}" -<a id="l102" href="#l102">102</a> (remove-if #'stringp (flatten *groups*)))) -<a id="l103" href="#l103">103</a> -<a id="l104" href="#l104">104</a> (defun remove-hints () -<a id="l105" href="#l105">105</a> (let ((files (directory-files #P"tt-hinting"))) -<a id="l106" href="#l106">106</a> (dolist (f files) -<a id="l107" href="#l107">107</a> (with-open-file (si f :direction :input) -<a id="l108" href="#l108">108</a> (with-open-file (so f :direction :output -<a id="l109" href="#l109">109</a> :if-exists :supersede) -<a id="l110" href="#l110">110</a> (let ((line (read-line si nil nil))) -<a id="l111" href="#l111">111</a> (when (and line (char/= #\#(elt line 0))) -<a id="l112" href="#l112">112</a> (write-line (format nil "# ~S~%" line) so)))))))) -<a id="l113" href="#l113">113</a> -<a id="l114" href="#l114">114</a> (defun put-glyphs! (ufolders) -<a id="l115" href="#l115">115</a> (dolist (arg ufolders) -<a id="l116" href="#l116">116</a> (dolist (weight *weights*) -<a id="l117" href="#l117">117</a> (dolist (f (uiop:directory-files -<a id="l118" href="#l118">118</a> (concat "glyphs/" arg "/" -<a id="l119" href="#l119">119</a> (string-downcase weight) "/"))) -<a id="l120" href="#l120">120</a> (copy-file f -<a id="l121" href="#l121">121</a> (concat "hack/" "source/Hack-" weight -<a id="l122" href="#l122">122</a> ".ufo/glyphs/" -<a id="l123" href="#l123">123</a> (concat (pathname-name f) "." -<a id="l124" href="#l124">124</a> (pathname-type f)))))))) -<a id="l125" href="#l125">125</a> (defun make-it (&optional subcommand) -<a id="l126" href="#l126">126</a> ;; Cannot use uiop:launch-program since it is asynchronous. -<a id="l127" href="#l127">127</a> (run-program (if subcommand -<a id="l128" href="#l128">128</a> (list "make" subcommand) -<a id="l129" href="#l129">129</a> "make") -<a id="l130" href="#l130">130</a> :output *standard-output* -<a id="l131" href="#l131">131</a> :directory (resolve-symlinks #P"hack") -<a id="l132" href="#l132">132</a> :error-output *standard-output*)) -<a id="l133" href="#l133">133</a> (defun build (&rest make-commands) -<a id="l134" href="#l134">134</a> (dolist (m make-commands) -<a id="l135" href="#l135">135</a> (make-it m))) -<a id="l136" href="#l136">136</a> -<a id="l137" href="#l137">137</a> (defun verify (spec) -<a id="l138" href="#l138">138</a> (not (set-difference spec (mapcar #'car *groups*)))) -<a id="l139" href="#l139">139</a> -<a id="l140" href="#l140">140</a> (defun main (&rest argv) -<a id="l141" href="#l141">141</a> (declare (ignorable argv)) -<a id="l142" href="#l142">142</a> (let ((f (first argv))) -<a id="l143" href="#l143">143</a> (if (or (null argv) -<a id="l144" href="#l144">144</a> (search "-?" f) -<a id="l145" href="#l145">145</a> (search "--help" f) -<a id="l146" href="#l146">146</a> (search "-h" f)) -<a id="l147" href="#l147">147</a> (help) -<a id="l148" href="#l148">148</a> (let ((argv (mapcar (compose #'intern #'string-upcase) argv))) -<a id="l149" href="#l149">149</a> (when (verify argv) -<a id="l150" href="#l150">150</a> (remove-hints) -<a id="l151" href="#l151">151</a> (mapc #'put-glyphs! -<a id="l152" href="#l152">152</a> (mapcar #'folders argv)) -<a id="l153" href="#l153">153</a> ;; Can't get woff2 on my system. -<a id="l154" href="#l154">154</a> ;; (make-it "woff2") -<a id="l155" href="#l155">155</a> ;; (make-it) -<a id="l156" href="#l156">156</a> (build "ttf" "woff")))))) -<a id="l157" href="#l157">157</a> -<a id="l158" href="#l158">158</a> ;;; vim: set ft=lisp lisp:</pre> +<a id="l6" href="#l6">6</a> ;;; This file (c) Spenser Truex 2021 +<a id="l7" href="#l7">7</a> ;;; MIT license. +<a id="l8" href="#l8">8</a> +<a id="l9" href="#l9">9</a> (progn ;;init forms +<a id="l10" href="#l10">10</a> (ros:ensure-asdf) +<a id="l11" href="#l11">11</a> #+quicklisp(ql:quickload '(:alexandria :uiop) +<a id="l12" href="#l12">12</a> :silent t)) +<a id="l13" href="#l13">13</a> +<a id="l14" href="#l14">14</a> ;;; EXAMPLE USAGE: +<a id="l15" href="#l15">15</a> ;;; cd alt-hack && ./generator.ros curve dot slabi +<a id="l16" href="#l16">16</a> (defpackage :ros.script.generator.3783095582 +<a id="l17" href="#l17">17</a> (:use :cl)) +<a id="l18" href="#l18">18</a> (in-package :ros.script.generator.3783095582) +<a id="l19" href="#l19">19</a> (defvar *weights* '("Bold" "BoldItalic" "Italic" "Regular")) +<a id="l20" href="#l20">20</a> +<a id="l21" href="#l21">21</a> (defun uncomment (spec) +<a id="l22" href="#l22">22</a> (remove-if #'(lambda (item) +<a id="l23" href="#l23">23</a> (and (stringp item) +<a id="l24" href="#l24">24</a> (= 1 (length item)))) +<a id="l25" href="#l25">25</a> spec)) +<a id="l26" href="#l26">26</a> +<a id="l27" href="#l27">27</a> (defparameter *helpful-groups* +<a id="l28" href="#l28">28</a> '( +<a id="l29" href="#l29">29</a> (curve "u0028-curved" "(" +<a id="l30" href="#l30">30</a> "u0029-curved" ")") +<a id="l31" href="#l31">31</a> (round "u0028-rounder" "(" +<a id="l32" href="#l32">32</a> "u0029-rounder" ")") +<a id="l33" href="#l33">33</a> (backslash "u0030-backslash" "0") +<a id="l34" href="#l34">34</a> (diamond "u0030-diamond" "0") +<a id="l35" href="#l35">35</a> (dot "u0030-dotted" "0") +<a id="l36" href="#l36">36</a> (forwardslash "u0030-forwardslash" "0") +<a id="l37" href="#l37">37</a> (noslab1 "u0031-noslab" "1") +<a id="l38" href="#l38">38</a> (flattop3 "u0033-flattop" "3") +<a id="l39" href="#l39">39</a> (wider "u003C-wider" "<" +<a id="l40" href="#l40">40</a> "u003E-wider" ">") +<a id="l41" href="#l41">41</a> (knife "u0066-knife" "f") +<a id="l42" href="#l42">42</a> (slabi "u0069-slab" "i" +<a id="l43" href="#l43">43</a> "u00EC-slab" "ì" +<a id="l44" href="#l44">44</a> "u00ED-slab" "í" +<a id="l45" href="#l45">45</a> "u00EE-slab" "î" +<a id="l46" href="#l46">46</a> "u00EF-slab" "ï" +<a id="l47" href="#l47">47</a> "u0129-slab" "ĩ" +<a id="l48" href="#l48">48</a> "u012B-slab" "ī" +<a id="l49" href="#l49">49</a> "u012D-slab" "ĭ" +<a id="l50" href="#l50">50</a> "u012F-slab" "į" +<a id="l51" href="#l51">51</a> "u0131-slab" "ı" +<a id="l52" href="#l52">52</a> "u0456-slab" "і" +<a id="l53" href="#l53">53</a> "u0457-slab" "ї")) +<a id="l54" href="#l54">54</a> "Groups with extra information for user help.") +<a id="l55" href="#l55">55</a> +<a id="l56" href="#l56">56</a> (defun prune (test tree) +<a id="l57" href="#l57">57</a> (labels ((rec (tree acc) +<a id="l58" href="#l58">58</a> (cond +<a id="l59" href="#l59">59</a> ((null tree) (nreverse acc)) +<a id="l60" href="#l60">60</a> ((consp (car tree)) +<a id="l61" href="#l61">61</a> (rec (cdr tree) +<a id="l62" href="#l62">62</a> (cons (rec (car tree) nil) acc))) +<a id="l63" href="#l63">63</a> (t (rec (cdr tree) +<a id="l64" href="#l64">64</a> (if (funcall test (car tree)) +<a id="l65" href="#l65">65</a> acc +<a id="l66" href="#l66">66</a> (cons (car tree) acc))))))) +<a id="l67" href="#l67">67</a> (rec tree nil))) +<a id="l68" href="#l68">68</a> +<a id="l69" href="#l69">69</a> (defun pprint-helpful-groups () +<a id="l70" href="#l70">70</a> (let ((more-helpful (prune #'(lambda (s) +<a id="l71" href="#l71">71</a> (and (stringp s) +<a id="l72" href="#l72">72</a> (< 1 (length s)))) +<a id="l73" href="#l73">73</a> *helpful-groups*))) +<a id="l74" href="#l74">74</a> (loop for g in more-helpful +<a id="l75" href="#l75">75</a> do (format t "~A:~%" (car g)) +<a id="l76" href="#l76">76</a> do (format t "~{~A ~}~%" (cdr g))))) +<a id="l77" href="#l77">77</a> (defparameter *groups* +<a id="l78" href="#l78">78</a> (mapcar #'uncomment *helpful-groups*) +<a id="l79" href="#l79">79</a> "Things you actually want to permute together.") +<a id="l80" href="#l80">80</a> (defparameter *exclusions* +<a id="l81" href="#l81">81</a> '((curve round) +<a id="l82" href="#l82">82</a> (backslash diamond dot forwardslash)) +<a id="l83" href="#l83">83</a> "Things which you don't want specified at the same time.") +<a id="l84" href="#l84">84</a> (defparameter *formats* +<a id="l85" href="#l85">85</a> '("ttf" "woff" "woff2") +<a id="l86" href="#l86">86</a> "Valid parameters to call as formats.") +<a id="l87" href="#l87">87</a> +<a id="l88" href="#l88">88</a> (define-symbol-macro help +<a id="l89" href="#l89">89</a> (progn (pprint-lines +<a id="l90" href="#l90">90</a> "generator.ros OPTIONS* {SHOW | SPEC+}") +<a id="l91" href="#l91">91</a> (format t "These are valid OPTIONS: ~{~A ~}~%" +<a id="l92" href="#l92">92</a> (mapcar #'(lambda (f) (concatenate 'string "--" f)) +<a id="l93" href="#l93">93</a> *formats*)) +<a id="l94" href="#l94">94</a> (pprint-lines "SPEC should be a list of:") +<a id="l95" href="#l95">95</a> (pprint-helpful-groups) +<a id="l96" href="#l96">96</a> (pprint-lines +<a id="l97" href="#l97">97</a> "Keep in mind that it makes no sense to include" +<a id="l98" href="#l98">98</a> "the same character spec twice." +<a id="l99" href="#l99">99</a> "SHOW just finds all available glyphs in alt-hack." +<a id="l100" href="#l100">100</a> "TEST runs the test functions for ttf, woff and woff2."))) +<a id="l101" href="#l101">101</a> +<a id="l102" href="#l102">102</a> (defun find-keyword (keyword group) +<a id="l103" href="#l103">103</a> (when (not (null group)) +<a id="l104" href="#l104">104</a> (let ((c (car group))) +<a id="l105" href="#l105">105</a> (if (eql keyword (car c)) +<a id="l106" href="#l106">106</a> c +<a id="l107" href="#l107">107</a> (find-keyword keyword (cdr group)))))) +<a id="l108" href="#l108">108</a> +<a id="l109" href="#l109">109</a> (defun folders (keyword) +<a id="l110" href="#l110">110</a> (cdr (find-keyword keyword *groups*))) +<a id="l111" href="#l111">111</a> +<a id="l112" href="#l112">112</a> (defun pprint-lines (&rest strings) +<a id="l113" href="#l113">113</a> (format t "~{~A~%~}" strings)) +<a id="l114" href="#l114">114</a> +<a id="l115" href="#l115">115</a> (defun remove-hints () +<a id="l116" href="#l116">116</a> (let ((files (uiop:directory-files #P"Hack/postbuild_processing/tt-hinting"))) +<a id="l117" href="#l117">117</a> (dolist (f files) +<a id="l118" href="#l118">118</a> (with-open-file (si f :direction :input) +<a id="l119" href="#l119">119</a> (with-open-file (so f :direction :output +<a id="l120" href="#l120">120</a> :if-exists :supersede) +<a id="l121" href="#l121">121</a> (let ((line (read-line si nil nil))) +<a id="l122" href="#l122">122</a> (when (and line (char/= #\#(elt line 0))) +<a id="l123" href="#l123">123</a> (write-line (format nil "# ~S~%" line) so)))))))) +<a id="l124" href="#l124">124</a> +<a id="l125" href="#l125">125</a> (defun put-glyphs! (ufolders) +<a id="l126" href="#l126">126</a> (dolist (arg ufolders) +<a id="l127" href="#l127">127</a> (dolist (weight *weights*) +<a id="l128" href="#l128">128</a> (dolist (f (uiop:directory-files +<a id="l129" href="#l129">129</a> (concatenate 'string "glyphs/" arg "/" +<a id="l130" href="#l130">130</a> (string-downcase weight) "/"))) +<a id="l131" href="#l131">131</a> (uiop:copy-file f +<a id="l132" href="#l132">132</a> (concatenate 'string +<a id="l133" href="#l133">133</a> "Hack/source/Hack-" +<a id="l134" href="#l134">134</a> weight +<a id="l135" href="#l135">135</a> ".ufo/glyphs/" +<a id="l136" href="#l136">136</a> (pathname-name f) +<a id="l137" href="#l137">137</a> "." +<a id="l138" href="#l138">138</a> (pathname-type f))))))) +<a id="l139" href="#l139">139</a> (defun make-it (&optional subcommand) +<a id="l140" href="#l140">140</a> ;; Cannot use uiop:launch-program since it is asynchronous. +<a id="l141" href="#l141">141</a> (uiop:run-program (if subcommand +<a id="l142" href="#l142">142</a> (list "make" subcommand) +<a id="l143" href="#l143">143</a> "make") +<a id="l144" href="#l144">144</a> :output *standard-output* +<a id="l145" href="#l145">145</a> :directory #P"Hack" +<a id="l146" href="#l146">146</a> :error-output *standard-output*)) +<a id="l147" href="#l147">147</a> (defun build (&rest make-commands) +<a id="l148" href="#l148">148</a> (dolist (m make-commands) +<a id="l149" href="#l149">149</a> (make-it m))) +<a id="l150" href="#l150">150</a> +<a id="l151" href="#l151">151</a> (defun verify (spec) +<a id="l152" href="#l152">152</a> "Ensure that the spec is not bogus." +<a id="l153" href="#l153">153</a> (let ((group (not (set-difference spec (mapcar #'car *groups*)))) +<a id="l154" href="#l154">154</a> (exclusion (not (some #'identity +<a id="l155" href="#l155">155</a> (mapcar #'(lambda (ex) +<a id="l156" href="#l156">156</a> (<= 2 (length (intersection spec ex)))) +<a id="l157" href="#l157">157</a> *exclusions*))))) +<a id="l158" href="#l158">158</a> (values (and group exclusion) +<a id="l159" href="#l159">159</a> (if group (if exclusion 'group-and-exclusion 'group) +<a id="l160" href="#l160">160</a> (if exclusion 'exclusion 'unknown))))) +<a id="l161" href="#l161">161</a> +<a id="l162" href="#l162">162</a> (defun show-characters () +<a id="l163" href="#l163">163</a> (flet ((pprint-letters (letter-alist) +<a id="l164" href="#l164">164</a> (dolist (p letter-alist) +<a id="l165" href="#l165">165</a> (format t "~T~A~T~A~%" +<a id="l166" href="#l166">166</a> (string (cdr p)) (car p))))) +<a id="l167" href="#l167">167</a> (let ((dirs (uiop:subdirectories "glyphs"))) +<a id="l168" href="#l168">168</a> (pprint-letters +<a id="l169" href="#l169">169</a> (loop +<a id="l170" href="#l170">170</a> for d in dirs +<a id="l171" href="#l171">171</a> collecting +<a id="l172" href="#l172">172</a> (let ((mat (car (last (pathname-directory d))))) +<a id="l173" href="#l173">173</a> (cons +<a id="l174" href="#l174">174</a> mat +<a id="l175" href="#l175">175</a> (code-char (read-from-string +<a id="l176" href="#l176">176</a> (concatenate 'string +<a id="l177" href="#l177">177</a> "#x" +<a id="l178" href="#l178">178</a> (subseq mat 1 (search "-" mat)))))))))))) +<a id="l179" href="#l179">179</a> (defun format-parser (argv) +<a id="l180" href="#l180">180</a> (when argv +<a id="l181" href="#l181">181</a> (let ((c (car argv))) +<a id="l182" href="#l182">182</a> (when (and (< 2 (length c)) +<a id="l183" href="#l183">183</a> (string= "--" (subseq c 0 2))) +<a id="l184" href="#l184">184</a> (cons (subseq c 2) (format-parser (cdr argv))))))) +<a id="l185" href="#l185">185</a> (defun should-help (argv) +<a id="l186" href="#l186">186</a> (or (null argv) +<a id="l187" href="#l187">187</a> (dolist (a argv) +<a id="l188" href="#l188">188</a> (when (or (search "-?" a) +<a id="l189" href="#l189">189</a> (search "-h" a) +<a id="l190" href="#l190">190</a> (search "help" a)) +<a id="l191" href="#l191">191</a> (return t))))) +<a id="l192" href="#l192">192</a> (defun should-test (argv) +<a id="l193" href="#l193">193</a> (string= (car argv) "test")) +<a id="l194" href="#l194">194</a> +<a id="l195" href="#l195">195</a> (define-symbol-macro test +<a id="l196" href="#l196">196</a> (progn (format t "Helping you:~%") +<a id="l197" href="#l197">197</a> (main "help") +<a id="l198" href="#l198">198</a> (format t "~%DONE. Trying TTF.") +<a id="l199" href="#l199">199</a> (main "--ttf") +<a id="l200" href="#l200">200</a> (format t "~%DONE. Trying WOFF.") +<a id="l201" href="#l201">201</a> (main "--woff") +<a id="l202" href="#l202">202</a> (format t "~%DONE. Trying WOFF2.") +<a id="l203" href="#l203">203</a> (main "--woff2"))) +<a id="l204" href="#l204">204</a> +<a id="l205" href="#l205">205</a> (defun main (&rest argv) +<a id="l206" href="#l206">206</a> (declare (ignorable argv)) +<a id="l207" href="#l207">207</a> (if (should-help argv) +<a id="l208" href="#l208">208</a> help +<a id="l209" href="#l209">209</a> (if (should-test argv) +<a id="l210" href="#l210">210</a> test +<a id="l211" href="#l211">211</a> (let ((formats (format-parser argv))) +<a id="l212" href="#l212">212</a> (let ((argv (mapcar (lambda (g) (intern (string-upcase g))) +<a id="l213" href="#l213">213</a> (nthcdr (length formats) argv))) +<a id="l214" href="#l214">214</a> (formats (or formats "ttf woff woff2"))) +<a id="l215" href="#l215">215</a> (if (and argv (string= "SHOW" (string-upcase (car argv)))) +<a id="l216" href="#l216">216</a> (show-characters) +<a id="l217" href="#l217">217</a> (multiple-value-bind (bool name) +<a id="l218" href="#l218">218</a> (verify argv) +<a id="l219" href="#l219">219</a> (if bool +<a id="l220" href="#l220">220</a> (progn (remove-hints) +<a id="l221" href="#l221">221</a> (mapc #'put-glyphs! +<a id="l222" href="#l222">222</a> (mapcar #'folders argv)) +<a id="l223" href="#l223">223</a> ;; Can't get woff2 on my system. +<a id="l224" href="#l224">224</a> (mapc #'build formats)) +<a id="l225" href="#l225">225</a> (progn (format t "Invalid ~S in spec: ~{~A ~}~%" +<a id="l226" href="#l226">226</a> name +<a id="l227" href="#l227">227</a> argv)))))))))) +<a id="l228" href="#l228">228</a> +<a id="l229" href="#l229">229</a> ;;; vim: set ft=lisp lisp:</pre> </div></body></html> diff --git a/git/alt-hack0/file/glyphs.html b/git/alt-hack0/file/glyphs.html index 119bc7e..90b0bdf 100644 --- a/git/alt-hack0/file/glyphs.html +++ b/git/alt-hack0/file/glyphs.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>glyphs (57 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/alt-hack/glyphs/</pre> +<p>glyphs (26 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> alt-hack-new-glyphs/glyphs</pre> </div></body></html> diff --git a/git/alt-hack0/file/hack.html b/git/alt-hack0/file/hack.html index 9261512..58fddbe 100644 --- a/git/alt-hack0/file/hack.html +++ b/git/alt-hack0/file/hack.html @@ -1,11 +1,11 @@ <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>alt-hack0/hack - Recently Written</title> +<title>alt-hack0/Hack - Recently Written</title> <link rel="stylesheet" href="../../stagit.css" /> </head><body> <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>hack (45 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack</pre> +<p>Hack (43 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack</pre> </div></body></html> diff --git a/git/alt-hack0/file/script-bc.lisp.html b/git/alt-hack0/file/script-bc.lisp.html new file mode 100644 index 0000000..b0c3ec9 --- /dev/null +++ b/git/alt-hack0/file/script-bc.lisp.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/script-bc.lisp - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>script-bc.lisp (102 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (ql:quickload :alexandria) +<a id="l2" href="#l2">2</a> (ql:quickload :uiop) +<a id="l3" href="#l3">3</a> (load "all-fonts-bc.lisp") +<a id="l4" href="#l4">4</a> (all-fonts::gen-all-fonts)</pre> +</div></body></html> diff --git a/git/alt-hack0/file/script-default.lisp.html b/git/alt-hack0/file/script-default.lisp.html new file mode 100644 index 0000000..6fe04b1 --- /dev/null +++ b/git/alt-hack0/file/script-default.lisp.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/script-default.lisp - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>script-default.lisp (107 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (ql:quickload :alexandria) +<a id="l2" href="#l2">2</a> (ql:quickload :uiop) +<a id="l3" href="#l3">3</a> (load "all-fonts-default.lisp") +<a id="l4" href="#l4">4</a> (all-fonts::gen-all-fonts)</pre> +</div></body></html> diff --git a/git/alt-hack0/file/source.html b/git/alt-hack0/file/source.html index cdf2401..7d73bb0 100644 --- a/git/alt-hack0/file/source.html +++ b/git/alt-hack0/file/source.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>source (53 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack/source/</pre> +<p>source (50 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack/source</pre> </div></body></html> diff --git a/git/alt-hack0/file/tarflat.html b/git/alt-hack0/file/tarflat.html new file mode 100644 index 0000000..8a38a92 --- /dev/null +++ b/git/alt-hack0/file/tarflat.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>alt-hack0/tarflat - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> +<div id="content"> +<p>tarflat (446 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh +<a id="l2" href="#l2">2</a> PWD1=$(pwd) +<a id="l3" href="#l3">3</a> flatfile () { +<a id="l4" href="#l4">4</a> mkdir -p out +<a id="l5" href="#l5">5</a> cd out || return 1 +<a id="l6" href="#l6">6</a> tar -xf ../"$1" +<a id="l7" href="#l7">7</a> cd "$PWD1" || return 1 +<a id="l8" href="#l8">8</a> cd "$PWD1"/out/Hack/build/ttf || return 1 +<a id="l9" href="#l9">9</a> tar -cf - * | xz -12 >"$PWD1"/"$1.flat" +<a id="l10" href="#l10">10</a> mv "$PWD1"/"$1.flat" "$PWD1"/"$1" +<a id="l11" href="#l11">11</a> cd "$PWD1" || return 1 +<a id="l12" href="#l12">12</a> rm -Rf out +<a id="l13" href="#l13">13</a> } +<a id="l14" href="#l14">14</a> +<a id="l15" href="#l15">15</a> # can't use -exec on shell functions, so do this +<a id="l16" href="#l16">16</a> find . -name '*.tar.xz' | while read -r file ; do flatfile "$(echo $file | sed 's/^\.\///')" ; done</pre> +</div></body></html> diff --git a/git/alt-hack0/file/tt-hinting.html b/git/alt-hack0/file/tt-hinting.html index 0f331ed..52f5f3c 100644 --- a/git/alt-hack0/file/tt-hinting.html +++ b/git/alt-hack0/file/tt-hinting.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<p>tt-hinting (77 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack/postbuild_processing/tt-hinting</pre> +<p>tt-hinting (75 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack/postbuild_processing/tt-hinting</pre> </div></body></html> diff --git a/git/alt-hack0/files.html b/git/alt-hack0/files.html index c49a905..82be5f4 100644 --- a/git/alt-hack0/files.html +++ b/git/alt-hack0/files.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">7</td></tr><tr><td>100644</td><td><a href="file/README.md.html">README.md</a></td><td class="num">781</td></tr><tr><td>100755</td><td><a href="file/generator.ros.html">generator.ros</a></td><td class="num">4784</td></tr><tr><td>120000</td><td><a href="file/glyphs.html">glyphs</a></td><td class="num">57</td></tr><tr><td>120000</td><td><a href="file/hack.html">hack</a></td><td class="num">45</td></tr><tr><td>120000</td><td><a href="file/source.html">source</a></td><td class="num">53</td></tr><tr><td>120000</td><td><a href="file/tt-hinting.html">tt-hinting</a></td><td class="num">77</td></tr><tr><td>100644</td><td>zero-doot.png <span class="dim">(not shown)</span></td><td class="num">11214</td></tr><tr><td>100644</td><td>zero.png <span class="dim">(not shown)</span></td><td class="num">13172</td></tr></tbody></table> +<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">7</td></tr><tr><td>120000</td><td><a href="file/Hack.html">Hack</a></td><td class="num">43</td></tr><tr><td>100644</td><td><a href="file/README.md.html">README.md</a></td><td class="num">1182</td></tr><tr><td>100644</td><td><a href="file/all-fonts-bc.lisp.html">all-fonts-bc.lisp</a></td><td class="num">1592</td></tr><tr><td>100644</td><td><a href="file/all-fonts-default.lisp.html">all-fonts-default.lisp</a></td><td class="num">1560</td></tr><tr><td>160000</td><td>alt-hack-new-glyphs <span class="dim">(not shown)</span></td><td class="num">0</td></tr><tr><td>100755</td><td><a href="file/generator-bc.ros.html">generator-bc.ros</a></td><td class="num">8345</td></tr><tr><td>100755</td><td><a href="file/generator.ros.html">generator.ros</a></td><td class="num">7905</td></tr><tr><td>120000</td><td><a href="file/glyphs.html">glyphs</a></td><td class="num">26</td></tr><tr><td>100644</td><td><a href="file/script-bc.lisp.html">script-bc.lisp</a></td><td class="num">102</td></tr><tr><td>100644</td><td><a href="file/script-default.lisp.html">script-default.lisp</a></td><td class="num">107</td></tr><tr><td>120000</td><td><a href="file/source.html">source</a></td><td class="num">50</td></tr><tr><td>100755</td><td><a href="file/tarflat.html">tarflat</a></td><td class="num">446</td></tr><tr><td>120000</td><td><a href="file/tt-hinting.html">tt-hinting</a></td><td class="num">75</td></tr><tr><td>100644</td><td>zero-doot.png <span class="dim">(not shown)</span></td><td class="num">11214</td></tr><tr><td>100644</td><td>zero.png <span class="dim">(not shown)</span></td><td class="num">13172</td></tr></tbody></table> </div></body></html> diff --git a/git/alt-hack0/index.html b/git/alt-hack0/index.html index 78f446e..09042a1 100644 --- a/git/alt-hack0/index.html +++ b/git/alt-hack0/index.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-15 16:37</td><td><a href="commit/a9f0ebf66a38bde08af9550d694226d1e8159454.html">Ignore binary files in git repo.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/423ee8d7f5073caf378b80dc7353732e842da50e.html">Newline</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/aef0727f84b7bcc281a58d075b3891102651f650.html">Free tarballs.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-17 08:55</td><td><a href="commit/3af3bfec4756cae6d46fec7fe72af6b6c003f586.html">Edit readme with site.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 23:23</td><td><a href="commit/04aea2e69186cbd8d0371d92d30bf851adcd071a.html">Note script for generation.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 20:48</td><td><a href="commit/096ab91b92198a27b3b4a5a5ceffe7ca57a44009.html">Successful build!</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 19:29</td><td><a href="commit/09e104747a15c44356bf80d09b5b8e090641b108.html">Add help function.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 17:08</td><td><a href="commit/2ef7da977eec04f4c9dab41074d8b26a18235564.html">Roswell (not working yet) script and symlinks.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/ab24fd421f09de6867b4472a24794b034c878906.html">Merge branch 'master' of github.com:equwal/alt-hack0</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/d7dc00df51879fb9cb5232fce44e89c2d75c3fa1.html">Add dotted variant.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 10:36</td><td><a href="commit/2b752fb12d50b9662a2211a64d10c375845c1055.html">Add Emacs gist.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:32</td><td><a href="commit/dd001e236ee7fdc4c52ea057776c7679267bcbdc.html">Captions.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:31</td><td><a href="commit/ab5e0cc428f235cedd2afc35c19bdfe49a8cce1d.html">Old zero add.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/4f98a1a559c108865ce86c4b5ed3f19ae500631a.html">Add resized zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/759cc124441d057ea6790de5816b6758d520e636.html">Reasonable size zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:25</td><td><a href="commit/997ae396c437b5651468ac95f730a02ff8f80c65.html">Image.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:24</td><td><a href="commit/ef4ba9dc6a10cf11ff2085a95248b847f48bb1b9.html">Add everything.</a></td><td>Spenser Truex</td></tr></tbody></table> +<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2023-08-10 13:15</td><td><a href="commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html">Add bc scripts</a></td><td>Spenser Truex</td></tr><tr><td>2023-08-10 13:14</td><td><a href="commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html">Change glyphs dir</a></td><td>Spenser Truex</td></tr><tr><td>2021-02-05 15:47</td><td><a href="commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html">Add combinatoric script</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-16 02:57</td><td><a href="commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html">Re-symlink.</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-15 17:29</td><td><a href="commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html">Add TODO</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-15 16:37</td><td><a href="commit/a9f0ebf66a38bde08af9550d694226d1e8159454.html">Ignore binary files in git repo.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/423ee8d7f5073caf378b80dc7353732e842da50e.html">Newline</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/aef0727f84b7bcc281a58d075b3891102651f650.html">Free tarballs.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-17 08:55</td><td><a href="commit/3af3bfec4756cae6d46fec7fe72af6b6c003f586.html">Edit readme with site.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 23:23</td><td><a href="commit/04aea2e69186cbd8d0371d92d30bf851adcd071a.html">Note script for generation.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 20:48</td><td><a href="commit/096ab91b92198a27b3b4a5a5ceffe7ca57a44009.html">Successful build!</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 19:29</td><td><a href="commit/09e104747a15c44356bf80d09b5b8e090641b108.html">Add help function.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 17:08</td><td><a href="commit/2ef7da977eec04f4c9dab41074d8b26a18235564.html">Roswell (not working yet) script and symlinks.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/ab24fd421f09de6867b4472a24794b034c878906.html">Merge branch 'master' of github.com:equwal/alt-hack0</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/d7dc00df51879fb9cb5232fce44e89c2d75c3fa1.html">Add dotted variant.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 10:36</td><td><a href="commit/2b752fb12d50b9662a2211a64d10c375845c1055.html">Add Emacs gist.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:32</td><td><a href="commit/dd001e236ee7fdc4c52ea057776c7679267bcbdc.html">Captions.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:31</td><td><a href="commit/ab5e0cc428f235cedd2afc35c19bdfe49a8cce1d.html">Old zero add.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/4f98a1a559c108865ce86c4b5ed3f19ae500631a.html">Add resized zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/759cc124441d057ea6790de5816b6758d520e636.html">Reasonable size zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:25</td><td><a href="commit/997ae396c437b5651468ac95f730a02ff8f80c65.html">Image.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:24</td><td><a href="commit/ef4ba9dc6a10cf11ff2085a95248b847f48bb1b9.html">Add everything.</a></td><td>Spenser Truex</td></tr></tbody></table> </div></body></html> diff --git a/git/alt-hack0/refs.html b/git/alt-hack0/refs.html index ba5947c..dbec893 100644 --- a/git/alt-hack0/refs.html +++ b/git/alt-hack0/refs.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-15</td><td>a9f0ebf</td></tr></tbody></table> +<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2023-08-10</td><td>a09b182</td></tr></tbody></table> </div></body></html> diff --git a/git/index.html b/git/index.html index 009d747..c166b58 100644 --- a/git/index.html +++ b/git/index.html @@ -7,5 +7,5 @@ <div id="top"><a href="../index.html">Recently Written</a> · <a href="index.html">git</a></div> <div id="content"> -<h1>ye olde code shoppe</h1><p>Mirror of <a href="https://github.com/equwal">github.com/equwal</a> (public, non-fork repos).</p><table><thead><tr><td>Name</td><td>Description</td><td>Owner</td><td>Last commit</td></tr></thead><tbody><tr><td><a href="alt-hack0/index.html">alt-hack0</a></td><td>The Hack font family with a non-weird zero, and other variants.</td><td>Spenser Truex</td><td>2021-01-15 16:37</td></tr><tr><td><a href="asdf-registration/index.html">asdf-registration</a></td><td>Register your asdf projects with the ASDF loader.</td><td>Spenser Truex</td><td>2019-11-09 20:40</td></tr><tr><td><a href="assistkey/index.html">assistkey</a></td><td>Hardware key remapper for the Viwoods AiPaper Reader: AI key, volume keys and power, with multi-tap, hold and chords</td><td>Spenser Truex</td><td>2026-09-21 15:52</td></tr><tr><td><a href="awesome-rebind/index.html">awesome-rebind</a></td><td>Extensions and companions for Rebind, the button remapper for e-ink readers and Android.</td><td>Spenser Truex</td><td>2026-09-21 12:40</td></tr><tr><td><a href="blaher/index.html">blaher</a></td><td>Gilbert Baumann's blaher</td><td>Spenser Truex</td><td>2023-05-27 18:44</td></tr><tr><td><a href="cl-yag/index.html">cl-yag</a></td><td>Mirror and rewrite of Solène Rapenne's cl-yag SSG of renown</td><td>Spenser Truex</td><td>2025-09-01 17:14</td></tr><tr><td><a href="clapt/index.html">clapt</a></td><td>Archived: generate SBCL cores for lots of libraries.</td><td>Spenser Truex</td><td>2019-11-09 20:50</td></tr><tr><td><a href="clic/index.html">clic</a></td><td>MIRROR ONLY Gopher client with pretty colours in Common Lisp</td><td>Spenser Truex</td><td>2020-06-03 11:41</td></tr><tr><td><a href="coleslaw/index.html">coleslaw</a></td><td>Emacs mode for the "Coleslaw" site generator written in Common Lisp.</td><td>Spenser Truex</td><td>2024-05-11 03:08</td></tr><tr><td><a href="coleslaw-mode-docs/index.html">coleslaw-mode-docs</a></td><td>Documentation to coleslaw-mode for Emacs.</td><td>Spenser Truex</td><td>2019-12-07 18:19</td></tr><tr><td><a href="coleslaw-snippets/index.html">coleslaw-snippets</a></td><td>Boilerplate for Coleslaw markdown.</td><td>Spenser Truex</td><td>2019-06-23 00:12</td></tr><tr><td><a href="common-lisp-utils/index.html">common-lisp-utils</a></td><td>My utilities for Common Lisp programming.</td><td>Spenser Truex</td><td>2019-07-02 01:51</td></tr><tr><td><a href="cores/index.html">cores</a></td><td>Save your custom core file after re-installing SBCL. Load libraries compiled into the core. Works but very rough around the edges.</td><td>Spenser Truex</td><td>2025-08-29 14:08</td></tr><tr><td><a href="CSV/index.html">CSV</a></td><td>Convert CSV (in a reader macro, or in a file) in to Lisp lists.</td><td>Spenser Truex</td><td>2019-01-07 14:05</td></tr><tr><td><a href="defsl/index.html">defsl</a></td><td>Dependencies from the lisp macro system, not the reader.</td><td>Spenser Truex</td><td>2023-06-25 20:44</td></tr><tr><td><a href="deploy-handoff/index.html">deploy-handoff</a></td><td>Claude Code plugin: the agent drives the browser to the last deploy, billing, or pull request step. You make the final click.</td><td>Spenser Truex</td><td>2026-09-21 13:27</td></tr><tr><td><a href="desktop-subtitle-replay/index.html">desktop-subtitle-replay</a></td><td></td><td>Spenser Truex</td><td>2026-08-26 19:46</td></tr><tr><td><a href="dickt.store/index.html">dickt.store</a></td><td>BYOK yomitan dictionary converter for yomidick</td><td>Spenser Truex</td><td>2026-05-09 08:51</td></tr><tr><td><a href="dmenu-scripts/index.html">dmenu-scripts</a></td><td>Ask for things</td><td>Spenser Truex</td><td>2025-09-10 23:02</td></tr><tr><td><a href="dmodurl/index.html">dmodurl</a></td><td>Convenient URL v</td><td>Spenser Truex</td><td>2025-09-01 18:48</td></tr><tr><td><a href="dpatchmail/index.html">dpatchmail</a></td><td>Patch programs with a dmenu interface</td><td>Spenser Truex</td><td>2025-09-01 18:37</td></tr><tr><td><a href="dsad/index.html">dsad</a></td><td>Dmenu interface for Simple Audio Daemon</td><td>Spenser Truex</td><td>2025-09-01 18:27</td></tr><tr><td><a href="ediff-spacemacs/index.html">ediff-spacemacs</a></td><td>Bindings fo ediff in a spacemacs layer.</td><td>Spenser Truex</td><td>2019-11-13 22:36</td></tr><tr><td><a href="encrypted-home-backups/index.html">encrypted-home-backups</a></td><td>Automated home backups, onto an encrypted partition</td><td>Spenser Truex</td><td>2019-04-20 16:47</td></tr><tr><td><a href="equwal/index.html">equwal</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 20:56</td></tr><tr><td><a href="esperanto/index.html">esperanto</a></td><td>Compress natural language in Esperanto</td><td>Spenser Truex</td><td>2019-11-25 13:19</td></tr><tr><td><a href="Forthe/index.html">Forthe</a></td><td>Forth-like DSL.</td><td>Spenser Truex</td><td>2019-06-24 12:01</td></tr><tr><td><a href="gendocs/index.html">gendocs</a></td><td>Simple document generation library.</td><td>Spenser Truex</td><td>2019-04-29 19:59</td></tr><tr><td><a href="goldfish/index.html">goldfish</a></td><td>My fish init.</td><td>Spenser Truex</td><td>2020-03-07 08:31</td></tr><tr><td><a href="ideamine/index.html">ideamine</a></td><td>An idea inbox for Claude Code: /idea saves ideas at zero tokens; Claude triages them and routes each to the cheapest model that can build it.</td><td>Spenser Truex</td><td>2026-09-21 19:33</td></tr><tr><td><a href="ii-lchat-metapackage/index.html">ii-lchat-metapackage</a></td><td>Get suckless irc working for YOU</td><td>Spenser Truex</td><td>2025-09-07 11:05</td></tr><tr><td><a href="ink-dim/index.html">ink-dim</a></td><td>Ink Dim: tap to set the frontlight of a Viwoods AiPaper reader below the lowest system level. Tap again to go back.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-recents/index.html">ink-recents</a></td><td>Ink Recents: a recent-apps switcher drawn for e-ink readers. No animation, swipe up to close, swipe down to close the others.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-update/index.html">ink-update</a></td><td>Ink Update: tells you when Rebind, Ink Recents or Ink Dim has a new version. F-Droid, then Google Play, then GitHub.</td><td>Spenser Truex</td><td>2026-09-21 12:36</td></tr><tr><td><a href="len-cmp/index.html">len-cmp</a></td><td>Efficient comparsion of length in lists.</td><td>Spenser Truex</td><td>2019-09-14 14:10</td></tr><tr><td><a href="librivox/index.html">librivox</a></td><td>Automated youtube uploading of audiobooks</td><td>Spenser Truex</td><td>2020-03-10 18:51</td></tr><tr><td><a href="lisp-multithreaded-internet/index.html">lisp-multithreaded-internet</a></td><td>Multithreaded internet for Common Lisp</td><td>Spenser Truex</td><td>2019-10-27 14:44</td></tr><tr><td><a href="LispBrain/index.html">LispBrain</a></td><td>The best Brainfuck debugger available, if you know how the Common Lisp debugger works. Uses Common Lisp's ease of debugging to make debugging Brainfuck code easy. Almost entirely useless.</td><td>Spenser Truex</td><td>2019-09-07 13:45</td></tr><tr><td><a href="minimak-tty-xkb/index.html">minimak-tty-xkb</a></td><td>"Check out my awesome website dude."</td><td>Spenser Truex</td><td>2021-01-06 14:48</td></tr><tr><td><a href="minimalist-template/index.html">minimalist-template</a></td><td>Another minimalist template for quickproject</td><td>Spenser Truex</td><td>2020-01-06 12:37</td></tr><tr><td><a href="nixtoo-genux/index.html">nixtoo-genux</a></td><td>Declarative Nix package manager setup. A new linux distro.</td><td>Spenser Truex</td><td>2025-09-04 16:14</td></tr><tr><td><a href="pass-simple/index.html">pass-simple</a></td><td>fork of zerous' minimal pass rewrite with bugfixes</td><td>Spenser Truex</td><td>2025-09-02 13:59</td></tr><tr><td><a href="posix-pipes/index.html">posix-pipes</a></td><td>portable pipes straight from CLOCC</td><td>Spenser Truex</td><td>2025-09-03 15:39</td></tr><tr><td><a href="prompt-mail/index.html">prompt-mail</a></td><td>Ask mail-related questions and filter mail-related files with dmenu</td><td>Spenser Truex</td><td>2025-09-05 01:58</td></tr><tr><td><a href="proxyverif/index.html">proxyverif</a></td><td>Check socks proxies whether they are alive or non-responsive (ping through)</td><td>Spenser Truex</td><td>2019-03-31 23:21</td></tr><tr><td><a href="quickurl/index.html">quickurl</a></td><td></td><td>Spenser Truex</td><td>2019-12-20 22:18</td></tr><tr><td><a href="r6rs-complete/index.html">r6rs-complete</a></td><td>R6RS single document.</td><td>Spenser Truex</td><td>2019-11-24 14:44</td></tr><tr><td><a href="rebind/index.html">rebind</a></td><td>Rebind: remap the hardware buttons of e-ink readers and any Android 12+ device. Free beta APK.</td><td>Spenser Truex</td><td>2026-09-21 12:39</td></tr><tr><td><a href="recentlywritten/index.html">recentlywritten</a></td><td>my writings (done recently)</td><td>Spenser Truex</td><td>2026-09-21 19:15</td></tr><tr><td><a href="rectangle/index.html">rectangle</a></td><td>Spacemacs layer for binding rectangle interaction commands.</td><td>Spenser Truex</td><td>2020-07-24 20:43</td></tr><tr><td><a href="resume-template/index.html">resume-template</a></td><td>Resume template</td><td>Spenser Truex</td><td>2020-09-14 03:30</td></tr><tr><td><a href="sacc/index.html">sacc</a></td><td>Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.</td><td>Spenser Truex</td><td>2025-03-31 17:55</td></tr><tr><td><a href="sacc-ebuild/index.html">sacc-ebuild</a></td><td>Mirrored on Github for normies.</td><td>Spenser Truex</td><td>2020-04-07 00:17</td></tr><tr><td><a href="sbm/index.html">sbm</a></td><td>dmenu bookmarks. Instantly fuzzy search thousands of bookmarks and plumb them. LOOKING FOR SUCKLESS SOFTWARE EDITION? GO TO sbm-suckless INSTEAD</td><td>Spenser Truex</td><td>2026-09-21 14:06</td></tr><tr><td><a href="sbm-android/index.html">sbm-android</a></td><td>sbm bookmarks for Android: fuzzy search, share to add, sync with bm and the browser add-on</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-extension/index.html">sbm-extension</a></td><td>sbm bookmarks for Firefox and Chrome: fuzzy search, add the page, sync with bm and the sbm app</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-suckless/index.html">sbm-suckless</a></td><td>sbm before the rewrite: bookmarks in a plain file, picked with dmenu. Suckless style.</td><td>Spenser Truex</td><td>2026-09-21 14:05</td></tr><tr><td><a href="sbm-sync/index.html">sbm-sync</a></td><td>Sync server for sbm bookmark files: one small Go program, plain files, AGPL</td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="sigil/index.html">sigil</a></td><td>A documentation preprocessor for Common Lisp docs</td><td>Spenser Truex</td><td>2020-03-26 16:25</td></tr><tr><td><a href="sl/index.html">sl</a></td><td>SL: Dependency language for Common Lisp</td><td>Spenser Truex</td><td>2019-09-11 17:08</td></tr><tr><td><a href="slurp/index.html">slurp</a></td><td>Spacemacs layer for slurping, inserting, copying, etc. of buffers (keybind layer).</td><td>Spenser Truex</td><td>2019-07-03 13:42</td></tr><tr><td><a href="stumpwm-init/index.html">stumpwm-init</a></td><td>I use dwm now. Archived.</td><td>Spenser Truex</td><td>2020-03-31 15:46</td></tr><tr><td><a href="subplz-web/index.html">subplz-web</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="subread-android/index.html">subread-android</a></td><td>SubRead for Android: times an audiobook against its ebook on the device</td><td>Spenser Truex</td><td>2026-09-21 17:55</td></tr><tr><td><a href="subread-dictionary/index.html">subread-dictionary</a></td><td>Pop-up dictionary for Android that reads Yomitan dictionaries, with local audio</td><td>Spenser Truex</td><td>2026-09-21 20:59</td></tr><tr><td><a href="subread-extension/index.html">subread-extension</a></td><td>Show your own .srt over a YouTube video, in time with it. Chrome and Firefox.</td><td>Spenser Truex</td><td>2026-09-21 03:50</td></tr><tr><td><a href="subread-overlay/index.html">subread-overlay</a></td><td>Shows the lines of an .srt over any Android media player, in time with it. Tap a word to look it up.</td><td>Spenser Truex</td><td>2026-09-21 22:12</td></tr><tr><td><a href="subread.koplugin/index.html">subread.koplugin</a></td><td>KOReader plugin: the book follows the narration of an audiobook, from an .srt made by subread.space</td><td>Spenser Truex</td><td>2026-09-21 16:49</td></tr><tr><td><a href="subread.space/index.html">subread.space</a></td><td>read subs in space</td><td>Spenser Truex</td><td>2026-05-07 08:11</td></tr><tr><td><a href="tag-gen/index.html">tag-gen</a></td><td>Generate tags for each directory and say what programming languages to look for</td><td>Spenser Truex</td><td>2025-09-05 00:09</td></tr><tr><td><a href="timeclock/index.html">timeclock</a></td><td>Spacemacs layer for tracking your time.</td><td>Spenser Truex</td><td>2020-07-24 20:46</td></tr><tr><td><a href="tiny-runlevels/index.html">tiny-runlevels</a></td><td>Using an init system for many instances of simple programs . https://therealtruex.com/posts/Using-an-init-system-for-many-instances-of-simple-programs</td><td>Spenser Truex</td><td>2025-09-07 12:16</td></tr><tr><td><a href="tmpl/index.html">tmpl</a></td><td>Insanely simple templates </td><td>Spenser Truex</td><td>2025-09-12 07:59</td></tr><tr><td><a href="tnot/index.html">tnot</a></td><td>like tmux but not</td><td>Spenser Truex</td><td>2025-09-01 22:53</td></tr><tr><td><a href="vibeslop-dickt/index.html">vibeslop-dickt</a></td><td>make your own vibeslop dickt in just a few minutes</td><td>Spenser Truex</td><td>2026-05-22 00:48</td></tr><tr><td><a href="xinput-persistence/index.html">xinput-persistence</a></td><td>xinput for mouse or keyboard configurations that work when disconnected or on boot.</td><td>Spenser Truex</td><td>2019-07-02 01:52</td></tr></tbody></table> +<h1>ye olde code shoppe</h1><p>Mirror of <a href="https://github.com/equwal">github.com/equwal</a> (public, non-fork repos).</p><table><thead><tr><td>Name</td><td>Description</td><td>Owner</td><td>Last commit</td></tr></thead><tbody><tr><td><a href="alt-hack0/index.html">alt-hack0</a></td><td>The Hack font family with a non-weird zero, and other variants.</td><td>Spenser Truex</td><td>2023-08-10 13:15</td></tr><tr><td><a href="asdf-registration/index.html">asdf-registration</a></td><td>Register your asdf projects with the ASDF loader.</td><td>Spenser Truex</td><td>2019-11-09 20:40</td></tr><tr><td><a href="assistkey/index.html">assistkey</a></td><td>Hardware key remapper for the Viwoods AiPaper Reader: AI key, volume keys and power, with multi-tap, hold and chords</td><td>Spenser Truex</td><td>2026-09-21 15:52</td></tr><tr><td><a href="awesome-rebind/index.html">awesome-rebind</a></td><td>Extensions and companions for Rebind, the button remapper for e-ink readers and Android.</td><td>Spenser Truex</td><td>2026-09-21 12:40</td></tr><tr><td><a href="blaher/index.html">blaher</a></td><td>Gilbert Baumann's blaher</td><td>Spenser Truex</td><td>2023-05-27 18:44</td></tr><tr><td><a href="cl-yag/index.html">cl-yag</a></td><td>Mirror and rewrite of Solène Rapenne's cl-yag SSG of renown</td><td>Spenser Truex</td><td>2025-09-01 17:14</td></tr><tr><td><a href="clapt/index.html">clapt</a></td><td>Archived: generate SBCL cores for lots of libraries.</td><td>Spenser Truex</td><td>2019-11-09 20:50</td></tr><tr><td><a href="clic/index.html">clic</a></td><td>MIRROR ONLY Gopher client with pretty colours in Common Lisp</td><td>Spenser Truex</td><td>2020-06-03 11:41</td></tr><tr><td><a href="coleslaw/index.html">coleslaw</a></td><td>Emacs mode for the "Coleslaw" site generator written in Common Lisp.</td><td>Spenser Truex</td><td>2024-05-11 03:08</td></tr><tr><td><a href="coleslaw-mode-docs/index.html">coleslaw-mode-docs</a></td><td>Documentation to coleslaw-mode for Emacs.</td><td>Spenser Truex</td><td>2019-12-07 18:19</td></tr><tr><td><a href="coleslaw-snippets/index.html">coleslaw-snippets</a></td><td>Boilerplate for Coleslaw markdown.</td><td>Spenser Truex</td><td>2019-06-23 00:12</td></tr><tr><td><a href="common-lisp-utils/index.html">common-lisp-utils</a></td><td>My utilities for Common Lisp programming.</td><td>Spenser Truex</td><td>2019-07-02 01:51</td></tr><tr><td><a href="cores/index.html">cores</a></td><td>Save your custom core file after re-installing SBCL. Load libraries compiled into the core. Works but very rough around the edges.</td><td>Spenser Truex</td><td>2025-08-29 14:08</td></tr><tr><td><a href="CSV/index.html">CSV</a></td><td>Convert CSV (in a reader macro, or in a file) in to Lisp lists.</td><td>Spenser Truex</td><td>2019-01-07 14:05</td></tr><tr><td><a href="defsl/index.html">defsl</a></td><td>Dependencies from the lisp macro system, not the reader.</td><td>Spenser Truex</td><td>2023-06-25 20:44</td></tr><tr><td><a href="deploy-handoff/index.html">deploy-handoff</a></td><td>Claude Code plugin: the agent drives the browser to the last deploy, billing, or pull request step. You make the final click.</td><td>Spenser Truex</td><td>2026-09-21 13:27</td></tr><tr><td><a href="desktop-subtitle-replay/index.html">desktop-subtitle-replay</a></td><td></td><td>Spenser Truex</td><td>2026-08-26 19:46</td></tr><tr><td><a href="dickt.store/index.html">dickt.store</a></td><td>BYOK yomitan dictionary converter for yomidick</td><td>Spenser Truex</td><td>2026-05-09 08:51</td></tr><tr><td><a href="dmenu-scripts/index.html">dmenu-scripts</a></td><td>Ask for things</td><td>Spenser Truex</td><td>2025-09-10 23:02</td></tr><tr><td><a href="dmodurl/index.html">dmodurl</a></td><td>Convenient URL v</td><td>Spenser Truex</td><td>2025-09-01 18:48</td></tr><tr><td><a href="dpatchmail/index.html">dpatchmail</a></td><td>Patch programs with a dmenu interface</td><td>Spenser Truex</td><td>2025-09-01 18:37</td></tr><tr><td><a href="dsad/index.html">dsad</a></td><td>Dmenu interface for Simple Audio Daemon</td><td>Spenser Truex</td><td>2025-09-01 18:27</td></tr><tr><td><a href="ediff-spacemacs/index.html">ediff-spacemacs</a></td><td>Bindings fo ediff in a spacemacs layer.</td><td>Spenser Truex</td><td>2019-11-13 22:36</td></tr><tr><td><a href="encrypted-home-backups/index.html">encrypted-home-backups</a></td><td>Automated home backups, onto an encrypted partition</td><td>Spenser Truex</td><td>2019-04-20 16:47</td></tr><tr><td><a href="equwal/index.html">equwal</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 20:56</td></tr><tr><td><a href="esperanto/index.html">esperanto</a></td><td>Compress natural language in Esperanto</td><td>Spenser Truex</td><td>2019-11-25 13:19</td></tr><tr><td><a href="Forthe/index.html">Forthe</a></td><td>Forth-like DSL.</td><td>Spenser Truex</td><td>2019-06-24 12:01</td></tr><tr><td><a href="gendocs/index.html">gendocs</a></td><td>Simple document generation library.</td><td>Spenser Truex</td><td>2019-04-29 19:59</td></tr><tr><td><a href="goldfish/index.html">goldfish</a></td><td>My fish init.</td><td>Spenser Truex</td><td>2020-03-07 08:31</td></tr><tr><td><a href="ideamine/index.html">ideamine</a></td><td>An idea inbox for Claude Code: /idea saves ideas at zero tokens; Claude triages them and routes each to the cheapest model that can build it.</td><td>Spenser Truex</td><td>2026-09-21 19:33</td></tr><tr><td><a href="ii-lchat-metapackage/index.html">ii-lchat-metapackage</a></td><td>Get suckless irc working for YOU</td><td>Spenser Truex</td><td>2025-09-07 11:05</td></tr><tr><td><a href="ink-dim/index.html">ink-dim</a></td><td>Ink Dim: tap to set the frontlight of a Viwoods AiPaper reader below the lowest system level. Tap again to go back.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-recents/index.html">ink-recents</a></td><td>Ink Recents: a recent-apps switcher drawn for e-ink readers. No animation, swipe up to close, swipe down to close the others.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-update/index.html">ink-update</a></td><td>Ink Update: tells you when Rebind, Ink Recents or Ink Dim has a new version. F-Droid, then Google Play, then GitHub.</td><td>Spenser Truex</td><td>2026-09-21 12:36</td></tr><tr><td><a href="len-cmp/index.html">len-cmp</a></td><td>Efficient comparsion of length in lists.</td><td>Spenser Truex</td><td>2019-09-14 14:10</td></tr><tr><td><a href="librivox/index.html">librivox</a></td><td>Automated youtube uploading of audiobooks</td><td>Spenser Truex</td><td>2020-03-10 18:51</td></tr><tr><td><a href="lisp-multithreaded-internet/index.html">lisp-multithreaded-internet</a></td><td>Multithreaded internet for Common Lisp</td><td>Spenser Truex</td><td>2019-10-27 14:44</td></tr><tr><td><a href="LispBrain/index.html">LispBrain</a></td><td>The best Brainfuck debugger available, if you know how the Common Lisp debugger works. Uses Common Lisp's ease of debugging to make debugging Brainfuck code easy. Almost entirely useless.</td><td>Spenser Truex</td><td>2019-09-07 13:45</td></tr><tr><td><a href="minimak-tty-xkb/index.html">minimak-tty-xkb</a></td><td>"Check out my awesome website dude."</td><td>Spenser Truex</td><td>2021-01-15 17:23</td></tr><tr><td><a href="minimalist-template/index.html">minimalist-template</a></td><td>Another minimalist template for quickproject</td><td>Spenser Truex</td><td>2020-01-06 12:37</td></tr><tr><td><a href="nixtoo-genux/index.html">nixtoo-genux</a></td><td>Declarative Nix package manager setup. A new linux distro.</td><td>Spenser Truex</td><td>2025-09-04 16:14</td></tr><tr><td><a href="pass-simple/index.html">pass-simple</a></td><td>fork of zerous' minimal pass rewrite with bugfixes</td><td>Spenser Truex</td><td>2025-09-02 13:59</td></tr><tr><td><a href="posix-pipes/index.html">posix-pipes</a></td><td>portable pipes straight from CLOCC</td><td>Spenser Truex</td><td>2025-09-03 15:39</td></tr><tr><td><a href="prompt-mail/index.html">prompt-mail</a></td><td>Ask mail-related questions and filter mail-related files with dmenu</td><td>Spenser Truex</td><td>2025-09-05 01:58</td></tr><tr><td><a href="proxyverif/index.html">proxyverif</a></td><td>Check socks proxies whether they are alive or non-responsive (ping through)</td><td>Spenser Truex</td><td>2019-03-31 23:21</td></tr><tr><td><a href="quickurl/index.html">quickurl</a></td><td></td><td>Spenser Truex</td><td>2019-12-20 22:18</td></tr><tr><td><a href="r6rs-complete/index.html">r6rs-complete</a></td><td>R6RS single document.</td><td>Spenser Truex</td><td>2019-11-24 14:44</td></tr><tr><td><a href="rebind/index.html">rebind</a></td><td>Rebind: remap the hardware buttons of e-ink readers and any Android 12+ device. Free beta APK.</td><td>Spenser Truex</td><td>2026-09-21 12:39</td></tr><tr><td><a href="recentlywritten/index.html">recentlywritten</a></td><td>my writings (done recently)</td><td>Spenser Truex</td><td>2026-09-21 19:15</td></tr><tr><td><a href="rectangle/index.html">rectangle</a></td><td>Spacemacs layer for binding rectangle interaction commands.</td><td>Spenser Truex</td><td>2020-07-24 20:43</td></tr><tr><td><a href="resume-template/index.html">resume-template</a></td><td>Resume template</td><td>Spenser Truex</td><td>2020-09-14 03:30</td></tr><tr><td><a href="sacc/index.html">sacc</a></td><td>Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.</td><td>Spenser Truex</td><td>2025-03-31 17:55</td></tr><tr><td><a href="sacc-ebuild/index.html">sacc-ebuild</a></td><td>Mirrored on Github for normies.</td><td>Spenser Truex</td><td>2020-04-07 00:17</td></tr><tr><td><a href="sbm/index.html">sbm</a></td><td>dmenu bookmarks. Instantly fuzzy search thousands of bookmarks and plumb them. LOOKING FOR SUCKLESS SOFTWARE EDITION? GO TO sbm-suckless INSTEAD</td><td>Spenser Truex</td><td>2026-09-21 14:06</td></tr><tr><td><a href="sbm-android/index.html">sbm-android</a></td><td>sbm bookmarks for Android: fuzzy search, share to add, sync with bm and the browser add-on</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-extension/index.html">sbm-extension</a></td><td>sbm bookmarks for Firefox and Chrome: fuzzy search, add the page, sync with bm and the sbm app</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-suckless/index.html">sbm-suckless</a></td><td>sbm before the rewrite: bookmarks in a plain file, picked with dmenu. Suckless style.</td><td>Spenser Truex</td><td>2026-09-21 14:05</td></tr><tr><td><a href="sbm-sync/index.html">sbm-sync</a></td><td>Sync server for sbm bookmark files: one small Go program, plain files, AGPL</td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="sigil/index.html">sigil</a></td><td>A documentation preprocessor for Common Lisp docs</td><td>Spenser Truex</td><td>2020-03-26 16:25</td></tr><tr><td><a href="sl/index.html">sl</a></td><td>SL: Dependency language for Common Lisp</td><td>Spenser Truex</td><td>2019-09-11 17:08</td></tr><tr><td><a href="slurp/index.html">slurp</a></td><td>Spacemacs layer for slurping, inserting, copying, etc. of buffers (keybind layer).</td><td>Spenser Truex</td><td>2019-07-03 13:42</td></tr><tr><td><a href="stumpwm-init/index.html">stumpwm-init</a></td><td>I use dwm now. Archived.</td><td>Spenser Truex</td><td>2020-03-31 15:46</td></tr><tr><td><a href="subplz-web/index.html">subplz-web</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="subread-android/index.html">subread-android</a></td><td>SubRead for Android: times an audiobook against its ebook on the device</td><td>Spenser Truex</td><td>2026-09-21 17:55</td></tr><tr><td><a href="subread-dictionary/index.html">subread-dictionary</a></td><td>Pop-up dictionary for Android that reads Yomitan dictionaries, with local audio</td><td>Spenser Truex</td><td>2026-09-21 20:59</td></tr><tr><td><a href="subread-extension/index.html">subread-extension</a></td><td>Show your own .srt over a YouTube video, in time with it. Chrome and Firefox.</td><td>Spenser Truex</td><td>2026-09-21 03:50</td></tr><tr><td><a href="subread-overlay/index.html">subread-overlay</a></td><td>Shows the lines of an .srt over any Android media player, in time with it. Tap a word to look it up.</td><td>Spenser Truex</td><td>2026-09-21 22:12</td></tr><tr><td><a href="subread.koplugin/index.html">subread.koplugin</a></td><td>KOReader plugin: the book follows the narration of an audiobook, from an .srt made by subread.space</td><td>Spenser Truex</td><td>2026-09-21 16:49</td></tr><tr><td><a href="subread.space/index.html">subread.space</a></td><td>read subs in space</td><td>Spenser Truex</td><td>2026-05-07 08:11</td></tr><tr><td><a href="tag-gen/index.html">tag-gen</a></td><td>Generate tags for each directory and say what programming languages to look for</td><td>Spenser Truex</td><td>2025-09-05 00:09</td></tr><tr><td><a href="timeclock/index.html">timeclock</a></td><td>Spacemacs layer for tracking your time.</td><td>Spenser Truex</td><td>2020-07-24 20:46</td></tr><tr><td><a href="tiny-runlevels/index.html">tiny-runlevels</a></td><td>Using an init system for many instances of simple programs . https://therealtruex.com/posts/Using-an-init-system-for-many-instances-of-simple-programs</td><td>Spenser Truex</td><td>2025-09-07 12:16</td></tr><tr><td><a href="tmpl/index.html">tmpl</a></td><td>Insanely simple templates </td><td>Spenser Truex</td><td>2025-09-12 07:59</td></tr><tr><td><a href="tnot/index.html">tnot</a></td><td>like tmux but not</td><td>Spenser Truex</td><td>2025-09-01 22:53</td></tr><tr><td><a href="vibeslop-dickt/index.html">vibeslop-dickt</a></td><td>make your own vibeslop dickt in just a few minutes</td><td>Spenser Truex</td><td>2026-05-22 00:48</td></tr><tr><td><a href="xinput-persistence/index.html">xinput-persistence</a></td><td>xinput for mouse or keyboard configurations that work when disconnected or on boot.</td><td>Spenser Truex</td><td>2019-07-02 01:52</td></tr></tbody></table> </div></body></html> diff --git a/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html b/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html new file mode 100644 index 0000000..ab11964 --- /dev/null +++ b/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html lang="en"><head><meta charset="UTF-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>minimak-tty-xkb 008b3165 - Recently Written</title> +<link rel="stylesheet" href="../../stagit.css" /> +</head><body> +<div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> +<h1>minimak-tty-xkb</h1><span class="desc">"Check out my awesome website dude."</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../../minimak-tty-xkb/index.html">Log</a> | <a href="../../minimak-tty-xkb/files.html">Files</a> | <a href="../../minimak-tty-xkb/refs.html">Refs</a></p><hr/> +<div id="content"> +<pre>commit 008b3165de9dfeb8e6dc642c6f6f53c73ee4a994 +Spenser Truex <truex@equwal.com> +2021-01-15 17:23:55 -0800 + +Improve readme: plaintext only (no md) + +```sh +... +``` +is ugly. + +Also, that table will cause dyslexia. + +</pre><pre> README | 41 ++++++++++++++++++----------------------- + 1 file changed, 18 insertions(+), 23 deletions(-) +</pre><pre>diff --git a/README b/README +index 4695f83..197b54c 100644 +--- a/README ++++ b/README +<span class="h">@@ -4,33 +4,28 @@ See minimak.org for details.</span> + + TTYs (with .map files) and graphical X keymaps (with .xkb) are supported. + +<span class="d">-```sh</span> +<span class="d">-# In a TTY</span> +<span class="d">-$ sudo loadkeys minimak12.map</span> +<span class="d">-# In an X session</span> +<span class="d">-$ xkbcomp minimak12.xkb $DISPLAY</span> +<span class="d">-```</span> +<span class="a">+ # In a TTY</span> +<span class="a">+ $ sudo loadkeys minimak12.map</span> +<span class="a">+ # In an X session</span> +<span class="a">+ $ xkbcomp minimak12.xkb $DISPLAY</span> +<span class="a">+</span> + Also a good idea to put these commands in /etc/profile and ~/.xinitrc + for setting at startup. + + Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a "compose key", and flip punctuation and numbers. + +<span class="d">-</span> +<span class="d">-These are the supported layouts as of v1.0, feel free to submit truex ate equwal doot com.</span> +<span class="d">-</span> +<span class="d">-XKB layouts: | 4 | 8 | 12|</span> +<span class="d">-default | v | v | v |</span> +<span class="d">-paren-swap | v | v | v |</span> +<span class="d">-flipping | x | x | x |</span> +<span class="d">-paren-swap&flip | v | v | v |</span> +<span class="d">-paren-swap&flip&esc | x | x | x |</span> +<span class="d">-paren-swap&flip&esc&compose | x | x | v |</span> +<span class="d">-</span> +<span class="d">-map layouts: | 4 | 8 | 12|</span> +<span class="d">-default | v | v | v |</span> +<span class="d">-paren-swap | x | x | x |</span> +<span class="d">-flipping | x | x | x |</span> +<span class="d">-paren-swap&flip | x | x | v |</span> +<span class="d">-paren-swap&flip&esc | x | x | v |</span> +<span class="a">+These are the supported layouts as of v1.0, feel free to submit <truex@equwal.com>.</span> +<span class="a">+ +-----------+-----------+</span> +<span class="a">+Keymap format (X11, TTY) |XKB layouts|Map layouts|</span> +<span class="a">+ +-----------+-----------+</span> +<span class="a">+Characters swapped | 4 | 8 | 12| 4 | 8 | 12|</span> +<span class="a">+ +-----------+-----------+</span> +<span class="a">+default | y | y | y | y | y | y |</span> +<span class="a">+paren-swap | y | y | y | n | n | n |</span> +<span class="a">+flipping | n | n | n | n | n | n |</span> +<span class="a">+paren-swap&flip | y | y | y | n | n | y |</span> +<span class="a">+paren-swap&flip&esc | n | n | n | n | n | y |</span> +<span class="a">+paren-swap&flip&esc&compose | n | n | y | n | n | n |</span> +<span class="a">+ +-----------+-----------+</span> + + Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre> +</div></body></html> diff --git a/git/minimak-tty-xkb/file/README.html b/git/minimak-tty-xkb/file/README.html index f263016..525d619 100644 --- a/git/minimak-tty-xkb/file/README.html +++ b/git/minimak-tty-xkb/file/README.html @@ -7,40 +7,35 @@ <div id="top"><a href="../../../index.html">Recently Written</a> · <a href="../../index.html">git</a></div> <h1>minimak-tty-xkb</h1><span class="desc">"Check out my awesome website dude."</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../../minimak-tty-xkb/index.html">Log</a> | <a href="../../minimak-tty-xkb/files.html">Files</a> | <a href="../../minimak-tty-xkb/refs.html">Refs</a></p><hr/> <div id="content"> -<p>README (1153 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> Keyboard layouts for Minimak 4, 8 and 12 on Linux +<p>README (1300 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> Keyboard layouts for Minimak 4, 8 and 12 on Linux <a id="l2" href="#l2">2</a> <a id="l3" href="#l3">3</a> See minimak.org for details. <a id="l4" href="#l4">4</a> <a id="l5" href="#l5">5</a> TTYs (with .map files) and graphical X keymaps (with .xkb) are supported. <a id="l6" href="#l6">6</a> -<a id="l7" href="#l7">7</a> ```sh -<a id="l8" href="#l8">8</a> # In a TTY -<a id="l9" href="#l9">9</a> $ sudo loadkeys minimak12.map -<a id="l10" href="#l10">10</a> # In an X session -<a id="l11" href="#l11">11</a> $ xkbcomp minimak12.xkb $DISPLAY -<a id="l12" href="#l12">12</a> ``` -<a id="l13" href="#l13">13</a> Also a good idea to put these commands in /etc/profile and ~/.xinitrc -<a id="l14" href="#l14">14</a> for setting at startup. -<a id="l15" href="#l15">15</a> -<a id="l16" href="#l16">16</a> Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a "compose key", and flip punctuation and numbers. -<a id="l17" href="#l17">17</a> -<a id="l18" href="#l18">18</a> -<a id="l19" href="#l19">19</a> These are the supported layouts as of v1.0, feel free to submit truex ate equwal doot com. -<a id="l20" href="#l20">20</a> -<a id="l21" href="#l21">21</a> XKB layouts: | 4 | 8 | 12| -<a id="l22" href="#l22">22</a> default | v | v | v | -<a id="l23" href="#l23">23</a> paren-swap | v | v | v | -<a id="l24" href="#l24">24</a> flipping | x | x | x | -<a id="l25" href="#l25">25</a> paren-swap&flip | v | v | v | -<a id="l26" href="#l26">26</a> paren-swap&flip&esc | x | x | x | -<a id="l27" href="#l27">27</a> paren-swap&flip&esc&compose | x | x | v | -<a id="l28" href="#l28">28</a> -<a id="l29" href="#l29">29</a> map layouts: | 4 | 8 | 12| -<a id="l30" href="#l30">30</a> default | v | v | v | -<a id="l31" href="#l31">31</a> paren-swap | x | x | x | -<a id="l32" href="#l32">32</a> flipping | x | x | x | -<a id="l33" href="#l33">33</a> paren-swap&flip | x | x | v | -<a id="l34" href="#l34">34</a> paren-swap&flip&esc | x | x | v | -<a id="l35" href="#l35">35</a> -<a id="l36" href="#l36">36</a> Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre> +<a id="l7" href="#l7">7</a> # In a TTY +<a id="l8" href="#l8">8</a> $ sudo loadkeys minimak12.map +<a id="l9" href="#l9">9</a> # In an X session +<a id="l10" href="#l10">10</a> $ xkbcomp minimak12.xkb $DISPLAY +<a id="l11" href="#l11">11</a> +<a id="l12" href="#l12">12</a> Also a good idea to put these commands in /etc/profile and ~/.xinitrc +<a id="l13" href="#l13">13</a> for setting at startup. +<a id="l14" href="#l14">14</a> +<a id="l15" href="#l15">15</a> Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a "compose key", and flip punctuation and numbers. +<a id="l16" href="#l16">16</a> +<a id="l17" href="#l17">17</a> These are the supported layouts as of v1.0, feel free to submit <truex@equwal.com>. +<a id="l18" href="#l18">18</a> +-----------+-----------+ +<a id="l19" href="#l19">19</a> Keymap format (X11, TTY) |XKB layouts|Map layouts| +<a id="l20" href="#l20">20</a> +-----------+-----------+ +<a id="l21" href="#l21">21</a> Characters swapped | 4 | 8 | 12| 4 | 8 | 12| +<a id="l22" href="#l22">22</a> +-----------+-----------+ +<a id="l23" href="#l23">23</a> default | y | y | y | y | y | y | +<a id="l24" href="#l24">24</a> paren-swap | y | y | y | n | n | n | +<a id="l25" href="#l25">25</a> flipping | n | n | n | n | n | n | +<a id="l26" href="#l26">26</a> paren-swap&flip | y | y | y | n | n | y | +<a id="l27" href="#l27">27</a> paren-swap&flip&esc | n | n | n | n | n | y | +<a id="l28" href="#l28">28</a> paren-swap&flip&esc&compose | n | n | y | n | n | n | +<a id="l29" href="#l29">29</a> +-----------+-----------+ +<a id="l30" href="#l30">30</a> +<a id="l31" href="#l31">31</a> Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre> </div></body></html> diff --git a/git/minimak-tty-xkb/files.html b/git/minimak-tty-xkb/files.html index ed1f746..07f2a67 100644 --- a/git/minimak-tty-xkb/files.html +++ b/git/minimak-tty-xkb/files.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>minimak-tty-xkb</h1><span class="desc">"Check out my awesome website dude."</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">12</td></tr><tr><td>100644</td><td><a href="file/README.html">README</a></td><td class="num">1153</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak12.xkb.html">ru-xkb/ru-phon-minimak12.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak4.xkb.html">ru-xkb/ru-phon-minimak4.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak8.xkb.html">ru-xkb/ru-phon-minimak8.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon.xkb.html">ru-xkb/ru-phon.xkb</a></td><td class="num">4588</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-esc.map.html">us-minimak12-paren-swap-flipping-esc.map</a></td><td class="num">3405</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb.html">us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb</a></td><td class="num">62434</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.map.html">us-minimak12-paren-swap-flipping.map</a></td><td class="num">3402</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.xkb.html">us-minimak12-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap.xkb.html">us-minimak12-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.map.html">us-minimak12.map</a></td><td class="num">3423</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.xkb.html">us-minimak12.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap-flipping.xkb.html">us-minimak4-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap.xkb.html">us-minimak4-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.map.html">us-minimak4.map</a></td><td class="num">2508</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.xkb.html">us-minimak4.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap-flipping.xkb.html">us-minimak8-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap.xkb.html">us-minimak8-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.map.html">us-minimak8.map</a></td><td class="num">3011</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.xkb.html">us-minimak8.xkb</a></td><td class="num">62740</td></tr></tbody></table> +<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">12</td></tr><tr><td>100644</td><td><a href="file/README.html">README</a></td><td class="num">1300</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak12.xkb.html">ru-xkb/ru-phon-minimak12.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak4.xkb.html">ru-xkb/ru-phon-minimak4.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak8.xkb.html">ru-xkb/ru-phon-minimak8.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon.xkb.html">ru-xkb/ru-phon.xkb</a></td><td class="num">4588</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-esc.map.html">us-minimak12-paren-swap-flipping-esc.map</a></td><td class="num">3405</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb.html">us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb</a></td><td class="num">62434</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.map.html">us-minimak12-paren-swap-flipping.map</a></td><td class="num">3402</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.xkb.html">us-minimak12-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap.xkb.html">us-minimak12-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.map.html">us-minimak12.map</a></td><td class="num">3423</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.xkb.html">us-minimak12.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap-flipping.xkb.html">us-minimak4-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap.xkb.html">us-minimak4-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.map.html">us-minimak4.map</a></td><td class="num">2508</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.xkb.html">us-minimak4.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap-flipping.xkb.html">us-minimak8-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap.xkb.html">us-minimak8-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.map.html">us-minimak8.map</a></td><td class="num">3011</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.xkb.html">us-minimak8.xkb</a></td><td class="num">62740</td></tr></tbody></table> </div></body></html> diff --git a/git/minimak-tty-xkb/index.html b/git/minimak-tty-xkb/index.html index d20ea4c..2be1c50 100644 --- a/git/minimak-tty-xkb/index.html +++ b/git/minimak-tty-xkb/index.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>minimak-tty-xkb</h1><span class="desc">"Check out my awesome website dude."</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-06 14:48</td><td><a href="commit/3726312f428aa4dee73579cb57c39ede0f13ab34.html">Initial commit: lots of minimak layouts.</a></td><td>Spenser Truex</td></tr></tbody></table> +<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-15 17:23</td><td><a href="commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html">Improve readme: plaintext only (no md)</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-06 14:48</td><td><a href="commit/3726312f428aa4dee73579cb57c39ede0f13ab34.html">Initial commit: lots of minimak layouts.</a></td><td>Spenser Truex</td></tr></tbody></table> </div></body></html> diff --git a/git/minimak-tty-xkb/refs.html b/git/minimak-tty-xkb/refs.html index 6d16aea..d86e562 100644 --- a/git/minimak-tty-xkb/refs.html +++ b/git/minimak-tty-xkb/refs.html @@ -7,5 +7,5 @@ <div id="top"><a href="../../index.html">Recently Written</a> · <a href="../index.html">git</a></div> <h1>minimak-tty-xkb</h1><span class="desc">"Check out my awesome website dude."</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/> <div id="content"> -<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-06</td><td>3726312</td></tr></tbody></table> +<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-15</td><td>008b316</td></tr></tbody></table> </div></body></html>