Finally got litagures working on my Mac
Using a couple of hacks, but I'm keeping Mickey Peterson's project as that seems like a better solution for the Linux system.
This commit is contained in:
parent
b433f5d2e6
commit
1b81e2178a
4 changed files with 105 additions and 8 deletions
|
@ -196,14 +196,16 @@ My /current/ favorite font is actually the top list of fonts that may be install
|
||||||
(or
|
(or
|
||||||
(seq-first
|
(seq-first
|
||||||
(seq-filter (lambda (font) (when (x-list-fonts font) font))
|
(seq-filter (lambda (font) (when (x-list-fonts font) font))
|
||||||
'("Hack Nerd Font"
|
'("CaskaydiaCove Nerd Font" ; finally found it
|
||||||
|
"Cascadia Code PL" ; funky font with litagures and a dotted 0
|
||||||
|
"Hack Nerd Font" ; clean font, but no litagures!?
|
||||||
|
"FiraCode Nerd Font" ; has litagures
|
||||||
"Cousine Nerd Font"
|
"Cousine Nerd Font"
|
||||||
"Iosevka Nerd Font"
|
"Iosevka Nerd Font"
|
||||||
"Iosevka"
|
"Iosevka"
|
||||||
"FantasqueSansMono Nerd Font"
|
"FantasqueSansMono Nerd Font"
|
||||||
"Monoid Nerd Font"
|
"Monoid Nerd Font"
|
||||||
"Hasklig"
|
"Hasklig"
|
||||||
"Cascadia Code PL"
|
|
||||||
"Source Code Pro")))
|
"Source Code Pro")))
|
||||||
"monospaced"))
|
"monospaced"))
|
||||||
"My fixed width font based on what I have installed.")
|
"My fixed width font based on what I have installed.")
|
||||||
|
@ -216,8 +218,10 @@ I probably don't need to have such a ranking system, as chances are good I have
|
||||||
(or
|
(or
|
||||||
(seq-first
|
(seq-first
|
||||||
(seq-filter (lambda (font) (when (x-list-fonts font) font))
|
(seq-filter (lambda (font) (when (x-list-fonts font) font))
|
||||||
'(; Interesting idea: "Iosevka Comfy Motion Duo"
|
'("Literata" ; Clean, readable with litagures
|
||||||
"XCharter" ; https://fontesk.com/xcharter-typeface/
|
"XCharter" ; https://fontesk.com/xcharter-typeface/
|
||||||
|
"Charter"
|
||||||
|
; Interesting idea: "Iosevka Comfy Motion Duo"
|
||||||
"Serif")))
|
"Serif")))
|
||||||
(warn "Cannot find a Serif Font. Install Source Sans Pro."))))
|
(warn "Cannot find a Serif Font. Install Source Sans Pro."))))
|
||||||
|
|
||||||
|
@ -367,7 +371,6 @@ Not use what I'm doing with the [[https://github.com/domtronn/all-the-icons.el][
|
||||||
#+end_src
|
#+end_src
|
||||||
*Note:* Install everything with the function, =all-the-icons-install-fonts=.
|
*Note:* Install everything with the function, =all-the-icons-install-fonts=.
|
||||||
* Ligatures
|
* Ligatures
|
||||||
|
|
||||||
Seems like getting ligatures to work in Emacs has been a Holy Grail. On Mac, I've used special builds that have hacks, but now with Emacs 27 and Harfbuzz, I should be able to get --> to look like it should.
|
Seems like getting ligatures to work in Emacs has been a Holy Grail. On Mac, I've used special builds that have hacks, but now with Emacs 27 and Harfbuzz, I should be able to get --> to look like it should.
|
||||||
|
|
||||||
#+begin_src emacs-lisp :tangle no
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
@ -377,9 +380,7 @@ Seems like getting ligatures to work in Emacs has been a Holy Grail. On Mac, I'v
|
||||||
(prettify-symbols-mode +1)
|
(prettify-symbols-mode +1)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Note, in Doom, is appears we have a =ligatures= module.
|
We'll start using that instead, but setting this [[file:ha-programming.org::*Ligatures][over here]] in the programming section.
|
||||||
We'll start using that instead, but changing it in [[file:general-programming.org][general-programming]] file.
|
|
||||||
|
|
||||||
* Technical Artifacts :noexport:
|
* Technical Artifacts :noexport:
|
||||||
|
|
||||||
Let's =provide= a name so we can =require= this file:
|
Let's =provide= a name so we can =require= this file:
|
||||||
|
|
|
@ -200,6 +200,19 @@ After reading [[https://www.punctuationmatters.com/en-dash-em-dash-hyphen][this
|
||||||
(define-key org-mode-map "-" #'ha-insert-long-dash)
|
(define-key org-mode-map "-" #'ha-insert-long-dash)
|
||||||
#+end_src
|
#+end_src
|
||||||
The /issue/ is how do we deal with org’s dashed bullets? In this case, we want to insert an actual dash, but elsewhere, we /visually/ display the dash as a more emphasized glyph.
|
The /issue/ is how do we deal with org’s dashed bullets? In this case, we want to insert an actual dash, but elsewhere, we /visually/ display the dash as a more emphasized glyph.
|
||||||
|
** Ligatures
|
||||||
|
Well, using the =composition-function-table=, we can finally get some ligatures to improve readability without Harfbuzz.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defun ha-textual-litagures ()
|
||||||
|
"Non-programming litagures for readable and text-derived modes."
|
||||||
|
(set-char-table-range composition-function-table
|
||||||
|
?f '(["\\(?:ff?[fijlt]\\)" 0 font-shape-gstring]))
|
||||||
|
(set-char-table-range composition-function-table
|
||||||
|
?T '(["\\(?:Th\\)" 0 font-shape-gstring])))
|
||||||
|
|
||||||
|
(add-hook 'text-mode-hook #'ha-textual-litagures)
|
||||||
|
#+end_src
|
||||||
|
This is now fine and ffantastic!
|
||||||
* Org Beautify
|
* Org Beautify
|
||||||
I really want to use the Org Beautify package, but it overrides my darker themes (and all I really want is headlines to behave).
|
I really want to use the Org Beautify package, but it overrides my darker themes (and all I really want is headlines to behave).
|
||||||
|
|
||||||
|
|
|
@ -612,8 +612,10 @@ Splitting out HTML snippets is often a way that I can transfer org-formatted con
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq org-html-head-extra
|
(setq org-html-head-extra
|
||||||
(string-join '( "<style>"
|
(string-join '( "<style>"
|
||||||
|
"@import url('https://fonts.googleapis.com/css2?family=Literata:ital,wght@0,300;0,600;1,300;1,600&display=swap');"
|
||||||
"@import url('https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,600;1,300;1,600&display=swap');"
|
"@import url('https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,600;1,300;1,600&display=swap');"
|
||||||
"html { font-family: 'Overpass', sans-serif; color: #333; }"
|
"html { font-family: 'Literata', sans-serif; color: #333; }"
|
||||||
|
"h1,h2,h3,h4,h5 { font-family: 'Overpass', sans-serif; color: #333; }"
|
||||||
"pre.src { background-color: #eee; }"
|
"pre.src { background-color: #eee; }"
|
||||||
;; "@importmedia (prefers-color-scheme: dark) {"
|
;; "@importmedia (prefers-color-scheme: dark) {"
|
||||||
" html { background-color: #1d1f21; color: white; }"
|
" html { background-color: #1d1f21; color: white; }"
|
||||||
|
|
|
@ -455,7 +455,88 @@ The idea of using math symbols for a programming languages keywords is /cute/, b
|
||||||
|
|
||||||
(add-hook 'prog-mode-hook 'ha-prettify-prog)
|
(add-hook 'prog-mode-hook 'ha-prettify-prog)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Hopefully I can follow [[https://www.masteringemacs.org/article/unicode-ligatures-color-emoji][Mickey Petersen's essay]] on getting full ligatures working, but right now, they don’t work on the Mac, and that is my current workhorse.
|
Hopefully I can follow [[https://www.masteringemacs.org/article/unicode-ligatures-color-emoji][Mickey Petersen's essay]] on getting full ligatures working, but right now, they don’t work on the Mac, and that is my current workhorse.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package ligature
|
||||||
|
:config
|
||||||
|
;; Enable the "www" ligature in every possible major mode
|
||||||
|
(ligature-set-ligatures 't '("www"))
|
||||||
|
|
||||||
|
;; Enable traditional ligature support in eww-mode, if the
|
||||||
|
;; `variable-pitch' face supports it
|
||||||
|
(ligature-set-ligatures '(org-mode eww-mode) '("ff" "fi" "ffi"))
|
||||||
|
|
||||||
|
(ligature-set-ligatures '(html-mode nxml-mode web-mode)
|
||||||
|
'("<!--" "-->" "</>" "</" "/>" "://"))
|
||||||
|
|
||||||
|
;; Create a new ligature:
|
||||||
|
(ligature-set-ligatures 'markdown-mode '(("=" (rx (+ "=") (? (| ">" "<"))))
|
||||||
|
("-" (rx (+ "-")))))
|
||||||
|
|
||||||
|
;; Enable all Cascadia Code ligatures in programming modes
|
||||||
|
(ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
|
||||||
|
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
|
||||||
|
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
|
||||||
|
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
|
||||||
|
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
|
||||||
|
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
|
||||||
|
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
|
||||||
|
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
|
||||||
|
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
|
||||||
|
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
|
||||||
|
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
|
||||||
|
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
|
||||||
|
"\\\\" "://"))
|
||||||
|
;; Enables ligature checks globally in all buffers. You can also do it
|
||||||
|
;; per mode with `ligature-mode'.
|
||||||
|
(global-ligature-mode t))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Until I can get [[https://github.com/d12frosted/homebrew-emacs-plus/issues/222][Harfbuzz support]] on my Emacs-Plus build of Mac, the following work-around seems to mostly work:
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defun ha-mac-litagure-workaround ()
|
||||||
|
"Implement an old work-around for ligature support.
|
||||||
|
This kludge seems to only need to be set for my Mac version of
|
||||||
|
Emacs, since I can't build it with Harfuzz support."
|
||||||
|
(let ((alist '((33 . ".\\(?:\\(?:==\\|!!\\)\\|[!=]\\)")
|
||||||
|
(35 . ".\\(?:###\\|##\\|_(\\|[#(?[_{]\\)")
|
||||||
|
(36 . ".\\(?:>\\)")
|
||||||
|
(37 . ".\\(?:\\(?:%%\\)\\|%\\)")
|
||||||
|
(38 . ".\\(?:\\(?:&&\\)\\|&\\)")
|
||||||
|
(42 . ".\\(?:\\(?:\\*\\*/\\)\\|\\(?:\\*[*/]\\)\\|[*/>]\\)")
|
||||||
|
(43 . ".\\(?:\\(?:\\+\\+\\)\\|[+>]\\)")
|
||||||
|
(45 . ".\\(?:\\(?:-[>-]\\|<<\\|>>\\)\\|[<>}~-]\\)")
|
||||||
|
(46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)")
|
||||||
|
(47 . ".\\(?:\\(?:\\*\\*\\|//\\|==\\)\\|[*/=>]\\)")
|
||||||
|
(48 . ".\\(?:x[a-zA-Z]\\)")
|
||||||
|
(58 . ".\\(?:::\\|[:=]\\)")
|
||||||
|
(59 . ".\\(?:;;\\|;\\)")
|
||||||
|
(60 . ".\\(?:\\(?:!--\\)\\|\\(?:~~\\|->\\|\\$>\\|\\*>\\|\\+>\\|--\\|<[<=-]\\|=[<=>]\\||>\\)\\|[*$+~/<=>|-]\\)")
|
||||||
|
(61 . ".\\(?:\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\)\\|[<=>~]\\)")
|
||||||
|
(62 . ".\\(?:\\(?:=>\\|>[=>-]\\)\\|[=>-]\\)")
|
||||||
|
(63 . ".\\(?:\\(\\?\\?\\)\\|[:=?]\\)")
|
||||||
|
(91 . ".\\(?:]\\)")
|
||||||
|
(92 . ".\\(?:\\(?:\\\\\\\\\\)\\|\\\\\\)")
|
||||||
|
(94 . ".\\(?:=\\)")
|
||||||
|
(119 . ".\\(?:ww\\)")
|
||||||
|
(123 . ".\\(?:-\\)")
|
||||||
|
(124 . ".\\(?:\\(?:|[=|]\\)\\|[=>|]\\)")
|
||||||
|
(126 . ".\\(?:~>\\|~~\\|[>=@~-]\\)"))))
|
||||||
|
(dolist (char-regexp alist)
|
||||||
|
(set-char-table-range composition-function-table (car char-regexp)
|
||||||
|
`([,(cdr char-regexp) 0 font-shape-gstring])))))
|
||||||
|
|
||||||
|
(unless (s-contains? "HARFBUZZ" system-configuration-features)
|
||||||
|
(add-hook 'prog-mode-hook #'ha-mac-ligature-workaround))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The unicode-fonts package rejigs the internal tables Emacs uses to pick better fonts for unicode codepoint ranges.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package unicode-fonts
|
||||||
|
:config
|
||||||
|
(unicode-fonts-setup))
|
||||||
|
#+end_src
|
||||||
** Compiling
|
** Compiling
|
||||||
The [[help:compile][compile]] function lets me enter a command to run, or I can search the history for a previous run. What it doesn’t give me, is a project-specific list of commands. Perhaps, for each project, I define in =.dir-locals.el= a variable, =compile-command-list=, like:
|
The [[help:compile][compile]] function lets me enter a command to run, or I can search the history for a previous run. What it doesn’t give me, is a project-specific list of commands. Perhaps, for each project, I define in =.dir-locals.el= a variable, =compile-command-list=, like:
|
||||||
#+begin_src emacs-lisp :tangle no
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
|
Loading…
Reference in a new issue