emacs/lisp/long-s-mode.el

68 lines
1.7 KiB
EmacsLisp
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; long-s-mode.el --- Proper typography for Emacs -*- lexical-binding: t; -*-
;;; Commentary:
;; from Catie on #emacs
;;; Code:
(define-minor-mode long-s-mode
"Minor mode for inserting 'ſ' characters")
(defconst +long-s+ ?ſ)
(defconst +short-s+ ?s)
(defun long-s-p (char)
(char-equal char +long-s+))
(defun short-s-p (char)
(or (char-equal char +short-s+)))
(defun s-char-p (char)
(or (long-s-p char)
(short-s-p char)))
(defun alpha-char-p (char)
(memq (get-char-code-property char 'general-category)
'(Ll Lu Lo Lt Lm Mn Mc Me Nl)))
(defun long-s-insert-short-s ()
(interactive)
(if (long-s-p (preceding-char))
(insert-char +short-s+)
(insert-char +long-s+)))
(defun long-s-insert-space ()
(interactive)
(if (long-s-p (preceding-char))
(progn (delete-backward-char 1)
(insert-char +short-s+))
(save-excursion
(while (not (alpha-char-p (preceding-char)))
(backward-char))
(when (long-s-p (preceding-char))
(delete-backward-char 1)
(insert-char +short-s+))))
(insert-char ?\ ))
(defvar long-s-mode-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map (current-global-map))
(define-key map (kbd "s") #'long-s-insert-short-s)
(define-key map (kbd "SPC") #'long-s-insert-space)
map))
(setq long-s-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "s") #'long-s-insert-short-s)
(define-key map (kbd "SPC") #'long-s-insert-space)
map))
(unless (seq-some #'(lambda (x) (eq (car x) 'long-s-mode))
minor-mode-map-alist)
(push (cons 'long-s-mode long-s-mode-map)
minor-mode-map-alist))
(provide 'long-s-mode)
;;; long-s-mode.el ends here