Xah Emacs Blog Archive 2023-01
- 2023-12-31
- Emacs: Xah Fly Keys ๐ฆ
xah-run-current-file
now uses the same output buffer. (before, each time it runs, it creates a new buffer.)- fixed a minor error. changed
xah-run-wolfram-script
toxah-wolfram-run-script
- 2023-12-31
- Emacs: Xah Wolfram Mode ๐ฆ
xah-wolfram-run-script
now output to the same buffer. (before, each time it outputs to a new buffer)
- 2023-12-20
- Emacs: Xah Lookup Web (xah-lookup.el) ๐ฆ
xah-lookup-word-on-internet
now lookup current line if cursor is at beginning of line and no selection.
- 2023-12-12
- Emacs: Xah Wolfram Mode ๐ฆ
xah-wolfram-smart-delete-backward
fixed dependency and bug on comment. Now can also delete just bracket. many other abbrev/template improvement.
- 2023-12-12
- Emacs: Xah HTML Mode ๐ฆ
xah-html-image-to-img-tag
some refactor.
- 2023-12-12
- XahEmacs
- xah-repeat-key changed to backslash. was m.
- 2023-12-03
- Emacs: Xah HTML Mode ๐ฆ
- xah-html-link-dispatch fixed a dispatch for
xah-html-wolfram-ref-to-link
- 2023-12-04
- Emacs: Xah Fly Keys ๐ฆ
xah-run-current-file
now allowuniversal-argument
to prompt user. (need more fix when it's golang, java, WolframLang file.) also removed temp NO_COLOR shell env var for deno.- xah-unicode-list minor change. now use colored heart that's always emoji, instead of the heart suit.
- 2023-12-03
- Emacs: Xah HTML Mode ๐ฆ
xah-html-path-to-url
new, and other fixes
xtodo old article, maybe review and update
- Elisp: Process HTML Files, Create ZIP Archive
- Elisp: Command to Update RSS/Atom Webfeed
- Elisp: Text Processing, Transforming Page Tag
- Elisp: Find Replace Multiple String Pairs
- Elisp: Process File line-by-line
- Process HTML with Emacs Lisp: Transform FAQ Tags
- Elisp: Generate Web Links Report
- Emacs: Find Replace on Multiple Files by Function: Add Unicode Name in HTML
- Emacs Lisp Find Replace String-Pairs Commands
- Elisp: a Function That Works on String or Region
other updates
- 2023-11-19
- Emacs: Xah Elisp Mode ๐ฆ
- added real-this-command
- 2023-11-19
- Emacs: Xah HTML Mode ๐ฆ
xah-html-select-element
bug fix. sometimes fails to delete end tag, due to real-this-command vs this-command- cleanup
xah-html-get-relative-path-via-webroot
andxah-html-file-path-to-relative-path-or-url
- 2023-11-19
- Emacs: Xah Math Input Mode ๐ฆ
- fix. abbrev sp cycles to NO-BREAK SPACE and IDEOGRAPHIC SPACE
- 2023-11-17
- Emacs: Xah CSS Mode ๐ฆ
- added support for flex, keywords and abbrev/template.
- rename
xah-css-format-compact
toxah-css-format-compact-block
- rename
xah-css-format-expand
toxah-css-format-expand-block
- 2023-11-17
- Emacs: Xah HTML Mode ๐ฆ
xah-html-split-uri-query-mark
new.xah-html-html-to-text
refactor.xah-html-local-file-to-link
refactor.
- 2023-11-14
- Emacs: Xah Lookup Web (xah-lookup.el) ๐ฆ
xah-lookup-internet-archive
new.
- Emacs Select Word Command Problem
- A Text Editor Feature: Extend Selection by Semantic Unit
- Emacs: Usability Problems of Letter-Case Changing Commands
- Emacs: Toggle Letter Case ๐
- 2023-11-13
- Emacs: Xah Find Replace (xah-find.el) ๐ฆ
- key changes.
- List all files
xah-find-list-files
is ใTab lใ (was shift enter), open all isxah-find-open-all
ใtab oใ. (was ctrl enter). - Removed duplicate keys for navigating search results. now just arrow keys. not tab, shift tab, meta n, meta p.
- 2023-11-12
- Emacs: Xah Fly Keys ๐ฆ
- major update on xah-smart-delete and related.
xah-smart-delete
now support extension. e.g. if in html mode, pressing the key deletes a whole html element, instead of bracketed text.- Mechanism is via the var xah-smart-delete-dispatch.
xah-delete-backward-char-or-bracket-text
removed, replaced byxah-delete-bracket-text-backward
.xah-delete-string-backward
new.- Issues: alpha version. might be some bug, also design might improve in coming weeks. e.g. right now, if a major mode matches, e.g. html-mode, the html mode's function may delete matching tags. however, it lost the ability to delete paren text, unless itself has code to do that. The bottom issue is priority. if external function has priority, the external function needs to duplicate parts of xah-smart-delete behavior.
- if
xah-smart-delete
has priority, the external function lost the ability to act differently on brackets.
- 2023-11-12
- Emacs: Xah HTML Mode ๐ฆ
- new:
xah-html-smart-delete-backward
,xah-html-delete-element-backward
.
- 2023-11-12
- Emacs: Xah Wolfram Mode ๐ฆ
- new:
xah-wolfram-smart-delete-backward
,xah-wolfram-delete-comment-backward
- 2023-11-11
- Emacs: Xah Fly Keys ๐ฆ
- New keys and extra keys for
delete-other-windows
key is qwerty apostrophe (dvorak hypen).split-window-below
key is qwerty hyphen (dvorak left square bracket).split-window-right
key is qwerty equal (dvorak right square bracket).xah-cycle-hyphen-lowline-space
is qwerty backslash (dvorak backslash).- Reason: the
delete-other-windows
is most frequently used. It has a key 3. - The key 3 is on number row. And on concave surface keyboards (e.g. kinesis glove80) , it's not easy to press, and in fact got me serious Repetitive Strain Injury around 2016 to 2020 for pressing that key. (see Computer Keyboard Hand Pain, Year 2020 (Left Forearm Hurts))
- So now, new duplicate keys to relief the problem, which i've been using personally since 2020.
- On normal flat keyboards, this is less a issue, because people tend to press 3 by moving whole hand, not extending index finger.
- removed
xah-forward-punct
,xah-backward-punct
. i think rarely used. use isearch instead.
- 2023-11-11
- Emacs: Xah HTML Mode ๐ฆ
xah-html-markdown-to-html
new, incomplete.xah-html-compact-def-list
refactor.
- 2023-11-06
- Emacs: Xah Lookup Web (xah-lookup.el) ๐ฆ
xah-lookup-map
new
- 2023-11-05
- Emacs: Xah HTML Mode ๐ฆ
- changed view in browser keys.
xah-html-open-in-browser
is now [leader b] and view in chrome, Firefox, etc is [leader u b etc] - xah-html-open-in-browser now can open filename that has space
Emacs lisp problem. make repeat-complex-command not stuck with previous region
- interesting discussion
- Re: [nongnu] elpa/xah-fly-keys 9637e144a0: - xah-copy-rectangle-to-kill-
- https://lists.gnu.org/archive/html/emacs-devel/2023-11/msg00102.html
the problem is:
- you want a interactive command that works on a region, and if no active region, use say current line.
- you want
repeat-complex-command
to work, not stuck on previous region. - you want it to have begin end parameters so it can be called by other elisp functions with precise region.
current solution
- make the begin and end parameters optional.
- in your function body, check if they are nil and give them proper value.
Xah Packages Update
- 2023-11-02
- Emacs: Xah Fly Keys ๐ฆ
xah-copy-rectangle-to-kill-ring
removed. usecopy-rectangle-to-register
.copy-rectangle-to-register
now has a key. โr jโ in dvorak, โo cโ in qwerty.xah-slash-to-backslash
now has key โr mโ (dvorak). was โr jโxah-unescape-quotes
now can be repeated byrepeat-complex-command
- 2023-11-03
- Emacs: Xah Dired Mode (xah-dired.el) ๐ฆ
xah-dired-show-all-subdirs
new.
- 2023-11-03
- Emacs: Xah HTML Mode ๐ฆ
xah-html-insert-pre-tag
now support rle (for Game Of Life)- xah-html-move-image-file-regex-list var. now more proper detect twitter's image name. for
xah-html-move-image-file
xah-html-encode-ampersand-entity
andxah-html-decode-ampersand-entity
, refactor. now begin end params are optional.
- Elisp: Sequence Functions major update
- Elisp: Remove Elements in List
Xah Packages Update
- Emacs: Xah Fly Keys ๐ฆ
xah-delete-current-file-make-backup
better code.xah-quote-lines
removed begin end param, so that repeat-complex-command works.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-select-element
changed key. was e, now m.
- xah-dired.el
xah-change-file-line-ending-style
fixed a dead error introduced few months ago.
xah package updates
- 2023-10-25
- Emacs: Xah Fly Keys ๐ฆ
xah-close-current-buffer
, now ifuniversal-argument
is called, just callkill-buffer
- 2023-10-25
- Emacs: Xah HTML Mode ๐ฆ
- xah-html-link-dispatch, added and reordered. and refactor
xah-html-local-links-to-fullpath
,xah-html-local-links-to-relative-path
- 2023-10-18
- Emacs: Xah HTML Mode ๐ฆ
xah-html-convert-to-jpg
now with universal-argument it'll delete the original
- 2023-10-17
- Emacs: Xah Find Replace (xah-find.el) ๐ฆ
xah-find-replace-text
andxah-find-replace-text-regex
now save all buffers first.xah-find-text-regex
stop ask too many questions when called interactively.
updated
- Emacs: Xah Wolfram Mode ๐ฆ
xah-wolfram-format-pretty
,xah-wolfram-format-compact
fixed boundary error.
added Tip icon, and other minor update
- Emacs: File Manager, dired
- Emacs: Toggle Monospace / Proportional Font
- ๐ Emacs Init: Variable Pitch Mode (Proportional Font)
- Emacs: Cycle Fonts by Command ๐
- Elisp: Functions on Line
- Elisp: Read File Content as String or Lines
- Elisp: Process File line-by-line
- Emacs: Hook
- Emacs: Copy to Register
- Emacs: Show Variable Value
- Emacs: Repeat Last Command
- Emacs: Case Sensitivity in Text Search Commands
- Emacs: Narrow to Region
- Emacs: Microsoft Windows FAQ
- Emacs: No Wrap Lines
- Emacs: Jump to Previous Position
- Emacs Keys: Super Hyper
- Emacs Init: Highlight Brackets
- Emacs: Command Name Alias
- Elisp: Write File
- Elisp: Variable
- Elisp: Text Editing Functions
- Elisp: Buffer Functions
- Elisp: Sequence Iteration
- Elisp: Loop
- Elisp: Exit Loop or Function (throw, catch)
- Elisp: Apply Function (List to Args)
- Emacs: Xah Elisp Mode ๐ฆ
xah-elisp-complete-or-indent
better, alsoxah-elisp-prettify-root-sexp
,xah-elisp-compact-parens-region
rewrite,xah-elisp-complete-symbol
.
- xah-elisp-util.el
xah-fix-datetime
now supports new format mm.dd.yyyy
- Emacs: Xah Fly Keys ๐ฆ
xah-delete-current-text-block
now when in blank lines, delete those and next text block (instead of deleting just 2 blank lines). This was the original behavior. this is better because this command can be relied on to always delete current or next text block.
- 2023-10-05
- Emacs: Xah Fly Keys ๐ฆ
xah-beginning-of-line-or-block
now skip all blank lines. This was the original behavior, is better. Also, end cursor at end of line, and this is more consistent withxah-end-of-line-or-block
also more useful.
- 2023-10-01
- Xah Fly Keys
xah-insert-date
better prompt string. more clarity.
- 2023-10-01
- Emacs: Xah HTML Mode ๐ฆ
- xah-html-link-dispatch added
xah-html-wolfram-ref-to-link
updates
updates
- Emacs: Xah Fly Keys ๐ฆ
xah-change-bracket-pairs
critical bug fix. error due to last commit.xah-run-current-go-file
if buffer is not file, now do nothing. (was prompt for save.) new behavior follow user interface principle of no unexpected prompt.- xah-run-current-file-map fixed a bug. before, this was defconst, now its defvar.
xah-open-file-at-cursor
if file not exist, just create it, do not ask.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-open-local-link
if file not exist, just create it, do not ask.
- Emacs: Xah Wolfram Mode ๐ฆ
xah-wolfram-run-script
now show output in a split pane.
updated.
- also thanks to
- ใKill Unsaved Emacs Buffers UX: Replacing Yes/No/Save with Meaningful Options By Christian Tietze. At https://christiantietze.de/posts/2023/09/kill-unsaved-buffer-ux-action-labels/ใ
updates.
- Emacs: Xah Fly Keys ๐ฆ
- archived version for emacs 27.
- new dev is on emacs 29.
- Emacs: Xah Fly Keys ๐ฆ
- fixed several command completion case sensitivity so no need to type capital letters when possible:
- xah-change-bracket-pairs
- xah-quote-lines
- xah-insert-date
- xah-insert-unicode
- xah-open-recently-closed
- Emacs: Xah HTML Mode ๐ฆ
- xah-html-insert-tag and xah-html-change-current-tag, ignore letter case for completion.
- xah-html-percent-decode-url added options args.
- moved xah-html-insert-open-close-tags from xah-html-mode.el to xah-html-engine.el
new version out. Buy Xah Emacs Tutorial
minor updates.
- Emacs: Xah Elisp Mode ๐ฆ
- new emacs 29 abbrev and template for keymap functions. and lots internal code cleanup
updates
- Emacs Init: Restore Opened Files (desktop-save-mode)
- Emacs Init: Save Cursor Position
- Emacs Init: Save Command History
updates
- Emacs: Xah HTML Mode ๐ฆ
- removed
xah-html-call-ImageMagick
. usexah-call-imagemagick
in xah-elisp-util.el
- Emacs: Xah HTML Mode ๐ฆ
- removed
xah-html-image-dimensions
xah-html-image-dimensions-imk
xah-html-imagemagick-path
xah-html-fix-datetime
xah-html-fix-datetime-string
- , use those similarly named in xah-elisp-util.el, now required.
renamed xeu_elisp_util.el to xah-elisp-util.el
xah-close-current-buffer if file is modified, simply cancel kill. this ui stick to the principle of do not prompt unexpectedly.
massive update. shell, etc.
massive update on formatting
- Emacs: Xah Find Replace (xah-find.el) ๐ฆ
xah-find-list-files
new.xah-find-replace-text-regex
now dont ask all questions.xah-find-count
now act on selection if exist.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-validate-xml-dir
better output format. plus misc other code tweaks.
another massive update. 2023-09-09
- Emacs: Show in Desktop ๐
- Emacs: Open File in External App ๐
- Emacs: Open in Terminal ๐
- Emacs: Open in vscode ๐
- Emacs: Open Python Doc ๐
- Emacs: Open in TextEdit ๐
- Emacs: View URL in Web Browser, browse-url
- Emacs: Eww Web Browser
- Emacs: Command to Search Web ๐
- Emacs: Xah Lookup Web (xah-lookup.el) ๐ฆ
- Emacs Init: Mouse Wheel Config
- ๐ Emacs: Mouse Wheel Commands
- Emacs: Mouse Click to Highlight Matching Words
massive updates, repeat, whitespace etc.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-extract-url
added an argument that fixed a bug in generating full path when this is called in elisp code
massive updates
- Emacs: Get Char Info. Name, Position, Font, Encoding, Syntax, Etc
- Emacs: Visual Line Mode
- Emacs: Toggle Word Wrap
- Emacs: Novel Reading Mode ๐
- Emacs: No Wrap Lines
- Emacs: Hard-Wrap Lines (fill-paragraph)
- Emacs: Reformat to Long Lines (unfill-paragraph) ๐
- Emacs fill-paragraph Problem
- Emacs: Reformat Lines for Source Code ๐
- Emacs Init: Show Line Numbers
- Emacs: linum mode ๐
- Emacs Init: Show Cursor Column Position
- Emacs Init: Highlight Current Line
- Emacs Init: Arrow Key for Screen Line or Logical Line
- major rewrite:
- The find replace functions now return a list (useful in lisp code)
- Now they do not switch to the output buffer, only display it. (experimental)
- Completion for many functions should now be more compatible to various completion style.
- much faster.
updates
new article and updates
Xah Emacs Packages update
xah-html-lines-to-def-list
now when dd text is missing, just use โ.
- Added a yandex search. useful for going around American censorship.
- Emacs: Xah Lookup Web (xah-lookup.el) ๐ฆ
Xah Emacs Packages update
- Emacs: Xah Fly Keys ๐ฆ
xah-change-bracket-pairs
changed arg format. The choices start with ascii chars. To make it better for various completion setup or icomplete that is not fido or ido.

- Emacs: Xah CSS Mode ๐ฆ
xah-css-smart-newline
code tweak. better errorsxah-css--ahf
name changed toxah-css--abhook
- now (qwerty space .) (dvorak space v) is
universal-argument
. experimental. xah-quote-lines
,xah-insert-date
,xah-insert-unicode
,xah-open-recently-closed
now more compatible with name completion that's not ido or fido.xah-change-bracket-pairs
code tweak.
- xah-dired.el
xah-dired-sort
โขxah-dired-2drawing
โขxah-change-file-line-ending-style
โข now more compatible with name completion that's not ido or fido.
- xah-find.el
- many commands that do prompt, now more compatible with name completion that's not ido or fido. plus other misc code tweaks
- xah-html-mode.el
- many commands that do prompt, now more compatible with name completion that's not ido or fido. xah-html--ahf renamed to xah-html--abhook
- xah-js-mode.el
xah-typescript-compile-file
now more compatible with name completion that's not ido or fido. plus other code tweaks.
- xah-wolfram-mode.el
xah-wolfram-run-script
now more compatible with name completion that's not ido or fido.xah-wolfram--ahf
renamed toxah-wolfram--abhook
major rewrite on icomplete.
updates.
- Emacs: Xah Fly Keys ๐ฆ
xah-shrink-whitespaces
is back on qwerty w.xah-fly--define-keys
redefined as a function, not lisp macro.- The advantage of macro is saving a fraction of second when loading a byte-compiled version.
- but disadvantage is complication.
- The function version can now easier deal with dynamic list, where the command part may be any expression.

now link to emacs manual on my site has a new style.

Before, the (info "string")
is actually elisp code to refer to a node in the manual.
It's esoteric, not many people understand.
inconsistent date format in emacs lisp files. these are from emacs 29.

- major rewrite Elisp: Create Function Templates
- ๐ Emacs: Insert Emoji
- tooltips for emacs function/command docstring been updated to emacs 29.
- Emacs NEWS.29
- the Emacs NEWS.29 file, now you can move mouse over to see docstring of new functions.
- Emacs 29 (Released 2023-07)
- also, all emacs lisp manual functions also have tooltip docstring.
- Top (ELISP Manual)
- Emacs: Xah HTML Mode ๐ฆ
xah-html-keyboard-shortcut-markup
now properly format input such as C-x 8 e s
- Emacs: Xah Fly Keys ๐ฆ
- xah-insert-ascii-single-quote now has a key again, qwerty space d s
- xah-close-current-buffer new code. Now support emacs 29 recently closed hook.
- xah-save-close-current-buffer removed. this command has a problem when a buffer is modified outside emacs and nearly impossible to close.
updates.
- Emacs Init: Intro
- Emacs Init: Set Default Major Mode
- Emacs: Minor Mode
- Emacs Init: Show Line Numbers
- Emacs: linum mode
Xah Emacs Packages update
- 2023-08-12
- Emacs: Xah Fly Keys ๐ฆ
- xah-shrink-whitespaces old behavior is back
- Xah elisp mode
- Lots abbrev changes. Xah elisp mode. Details below.
- Added some 10 abbrev/template on seq- functions (not all yet), also v for vector.
- Changed most abbrevs so that cursor is place before the parameter instead of after.
- e.g. (push NEWELTโฎ PLACE) is now (push โฎNEWELT PLACE)
- This way, it's easier if you want to paste in a value, because you don't have to move cursor back and forth between words.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-any-to-link
now if cursor is at beginning of line, use whole line as input.xah-html-remove-tag-pair
fix a problem when cursor is just right after <.xah-html--goto-prev-tag-begin
now warn if you have unencoded <.xah-html-disable-script-tag
now the new tag is scriptx instead of script2.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-any-to-link
rewrite. now use xah-html-link-dispatch. removed xah-html-any-to-link-pre-hook and xah-html-any-to-link-hook
- Emacs: Xah Fly Keys ๐ฆ
xah-quote-lines
now has double quote and comma as default. andxah-copy-to-register-1
andxah-append-to-register-1
, minor change now also copy text propertie
- Emacs: Xah Fly Keys ๐ฆ
- removed alias of
xah-display-line-numbers-mode
toglobal-display-line-numbers-mode
orlinum-mode
. The variablexah-display-line-numbers-mode
is old in some early Xah Fly Keys and is not used long ago.
Xah Emacs Packages update
xah-css-complete-or-indent
rewritexah-elisp-complete-or-indent
rewritexah-js-complete-or-indent
rewritexah-pwsh-complete-or-indent
rewritexah-wolfram-complete-or-indent
rewrite
- Emacs: Xah Fly Keys ๐ฆ
- improved efficiency for
xah-goto-matching-bracket
,xah-shrink-whitespaces
,xah-extend-selection
, by avoid callinglooking-back
.
updated
massive updates
- Emacs Init: Setup Font
- ๐ Emacs Init: Font for Unicode Symbols
- Emacs: Change Font Size
- Emacs: Change Default Font Size by Command, for Current Session ๐
- Emacs Init: Highlight Brackets
- Emacs Init: Auto Insert Closing Bracket (electric-pair-mode)
- Emacs: Insert Brackets by Pair ๐
- Emacs: Delete Brackets by Pair ๐
- Emacs: Move Cursor to Bracket ๐
- Emacs: Jump to Matching Bracket ๐
- Emacs: Change Brackets ๐
- Emacs: Navigate Lisp Code as Tree
- Emacs Select Word Command Problem
- Emacs: Xah Fly Keys ๐ฆ
- changed var xah-punctuation-regex used by
xah-forward-punct
. xah-move-block-up
andxah-move-block-down
, rewrite, minor.xah-shrink-whitespaces
more fix.xah-extend-selection
minor fix, for selecting current word when at buffer beginning.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-mark-unicode
now respect vardescribe-char-unicodedata-file
. and other misc better.
- Xah Talk Show 2022-09-07 Emacs Lisp for Beginner
- Timestamp added.
- thanks to jupiterapollo4985
Xah Emacs Packages update
- Emacs: Xah Fly Keys ๐ฆ
- new command
xah-cut-text-in-quote
. key is qwerty (space k x) dvorak (space t q) xah-smart-delete
more tweak.xah-shrink-whitespaces
rewrote. they should now be fast and perhaps final correct behavior. (still does not work in minibuffer though, when space is at beginning, due to minibuffer prompt may not allow moving to. but i consider this ok. can be fixed but more complex code)
- Emacs: Xah Elisp Mode ๐ฆ
- xah elisp mode
- added abbrev cts for char-to-string
updates
- Elisp: Cursor Position Functions
- Elisp: Print, Output
- Elisp: File and Directory Functions
- Elisp: Sequence Iteration
- Elisp: Cut Copy Paste, kill-ring
- Emacs: Jump to Matching Bracket ๐
- Emacs Select Word Command Problem
- Elisp: Earth Coordinate to Google Map Link
- Emacs: Delete Whitespace around Cursor ๐
- Emacs: Cycle Hyphen Lowline Space ๐
- Emacs Select Word Command Problem
- Emacs: Xah HTML Mode ๐ฆ major update.
- Emacs: Xah PowerShell Mode ๐ฆ
- Emacs: Xah Fly Keys ๐ฆ
- major new version 24.
- Major key change, two commands is combined into one, and with a easier key, detail:
- The key (qwerty d) (dvorak e) now is
xah-smart-delete
, which doesxah-shrink-whitespaces
orxah-delete-backward-char-or-bracket-text
. (before, it just does the latter) - The key (qwerty w) (dvorak ,) now does
xah-delete-backward-char
. (before, it doesxah-shrink-whitespaces
)
xah-smart-delete
is new.xah-delete-backward-char
is new.xah-shrink-whitespaces
improved.
- The following commands have implementation change. Removed using
looking-back
, to improve speed. xah-goto-matching-bracket
xah-delete-backward-char-or-bracket-text
xah-delete-forward-bracket-pairs
xah-extend-selection
xah-css-complete-or-indent
now fasterxah-elisp-complete-or-indent
now faster
update
- now, abbrev related commands has ergo keys.
- And several keys for inserting unicode brackets are removed. (A bit experimental) Detail:
we had these keys before, was temp, never used by me much:
("TAB 1" . abbrev-prefix-mark) ("TAB 2" . edit-abbrevs) ("TAB 3" . expand-abbrev) ("TAB 4" . expand-region-abbrevs) ("TAB 5" . unexpand-abbrev) ("TAB 6" . add-global-abbrev) ("TAB 7" . add-mode-abbrev) ("TAB 8" . inverse-add-global-abbrev) ("TAB 9" . inverse-add-mode-abbrev) ("TAB 0" . expand-jump-to-next-slot) ("TAB =" . expand-jump-to-previous-slot)
now they have ergo keys (dvorak notation):
("e c r" . expand-region-abbrevs) ("e c t" . edit-abbrevs) ("e c u" . expand-abbrev) ("e c g" . add-mode-abbrev) ("e c c" . add-global-abbrev) ("e c m" . inverse-add-mode-abbrev) ("e c w" . inverse-add-global-abbrev) ("e c f" . unexpand-abbrev) ("e c h" . expand-jump-to-previous-slot) ("e c n" . expand-jump-to-next-slot) ("e c y" . abbrev-prefix-mark)
also, these keys are removed (rarely used):
("e c" . xah-insert-ascii-single-quote) ; ''
- Xah Fly Keys. xah-unicode-list changed format. was list of string, now assoc list.
- The command
xah-insert-unicode
implementation changed accordingly. - Added back several keys for commands that insert unicode brackets e.g.
xah-insert-corner-bracket
. These are useful, but unfamiliar to most american programers. (i use them to markup text, better than markdown's backtick that have problems with code contain it.) might be removed in the future.
- Xah Fly Keys
- change some command's use of
set-mark
topush-mark
, as proper. - commands changed are
xah-select-line
xah-select-text-in-quote
xah-extend-selection
xah-cycle-hyphen-lowline-space
- this fixed some rare mysterious bug, where some command pushed mark, but the mark disappeared.
xah-shrink-whitespaces
more fix. now 3 calls removes all whitespace, like before the rewrite.xah-shrink-whitespaces
, rewrote, now can work in minibuffer. However, behavior is slightly different than before. Before, it always ends up removing all whitespaces after repeated call. Now, either remove all, or leave just one newline. I think the new behavior is actually better.- Also removed
xah-delete-blank-lines
,xah-fly-delete-spaces
Xah Emacs Packages update
- Emacs: Xah HTML Mode ๐ฆ
xah-html-rename-source-file-path
more fix.- xah-html-any-to-link-hook now work on current path/url or selection. (before, it works on line or selection)
xah-html-keyboard-shortcut-markup
now work on current line or selection. (before, always currentline)xah-html-join-tags
minor reimplement.xah-html-rename-source-file-path
now shows relative path in prompt. (instead full). this makes it cleaner and easier to edit. Also colon in filename is replaced by lowline.- xah-html-any-to-link-hook now by default take current line as input (not guessing filepath or url chars).
xah-html-validate-xml-buffer
lots fix on correctness. now should return true if valid, else false.xah-html-validate-xml-dir
.- added
xah-html-amazon-url-to-link
and integrated toxah-html-any-to-link
- Emacs: Xah Elisp Mode ๐ฆ
- xah-elisp-mode.el added abbrev pt p1 pc and template for
print
print1
printc
xah-dired-rename-space-to-underscore
fixed a bug when parent dir contains space.
some key changes. now more ergo.
;; here's the new keys (all dvorak notation) ("t a" . xah-reformat-to-sentence-lines) ("t g" . goto-line) ("t n" . goto-char) ("t f" . move-to-column) ;; their old keys are ("t '" . xah-reformat-to-sentence-lines) ("t f" . goto-line) ("t c" . goto-char) ("t g" . move-to-column)
- Practical Emacs Tutorial.
- new version is out.
- the quickest way to master emacs.
- buy it.
minor updates.
updated code
- Emacs: Xah HTML Mode ๐ฆ
- major addition: xah-html-validate-xml-buffer, xah-html-validate-xml-file, xah-html-validate-xml-dir
- xah-html-move-image-file major rewrite. now don't prompt user. see doc string.
- xah-html-remove-tags rewrite.
- Some key change on xah-html-format-to-multi-lines, xah-html-update-title-h1
- xah-html-keyboard-shortcut-markup output do not add space around plus sign.
- xah-html-pre-tag-to-new-file key changed. and also several other related commands.
- 2023-07-04
- xah-html-update-title-h1 now trim whitespaces at ends
- xah-html-move-image-file now replace paren char by lowline
start new emacs instance sans prompt
- make sure your emacs can always start an instance without effecting existing instance. (so that, you can start a new emacs anytime when some job freezes emacs)
- the key is to make sure when you start a new emacs instance, there is no prompt that requires you to answer questions.
- also, do not use emacs server feature. it creates a lot complications.
- how? just start a new emacs instance. if you get any promp, try to change your init so there is no prompt.
updated. new pages.
- Emacs: Xah Fly Keys ๐ฆ
xah-open-in-external-app
andxah-show-in-desktop
. fixed linux problem bug 156. call-process arg DESTINATION is now 0. thanks to telephonist95.
update.
- Emacs: Xah HTML Mode ๐ฆ
xah-html-convert-to-jpg
now check if it exist firstxah-html-remove-tag-pair
now just delete tag pair, not treat tags such as img a iframe as special by leaving attribute content.xah-html--goto-prev-tag-begin
rewrite.
added to topic box for list.
new pages and updates.
xemacs new release. reviving from the dead. last release is 2013. https://www.xemacs.org/Releases/21.5.35.html

lots update
- xah-html-mode.el
- new xah-html-add-twittercard-buffer
- new xah-html-add-twittercard-to-file
- removed xah-html-add-twittercard
- xah-html-make-citation rewritten. now line order is important. (guessing often has errors)
- xah-html-insert-pre-tag new key. was m m, now m w.
- Emacs: Xah CSS Mode ๐ฆ
- internal var name change. rid of dollar sign
- xah elisp mode. internal var name change. rid of dollar sign
- xah-find.el. internal var name change. rid of dollar sign
- xah-go-mode.el internal var name change. rid of dollar sign
- xah-js-mode.el internal var name change. rid of dollar sign
- xah-php-mode.el internal var name change. rid of dollar sign
- xah-powershell-mode.el internal var name change. rid of dollar sign
- xah-python-mode.el internal var name change. rid of dollar sign
- xah-text-mode.el internal var name change. rid of dollar sign
- xah-wolfram-mode.el internal var name change. rid of dollar sign
more updates
starting a emacs community on twitter. https://x.com/xah_lee/status/1669760467496222720
updated.
lots updates and rewrite.
lots misc update
- Emacs: Xah HTML Mode ๐ฆ
xah-html-lines-to-list
now works on text block containing empty lines. removedxah-html-blocks-to-list
code update
- Emacs: Convert to Full-Width Characters ๐ code update.
Xah Emacs Packages updates
- Emacs: Xah HTML Mode ๐ฆ
xah-html-promote-header
andxah-html-demote-header
now can repeat by pressing up/down arrow keys.xah-html-rename-source-file-path
now also auto change apostrophe to lowline.xah-html-image-file-p
more efficient implementation.xah-html-any-to-link
fixed a wrong link type when path contain the word youtube.xah-html-image-file-p
and xah-html-image-to-link. major fix code of last commit.
- Emacs: Xah Fly Keys ๐ฆ
- xah-save-close-current-buffer fixed bug when closing buffer while in minibuffer.
- Emacs: Xah JS Mode (JavaScript) ๐ฆ
- xah js mode. new abbrevs. f for arrow function. (af for Array.from)
- xah python mode. added or fixed a lot abbrevs.
- new layout Xah Fly Keys Layout for Glove80 Keyboard
- Emacs: Xah HTML Mode ๐ฆ
xah-html-emacs-to-windows-kbd-notation
complete rewrite. removedxah-html-emacs-to-windows-kbd-notation
.
xah emacs packages update.
- Emacs: Xah CSS Mode ๐ฆ. now template for font family expand to 3 lines of typical fonts.
- Emacs: Xah Dired Mode (xah-dired.el) ๐ฆ
xah-dired-remove-all-metadata
do not switch to the output buffer. because often no interesting info there.
- Emacs: Xah Elisp Mode ๐ฆ better template for maphash, now includes lambda template.
- Emacs: Xah HTML Mode ๐ฆ. xah-html-image-file-extensions now includes avif. This means, other linking functions such as
xah-html-any-to-link
will do image link when the file is .avif.
- Emacs: Xah Math Input Mode ๐ฆ dagger2 for โก now changed to ddag and ddagger
- xah-python-mode.el experimental. now syntax color words starting with x as variable and starting for as function.
emacs lisp has generator function since 2015, modeled after JavaScript. by Daniel Colascione.

emacs lisp. if u see dash, s, f, in your dir, find out which packages is using it. delete them. never, install any packages that uses dash s f

- nice Xah Fly Keys layout diagram https://github.com/xahlee/xah-fly-keys/issues/155
- https://github.com/eugenesvk/kbdHelix/tree/xah-fly/layout-editor
- http://www.keyboard-layout-editor.com/
- diagram not accepted. because Keyboard Diagram, Word vs Icon
code update.
emacs. you can embed a browser as text properties!

xah-dired-optimize-png
now does not show output buffer. if you want to see output, you have to manually switch to it. Reason: showing the output buffer is annoying, because you have to manually dismiss it. usually, the output is not interesting.
- xah-dired.el some custome key changes.
- , is dired-prev-dirline
- . is dired-next-dirline
- e is prefix key
xah-delete-current-file-make-backup
now has leader key Space w DEL. (dvorak notation) (note the DEL is backspace). before, it was Space w d. Reason: on a normal ibm pc keyboard, the previous way is more ergonomic. but on kinesis advantage or other batman keyboard with DEL on thumb, the new is better. (applies to any othe ergonomic layout arrangement.) Also, the DEL is more intuitive, and saves the d spot for some other command. Overall, it's a tie. because the DEL key should ideally be on a easy position. we bias towards future, forward-looking.xah-change-bracket-pairs
major rewrite. the argument format is changed. Emacs: Change Brackets ๐- Xah Fly Keys Layout for Glove80 Keyboard updated

- Key changes:
- Added ใspace k bใ for
xah-title-case-region-or-line
. Key is more compatible withxah-toggle-letter-case
- Changed
xah-reformat-to-sentence-lines
from ใspace k bใ to ใspace k qใ, the key is more compatible with q forxah-reformat-lines
- Removed ใspace k 'ใ for
reverse-region
- Emacs: Xah HTML Mode ๐ฆ
xah-html-add-topic-box
now also do div.rltd . now has full doc.
xah-html-mode.el removed key C-r for xah-html-open-in-browser. Reason: the C-r is added for browser compatibility. For example, you can define a macro on a keypad to send C-r. when dev a website, you can press that single key, and you can also press that in emacs to view in browser.
now, removed. main reason is that it conflict with emacs C-r for isearch-backward, sometimes convenient when using Xah Fly Keys. binding C-r is hackish in the first place. now, we use F5 for browser refresh for the same purpose as C-r. Again, not a strong reason, but still convenient.
by the way, TAB b b is also bound to xah-html-open-in-browser, and there are other commands and keys to view in different browsers.
- Emacs: Xah Elisp Mode ๐ฆ added 2 abbrevs and templates
- Emacs: Xah Fly Keys ๐ฆ
xah-open-file-at-cursor
now consider paren as path stopper. this is useful because markdown put url in paren. while paren is sometimes seen in file path or Wikipedia url, but this is much rarer.
- Emacs: Xah Math Input Mode ๐ฆ changed smile โบ to ๐. the former is the original emoji, and often does not show as emoji. while the latter is emoji, and always displayed as such.
repost. lots updates weekly in past year.
minor correction.
added an optimot layout, removed beopy layout. optimot shouldn't be added because it's used by maybe just a hundred people in the world. however, cletip really ask for it. Also, he added beopy before which was added years ago in the early days, and beopy is another layout nobody heared of. from now on, only well-known keyboard layout should be supported in Xah Fly Keys. you can always put it to your init. optimot may be removed in the future.
lots updates.
- new var xah-temp-dir-path. now
xah-save-close-current-buffer
saves non-file buffers to that dir, and can re-open byxah-open-last-closed
minor updates
- Emacs: Open Python Doc ๐
- Emacs: Xah Dired Mode (xah-dired.el) ๐ฆ renamed variable starting with dollar sign to start with x
updates
- Emacs: Categorize Files to Directories (Move File to Dir) ๐ (xah-move-file-to-dir now work on dired marked files.)
major update.
- Elisp: Regex Functions. update. much better example for
replace-match
- Elisp: File Path Functions
Refactor. Changed all var naming, beginning dollar sign to x. Reason: sigil is great as syntactic design of a lang, but not a lisp tradition and is abnormal in lisp community. Using ascii prefix x is less odd in lisp, is easier to type, still retain some var name uniqueness property by syntax.
- Emacs: Xah Fly Keys ๐ฆ
xah-open-in-external-app
fixed file name contain space bug. Emacs: Open File in External App ๐
- Emacs: Xah Elisp Mode ๐ฆ added abbrev cr for completing-read and template.
- Emacs: Xah HTML Mode ๐ฆ removed abbrev hr and br. use xah-html-insert-tag instead, consistent.
Set emacs to start sans prompt, and don't use emacs daemon
Tip. setup your emacs so that you can start multiple emacs instances, without any prompt that might interrupt the start up and wait for you to answer a prompt.
and i don't use emacs daemon, because when you do elisp, you need to restart often for a clean emacs.
- Emacs: Xah Fly Keys ๐ฆ ,
xah-quote-lines
, better prompt order for line seperator. andxah-save-close-current-buffer
,xah-close-current-buffer
now use newxah-add-to-recently-closed
major update again
- Elisp: Regular Expression
- Elisp: Regex Functions
- Elisp: Find Replace Text in Buffer
- Emacs: Regex Backslash in Command Prompt
- Emacs Regex vs Regex in Python, JavaScript, Java
- ๐ Elisp: Convert Regex to Lisp Regex String
- ๐ Elisp: How to Test Regex
- ๐ Elisp: skip-chars-forward vs re-search-forward
- Emacs: Xah Find Replace (xah-find.el) ๐ฆ new command
xah-find-open-all
- Emacs: Xah Fly Keys ๐ฆ
xah-open-in-terminal
fixed bug on dir name containing space. also, new var xah-fly-mswin-terminal determines which terminal to open.
- Emacs: Xah Fly Keys ๐ฆ
xah-open-in-external-app
fixed bug on Microsoft Windows of filename contain apostrophe, also now more efficient by calling start-process instead of shell.
- Emacs: Xah Fly Keys ๐ฆ, removed
xah-dired-rename-space-to-underscore
andxah-dired-rename-space-to-hyphen
. doesn't belong here. (moved to Emacs: Xah Dired Mode (xah-dired.el) ๐ฆ)
- minor update Emacs: File Manager, dired
emacs people on odysee
Now, posting some emacs people on odysee. We should post links to odysee, instead YouTube. These are great video channels.
- Gavin Freeborn [Getting Evil (aka Vim keys) in Emacs without Doom Emacs ] ( https://odysee.com/@GavinFreeborn:d/getting-evil-(aka-vim-keys)-in-emacs:9 )
- David Wilson (System Crafters) [ The Basics of Emacs Configuration ] ( https://odysee.com/@SystemCrafters:e/the-basics-of-emacs-configuration:2 )
- Protesilaos Stavrou [ Philosophy: productivity, honesty, and accountability structures ] ( https://odysee.com/@protesilaos:6/philosophy-productivity,-honesty,-and:1 )
- Xah Lee [ Xah Talk Show 2023-02-23 Emacs Lisp Writing URL Parser ] ( https://odysee.com/@XahLee:b/xah-talk-show-2023-02-23-emacs-lisp:6 )
updates.
major rewrite and updates
- minor update Emacs: Bookmark
major update. Emacs: Xah Wolfram Mode ๐ฆ
xah-major-mode-leader-key
the xah-major-mode-leader-key is meant as system-wide leader key for packages, at least for xahemacs.
in gnu emacs, major mode's keys are fairly bad and unmageneable, because major mode keys by their convention is to have this form C-c C-โนkeyโบ etc. so, hard for pinky, and impossible to have a leader, and impossible to change for all major modes.
the way i have it, isn't ideal, but is probably the most simple solution.
also, i don't like define-custom. those are semi gui, hard to understand, easy to screw things up, and not all settings can be controlled by it. i think doomemacs also adopted not to support that semi gui custom.
xah-dired-open-in-irfanview
rewrote, much faster. now use start-process instead of starting a shell for each.
Similarly other opening commands

major update.
updated.
complexity of escape key in emacs
major update and new
Experimental. now Escape key by default is bound to xah-fly-command-mode-activate
. Reason:
Advantage:
- on Kinesis 360 and Glove80 Keyboard the traditional capslock position is Escape. This makes it convenient for these keyboards.
- also, it's a convention of vi/vim/neovim to have Escapeape activate command mode. This can save some learning time.
- save the trouble to rebind capslock to home key, for those want efficient key.
The disadvantage of bind Escape:
- On text terminal, in the case that meta key is not setup, you lose the ability to press meta key bound commands. (but this is rare on modern terminals.)
- Esc, on traditonal keyboard, is a bit far away, and not optimal. So, lazy people may develope a habit to turn left wrist to press it. This is a Repetitive Strain Injury danger.
- On some people's Xah Fly Keys customization, Esc is remapped to C-g (cancel) by key-translation-map. for those who did this, it'll still work.
Note:
- on ergonomic keyboards and layouts, there is an emerging standard to not have a capslock key on the traditional position to the left of qwerty A. (e.g. google chromebook, and many batman keyboards)
- but there is no emerging standard what that key should be.
- colemak has backspace (but on ergonomic keyboards with thumb keys, that's not a optimal choice)
- some has esc. some has ctrl. (not a good choice unless on laptop)
2023-01-27
revert last change. Now, escape key no longer do xah-fly-command-mode-activate
.
Because: if you bind <escape>
, then it works in gui only, but not terminal. Very confusing.
If you bind ESC
, then in terminal arrows keys break, also F1 F2 etc keys.
So, best solution is to let user customize instead.
Thanks to yegor maltsev
new.
switched to oxipng from optipng, and massive update to the emacs lisp code, much speed improvement. Emacs: Xah Dired Mode (xah-dired.el) ๐ฆ and see also Optimize png Files, oxipng
update and new.
;; go to insert mode in Xah Fly Keys (add-hook 'dired-mode-hook 'xah-fly-insert-mode-activate)
updates.