Emacs: Cycle Fonts by Command

By Xah Lee. Date: . Last updated: .

These commands lets you quickly switch fonts for comparison.

Cycle between 2 Fonts

This command cycles between 2 fonts.

(defun xah-cycle-font-2 (@n)
  "Change font in current window between 2 fonts.

URL `http://ergoemacs.org/emacs/emacs_switching_fonts.html'
Version 2015-09-21"
  (interactive "p")
  ;; this function sets a property “state”. It is a integer. Possible values are 0 to length of $fontList
  (let (
        ($fontList '("Courier-14" "Menlo-14"))

    (setq $stateBefore (if (get 'xah-cycle-font-2 'state) (get 'xah-cycle-font-2 'state) 0))
    (setq $stateAfter (% (+ $stateBefore (length $fontList) @n) (length $fontList)))
    (put 'xah-cycle-font-2 'state $stateAfter)

    (setq $fontToUse (nth $stateAfter $fontList))
    (set-frame-parameter nil 'font $fontToUse)
    (message "Font set to: %s" $fontToUse)))

Cycle Multiple Fonts

Here's commands that switch among your choice fonts for current window.

(defvar xah-font-list nil "A list of fonts for `xah-cycle-font' to cycle from.")

(setq xah-font-list
       ((string-equal system-type "windows-nt")
          "Lucida Console-10"
          "Segoe UI Symbol-12"
          "Lucida Sans Unicode-10"
       ((string-equal system-type "gnu/linux")
          "DejaVu Sans Mono-10"
          "DejaVu Sans-10"
       ((string-equal system-type "darwin") ; Mac

(defun xah-cycle-font (@n)
  "Change font in current frame.
Each time this is called, font cycles thru a predefined list of fonts in the variable `xah-font-list' .
If @n is 1, cycle forward.
If @n is -1, cycle backward.
See also `xah-cycle-font-next', `xah-cycle-font-previous'.

URL `http://ergoemacs.org/emacs/emacs_switching_fonts.html'
Version 2015-09-21"
  (interactive "p")
  ;; this function sets a property “state”. It is a integer. Possible values are any index to the fontList.
  (let ($fontToUse $stateBefore $stateAfter )
    (setq $stateBefore (if (get 'xah-cycle-font 'state) (get 'xah-cycle-font 'state) 0))
    (setq $stateAfter (% (+ $stateBefore (length xah-font-list) @n) (length xah-font-list)))
    (setq $fontToUse (nth $stateAfter xah-font-list))
    (set-frame-font $fontToUse t)
    ;; (set-frame-parameter nil 'font $fontToUse)
    (message "Current font is: %s" $fontToUse )
    (put 'xah-cycle-font 'state $stateAfter)))

(defun xah-cycle-font-next ()
  "Switch to the next font, in current window.
See `xah-cycle-font'."
  (xah-cycle-font 1))

(defun xah-cycle-font-previous ()
  "Switch to the previous font, in current window.
See `xah-cycle-font'."
  (xah-cycle-font -1))

Modify the variable list “xah-font-list” above, so that you can use this function to cycle among the fonts of your choice.

To get a list of fonts in emacs, see Emacs: Font Setup.

You can set 【Ctrl+F7】 and 【Ctrl+F8】 to switch to the prev/next font. [see Emacs: How to Define Keys]

Emacs Quick Start

  1. Where to Download?
  2. Emacs First Day
  3. Basic Emacs Keys
  4. Basic Tips
  5. Less-known Tips
  6. Fun with Emacs
  7. Emacs on Windows
  8. Build Emacs on Linux
  9. Build Emacs from git

Manage Windows

  1. Split Windows
  2. Restore Split Windows
  3. Make Buffer Flow Side-by-Side


  1. Emacs Bookmark
  2. Open Recently Opened
  3. Open File Fast
  4. Open Last Closed 🚀
  5. Open File Path Under Cursor 🚀
  6. Copy File Path


  1. List Buffers
  2. Switch Buffer
  3. Ido Mode
  4. New Empty Buffer 🚀
  5. Next/Previous User Buffer 🚀


  1. File Manager, dired
  2. Batch Rename Files
  3. Dired Sort by Time, Size 🚀
  4. Rename File, Space to Hyphen/Lowline

On Current File

  1. Run Current File
  2. Delete Current File
  3. Backup Current File
  4. Convert File Line Ending
  5. Open File in External App 🚀

Find Replace

  1. Search Text in Buffer
  2. isearch Current Word 🚀
  3. Isearch Whitespace Regex
  4. Highlight Text in Buffer
  5. List Delete Highlight Sort Lines
  6. Search Text in Directory
  7. Find Replace in Buffer
  8. Find Replace in Directory
  9. xah-find.el, Find Replace in Pure Elisp
  10. Regex Tutorial


  1. Copy/Paste and kill-ring History
  2. Copy/Cut Current Line If No Selection 🚀
  3. Copy/Cut All or Selection 🚀
  4. Paste or Paste Previous 🚀
  5. Show kill-ring 🚀
  6. Copy to Register
  7. 1 Key to Copy/Paste Register 🚀
  8. Copy Append 🚀
  9. Sync Copy/Paste Clipboards with Linux X11


  1. Unicode Basics
  2. Unicode Tutorial
  3. Emacs File Encoding FAQ
  4. Best Unicode Fonts for Programer
  5. Elisp: Unicode Escape Sequence
  6. Xah Math Input Mode
  7. Xah Unicode Browser Mode


  1. Font Setup
  2. Proportional Font
  3. Cycle Fonts by Command
  4. Set Line Spacing


  1. Clean Empty Lines
  2. Delete Trailing Whitespace
  3. Delete Whitespace around Cursor 🚀
  4. Newline Representation ^M ^J ^L
  5. Make Whitespaces Visible

Rectangle Edit

  1. Edit Column Text, Rectangle Commands
  2. Insert Alphabets A to Z
  3. Copy Rectangle Region to kill-ring
  4. Align Text
  5. picture-mode, ASCII Diagram

Line Wrap

  1. Hard Wrap Lines
  2. Toggle Line Wrap 🚀
  3. Reformat Lines for Source Code 🚀
  4. Visual Line Mode, Wrap Lines
  5. Novel Reading Mode 🚀
  6. toggle-word-wrap


  1. Run Shell in Emacs
  2. Why Run Shell in Emacs?
  3. Difference between shell, term, eshell
  4. eshell
  5. View Linux man Page

View Things

  1. Spell Checking
  2. View Info Page
  3. View Image File
  4. View Image Thumbnails
  5. Eww Web Browser

Working with Brackets

  1. Insert Brackets by Pair 🚀
  2. Delete Brackets ()[]{} by Pair 🚀
  3. Jump to Bracket/Quote 🚀
  4. Change Brackets/Quotes

Enhanced Editing

  1. Select Line, Block, Quote, Extend 🚀
  2. Move Cursor to Beginning of Line/Paragraph 🚀
  3. Move Cursor by Text Block 🚀
  4. Move Cursor to Punctuation 🚀
  5. Delete Text Block 🚀
  6. Toggle Comment 🚀
  7. Toggle Letter Case 🚀
  8. Spaces to Lines 🚀
  9. Quote Lines 🚀
  10. Insert Date Time 🚀

Org Mode

  1. Org Mode Markup Cheatsheet
  2. org-mode Tutorial
  3. Source Code Markup
  4. Org Mode for Todo
  5. Org Mode Customization
  6. Elisp: Parse Org Mode


  1. Emacs HTML Tips
  2. Insert HTML Tag
  3. Add Paragraph Tags
  4. Color CSS Color Values
  5. URL to Link, Simple
  6. URL to Link, with Date
  7. Link to Dead Link
  8. Citation to Link
  9. Word to Wikipedia Link
  10. Wikipedia URL to Link
  11. Amazon URL to Link
  12. Google Map URL to Link 🌐
  13. Chinese Char to Ref Link
  14. Image Path to Link
  15. Extract URL
  16. URL Percent Decode/Encode
  17. Replace HTML Entities
  18. Lines to List
  19. Lines to Table
  20. Color Source Code
  21. update-title
  22. CSS Compressor
  23. Markup Function Names
  24. Make Ruby Annotation
  25. Move Image File 🚀
  26. Xah HTML Mode

Emacs Efficiency

  1. Keyboard Macro
  2. Completion
  3. Abbrev Mode
  4. Interactive Abbrev 🚀
  5. Use Alias for Fast M-x
  6. Jump to Previous Mark
  7. Repeat Last Prompted Command
  8. Effective Windows Management
  9. Tips on Long Term Emacs Productivity


  1. Using magit for git
  2. Emergency vi
  3. Command to Open Menu
  4. Edit Tables
  5. Emacs Chinese Input
  6. GUI vs Terminal

If you have a question, put $5 at patreon and message me.
Or Buy Xah Emacs Tutorial
Or buy a nice keyboard: Best Keyboards for Emacs


Emacs Lisp