Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
########
#
# E-scripts on emacs things
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/emacs.e>
#           or at <http://angg.twu.net/e/emacs.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





This file is being reorganized.

# «.debian»		(to "debian")
# «.emacs-from-git»	(to "emacs-from-git")
# «.emacs-mirror»	(to "emacs-mirror")
# «.make-bootstrap»	(to "make-bootstrap")
# «.installing»		(to "installing")
# «.indexing»		(to "indexing")
# «.emacs-Q»		(to "emacs-Q")

On documentation:
# «.zcatinfo»			(to "zcatinfo")
# «.etc»			(to "etc")
# «.eetc»			(to "eetc")
# «.emacs-faq»			(to "emacs-faq")
# «.saving_index_pages»		(to "saving_index_pages")
# «.elintro-nondeb»		(to "elintro-nondeb")
# «.elispman-nondeb»		(to "elispman-nondeb")
# «.elispman-nondeb-nonroot»	(to "elispman-nondeb-nonroot")
# «.elintro-nondeb-nonroot»	(to "elintro-nondeb-nonroot")
# «.mailing-lists»		(to "mailing-lists")
#   «.bug-gnu-emacs»		(to "bug-gnu-emacs")
#   «.emacs-devel»		(to "emacs-devel")
#   «.help-gnu-emacs»		(to "help-gnu-emacs")
#   «.emacs-tangents»		(to "emacs-tangents")
# «.mailing-list-search»	(to "mailing-list-search")
# «.yhetil»			(to "yhetil")
# «.help-gnu-emacs-archives»	(to "help-gnu-emacs-archives")
# «.emacs-devel-mbox»		(to "emacs-devel-mbox")
# «.emacs-weekly-news»		(to "emacs-weekly-news")
# «.emacs-news-git»		(to "emacs-news-git")
# «.planet-emacslife»		(to "planet-emacslife")
# «.tutorials»			(to "tutorials")

Keyboard, glyphs, X, input modes, macros:
# «.kbd»			(to "kbd")
# «.key-description»		(to "key-description")
# «.read-kbd-macro»		(to "read-kbd-macro")
# «.format-kbd-macro»		(to "format-kbd-macro")
# «.define-key»			(to "define-key")
# «.make-sparse-keymap-prompt»	(to "make-sparse-keymap-prompt")
# «.key_bindings»		(to "key_bindings")
# «.key_name»			(to "key_name")
# «.meta-shift-letter»  	(to "meta-shift-letter")
# «.metakeyproblems»		(to "metakeyproblems")
# «.iso-accents»		(to "iso-accents")
# «.keymap2isoacc»		(to "keymap2isoacc")
# «.saving_emacs_macros»	(to "saving_emacs_macros")
# «.elmacro»			(to "elmacro")
# «.all-macros»			(to "all-macros")
# «.defmacro»			(to "defmacro")
# «.defmacro-let*»		(to "defmacro-let*")
# «.macro:DBG»			(to "macro:DBG")
# «.macrostep»			(to "macrostep")
# «.fontsets»			(to "fontsets")
# «.create-fontset»		(to "create-fontset")
# «.set-fontset-font»		(to "set-fontset-font")
# «.coding-systems»		(to "coding-systems")
# «.coding:»			(to "coding:")
# «.process-coding-system»	(to "process-coding-system")
# «.find-wget-jan-2024»		(to "find-wget-jan-2024")
# «.glyphs_X»			(to "glyphs_X")
# «.xmath-toggle»		(to "xmath-toggle")
# «.X_resources»		(to "X_resources")
# «.old_glyph_stuff»		(to "old_glyph_stuff")
# «.formfeed-glyph-2021»	(to "formfeed-glyph-2021")

The C source:
# «.emacs20-src»		(to "emacs20-src")
# «.tracing_the_glyph_bug»	(to "tracing_the_glyph_bug")
# «.emacs21»			(to "emacs21")
# «.emacs21-gdb»		(to "emacs21-gdb")
# «.emacs21-gdb_1»		(to "emacs21-gdb_1")

Other:
# «.interactive»		(to "interactive")
# «.interactive-modes»		(to "interactive-modes")
# «.cond»			(to "cond")
# «.intern-soft»		(to "intern-soft")
# «.string-match»		(to "string-match")
# «.match-string»		(to "match-string")
# «.replace-regexp-in-string»	(to "replace-regexp-in-string")
# «.while-string-match»		(to "while-string-match")
# «.replacing_in_strings»	(to "replacing_in_strings")
# «.hippie-expand»		(to "hippie-expand")
# «.tcsh_export»		(to "tcsh_export")
# «.debugging»			(to "debugging")
# «.debug.el»			(to "debug.el")
# «.edebug»			(to "edebug")
# «.call-interactively»		(to "call-interactively")
# «.easy-mmode»			(to "easy-mmode")
# «.temp-buffer»		(to "temp-buffer")
# «.scrolling_one_line»		(to "scrolling_one_line")
# «.ignoring_errors»		(to "ignoring_errors")
# «.ignore-errors»		(to "ignore-errors")
# «.condition-case»		(to "condition-case")
# «.catch-and-throw»		(to "catch-and-throw")
# «.pretty-printing»		(to "pretty-printing")
# «.mouse-select-window»	(to "mouse-select-window")
# «.gnuserv»			(to "gnuserv")
# «.gnuserv-old»		(to "gnuserv-old")
# «.tabs»			(to "tabs")
# «.tab-bar-and-tab-line»	(to "tab-bar-and-tab-line")
# «.display-line-numbers»	(to "display-line-numbers")
# «.add-to-list»		(to "add-to-list")

Parts of eev, or variations:
# «.inn-old»			(to "inn-old")
# «.eelatex-old»		(to "eelatex-old")
# «.mkto»			(to "mkto")
# «.new_goto-position»		(to "new_goto-position")

File variables:
# «.file-variables»		(to "file-variables")
# «.directory-variables»	(to "directory-variables")
# «.file-variables:eval»	(to "file-variables:eval")
# «.compile»			(to "compile")
# «.compile-command»		(to "compile-command")
# «.compilation»		(to "compilation")
# «.safe-local-variable»	(to "safe-local-variable")
# «.buffer-local»		(to "buffer-local")
# «.dir-locals»			(to "dir-locals")

# «.checkdoc»			(to "checkdoc")

Packages:
# «.load»			(to "load")
# «.require»			(to "require")
# «.load-path»			(to "load-path")
# «.locate-library»		(to "locate-library")
# «.autoload»			(to "autoload")
# «.compat»			(to "compat")
# «.w3»				(to "w3")
# «.backtrace»			(to "backtrace")
# «.debug»			(to "debug")
# «.C_indentation»		(to "C_indentation")
# «.calc»			(to "calc")
# «.nnml»			(to "nnml")
# «.hyperbole»			(to "hyperbole")
# «.hyperbole-eev-mail-1»	(to "hyperbole-eev-mail-1")
# «.hyperbole-eev-mail-2»	(to "hyperbole-eev-mail-2")
# «.hyperbole-mailing-lists»	(to "hyperbole-mailing-lists")
# «.hyperbole-videos»		(to "hyperbole-videos")
# «.dismal»			(to "dismal")
# «.packages»			(to "packages")
# «.packages-load-path»		(to "packages-load-path")
# «.package-dummy»		(to "package-dummy")
# «.packages-built-in»		(to "packages-built-in")
# «.package-install-file»	(to "package-install-file")
# «.package-initialize»		(to "package-initialize")
# «.package-untar»		(to "package-untar")
# «.package-check-signature»	(to "package-check-signature")
# «.package-create-tar»		(to "package-create-tar")
# «.package-duplicates»		(to "package-duplicates")
# «.package-duplicates-2»	(to "package-duplicates-2")
# «.package-vc-install»		(to "package-vc-install")
# «.package-vc-upgrade»		(to "package-vc-upgrade")
# «.package-upgrade»		(to "package-upgrade")
# «.package-recompile-all»	(to "package-recompile-all")
# «.package-get-descriptor»	(to "package-get-descriptor")
# «.ee-package-dir»		(to "ee-package-dir")
# «.epl»			(to "epl")
# «.archive-contents»		(to "archive-contents")
# «.elp»			(to "elp")
# «.elpa»			(to "elpa")
# «.elpa-git»			(to "elpa-git")
# «.gnu-elpa-keyring-update»	(to "gnu-elpa-keyring-update")
# «.elpa-problems-sep2019»	(to "elpa-problems-sep2019")
# «.elpa-problems-apr2020»	(to "elpa-problems-apr2020")
# «.elpa-problems-apr2020-t1»	(to "elpa-problems-apr2020-t1")
# «.melpa»			(to "melpa")
# «.melpa-stable»		(to "melpa-stable")
# «.marmalade»			(to "marmalade")
# «.nongnu-elpa»		(to "nongnu-elpa")

Drawing:
# «.rectangles»			(to "rectangles")
# «.life»			(to "life")
# «.artist-mode»		(to "artist-mode")
# «.box-drawing»		(to "box-drawing")
# «.box-chars»			(to "box-chars")
# «.ascii-art-to-unicode»	(to "ascii-art-to-unicode")
# «.palette»			(to "palette")
# «.pair-tree»			(to "pair-tree")
# «.bad.el»			(to "bad.el")
# «.boxy»			(to "boxy")
# «.uniline»			(to "uniline")

Interactive demos:
# «.emacs-animation»		(to "emacs-animation")

Etc/unclassified:
# «.describe-xxx_hyperls»	(to "describe-xxx_hyperls")
# «.customization-buffers»	(to "customization-buffers")
# «.customize-option»		(to "customize-option")
# «.man»			(to "man")
# «.Man-fontify-manpage»	(to "Man-fontify-manpage")
# «.xemacs21»			(to "xemacs21")
# «.faces»			(to "faces")
# «.face-fixed-pitch»		(to "face-fixed-pitch")
# «.set-string-face»		(to "set-string-face")
# «.split_eev»			(to "split_eev")
# «.erc»			(to "erc")
# «.erc-accents»		(to "erc-accents")
# «.environment»		(to "environment")
# «.setenv»			(to "setenv")
# «.spreadsheets»		(to "spreadsheets")
# «.ses»			(to "ses")
# «.spread»			(to "spread")
# «.emacspeak»			(to "emacspeak")
# «.emacspeak-eflite»		(to "emacspeak-eflite")
# «.menu-bar»			(to "menu-bar")
# «.menu-bar-entries»		(to "menu-bar-entries")
# «.map-keymap»			(to "map-keymap")
# «.tool-bar»			(to "tool-bar")
# «.beep»			(to "beep")
# «.beep-music»			(to "beep-music")
# «.async»			(to "async")
# «.dired»			(to "dired")
# «.wdired»			(to "wdired")
# «.dired-marker-char»		(to "dired-marker-char")
# «.find-dired-eek»		(to "find-dired-eek")
# «.dired-listing-switches»	(to "dired-listing-switches")
# «.dired-do-async-shell»	(to "dired-do-async-shell")
# «.dired-jump»			(to "dired-jump")
# «.dired-get-marked-files»	(to "dired-get-marked-files")
# «.dired-external-drives»	(to "dired-external-drives")
# «.dired-hacks»		(to "dired-hacks")
# «.SAR»			(to "SAR")
# «.syntax-tables»		(to "syntax-tables")
# «.trailing-whitespace-bug»	(to "trailing-whitespace-bug")
# «.face-glyph-bug»		(to "face-glyph-bug")
# «.emacs21-string-glyph-bug»	(to "emacs21-string-glyph-bug")
# «.backspaces»			(to "backspaces")
# «.isearch»			(to "isearch")
# «.query-replace»		(to "query-replace")
# «.ee-isearch»			(to "ee-isearch")
# «.ee-isearch-regexp»		(to "ee-isearch-regexp")
# «.calendar»			(to "calendar")
# «.diary»			(to "diary")
# «.customize-face»		(to "customize-face")
# «.kill-ring»			(to "kill-ring")
# «.browse-kill-ring»		(to "browse-kill-ring")
# «.regexp-syntax»		(to "regexp-syntax")
# «.regexp-quote»		(to "regexp-quote")
# «.C-h-after-prefix»		(to "C-h-after-prefix")
# «.emacs-from-git»		(to "emacs-from-git")
# «.emacs-from-cvs»		(to "emacs-from-cvs")
# «.texinfo-4.6»		(to "texinfo-4.6")
# «.autoconf-2.59»		(to "autoconf-2.59")
# «.splash-screen»		(to "splash-screen")
# «.eshell»			(to "eshell")
# «.eshell-video»		(to "eshell-video")
# «.try»			(to "try")
# «.font-and-geometry»		(to "font-and-geometry")
# «.w3m»			(to "w3m")
# «.w3m-forcing-html»		(to "w3m-forcing-html")
# «.w3m-upstream»		(to "w3m-upstream")
# «.w3mimgdisplay»		(to "w3mimgdisplay")
# «.w3m-goto-on-load»		(to "w3m-goto-on-load")
# «.find-face»			(to "find-face")
# «.c-mode-M-e»			(to "c-mode-M-e")
# «.eeplow»			(to "eeplow")
# «.gnus»			(to "gnus")
# «.http-emacs»			(to "http-emacs")
# «.tetris»			(to "tetris")
# «.tron»			(to "tron")
# «.planner-nondebian»		(to "planner-nondebian")
# «.planner»			(to "planner")
# «.loop»			(to "loop")
# «.run-at-time»		(to "run-at-time")
# «.overlays»			(to "overlays")
# «.enriched-mode»		(to "enriched-mode")
# «.outline-mode»		(to "outline-mode")
# «.emms»			(to "emms")
# «.max-lisp-eval-depth»	(to "max-lisp-eval-depth")
# «.writing-primitives»		(to "writing-primitives")
# «.built-in-functions»		(to "built-in-functions")
# «.mapatoms»			(to "mapatoms")
# «.setq-local»			(to "setq-local")
# «.mode-line»			(to "mode-line")
# «.global-mode-string»		(to "global-mode-string")
# «.lighter»			(to "lighter")
# «.mode-line-highlight»	(to "mode-line-highlight")
# «.compilation-mode»		(to "compilation-mode")
# «.generic-x»			(to "generic-x")
# «.key-translations»		(to "key-translations")
# «.propertize»			(to "propertize")
#   «.find-epropertize»		(to "find-epropertize")
# «.default-face-attributes»	(to "default-face-attributes")
# «.ee-mono-height»		(to "ee-mono-height")
# «.keymap-property»		(to "keymap-property")
# «.frames»			(to "frames")
# «.scroll-bars»		(to "scroll-bars")
# «.ebnf2ps»			(to "ebnf2ps")
# «.find-eCfunction»		(to "find-eCfunction")
# «.keywords»			(to "keywords")
# «.timers»			(to "timers")
# «.hooks»			(to "hooks")
# «.apt-cache-pkgsearch»	(to "apt-cache-pkgsearch")
# «.themes»			(to "themes")
#   «.customize-themes»		(to "customize-themes")
#   «.modus-themes»		(to "modus-themes")
#   «.themes»			(to "themes")
#   «.theme-my-emacs24»		(to "theme-my-emacs24")
#   «.color-theme.el»		(to "color-theme.el")
#   «.toggle-theme»		(to "toggle-theme")
#   «.standard-themes»		(to "standard-themes")
#   «.disable-theme»		(to "disable-theme")
# «.fontify-whole-buffer»	(to "fontify-whole-buffer")
# «.key-sequence-echo-message»	(to "key-sequence-echo-message")
# «.ee-stuff-around-point»	(to "ee-stuff-around-point")
# «.thing-at-point-url-regexp»	(to "thing-at-point-url-regexp")
# «.ffap»			(to "ffap")
# «.datatypes»			(to "datatypes")
# «.disassemble»		(to "disassemble")
# «.erc-bugs»			(to "erc-bugs")
# «.rcirc»			(to "rcirc")
# «.rcirc-git»			(to "rcirc-git")
# «.htmlfontify»		(to "htmlfontify")
# «.htmlfontify-old»		(to "htmlfontify-old")
# «.mkhtml»			(to "mkhtml")
# «.emacs-bidi»			(to "emacs-bidi")
# «.kill-buffer-protect»	(to "kill-buffer-protect")

# «.x-symbol»			(to "x-symbol")
# «.buttons»			(to "buttons")
#   «.insert-text-button»	(to "insert-text-button")
# «.bhl»			(to "bhl")
# «.with-output-to-temp-buffer»	(to "with-output-to-temp-buffer")
# «.find-wottb-call»		(to "find-wottb-call")
# «.circe»			(to "circe")
# «.iswitchb»			(to "iswitchb")
# «.help-C-file-name»		(to "help-C-file-name")
# «.arabic-fonts»		(to "arabic-fonts")
# «.dont-font-lock-this»	(to "dont-font-lock-this")
# «.lookup-key»			(to "lookup-key")
# «.keymap-lookup»		(to "keymap-lookup")
# «.define-derived-mode»	(to "define-derived-mode")
# «.transparence-in-keymaps»	(to "transparence-in-keymaps")
# «.greek»			(to "greek")
# «.greek-input-methods»	(to "greek-input-methods")
# «.greek-ibycus4»		(to "greek-ibycus4")
# «.math-chars-in-X»		(to "math-chars-in-X")
# «.fontsets-cvs»		(to "fontsets-cvs")
# «.hello-world-eval-buffer»	(to "hello-world-eval-buffer")
# «.find-ekeymapdescr»		(to "find-ekeymapdescr")
# «.active-keymaps»		(to "active-keymaps")
# «.find-node_index»		(to "find-node_index")
# «.Info-index»			(to "Info-index")
# «.info-initialize»		(to "info-initialize")
# «.Info-copy-current-node-name»  (to "Info-copy-current-node-name")
# «.edb»			(to "edb")
# «.prefix-macro»		(to "prefix-macro")
# «.prefix-region»		(to "prefix-region")
# «.mode-line-face-borderless»	(to "mode-line-face-borderless")
# «.window-configurations»	(to "window-configurations")
# «.emacs-wget»			(to "emacs-wget")
# «.load-history»		(to "load-history")
# «.dired-and-tar-mode»		(to "dired-and-tar-mode")
# «.emacsclient»		(to "emacsclient")
# «.emacsclient-and-multi-tty»	(to "emacsclient-and-multi-tty")
# «.flet»			(to "flet")
# «.cl-flet»			(to "cl-flet")
# «.setf»			(to "setf")
# «.letf»			(to "letf")
# «.cl-letf»			(to "cl-letf")
# «.cl-loop»			(to "cl-loop")
#   «.for-by»			(to "for-by")
# «.cl-loop-nested-fors»	(to "cl-loop-nested-fors")
# «.cl-loop-for-if-for-if»	(to "cl-loop-for-if-for-if")
# «.cl-loop-concat»		(to "cl-loop-concat")
# «.cl-destructuring-bind»	(to "cl-destructuring-bind")
# «.cl-map»			(to "cl-map")
# «.cl-progv»			(to "cl-progv")
# «.cl-defgeneric»		(to "cl-defgeneric")
# «.cl-defmethod»		(to "cl-defmethod")
# «.seq-let»			(to "seq-let")
# «.seq-filter»			(to "seq-filter")
# «.seq-mapcat»			(to "seq-mapcat")
# «.eieio»			(to "eieio")
# «.defclass»			(to "defclass")
# «.for»			(to "for")
# «.loopy»			(to "loopy")
# «.find-man-email-2020dec29»	(to "find-man-email-2020dec29")
# «.defadvice»			(to "defadvice")
# «.advice-add»			(to "advice-add")
# «.advice-examples»		(to "advice-examples")
# «.advice-log»			(to "advice-log")
# «.find-mylog-links»		(to "find-mylog-links")
# «.fontset-math-chars-bug»	(to "fontset-math-chars-bug")
# «.emacs-cvs-mkto-bug»		(to "emacs-cvs-mkto-bug")
# «.hex»			(to "hex")
# «.hexl-mode»			(to "hexl-mode")
# «.creating-utf8-files»	(to "creating-utf8-files")
# «.skeletons»			(to "skeletons")
# «.Help:IPA»			(to "Help:IPA")
# «.display-table-latin-1»	(to "display-table-latin-1")
# «.sony-fixed»			(to "sony-fixed")
# «.find-fontset-links»		(to "find-fontset-links")
# «.ee-font-unalias»		(to "ee-font-unalias")
# «.ee-set-frame-font»		(to "ee-set-frame-font")
# «.font-log»			(to "font-log")
# «.glyphs-as-conses»		(to "glyphs-as-conses")
# «.case-in-replace-regexp»	(to "case-in-replace-regexp")
# «.time-stamp»			(to "time-stamp")
# «.format-time-string»		(to "format-time-string")
# «.anchors-in-latin-1»		(to "anchors-in-latin-1")
# «.anchors-in-latin-1-2»	(to "anchors-in-latin-1-2")
# «.gdb-ing-emacs»		(to "gdb-ing-emacs")
# «.lenny-emacs-init»		(to "lenny-emacs-init")
# «.bitmap-mule»		(to "bitmap-mule")
# «.rudel»			(to "rudel")
# «.comint-gets-stuck»		(to "comint-gets-stuck")
# «.comint-process-echoes»	(to "comint-process-echoes")
# «.comint-password»		(to "comint-password")
# «.ee-gformat»			(to "ee-gformat")
# «.gdb-mi»			(to "gdb-mi")
# «.C-mode»			(to "C-mode")
# «.tramp»			(to "tramp")
# «.tramp-from-git»		(to "tramp-from-git")
# «.load-new-tramp»		(to "load-new-tramp")
# «.tramp-debug»		(to "tramp-debug")
# «.tramp-2.1.9»		(to "tramp-2.1.9")
# «.tramp-plink»		(to "tramp-plink")
# «.tramp-prompt»		(to "tramp-prompt")
# «.password-cache»		(to "password-cache")
# «.multi-hop»			(to "multi-hop")
# «.cua-mode»			(to "cua-mode")
# «.undo»			(to "undo")
# «.undo-boundary»		(to "undo-boundary")
# «.undo-tree»			(to "undo-tree")
# «.backup-inhibited»		(to "backup-inhibited")
# «.defvaralias»		(to "defvaralias")
# «.fringe»			(to "fringe")
# «.gud-fringe»			(to "gud-fringe")
# «.fringe-bitmaps»		(to "fringe-bitmaps")
# «.frame-geometry»		(to "frame-geometry")
# «.adjust-geometry»		(to "adjust-geometry")
# «.fontify-as-info»		(to "fontify-as-info")
# «.sticky»			(to "sticky")
# «.adjust-PATH»		(to "adjust-PATH")
# «.emacsconf»			(to "emacsconf")
# «.emacsconf-2013»		(to "emacsconf-2013")
# «.emacsconf-2019»		(to "emacsconf-2019")
# «.smie»			(to "smie")
# «.define-minor-mode»		(to "define-minor-mode")
# «.browsers»			(to "browsers")
# «.eww»			(to "eww")
# «.term»			(to "term")
# «.elscreen»			(to "elscreen")
# «.emacs-web-server»		(to "emacs-web-server")
# «.cask»			(to "cask")
# «.yasnippet»			(to "yasnippet")
# «.yasnippet-aldon»		(to "yasnippet-aldon")
# «.yasnippet-snippet»		(to "yasnippet-snippet")
# «.markdown-mode»		(to "markdown-mode")
# «.elpakit»			(to "elpakit")
# «.dynamic-binding»		(to "dynamic-binding")
# «.lentic»			(to "lentic")
# «.isend»			(to "isend")
# «.registers»			(to "registers")
# «.jump-to-register»		(to "jump-to-register")
# «.pastebin»			(to "pastebin")
# «.format»			(to "format")
# «.unibyte-2017»		(to "unibyte-2017")
# «.unibyte-2019»		(to "unibyte-2019")
# «.unibyte-2019-search»	(to "unibyte-2019-search")
# «.ee-re-to»			(to "ee-re-to")
# «.my-mode»			(to "my-mode")
# «.merge»			(to "merge")
# «.menu-set-font»		(to "menu-set-font")
# «.set-default-font»		(to "set-default-font")
# «.emacs24-non-dfsg»		(to "emacs24-non-dfsg")
# «.browse-url»			(to "browse-url")
# «.generators»			(to "generators")
# «.glyph-bug-jan2019»		(to "glyph-bug-jan2019")
# «.glyph-bug-jan2019-fix»	(to "glyph-bug-jan2019-fix")
# «.glyphless-chars»		(to "glyphless-chars")
# «.debian-startup»		(to "debian-startup")
# «.ispell-menu-map-needed»	(to "ispell-menu-map-needed")
# «.fsbot»			(to "fsbot")
# «.fsbot-eev»			(to "fsbot-eev")
# «.fsbot-eepitch»		(to "fsbot-eepitch")
# «.fsbot-emacs-lua»		(to "fsbot-emacs-lua")
# «.rudybot»			(to "rudybot")
# «.grep»			(to "grep")
# «.sequencing-greps»		(to "sequencing-greps")
# «.bookmarks»			(to "bookmarks")
# «.pdf-tools»			(to "pdf-tools")
# «.pdf-tools-bookmarks»	(to "pdf-tools-bookmarks")
# «.pdf-tools-revert»		(to "pdf-tools-revert")
# «.pdf-tools-revert-mail»	(to "pdf-tools-revert-mail")
# «.pdf-tools-default»		(to "pdf-tools-default")
# «.pdf-tools-build»		(to "pdf-tools-build")
# «.find-pdft-page»		(to "find-pdft-page")
# «.find-pdftools-page»		(to "find-pdftools-page")
# «.ee-pdftools-revert-all»	(to "ee-pdftools-revert-all")
# «.pdftools-lcms»		(to "pdftools-lcms")
# «.which-key»			(to "which-key")
# «.keysee»			(to "keysee")
# «.exwm»			(to "exwm")
# «.fullscreen»			(to "fullscreen")
# «.toggle-frame-maximized»	(to "toggle-frame-maximized")
# «.toggle-frame-fullscreen»	(to "toggle-frame-fullscreen")
# «.lsp-mode»			(to "lsp-mode")
# «.lua-mode»			(to "lua-mode")
# «.luarocks.el»		(to "luarocks.el")
# «.zero-in-prefixes»		(to "zero-in-prefixes")
# «.stackexchange»		(to "stackexchange")
# «.go»				(to "go")
# «.macroexpand»		(to "macroexpand")
# «.dolist»			(to "dolist")
# «.cl-lib»			(to "cl-lib")
# «.cl-struct»			(to "cl-struct")
# «.cl-defstruct»		(to "cl-defstruct")
# «.cl-map»			(to "cl-map")
# «.cl-defun»			(to "cl-defun")
# «.ee-struct-to-string»	(to "ee-struct-to-string")
# «.shelisp»			(to "shelisp")
# «.shelisp-zsh»		(to "shelisp-zsh")
# «.shelisp-emacsit»		(to "shelisp-emacsit")
# «.make-hash-table»		(to "make-hash-table")
# «.eimp»			(to "eimp")
# «.executable-find»		(to "executable-find")
# «.sacha-chua»			(to "sacha-chua")
# «.sachac-.emacs»		(to "sachac-.emacs")
# «.bury-buffer»		(to "bury-buffer")
# «.helpful»			(to "helpful")
# «.helpful-mode-line»		(to "helpful-mode-line")
# «.helpful-button-at-point»	(to "helpful-button-at-point")
# «.shorthands»			(to "shorthands")
# «.shortdoc»			(to "shortdoc")
# «.shortdoc-mekeor»		(to "shortdoc-mekeor")
# «.info-mode»			(to "info-mode")
# «.Info-directory-list»	(to "Info-directory-list")
# «.Info-dir-remove-duplicates»	(to "Info-dir-remove-duplicates")
# «.forward-sexp»		(to "forward-sexp")
# «.eev-explain.el»		(to "eev-explain.el")
# «.gnutls»			(to "gnutls")
# «.gnutls-errors»		(to "gnutls-errors")
# «.easy-menu»			(to "easy-menu")
# «.ielm»			(to "ielm")
# «.ielm-history-rdrg109»	(to "ielm-history-rdrg109")
# «.echo-area»			(to "echo-area")
# «.C-only-emacsen»		(to "C-only-emacsen")
# «.use-package»		(to "use-package")
# «.leaf»			(to "leaf")
# «.key-chord»			(to "key-chord")
# «.hydra»			(to "hydra")
# «.hydra-video»		(to "hydra-video")
# «.hydra-wiki»			(to "hydra-wiki")
# «.hercules»			(to "hercules")
# «.help-fns+.el»		(to "help-fns+.el")
# «.help-setup-xref»		(to "help-setup-xref")
# «.intangible»			(to "intangible")
# «.el-get»			(to "el-get")
# «.tabs»			(to "tabs")
# «.show-trailing-whitespace»	(to "show-trailing-whitespace")
# «.seen»			(to "seen")
# «.avy»			(to "avy")
# «.sokoban»			(to "sokoban")
# «.run-lang»			(to "run-lang")
# «.0x0»			(to "0x0")
# «.imgbb»			(to "imgbb")
# «.text-scale-increase»	(to "text-scale-increase")
# «.several-emacs-versions»	(to "several-emacs-versions")
# «.eepitch-shell-bug-2019»	(to "eepitch-shell-bug-2019")
# «.substitute-command-keys»	(to "substitute-command-keys")
# «.documentation»		(to "documentation")
# «.plists-and-alists»		(to "plists-and-alists")
# «.minor-mode-map-alist»	(to "minor-mode-map-alist")
# «.spacemacs»			(to "spacemacs")
# «.blink-cursor-mode»		(to "blink-cursor-mode")
# «.display-buffer-alist»	(to "display-buffer-alist")
# «.same-window-prefix»		(to "same-window-prefix")
# «.display-buffer-o-a»		(to "display-buffer-o-a")
# «.piper»			(to "piper")
# «.rx»				(to "rx")
# «.rx-group-n»			(to "rx-group-n")
# «.xr»				(to "xr")
# «.mpdel»			(to "mpdel")
# «.web-mode»			(to "web-mode")
# «.eldoc-mode»			(to "eldoc-mode")
# «.literate-elisp»		(to "literate-elisp")
# «.windower»			(to "windower")
# «.ellipsis»			(to "ellipsis")
# «.emacs24-on-buster»		(to "emacs24-on-buster")
# «.eval-progn-local-config»	(to "eval-progn-local-config")
# «.elisp-bytecode»		(to "elisp-bytecode")
# «.tree-sitter»		(to "tree-sitter")
# «.zones»			(to "zones")
# «.transient-mark-mode»	(to "transient-mark-mode")
# «.transient»			(to "transient")
# «.transient-mail-2021feb27»	(to "transient-mail-2021feb27")
# «.transient-dwim»		(to "transient-dwim")
# «.dash»			(to "dash")
# «.dash-functional»		(to "dash-functional")
# «.help-at-pt»			(to "help-at-pt")
# «.emacsrocks»			(to "emacsrocks")
# «.multiple-cursors»		(to "multiple-cursors")
# «.command-log-mode»		(to "command-log-mode")
# «.short-lambda-and-dollar»	(to "short-lambda-and-dollar")
# «.startup-screen-C-g»		(to "startup-screen-C-g")
# «.remacs»			(to "remacs")
# «.e2wm»			(to "e2wm")
# «.doom-emacs»			(to "doom-emacs")
# «.doom-emacs-1»		(to "doom-emacs-1")
# «.yuan-fu-beginner-guide»	(to "yuan-fu-beginner-guide")
# «.widget»			(to "widget")
# «.cvs-mode»			(to "cvs-mode")
# «.project.el»			(to "project.el")
# «.call-process-region»	(to "call-process-region")
# «.shell-command-on-region»	(to "shell-command-on-region")
# «.shell-command+»		(to "shell-command+")
# «.quelpa»			(to "quelpa")
# «.svg»			(to "svg")
# «.svg-info»			(to "svg-info")
# «.screenshot-svg»		(to "screenshot-svg")
# «.svg-tag»			(to "svg-tag")
# «.font-lock-studio»		(to "font-lock-studio")
# «.gif-screencast.el»		(to "gif-screencast.el")
# «.pack-doc»			(to "pack-doc")
# «.straight»			(to "straight")
# «.straight-try»		(to "straight-try")
# «.straight-pull-package»	(to "straight-pull-package")
# «.vterm»			(to "vterm")
# «.vterm-eepitch»		(to "vterm-eepitch")
# «.vterm-prog»			(to "vterm-prog")
# «.vterm-recompile»		(to "vterm-recompile")
# «.vterm-module»		(to "vterm-module")
# «.vc-annotate»		(to "vc-annotate")
# «.exec-path-from-shell»	(to "exec-path-from-shell")
# «.nyan-mode»			(to "nyan-mode")
# «.lispy»			(to "lispy")
# «.eaf»			(to "eaf")
# «.latex-preview-pane»		(to "latex-preview-pane")
# «.customize-themes»		(to "customize-themes")
# «.omg-macros-corwin-brust»	(to "omg-macros-corwin-brust")
# «.orgvm»			(to "orgvm")
# «.beyond-vim-epistemic»	(to "beyond-vim-epistemic")
# «.eros-mode»			(to "eros-mode")
# «.learnxinyminutes»		(to "learnxinyminutes")
# «.subr-x.el»			(to "subr-x.el")
# «.the-find-prefix»		(to "the-find-prefix")
# «.definition-prefixes»	(to "definition-prefixes")
# «.toggle-lexical-binding»	(to "toggle-lexical-binding")
# «.closure»			(to "closure")
# «.defvar»			(to "defvar")
# «.subed»			(to "subed")
# «.subed-shadowed-keybindings»	(to "subed-shadowed-keybindings")
# «.subed-issue-40»		(to "subed-issue-40")
# «.subed-record»		(to "subed-record")
# «.subed-sacha»		(to "subed-sacha")
# «.nov.el»			(to "nov.el")
# «.custom-file»		(to "custom-file")
# «.so-long»			(to "so-long")
# «.dungeon»			(to "dungeon")
# «.dungeon-mode»		(to "dungeon-mode")
# «.loganlee»			(to "loganlee")
# «.auctex»			(to "auctex")
# «.tags»			(to "tags")
# «.auto-mode-alist»		(to "auto-mode-alist")
# «.run-command»		(to "run-command")
# «.color-tools»		(to "color-tools")
# «.color-name-to-rgb»		(to "color-name-to-rgb")
# «.defined-colors»		(to "defined-colors")
# «.my-image-map-demo»		(to "my-image-map-demo")
# «.emacs-lua»			(to "emacs-lua")
# «.luamacs»			(to "luamacs")
# «.version-to-list»		(to "version-to-list")
# «.curved-single-quotes»	(to "curved-single-quotes")
# «.info-bullets»		(to "info-bullets")
# «.char-valid-p»		(to "char-valid-p")
# «.shell-pop»			(to "shell-pop")
# «.dribble-file»		(to "dribble-file")
# «.embark»			(to "embark")
# «.function-documentation»	(to "function-documentation")
# «.pcase»			(to "pcase")
# «.pcase-quickref»		(to "pcase-quickref")
# «.mu4e»			(to "mu4e")
# «.early-init.el»		(to "early-init.el")
# «.emacs-libpq»		(to "emacs-libpq")
# «.rcd-template»		(to "rcd-template")
# «.shadowed-keybindings»	(to "shadowed-keybindings")
# «.hi-lock»			(to "hi-lock")
# «.highlight-regexp»		(to "highlight-regexp")
# «.deft»			(to "deft")
# «.slash-colon»		(to "slash-colon")
# «.kanfer-bangbangcon2021»	(to "kanfer-bangbangcon2021")
# «.pop-to-buffer»		(to "pop-to-buffer")
# «.slime»			(to "slime")
# «.elpher»			(to "elpher")
# «.mode-line-packages»		(to "mode-line-packages")
# «.emacs-framebuffer»		(to "emacs-framebuffer")
# «.async»			(to "async")
# «.moldable-emacs»		(to "moldable-emacs")
# «.debbugs»			(to "debbugs")
# «.sketch-mode»		(to "sketch-mode")
# «.elegant-emacs»		(to "elegant-emacs")
# «.ert»			(to "ert")
# «.peg»			(to "peg")
# «.deb-view»			(to "deb-view")
# «.blink-matching-paren»	(to "blink-matching-paren")
# «.show-paren-mode»		(to "show-paren-mode")
# «.media-2021.1»		(to "media-2021.1")
# «.lmc»			(to "lmc")
# «.ess»			(to "ess")
# «.eval-in-repl»		(to "eval-in-repl")
# «.ansi-term»			(to "ansi-term")
# «.ansi-color»			(to "ansi-color")
# «.url-retrieve»		(to "url-retrieve")
# «.find-urlretrieve»		(to "find-urlretrieve")
# «.workshop-2021-wget»		(to "workshop-2021-wget")
# «.eval-after-load»		(to "eval-after-load")
# «.benchmark»			(to "benchmark")
# «.benchmark-subhuman»		(to "benchmark-subhuman")
# «.debug-on-entry»		(to "debug-on-entry")
# «.parse-colon-path»		(to "parse-colon-path")
# «.ee-dospath-add»		(to "ee-dospath-add")
# «.borg»			(to "borg")
# «.declare-indent»		(to "declare-indent")
# «.M-x-nasty-delay-bug»	(to "M-x-nasty-delay-bug")
# «.wrong-number-of-arguments»	(to "wrong-number-of-arguments")
# «.emojis»			(to "emojis")
# «.emoji-heavy-black-heart»	(to "emoji-heavy-black-heart")
# «.Info-goto-node-web»		(to "Info-goto-node-web")
# «.tui»			(to "tui")
# «.native-compilation»		(to "native-compilation")
# «.rainbow-mode»		(to "rainbow-mode")
# «.find-ealias»		(to "find-ealias")
# «.ee-cpb»			(to "ee-cpb")
# «.kill-buffer-problem-2021»	(to "kill-buffer-problem-2021")
# «.yank-media»			(to "yank-media")
# «.crdt»			(to "crdt")
# «.crdt-tuntox»		(to "crdt-tuntox")
# «.crdt-toxcore»		(to "crdt-toxcore")
# «.ido»			(to "ido")
# «.unwind-protect»		(to "unwind-protect")
# «.redisplay»			(to "redisplay")
# «.vertico»			(to "vertico")
# «.file-aliases»		(to "file-aliases")
# «.taskpaper-mode»		(to "taskpaper-mode")
# «.emacs-everywhere»		(to "emacs-everywhere")
# «.abbrevs»			(to "abbrevs")
# «.webp-images»		(to "webp-images")
# «.junk-file-open»		(to "junk-file-open")
# «.apply-partially»		(to "apply-partially")
# «.describe-char»		(to "describe-char")
# «.logos»			(to "logos")
# «.flycheck»			(to "flycheck")
# «.flycheck-frame»		(to "flycheck-frame")
# «.flycheck-languages»		(to "flycheck-languages")
# «.pulsar»			(to "pulsar")
# «.company»			(to "company")
#   «.ivy-mode»			(to "ivy-mode")
#   «.helm»			(to "helm")
#   «.counsel»			(to "counsel")
#   «.posframe»			(to "posframe")
#   «.swiper»			(to "swiper")
# «.osm»			(to "osm")
# «.prot-dotemacs»		(to "prot-dotemacs")
# «.woman»			(to "woman")
# «.deft»			(to "deft")
# «.dark-emacs»			(to "dark-emacs")
# «.indent-tabs-mode»		(to "indent-tabs-mode")
# «.indent-relative»		(to "indent-relative")
# «.recur»			(to "recur")
# «.vtable»			(to "vtable")
# «.inspector»			(to "inspector")
# «.inspector-inspect-region»	(to "inspector-inspect-region")
# «.eval-defun»			(to "eval-defun")
# «.define-prefix-command»	(to "define-prefix-command")
# «.emacs-director»		(to "emacs-director")
# «.demo-it»			(to "demo-it")
# «.info+»			(to "info+")
# «.image-dired»		(to "image-dired")
# «.hamburger-menus»		(to "hamburger-menus")
# «.ace-window»			(to "ace-window")
# «.comment-dwim»		(to "comment-dwim")
# «.halp»			(to "halp")
# «.dwim-shell-command»		(to "dwim-shell-command")
# «.eglot»			(to "eglot")
# «.polymode»			(to "polymode")
# «.shell-quote-argument»	(to "shell-quote-argument")
# «.remember»			(to "remember")
# «.tiny-tools»			(to "tiny-tools")
# «.ee-string-intervals»	(to "ee-string-intervals")
# «.dired-guess-shell-alist-user»  (to "dired-guess-shell-alist-user")
# «.pkal-ecg»			(to "pkal-ecg")
# «.ediff»			(to "ediff")
# «.diffview»			(to "diffview")
# «.tabulated-list»		(to "tabulated-list")
# «.vtable»			(to "vtable")
# «.C-x-8»			(to "C-x-8")
# «.eat»			(to "eat")
# «.coterm»			(to "coterm")
# «.iedit»			(to "iedit")
# «.youtube-sub-extractor»	(to "youtube-sub-extractor")
# «.bs-show»			(to "bs-show")
# «.let-alist»			(to "let-alist")
# «.lukego-lively»		(to "lukego-lively")
# «.keysee.el»			(to "keysee.el")
# «.help-quick»			(to "help-quick")
# «.elisp-bug-hunter»		(to "elisp-bug-hunter")
# «.replace-multiple-strings»	(to "replace-multiple-strings")
# «.xwidgets»			(to "xwidgets")
# «.pfuture»			(to "pfuture")
# «.batch-and-script»		(to "batch-and-script")
# «.request»			(to "request")
# «.shell-maker»		(to "shell-maker")
# «.consult»			(to "consult")
# «.eltr»			(to "eltr")
# «.sentence-end-double-space»	(to "sentence-end-double-space")
# «.quoted-file-names»		(to "quoted-file-names")
# «.pulsar»			(to "pulsar")
# «.rdd»			(to "rdd")
# «.repl-driven-development»	(to "repl-driven-development")
# «.musa-elispcheatsheet»	(to "musa-elispcheatsheet")
# «.ct.el»			(to "ct.el")
# «.unload-feature»		(to "unload-feature")
# «.tempel»			(to "tempel")
# «.grail»			(to "grail")
# «.insert-at-eob»		(to "insert-at-eob")
# «.arc-mode.el»		(to "arc-mode.el")
# «.rar»			(to "rar")
# «.username»			(to "username")
# «.call-tree»			(to "call-tree")
# «.archive-contents.sig»	(to "archive-contents.sig")
# «.find-lean4-intro-fakehome»	(to "find-lean4-intro-fakehome")
# «.maxima-font-lock-bug»	(to "maxima-font-lock-bug")
# «.lambdas-for-beginners»	(to "lambdas-for-beginners")
# «.minimal-emacs.d»		(to "minimal-emacs.d")
# «.auth-source»		(to "auth-source")
# «.lumie-dotfiles»		(to "lumie-dotfiles")
# «.markers»			(to "markers")
# «.ccl»			(to "ccl")




# This was a primitive version of "mkto":

(setq last-kbd-macro
  (read-kbd-macro "C-a 3*<right> NUL C-e <left> ESC w C-e 2*SPC (to SPC \".
		   C-y \") C-a <down> RET <up> # SPC C-q \\256 . C-y C-q \\257
		   2*SPC (to SPC \" C-y \") C-a <down>"))



#####
#
# Emacs from Debian
# 2022sep05
#
#####

# «debian»  (to ".debian")
# (find-zsh "installeddebs | sort | grep emacs")
# (find-zsh "availabledebs | sort | grep emacs")
# (find-es "u" "every-boot")

# (find-status   "emacs")
# (find-vldifile "emacs.list")
# (find-udfile   "emacs/")

# (find-status   "emacs-common-non-dfsg")
# (find-vldifile "emacs-common-non-dfsg.list")
# (find-udfile   "emacs-common-non-dfsg/")

# (find-debpkg-links "emacs")
# (find-sh "grep-aptavail -P emacs")
# (find-sh "dpkg-query -W 'emacs*'")

sudo apt-get install -y emacs emacs-el





#####
#
# emacs-from-git
# 2022sep07
#
#####

# «emacs-from-git»  (to ".emacs-from-git")
# (find-es "git" "emacs-from-git-2020")
# (find-es "git" "emacs29-from-git")

# (find-gitemacsfile "CONTRIBUTE")
# (find-gitemacsfile "CONTRIBUTE" "./autogen.sh")

# make V=1:
# https://lists.gnu.org/archive/html/emacs-devel/2022-09/msg00340.html rms
# https://lists.gnu.org/archive/html/emacs-devel/2022-09/msg00348.html eli

Sam James:
Another option to make V=1 (you can do something like: export MAKEOPTS="V=1 -j$(nproc)"
may be ./configure --disable-silent-rules.




#####
#
# emacs-mirror
# 2024feb09
#
#####

# «emacs-mirror»  (to ".emacs-mirror")
# https://mail.google.com/mail/u/0/#search/emacs+mirror/FMfcgzGxRdtjkPFjJdFQKTDrsqjXKNGd
# https://github.com/emacs-mirror/emacs/commit/d005e685e1df7692085378633348db39a5190374
# https://github.com/emacs-mirror/emacs
# (find-efile "emacs-lisp/tabulated-list.el")
# https://github.com/emacs-mirror/emacs/blob/master/lisp/emacs-lisp/tabulated-list.el





#####
#
# Installing Emacs and friends on a Potato system
# 2001jan07
#
#####

# «installing»  (to ".installing")
apt-get install emacs20 emacs20-el gnuserv elisp-manual emacs-lisp-intro
apt-get install w3-el-e20 w3-el-doc w3-el-lisp

# «indexing»  (to ".indexing")
cd /usr/share/emacs/20.7/lisp/
etags $(find * -name '*.el')
glimpseindex -H . -y $(find * -name '*.el')
#
#cd /usr/share/emacs/19.34/lisp/
#etags *.el term/*.el
#glimpseindex -H . -y *.el term/*.el


#
emacs20
emacs20-el
gnuserv
elisp-manual
emacs-lisp-intro
w3-el-e20
w3-el-doc
w3-el-lisp



#####
#
# emacs -Q and emacs -q
# 2022dec10
#
#####

# «emacs-Q»  (to ".emacs-Q")
# (find-enode "Initial Options" "-q" "--no-init-file")
# (find-enode "Initial Options" "-Q" "--quick" "minimum customizations")




#####
#
# grepping emacs' info docs
# 2004feb11
#
#####

# «zcatinfo»  (to ".zcatinfo")
# (find-angg ".zshrc" "zcatinfo")
#*
# zcatinfo /usr/share/info/emacs-e20      > /tmp/emacs20.info
zcatinfo /usr/share/info/emacs-21/emacs   > /tmp/emacs.info
zcatinfo /usr/share/info/elisp            > /tmp/elisp.info
zcatinfo /usr/share/info/emacs-lisp-intro > /tmp/elintro.info
#*

#*
# Very old:
zcatinfo /usr/share/info/elisp     > /tmp/elisp.info
zcatinfo /usr/share/info/emacs-lisp-intro > /tmp/elintro.info
#*
# (find-fline "/tmp/emacs.info")
# (find-fline "/tmp/elisp.info")
# (find-fline "/tmp/elintro.info")

# (to "buffer-local")




#####
#
# The "etc" dir
# 2000dec02
#
#####

# «etc»  (to ".etc")
# (find-status "emacs20")
# (find-vldifile "emacs20.list")
# (find-fline "/usr/doc/emacs20/")

# (find-eetcfile "")
# (find-eetcfile "" "OOOOONEWS")
# (find-eetcfile "OOOOONEWS" "Changes in Emacs 1.1\n")
# (find-eetcfile "OOOOONEWS" "Changes in Emacs 1.12")
# (find-eetcfile "OOOOONEWS" "Changes in Emacs 13")
# (find-eetcfile "OOOONEWS")
# (find-eetcfile "OOONEWS")
# (find-eetcfile "OONEWS")
# (find-eetcfile "ONEWS")
# (find-eetcfile "NEWS")

# (find-eetcfile "")
# (find-eetcfile "GNU")
# (find-eetcfile "INTERVIEW")
# (find-eetcfile "MOTIVATION")
# (find-eetcfile "MOTIVATION" "old joke")
# (find-eetcfile "WHY-FREE")
# (find-eetcfile "copying.paper")

#*
cd /usr/share/emacs/20.7/etc/
cp -v refcard.tex /tmp/
cd /tmp/
tex refcard.tex
xdvi refcard.dvi &
#*

# (find-eetcfile "refcard.tex")
# (find-eetcfile "")




#####
#
# The "etc" dir of emacs21 and emacs-cvs
# 2004apr05
#
#####

# «eetc»  (to ".eetc")
# (find-status "emacs21")
# (find-vldifile "emacs21.list")
# (find-fline "/usr/doc/emacs21/")

# (code-c-d "eetc21"  "/usr/share/emacs/21.2/etc/")
# (code-c-d "eetccvs" "~/bigsrc/emacs/etc/")
# (find-eetc21file "")
# (find-eetccvsfile "")




#####
#
# emacs faq
# 2000mar02
#
#####

# «emacs-faq»  (to ".emacs-faq")
# (find-fline "$S/http/www.lerner.co.il/emacs/faq.texinfo.gz")
# (find-fline "/usr/share/info/emacs-21/")
# (find-node "(emacs-21/efaq)Top")

#*
rm -Rv /tmp/efaq/
mkdir /tmp/efaq/
cd /tmp/efaq/
cp -iv $S/http/www.lerner.co.il/emacs/faq.texinfo.gz .
gzip -dv faq.texinfo.gz
makeinfo -o emacs-faq.info faq.texinfo
gzip -9v *.info *.info-*
cp -v *.gz /usr/info/

# (find-node "(/tmp/efaq/emacs-faq)Top")

# (find-es "dpkg" "install-info")
cd /tmp/efaq/
install-info --section "Emacs" "Emacs-FAQ:" --description="Emacs FAQ." \
  /usr/info/emacs-faq

#*

# (find-efaqnode "Top")

# But there's a textmode version in Emacs' "etc" dir:
# (find-e20file "help.el" "view-emacs-FAQ")
# (find-e20file "help.el" "defun view-emacs-FAQ")
# (view-emacs-FAQ)
# (find-eetcfile "FAQ")





#####
#
# Saving the index pages of the Emacs manuals
# 2000oct10
#
#####

# «saving_index_pages»  (to ".saving_index_pages")

(progn (find-elnode "Index")
       (ee-write (point-min) (point-max) "" "" "/tmp/el")
       (find-enode "Key Index")
       (ee-write (point-min) (point-max) "" "" "/tmp/ek")
       (find-enode "Command Index")
       (ee-write (point-min) (point-max) "" "" "/tmp/em")
       (find-enode "Variable Index")
       (ee-write (point-min) (point-max) "" "" "/tmp/ev")
       (find-enode "Concept Index")
       (ee-write (point-min) (point-max) "" "" "/tmp/en"))

# (find-fline "/tmp/ek")
# (find-fline "/tmp/el")
# (find-fline "/tmp/em")
# (find-fline "/tmp/en")
# (find-fline "/tmp/ev")




#####
#
# The elisp and emacs-lisp-intro manuals (on crappy RedHat boxes)
# 2001nov17
#
#####

# «elispman-nondeb»  (to ".elispman-nondeb")
# «elintro-nondeb»  (to ".elintro-nondeb")
# anonftp ftp://ftp.unicamp.br/pub/gnu/emacs/
#*
cd ~/tmp/
wget -c ftp://ftp.unicamp.br/pub/gnu/emacs/emacs-lisp-intro-1.05.tar.gz
wget -c ftp://ftp.unicamp.br/pub/gnu/emacs/elisp-manual-20-2.5.tar.gz

#*
rm -Rv $usr_src/emacs-lisp-intro-1.05/
cd $usr_src/
tar -xvzf ~/tmp/emacs-lisp-intro-1.05.tar.gz
cd $usr_src/emacs-lisp-intro-1.05/

makeinfo emacs-lisp-intro.texi
gzip -v9 emacs-lisp-intro.info*

#*
cd $usr_src/emacs-lisp-intro-1.05/
rm -v /usr/share/info/emacs-lisp-intro.info*
cp -v emacs-lisp-intro.info* /usr/share/info/

#*
rm -Rv $usr_src/elisp-manual-20-2.5/
cd $usr_src/
tar -xvzf ~/tmp/elisp-manual-20-2.5.tar.gz
cd $usr_src/elisp-manual-20-2.5/

gzip -v9 elisp elisp-*

#*
rm -v /usr/share/info/elisp*
cp -v elisp.gz elisp-* /usr/share/info/

#*
# «elispman-nondeb-nonroot»  (to ".elispman-nondeb-nonroot")
# «elintro-nondeb-nonroot»  (to ".elintro-nondeb-nonroot")
# Or, to install everything in ~/info/:
# (find-angg ".emacs" "info-path")
# (find-elnode "Top")
# (find-elinode "Top")
mkdir ~/info/

cd $usr_src/emacs-lisp-intro-1.05/
rm -v ~/info/emacs-lisp-intro.info*
cp -v emacs-lisp-intro.info* ~/info/

cd $usr_src/elisp-manual-20-2.5/
rm -v ~/info/elisp*
cp -v elisp.gz elisp-* ~/info/

#*
# Usually the index of the available info files is kept in a file with
# one of the four names below (the find-file constructs are hyperlinks):
#
# (find-file "/usr/info/dir")
# (find-file "/usr/info/dir.gz")
# (find-file "/usr/share/info/dir")
# (find-file "/usr/share/info/dir.gz")

# You may want to add the following entries to the "dir" file,
# possibly in the section "GNU Emacs" (note that the entries start
# with a "*"!):

* Elisp: (elisp).          Emacs Lisp Reference Manual.
* Emacs-lisp-intro: (emacs-lisp-intro). Elementary introduction to programming
                             in Emacs Lisp.

# Note: if you are trying to edit a dir.gz file and Emacs20 isn't
# decompressing .gz files transparently you may need to run this:
#
# (load-library "jka-compr")

# These are direct links to the info pages of these manuals:
# (Info-goto-node "(elisp)Top")
# (Info-goto-node "(emacs-lisp-intro)Top")




#####
#
# Emacs mailing lists
# 2019jan22
#
#####

# «mailing-lists» (to ".mailing-lists")
# https://savannah.gnu.org/mail/?group=emacs

# «bug-gnu-emacs» (to ".bug-gnu-emacs")
# (find-es "git" "emacs-from-git-2019jan22")
# https://lists.gnu.org/mailman/listinfo/bug-gnu-emacs
# http://lists.gnu.org/archive/html/bug-gnu-emacs/

# «emacs-devel» (to ".emacs-devel")
# https://lists.gnu.org/mailman/listinfo/emacs-devel
# http://lists.gnu.org/archive/html/emacs-devel/

# «help-gnu-emacs»  (to ".help-gnu-emacs")
# http://lists.gnu.org/mailman/listinfo/help-gnu-emacs
# https://lists.gnu.org/archive/html/help-gnu-emacs/

# «emacs-tangents»  (to ".emacs-tangents")
# http://lists.gnu.org/mailman/listinfo/emacs-tangents
# http://lists.gnu.org/archive/html/emacs-tangents/
#   https://sachachua.com/blog/




#####
#
# mailing-list-search
# 2022mar09
#
#####

# «mailing-list-search»  (to ".mailing-list-search")
# From: https://lists.gnu.org/archive/html/help-gnu-emacs/2021-12/msg00109.html

Knowing a message ID, you should be able to search for it in the
archive, e.g.

1. Go to https://lists.gnu.org/archive/html/help-gnu-emacs/
2. Paste in "+message-id:[email protected]"
3. This brings up this single result:

https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/msg00599.html




#####
#
# yhetil
# 2023sep07
#
#####

# «yhetil»  (to ".yhetil")
# https://lists.gnu.org/archive/html/emacs-devel/2022-03/msg00191.html
# https://yhetil.org/
# https://yhetil.org/emacs-devel/_/text/help/
# https://yhetil.org/emacs-devel/871qhnr4ty.fsf@localhost/





#####
#
# help-gnu-emacs archives
# 2000aug12
#
#####

# «help-gnu-emacs»  (to ".help-gnu-emacs")
# «help-gnu-emacs-archives»  (to ".help-gnu-emacs-archives")
#*
rm -Rv /tmp/help-gnu-emacs/
mkdir  /tmp/help-gnu-emacs/
cd $S/ftp/ftp-mailing-list-archives.gnu.org/mailing-lists/help-gnu-emacs/
cp -iv * /tmp/help-gnu-emacs/
cd /tmp/help-gnu-emacs/
gzip -dv *

#*
cd /tmp/help-gnu-emacs/
grep -i glyph *
#*
cd /tmp/help-gnu-emacs/
mutt -R -f help-gnu-emacs.20000101
#*

# (find-fline "/tmp/help-gnu-emacs/help-gnu-emacs.20000101")




#####
#
# emacs-devel-mbox
# 2021oct03
#
#####

# «emacs-devel-mbox»  (to ".emacs-devel-mbox")
# (find-es "org" "mailing-list-mbox")
# https://lists.gnu.org/archive/mbox/emacs-devel/
# https://lists.gnu.org/archive/mbox/emacs-devel/2016-12

A=(2001-01 2001-02 2001-03 2001-04 2001-05 2001-06
   2001-07 2001-08 2001-09 2001-10 2001-11 2001-12
   2002-01 2002-02 2002-03 2002-04 2002-05 2002-06
   2002-07 2002-08 2002-09 2002-10 2002-11 2002-12
   2003-01 2003-02 2003-03 2003-04 2003-05 2003-06
   2003-07 2003-08 2003-09 2003-10 2003-11 2003-12
   2004-01 2004-02 2004-03 2004-04 2004-05 2004-06
   2004-07 2004-08 2004-09 2004-10 2004-11 2004-12
   2005-01 2005-02 2005-03 2005-04 2005-05 2005-06
   2005-07 2005-08 2005-09 2005-10 2005-11 2005-12
   2006-01 2006-02 2006-03 2006-04 2006-05 2006-06
   2006-07 2006-08 2006-09 2006-10 2006-11 2006-12
   2007-01 2007-02 2007-03 2007-04 2007-05 2007-06
   2007-07 2007-08 2007-09 2007-10 2007-11 2007-12
   2008-01 2008-02 2008-03 2008-04 2008-05 2008-06
   2008-07 2008-08 2008-09 2008-10 2008-11 2008-12
   2009-01 2009-02 2009-03 2009-04 2009-05 2009-06
   2009-07 2009-08 2009-09 2009-10 2009-11 2009-12
   2010-01 2010-02 2010-03 2010-04 2010-05 2010-06
   2010-07 2010-08 2010-09 2010-10 2010-11 2010-12
   2011-01 2011-02 2011-03 2011-04 2011-05 2011-06
   2011-07 2011-08 2011-09 2011-10 2011-11 2011-12
   2012-01 2012-02 2012-03 2012-04 2012-05 2012-06
   2012-07 2012-08 2012-09 2012-10 2012-11 2012-12
   2013-01 2013-02 2013-03 2013-04 2013-05 2013-06
   2013-07 2013-08 2013-09 2013-10 2013-11 2013-12
   2014-01 2014-02 2014-03 2014-04 2014-05 2014-06
   2014-07 2014-08 2014-09 2014-10 2014-11 2014-12
   2015-01 2015-02 2015-03 2015-04 2015-05 2015-06
   2015-07 2015-08 2015-09 2015-10 2015-11 2015-12
   2016-01 2016-02 2016-03 2016-04 2016-05 2016-06
   2016-07 2016-08 2016-09 2016-10 2016-11 2016-12
)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
B=(2017-01 2017-02 2017-03 2017-04 2017-05 2017-06
   2017-07 2017-08 2017-09 2017-10 2017-11 2017-12
   2018-01 2018-02 2018-03 2018-04 2018-05 2018-06
   2018-07 2018-08 2018-09 2018-10 2018-11 2018-12
   2019-01 2019-02 2019-03 2019-04 2019-05 2019-06
   2019-07 2019-08 2019-09 2019-10 2019-11 2019-12
   2020-01 2020-02 2020-03 2020-04 2020-05 2020-06
   2020-07 2020-08 2020-09 2020-10 2020-11 2020-12
   2021-01 2021-02 2021-03 2021-04 2021-05 2021-06
   2021-07 2021-08 2021-09 2021-10
)

mkdir -p $S/https/lists.gnu.org/archive/mbox/emacs-devel/
cd       $S/https/lists.gnu.org/archive/mbox/emacs-devel/
for i in $B; do
  FNAME=https://lists.gnu.org/archive/mbox/emacs-devel/$i
  echo $FNAME
  wget -nc https://lists.gnu.org/archive/mbox/emacs-devel/$i
done

# (code-c-d "emacsdevelmbox" "$S/https/lists.gnu.org/archive/mbox/emacs-devel/")
# (find-emacsdevelmboxfile "")
# (find-emacsdevelmboxgrep "grep --color=auto -nH --null -e wget *")

# https://lists.gnu.org/archive/html/emacs-orgmode/2021-10/msg00034.html msg-id





#####
#
# emacs-weekly-news
# 2021sep20
#
#####

# «emacs-weekly-news»  (to ".emacs-weekly-news")
# (find-efunction 'find-emacs-tangents-links)
# https://sachachua.com/blog/all/
# https://sachachua.com/blog/2016/02/publishing-emacs-news-plain-text-html-attached-org-file/
# (find-emacs-tangents-links "2015" "11" "30" "msg00045" "")
# (find-emacs-tangents-links "2015" "11" "23" "msg00032" "")
# (find-emacs-tangents-links "2015" "11" "16" "msg00021" "")
# (find-emacs-tangents-links "2015" "11" "30" "msg00045" "")
# (find-emacs-tangents-links "2015" "11" "23" "msg00032" "")
# (find-emacs-tangents-links "2015" "11" "16" "msg00021" "")
# (find-emacs-tangents-links "2015" "12" "28" "msg00015" "")
# (find-emacs-tangents-links "2015" "12" "21" "msg00011" "")
# (find-emacs-tangents-links "2015" "12" "14" "msg00005" "")
# (find-emacs-tangents-links "2015" "12" "07" "msg00002" "")
# (find-emacs-tangents-links "2016" "01" "25" "msg00030" "txtd7pNlWGR26")
# (find-emacs-tangents-links "2016" "01" "18" "msg00023" "txtzrR5cVvdl_")
# (find-emacs-tangents-links "2016" "01" "10" "msg00013" "")
# (find-emacs-tangents-links "2016" "01" "04" "msg00012" "")
# (find-emacs-tangents-links "2016" "02" "15" "msg00006" "txtNuEds1ML2n")
# (find-emacs-tangents-links "2016" "02" "08" "msg00005" "txtqehI8H_oay")
# (find-emacs-tangents-links "2016" "02" "01" "msg00002" "txtRQs4h62Gs6")
# (find-emacs-tangents-links "2016" "02" "01" "msg00000" "txtmgdyQt6bh9")
# (find-emacs-tangents-links "2016" "03" "28" "msg00002" "txt769PbdVwd4")
# (find-emacs-tangents-links "2016" "03" "21" "msg00001" "txtpm2nHC6YGV")
# (find-emacs-tangents-links "2016" "03" "14" "msg00000" "txtcW4KtnoXhC")
# (find-emacs-tangents-links "2016" "04" "25" "msg00007" "txtWz_LBoTiOz")
# (find-emacs-tangents-links "2016" "04" "18" "msg00004" "txtZ5GRXbcvP_")
# (find-emacs-tangents-links "2016" "04" "11" "msg00001" "txtpUopYTtYvo")
# (find-emacs-tangents-links "2016" "04" "04" "msg00000" "txtR6lvY9itHv")
# (find-emacs-tangents-links "2016" "05" "30" "msg00004" "txthX0hDCpG6G")
# (find-emacs-tangents-links "2016" "05" "23" "msg00003" "txtVpL1tX095U")
# (find-emacs-tangents-links "2016" "05" "16" "msg00002" "txtzlg3El3YHf")
# (find-emacs-tangents-links "2016" "05" "09" "msg00001" "txtAhj2NqcK8m")
# (find-emacs-tangents-links "2016" "05" "02" "msg00000" "txtv9imznCsPf")
# (find-emacs-tangents-links "2016" "06" "27" "msg00012" "txtlRAJVB0tis")
# (find-emacs-tangents-links "2016" "06" "20" "msg00010" "txts5X1MlQY3g")
# (find-emacs-tangents-links "2016" "06" "13" "msg00009" "txtF5mnBp3qSc")
# (find-emacs-tangents-links "2016" "06" "06" "msg00000" "txtRx6Ww2HcEl")
# (find-emacs-tangents-links "2016" "07" "25" "msg00003" "txtJce9XCo1Vn")
# (find-emacs-tangents-links "2016" "07" "18" "msg00002" "txtrC4X3_veFk")
# (find-emacs-tangents-links "2016" "07" "10" "msg00001" "txtYY95FhsEtw")
# (find-emacs-tangents-links "2016" "07" "04" "msg00000" "txt_347rxnizq")
# (find-emacs-tangents-links "2016" "08" "29" "msg00008" "txtmEAwk4FC2a")
# (find-emacs-tangents-links "2016" "08" "22" "msg00007" "txttg4aMjhoL7")
# (find-emacs-tangents-links "2016" "08" "15" "msg00006" "txtE_IcwmrsDr")
# (find-emacs-tangents-links "2016" "08" "08" "msg00002" "txtCbCZJdthb6")
# (find-emacs-tangents-links "2016" "08" "08" "msg00001" "txtMi1FBhBe4C")
# (find-emacs-tangents-links "2016" "08" "01" "msg00000" "txtu77r5j6yo7")
# (find-emacs-tangents-links "2016" "09" "26" "msg00003" "txtTWqK3VUXPY")
# (find-emacs-tangents-links "2016" "09" "19" "msg00002" "txttAY2MbxT5b")
# (find-emacs-tangents-links "2016" "09" "12" "msg00001" "txtxw4yIdRTyE")
# (find-emacs-tangents-links "2016" "09" "05" "msg00000" "txtrkg93Ta2ba")
# (find-emacs-tangents-links "2016" "10" "24" "msg00004" "txtEvNCGPAJXw")
# (find-emacs-tangents-links "2016" "10" "17" "msg00003" "txtMbGpEfj2Di")
# (find-emacs-tangents-links "2016" "10" "10" "msg00001" "txtJ67ytCwXs7")
# (find-emacs-tangents-links "2016" "10" "03" "msg00000" "txtfO5DfRqn56")
# (find-emacs-tangents-links "2016" "11" "28" "msg00004" "txtMrkin4pc0u")
# (find-emacs-tangents-links "2016" "11" "21" "msg00003" "txtfCGnrT9yHu")
# (find-emacs-tangents-links "2016" "11" "14" "msg00002" "txti6VJkRBkKW")
# (find-emacs-tangents-links "2016" "11" "07" "msg00001" "txtn_fUtL5lrY")
# (find-emacs-tangents-links "2016" "10" "31" "msg00000" "txtfO5DfRqn56")
# (find-emacs-tangents-links "2016" "12" "26" "msg00003" "txtZWtGkU1txg")
# (find-emacs-tangents-links "2016" "12" "19" "msg00002" "txtzvn7O2FsZ4")
# (find-emacs-tangents-links "2016" "12" "12" "msg00001" "txt2QSphs2kub")
# (find-emacs-tangents-links "2016" "12" "05" "msg00000" "txtsvjBwfazPP")
# (find-emacs-tangents-links "2017" "01" "30" "msg00005" "txtKWfCbRBM2H")
# (find-emacs-tangents-links "2017" "01" "30" "msg00004" "txtKGHtLd0PWd")
# (find-emacs-tangents-links "2017" "01" "23" "msg00003" "txtQiGx_L_Dj4")
# (find-emacs-tangents-links "2017" "01" "16" "msg00002" "txt_sm0bRwCvM")
# (find-emacs-tangents-links "2017" "01" "09" "msg00001" "txtwNkljfT_Dl")
# (find-emacs-tangents-links "2017" "01" "02" "msg00000" "txtFL6RyBaQQE")
# (find-emacs-tangents-links "2017" "02" "20" "msg00002" "txtjmXLpOBRad")
# (find-emacs-tangents-links "2017" "02" "13" "msg00001" "txtR_FsUKNUUD")
# (find-emacs-tangents-links "2017" "02" "06" "msg00000" "txtDpUd8i6nMw")
# (find-emacs-tangents-links "2017" "03" "27" "msg00004" "txtj96yrgwcMJ")
# (find-emacs-tangents-links "2017" "03" "20" "msg00003" "txtXPQUkF29my")
# (find-emacs-tangents-links "2017" "03" "13" "msg00002" "txtE0QgxzvF44")
# (find-emacs-tangents-links "2017" "03" "06" "msg00001" "txtpcvFeNOx35")
# (find-emacs-tangents-links "2017" "02" "27" "msg00000" "txtDpUd8i6nMw")
# (find-emacs-tangents-links "2017" "04" "24" "msg00003" "txtXW2TFysbNG")
# (find-emacs-tangents-links "2017" "04" "17" "msg00002" "txtm9PCXDR6WZ")
# (find-emacs-tangents-links "2017" "04" "10" "msg00001" "txtBVxryLH70j")
# (find-emacs-tangents-links "2017" "04" "03" "msg00000" "txtFoIOnvT5dO")
# (find-emacs-tangents-links "2017" "05" "29" "msg00004" "txteTFu6X35EE")
# (find-emacs-tangents-links "2017" "05" "22" "msg00003" "txtDlYElv9TqH")
# (find-emacs-tangents-links "2017" "05" "15" "msg00002" "txtpmJCFcqxYo")
# (find-emacs-tangents-links "2017" "05" "08" "msg00001" "txtp5AMHdOHE0")
# (find-emacs-tangents-links "2017" "05" "01" "msg00000" "txtRCODC8fLAK")
# (find-emacs-tangents-links "2017" "06" "26" "msg00003" "txtUPCVSt4Dmw")
# (find-emacs-tangents-links "2017" "06" "19" "msg00002" "txtdqRpPdnyBt")
# (find-emacs-tangents-links "2017" "06" "12" "msg00001" "txtXF_Wlq1u9i")
# (find-emacs-tangents-links "2017" "06" "05" "msg00000" "txt0sG_fhqFwT")
# (find-emacs-tangents-links "2017" "07" "31" "msg00004" "txtx0n7xYSpqU")
# (find-emacs-tangents-links "2017" "07" "24" "msg00003" "txtDSDUkur7_a")
# (find-emacs-tangents-links "2017" "07" "17" "msg00002" "txtDRgioUEfVX")
# (find-emacs-tangents-links "2017" "07" "10" "msg00001" "txtvEbR_gr5Fb")
# (find-emacs-tangents-links "2017" "07" "03" "msg00000" "txtDfkgL1rPWE")
# (find-emacs-tangents-links "2017" "08" "21" "msg00002" "txtZk6GkosiF8")
# (find-emacs-tangents-links "2017" "08" "14" "msg00001" "txt6tWSvN3MPz")
# (find-emacs-tangents-links "2017" "08" "07" "msg00000" "txtLAOiZQkcLI")
# (find-emacs-tangents-links "2017" "10" "30" "msg00001" "txtLObAvQAHnn")
# (find-emacs-tangents-links "2017" "10" "23" "msg00000" "txt0rwNNzBVTt")
# (find-emacs-tangents-links "2017" "11" "27" "msg00005" "txts79TIVmUGF")
# (find-emacs-tangents-links "2017" "11" "20" "msg00003" "txt1yZc9HPsxC")
# (find-emacs-tangents-links "2017" "11" "13" "msg00001" "txtsUx3rLt4dp")
# (find-emacs-tangents-links "2017" "11" "06" "msg00000" "txt7ViaxzzAOf")
# (find-emacs-tangents-links "2017" "12" "19" "msg00002" "txtUyE71reSQp")
# (find-emacs-tangents-links "2017" "12" "11" "msg00001" "txtUvsKBZKmun")
# (find-emacs-tangents-links "2017" "12" "04" "msg00000" "txtfEsVd3Dgml")
# (find-emacs-tangents-links "2018" "01" "29" "msg00025" "txtJ1ftXqItdm")
# (find-emacs-tangents-links "2018" "01" "23" "msg00024" "txtL1hlqKjYos")
# (find-emacs-tangents-links "2018" "01" "15" "msg00002" "txtFjGKyOyZDm")
# (find-emacs-tangents-links "2018" "01" "09" "msg00001" "txt7LuMO6A6w7")
# (find-emacs-tangents-links "2018" "01" "01" "msg00000" "txtLHBdQi_dbR")
# (find-emacs-tangents-links "2018" "02" "26" "msg00004" "txtwNAEGYAgJz")
# (find-emacs-tangents-links "2018" "02" "19" "msg00003" "txtPA0CJzw5PV")
# (find-emacs-tangents-links "2018" "02" "12" "msg00002" "txt3Qjt6zkyDq")
# (find-emacs-tangents-links "2018" "02" "05" "msg00001" "txtAcQQH4Aarq")
# (find-emacs-tangents-links "2018" "03" "26" "msg00003" "txtHAD5YzM3Ms")
# (find-emacs-tangents-links "2018" "03" "20" "msg00002" "txtXd4SbL_jGx")
# (find-emacs-tangents-links "2018" "03" "12" "msg00001" "txto7oJ48ztTm")
# (find-emacs-tangents-links "2018" "03" "04" "msg00000" "txtBKiFYl8J2L")
# (find-emacs-tangents-links "2018" "04" "30" "msg00004" "txt3S5WOPaEqp")
# (find-emacs-tangents-links "2018" "04" "23" "msg00003" "txtYHr7khB9b8")
# (find-emacs-tangents-links "2018" "04" "16" "msg00002" "txtvq5MADXfyQ")
# (find-emacs-tangents-links "2018" "04" "09" "msg00001" "txt6jLprvOXGS")
# (find-emacs-tangents-links "2018" "04" "02" "msg00000" "txtlHyl0QPAjK")
# (find-emacs-tangents-links "2018" "05" "28" "msg00004" "txteCHLTM_yZB")
# (find-emacs-tangents-links "2018" "05" "21" "msg00003" "txtYn7Mp1ppJi")
# (find-emacs-tangents-links "2018" "05" "07" "msg00002" "txtj4w6msTqJR")
# (find-emacs-tangents-links "2018" "05" "14" "msg00001" "txtmaJjdDq5jt")
# (find-emacs-tangents-links "2018" "05" "07" "msg00000" "txtowyu70GpMl")
# (find-emacs-tangents-links "2018" "06" "25" "msg00003" "txtHGDQHxmNNz")
# (find-emacs-tangents-links "2018" "06" "18" "msg00002" "txt6wNOioi3ms")
# (find-emacs-tangents-links "2018" "06" "11" "msg00001" "txtKupsVU2ktj")
# (find-emacs-tangents-links "2018" "06" "04" "msg00000" "txt6odJr92pUV")
# (find-emacs-tangents-links "2018" "07" "30" "msg00004" "txtq7RgzbfR2d")
# (find-emacs-tangents-links "2018" "07" "23" "msg00003" "txts0OqTzBgCh")
# (find-emacs-tangents-links "2018" "07" "16" "msg00002" "txtu3jFCmJTW0")
# (find-emacs-tangents-links "2018" "07" "09" "msg00001" "txtTgqr3wY3kZ")
# (find-emacs-tangents-links "2018" "07" "02" "msg00000" "txtHW5c4UYDCf")
# (find-emacs-tangents-links "2018" "08" "27" "msg00003" "txtQwHeSBvudd")
# (find-emacs-tangents-links "2018" "08" "20" "msg00002" "txtIffoaIpvFl")
# (find-emacs-tangents-links "2018" "08" "13" "msg00001" "txt3k3q_IVtxE")
# (find-emacs-tangents-links "2018" "08" "06" "msg00000" "txtMTi1eGlKVN")
# (find-emacs-tangents-links "2018" "09" "24" "msg00002" "txtaVRpRTVE_9")
# (find-emacs-tangents-links "2018" "09" "17" "msg00001" "txtwc7D79CFTY")
# (find-emacs-tangents-links "2018" "09" "03" "msg00000" "txtcH1fwmM_zS")
# (find-emacs-tangents-links "2018" "10" "29" "msg00003" "txt_MlfD8iiqx")
# (find-emacs-tangents-links "2018" "10" "22" "msg00002" "txt33_MVaFOsP")
# (find-emacs-tangents-links "2018" "10" "15" "msg00001" "txt6EYLfAcNfR")
# (find-emacs-tangents-links "2018" "10" "08" "msg00000" "txtKQb62xzZpj")
# (find-emacs-tangents-links "2018" "11" "26" "msg00004" "txtBE36rVEEHS")
# (find-emacs-tangents-links "2018" "11" "19" "msg00003" "txteZDya4Na7K")
# (find-emacs-tangents-links "2018" "11" "12" "msg00001" "txt7y2vD6lH9l")
# (find-emacs-tangents-links "2018" "11" "05" "msg00000" "txtvRW6JVi8CH")
# (find-emacs-tangents-links "2018" "12" "31" "msg00004" "txt7Oo6HC7TXt")
# (find-emacs-tangents-links "2018" "12" "24" "msg00003" "txt80sRuJWgX4")
# (find-emacs-tangents-links "2018" "12" "17" "msg00002" "txt4CnI6kpdRf")
# (find-emacs-tangents-links "2018" "12" "10" "msg00001" "txt0pev4rbBvn")
# (find-emacs-tangents-links "2018" "12" "03" "msg00000" "txtEX8Nk2GTMQ")
# (find-emacs-tangents-links "2019" "01" "28" "msg00003" "txtYyoBC96_5I")
# (find-emacs-tangents-links "2019" "01" "21" "msg00002" "txtQFvLBUBv_Z")
# (find-emacs-tangents-links "2019" "01" "14" "msg00001" "txt1ZIJKVDfKF")
# (find-emacs-tangents-links "2019" "01" "07" "msg00000" "txtX5FlVyLTTa")
# (find-emacs-tangents-links "2019" "02" "25" "msg00003" "txts1Loj5oHBL")
# (find-emacs-tangents-links "2019" "02" "18" "msg00002" "txtWFNfjLYWf7")
# (find-emacs-tangents-links "2019" "02" "11" "msg00001" "txtw3LyrxGAfQ")
# (find-emacs-tangents-links "2019" "02" "04" "msg00000" "txt_aYCv37uOO")
# (find-emacs-tangents-links "2019" "03" "25" "msg00003" "txtd10p_vakYt")
# (find-emacs-tangents-links "2019" "03" "18" "msg00002" "txtwvaJeH0pTg")
# (find-emacs-tangents-links "2019" "03" "11" "msg00001" "txtsz4wQlclaK")
# (find-emacs-tangents-links "2019" "03" "04" "msg00000" "txtCIfPLaS8ec")
# (find-emacs-tangents-links "2019" "04" "22" "msg00003" "txte_487Tf2DY")
# (find-emacs-tangents-links "2019" "04" "15" "msg00002" "txtJhXaezVBdB")
# (find-emacs-tangents-links "2019" "04" "08" "msg00001" "txtZaGPjNDJLG")
# (find-emacs-tangents-links "2019" "04" "01" "msg00000" "txtyveGucDD2W")
# (find-emacs-tangents-links "2019" "05" "27" "msg00004" "txtss8CjIUXix")
# (find-emacs-tangents-links "2019" "05" "20" "msg00003" "txt82EPNs4PqT")
# (find-emacs-tangents-links "2019" "05" "13" "msg00002" "txtTka67L5kgD")
# (find-emacs-tangents-links "2019" "05" "06" "msg00001" "txtAOqai2jVYO")
# (find-emacs-tangents-links "2019" "04" "29" "msg00000" "txtyveGucDD2W")
# (find-emacs-tangents-links "2019" "06" "24" "msg00009" "txtV4p13smFbq")
# (find-emacs-tangents-links "2019" "06" "17" "msg00008" "txtIe52zthSei")
# (find-emacs-tangents-links "2019" "06" "10" "msg00006" "txtim5qNuEYlD")
# (find-emacs-tangents-links "2019" "06" "03" "msg00000" "txtJYDXBhZOBd")
# (find-emacs-tangents-links "2019" "07" "29" "msg00006" "txt3GM6VAtZzY")
# (find-emacs-tangents-links "2019" "07" "22" "msg00003" "txtDecvf0kyWB")
# (find-emacs-tangents-links "2019" "07" "15" "msg00002" "txt0uJujAYKXe")
# (find-emacs-tangents-links "2019" "07" "08" "msg00001" "txt22dRPglMPM")
# (find-emacs-tangents-links "2019" "07" "01" "msg00000" "txtK7okHUdMw8")
# (find-emacs-tangents-links "2019" "08" "26" "msg00005" "txtYP2eWg_cTu")
# (find-emacs-tangents-links "2019" "08" "19" "msg00003" "txtH6werFhDJM")
# (find-emacs-tangents-links "2019" "08" "12" "msg00002" "txtvSLjqpHl14")
# (find-emacs-tangents-links "2019" "08" "05" "msg00001" "txtl4646UtifQ")
# (find-emacs-tangents-links "2019" "09" "30" "msg00004" "txt3e8tP5prIy")
# (find-emacs-tangents-links "2019" "09" "23" "msg00003" "txtNHadwH1fr5")
# (find-emacs-tangents-links "2019" "09" "16" "msg00002" "txtm4HG66kIhl")
# (find-emacs-tangents-links "2019" "09" "09" "msg00001" "txtRWcfGKXMmw")
# (find-emacs-tangents-links "2019" "09" "02" "msg00000" "txt6lkHRoaG8r")
# (find-emacs-tangents-links "2019" "10" "28" "msg00003" "txt0GJwNaCKxs")
# (find-emacs-tangents-links "2019" "10" "21" "msg00002" "txt3pRG8Ko0rb")
# (find-emacs-tangents-links "2019" "10" "14" "msg00001" "txtkWJfY8WD4w")
# (find-emacs-tangents-links "2019" "10" "07" "msg00000" "txtfGKYAnMrph")
# (find-emacs-tangents-links "2019" "11" "25" "msg00004" "txt6sNiSuzyCM")
# (find-emacs-tangents-links "2019" "11" "18" "msg00002" "txtqF8bJGfWcD")
# (find-emacs-tangents-links "2019" "11" "11" "msg00001" "txtFdQQrCjjnl")
# (find-emacs-tangents-links "2019" "11" "04" "msg00000" "txttR_PEJpV_k")
# (find-emacs-tangents-links "2019" "12" "30" "msg00004" "txtYbkYISEryB")
# (find-emacs-tangents-links "2019" "12" "23" "msg00003" "txtw2JCkdFw_S")
# (find-emacs-tangents-links "2019" "12" "16" "msg00002" "txtIVdsvJ7fej")
# (find-emacs-tangents-links "2019" "12" "09" "msg00001" "txtVtAaai6N24")
# (find-emacs-tangents-links "2019" "12" "02" "msg00000" "txtkzJMa59q1o")
# (find-emacs-tangents-links "2020" "01" "27" "msg00003" "txtXuxghvLoI9")
# (find-emacs-tangents-links "2020" "01" "20" "msg00002" "txtREAC22Amqa")
# (find-emacs-tangents-links "2020" "01" "13" "msg00001" "txtZcs5WzOihm")
# (find-emacs-tangents-links "2020" "01" "06" "msg00000" "txtHFpBs5GkIw")
# (find-emacs-tangents-links "2020" "02" "24" "msg00004" "txtWUe27MvorK")
# (find-emacs-tangents-links "2020" "02" "17" "msg00003" "txtiEck3WAicX")
# (find-emacs-tangents-links "2020" "02" "10" "msg00002" "txtLAYoswzF7W")
# (find-emacs-tangents-links "2020" "02" "03" "msg00000" "txtUSgRO1YGEQ")
# (find-emacs-tangents-links "2020" "03" "30" "msg00004" "txtHSL1psM8vt")
# (find-emacs-tangents-links "2020" "03" "23" "msg00003" "txtekw0PRqT_W")
# (find-emacs-tangents-links "2020" "03" "16" "msg00002" "txtRUHU16B_Yk")
# (find-emacs-tangents-links "2020" "03" "09" "msg00001" "txtg1ydR5TfCU")
# (find-emacs-tangents-links "2020" "03" "02" "msg00000" "txtJ8feEiI_uQ")
# (find-emacs-tangents-links "2020" "04" "27" "msg00003" "txtaeEtUuwHss")
# (find-emacs-tangents-links "2020" "04" "20" "msg00002" "txtxWUxqELs41")
# (find-emacs-tangents-links "2020" "04" "13" "msg00001" "txtqKyvyVoyMH")
# (find-emacs-tangents-links "2020" "04" "06" "msg00000" "txtaXQIfs9aDT")
# (find-emacs-tangents-links "2020" "05" "25" "msg00003" "txt4Vn6yIvPZ_")
# (find-emacs-tangents-links "2020" "05" "18" "msg00002" "txtl6yAVVmOsn")
# (find-emacs-tangents-links "2020" "05" "11" "msg00001" "txtiHrKvju1oG")
# (find-emacs-tangents-links "2020" "05" "04" "msg00000" "txtwdUumO9boh")
# (find-emacs-tangents-links "2020" "06" "29" "msg00004" "txtTSsbR07PqR")
# (find-emacs-tangents-links "2020" "06" "22" "msg00003" "txtfhTAO4xyjC")
# (find-emacs-tangents-links "2020" "06" "15" "msg00002" "txtb8J6wSiJJE")
# (find-emacs-tangents-links "2020" "06" "08" "msg00001" "txtBxKFSeit85")
# (find-emacs-tangents-links "2020" "06" "01" "msg00000" "txtOsnE790Gwc")
# (find-emacs-tangents-links "2020" "07" "27" "msg00003" "txtnQnQgPV1Hj")
# (find-emacs-tangents-links "2020" "07" "20" "msg00002" "txtuL8Q7kRjDh")
# (find-emacs-tangents-links "2020" "07" "13" "msg00001" "txtY9tcbpYYGK")
# (find-emacs-tangents-links "2020" "07" "06" "msg00000" "txt4gANwFyoWM")
# (find-emacs-tangents-links "2020" "08" "24" "msg00004" "txtRPzRtwPU0Z")
# (find-emacs-tangents-links "2020" "08" "17" "msg00002" "txt1J32v290Wf")
# (find-emacs-tangents-links "2020" "08" "10" "msg00001" "txtYSSqOSzuA4")
# (find-emacs-tangents-links "2020" "08" "03" "msg00000" "txtEtEFfrhzxM")
# (find-emacs-tangents-links "2020" "09" "28" "msg00004" "txtgXeGTArJR0")
# (find-emacs-tangents-links "2020" "09" "21" "msg00003" "txtAX3eqdvA1_")
# (find-emacs-tangents-links "2020" "09" "14" "msg00002" "txt0mBS7yn2zF")
# (find-emacs-tangents-links "2020" "09" "07" "msg00001" "txtUW2UBD2Gh1")
# (find-emacs-tangents-links "2020" "08" "31" "msg00000" "txtEtEFfrhzxM")
# (find-emacs-tangents-links "2020" "10" "26" "msg00036" "txtoQDUuL0jr7")
# (find-emacs-tangents-links "2020" "10" "19" "msg00003" "txtET3IdtDnj0")
# (find-emacs-tangents-links "2020" "10" "12" "msg00001" "txt1OWblFsIPn")
# (find-emacs-tangents-links "2020" "10" "05" "msg00000" "txts2ETp920ql")
# (find-emacs-tangents-links "2020" "11" "30" "msg00010" "txtDWtmUUGzf4")
# (find-emacs-tangents-links "2020" "11" "23" "msg00009" "txtutyJg13UiW")
# (find-emacs-tangents-links "2020" "11" "16" "msg00006" "txtedVKyEKZSi")
# (find-emacs-tangents-links "2020" "11" "09" "msg00002" "txt1frPNIUXA3")
# (find-emacs-tangents-links "2020" "11" "02" "msg00000" "txtZ8ow_S0IfQ")
# (find-emacs-tangents-links "2020" "12" "28" "msg00034" "txtKPSvEsh1Wo")
# (find-emacs-tangents-links "2020" "12" "21" "msg00033" "txtOisK5f9Kgm")
# (find-emacs-tangents-links "2020" "12" "14" "msg00030" "txtR32XAehN6H")
# (find-emacs-tangents-links "2020" "12" "07" "msg00004" "txtKOw2_kJ1YT")
# (find-emacs-tangents-links "2021" "01" "25" "msg00108" "txt8FTTLCd37j")
# (find-emacs-tangents-links "2021" "01" "18" "msg00107" "txthLuFyQG8_q")
# (find-emacs-tangents-links "2021" "01" "11" "msg00081" "txta78DT92L8j")
# (find-emacs-tangents-links "2021" "01" "04" "msg00000" "txthEgcVRqjVg")
# (find-emacs-tangents-links "2021" "02" "22" "msg00007" "txtWm61qqCdRY")
# (find-emacs-tangents-links "2021" "02" "15" "msg00006" "txtODxzIy1_JF")
# (find-emacs-tangents-links "2021" "02" "08" "msg00001" "txtcjfOxydKso")
# (find-emacs-tangents-links "2021" "02" "01" "msg00000" "txtbSXxfzS2gu")
# (find-emacs-tangents-links "2021" "03" "29" "msg00018" "txt75JAeppLeQ")
# (find-emacs-tangents-links "2021" "03" "22" "msg00017" "txtf0Vn42X2MR")
# (find-emacs-tangents-links "2021" "03" "15" "msg00016" "txtg1inMNOJm6")
# (find-emacs-tangents-links "2021" "03" "08" "msg00015" "txtaHhpCJIzdB")
# (find-emacs-tangents-links "2021" "03" "01" "msg00001" "txtbvNntZSjED")
# (find-emacs-tangents-links "2021" "04" "26" "msg00009" "txti9FsEDnSqo")
# (find-emacs-tangents-links "2021" "04" "19" "msg00002" "txt_8GjhNNfkk")
# (find-emacs-tangents-links "2021" "04" "12" "msg00001" "txtmUhyqynSrB")
# (find-emacs-tangents-links "2021" "04" "05" "msg00000" "txtrtplPGAUTN")
# (find-emacs-tangents-links "2021" "05" "31" "msg00008" "txt6Vg9AIM1FH")
# (find-emacs-tangents-links "2021" "05" "24" "msg00007" "txtx0bveSZFeE")
# (find-emacs-tangents-links "2021" "05" "17" "msg00004" "txtVCWUzB3fg5")
# (find-emacs-tangents-links "2021" "05" "10" "msg00003" "txtyqMHUVPU6w")
# (find-emacs-tangents-links "2021" "05" "03" "msg00000" "txt6UiEKpjiAc")
# (find-emacs-tangents-links "2021" "06" "28" "msg00013" "txtXcrHngB4w9")
# (find-emacs-tangents-links "2021" "06" "21" "msg00005" "txtaLAMaRyiyq")
# (find-emacs-tangents-links "2021" "06" "14" "msg00004" "txtcRi_9_9xhd")
# (find-emacs-tangents-links "2021" "06" "07" "msg00000" "txthB_TkDpjma")
# (find-emacs-tangents-links "2021" "07" "26" "msg00047" "txtjgm8AshUci")
# (find-emacs-tangents-links "2021" "07" "19" "msg00002" "txtLRFpN2aw9P")
# (find-emacs-tangents-links "2021" "07" "12" "msg00001" "txtW4iwLnmxVJ")
# (find-emacs-tangents-links "2021" "07" "05" "msg00000" "txt1Xw2hk7OZ7")
# (find-emacs-tangents-links "2021" "08" "30" "msg00009" "txtbQqcncIbZu")
# (find-emacs-tangents-links "2021" "08" "23" "msg00008" "txtMmeU9e_vgM")
# (find-emacs-tangents-links "2021" "08" "16" "msg00007" "txth7IH99ybDB")
# (find-emacs-tangents-links "2021" "08" "09" "msg00004" "txtChom5NPZ_N")
# (find-emacs-tangents-links "2021" "08" "02" "msg00000" "txtK0kqTdVlCi")
# (find-emacs-tangents-links "2021" "09" "13" "msg00012" "txtDe8bs5lrUd")
# (find-emacs-tangents-links "2021" "09" "06" "msg00003" "txtwhyXNilCWR")



#####
#
# emacs-news-git
# 2022oct19
#
#####

# «emacs-news-git»  (to ".emacs-news-git")
# https://github.com/sachac/emacs-news
# (find-git-links "https://github.com/sachac/emacs-news" "emacsnews")
# (code-c-d "emacsnews" "~/usrc/emacs-news/")
# (find-emacsnewsfile "")
# (find-emacsnewsfile "index.org" "defun my-update-package-list")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/emacs-news/
cd      ~/usrc/
git clone https://github.com/sachac/emacs-news
cd      ~/usrc/emacs-news/
git pull

# (find-fline "~/usrc/")
# (find-fline "~/usrc/emacs-news/")
# (find-gitk  "~/usrc/emacs-news/")

# (code-c-d "emacsnews" "~/usrc/emacs-news/")
# (find-emacsnewsfile "")



#####
#
# planet-emacslife
# 2022jan08
#
#####

# «planet-emacslife»  (to ".planet-emacslife")
# https://planet.emacslife.com/
# https://emacsnotes.wordpress.com/2022/01/03/subreddit-r-planetemacs-my-favorite-source-for-emacs-related-news-it-is-3-years-old-and-has-1750-subscribers-a-brief-note-on-how-it-is-made/
# https://old.reddit.com/r/planetemacs
# https://github.com/sachac/planet.emacsen.org/commits/sacha
# https://github.com/sachac/planet.emacsen.org

# https://old.reddit.com/r/planetemacs
# https://old.reddit.com/r/planetemacs/comments/1agtgyz/learning_git_with_try_its_and_eev/?
# https://www.reddit.com/r/help/comments/17b1pai/is_there_a_way_to_tell_reddit_to_use_a_specific/ thumb




#####
#
# Tutorials
# 2001jan21
#
#####

# «tutorials»  (to ".tutorials")
# (find-htetfile "Emacs-Beginner-HOWTO.txt.gz")



#####
#
# kbd
# 2024oct12
#
#####

# «kbd»               (to ".kbd")
# «key-description»   (to ".key-description")
# «read-kbd-macro»    (to ".read-kbd-macro")
# «format-kbd-macro»  (to ".format-kbd-macro")
#
# (find-efunction-links 'kbd)
# (find-efunction-links 'key-description)
# (find-efunction-links 'read-kbd-macro)
# (find-efunction-links 'format-kbd-macro)
# (find-efunction-links 'event-modifiers)
# (find-efunction-links 'event-basic-type)
#
# Bug #73764: format-kbd-macro returns a key name that keymap-lookup doesn't recognize
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-10/msg00637.html Edrx
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-10/msg00646.html EliZ: A-C-H-M-S-s

(defun find-ekeycodes (keys)
  (find-estring-2a
   (cl-loop for key in (ee-split keys)
            for ns = (read-kbd-macro key)
            for n  = (aref ns 0)
            concat (format "%4s %8x  %s\n" key n ns))))

(find-ekeycodes "C-a a s-a S-a     M-a")
(find-ekeycodes     "/ s-/ S-/ C-/ M-/")




#####
#
# define-key
# 2022sep03
#
#####

# «define-key»  (to ".define-key")
# (find-efunctiondescr   'define-key)
# (find-efunction        'define-key)
# (find-elnode "Index" "* define-key:")
# (find-efunctiondescr   'keymap-set)
# (find-efunction        'keymap-set)
# (find-elnode "Index" "* keymap-set:")
# (find-eshortdoc 'keymaps)



#####
#
# make-sparse-keymap-prompt
# 2024mar14
#
#####

# «make-sparse-keymap-prompt»  (to ".make-sparse-keymap-prompt")
# (find-fline "~/LOGS/2024mar14.emacs" "M-p C-h gives the list of keybindings")
# (find-elnode "Creating Keymaps")

(setq M-p-map (make-sparse-keymap "a: AA b: BB"))
(define-key my-mode-map (kbd "M-p") M-p-map)
(define-key M-p-map (kbd "a") 'find-eev-quick-intro)
(define-key M-p-map (kbd "b") 'find-emacs-keys-intro)




#####
#
# key bindings
# 2000oct22
#
#####

# «key_bindings»  (to ".key_bindings")
# (find-angg ".emacs" "key_bindings")
# (find-elnode "Keymaps")
# (find-elnode "Active Keymaps")
# current-local-map

# (find-elnode "Changing Key Bindings" "`(control ?a)'")

# But what is the clean way to make c-mode not override eev's M-e?
# (find-efile "progmodes/")
# (find-efile "progmodes/cc-langs.el")
# (find-efile "progmodes/cc-langs.el" "\"\\ee\"")
# (find-elnode "Active Keymaps" "`local-set-key'")
# (find-elnode "Active Keymaps" "current-local-map")

# The dirty way is to place a line like this in each C file with
# hyperlinks, and execute it by hand.
# (define-key c-mode-base-map "\ee" nil)

# I don't understand hooks well yet, but this trick from Luke (from
# the #emacs IRC channel) works ok:
#
# (find-angg ".emacs" "c-mode-hook")





#####
#
# Getting the name of a key
# 2000oct24
#
#####

# «key_name»  (to ".key_name")
# «call-interactively»  (to ".call-interactively")
# (to "pretty-printing")

# (find-enode "Function Keys")
# (find-enode "Function Keys" "`C-h c'")
# (find-enode "Function Keys" "vector\nsyntax")
# (find-enode "Function Keys" "[?\\C-x next]")
# (find-enode "Init Rebinding" "?\\C-=")

# Hey, why does this docstring say "KEY is a string"?
# (find-etag "describe-key")

# (find-elnode "Interactive Call" "Function: call-interactively")
# (describe-key [f3])
# (key-binding [f3])

(defun foo (key)
  "Display the internal representation of KEY as a Lisp object."
  (interactive "kKey: ")
  (message (format "%S" key)))

(call-interactively 'foo nil nil)

(call-interactively
  (lambda (key) "Get the representation of KEY as a Lisp object."
    (interactive "kKey: ")
    key)
  nil nil)




#####
#
# Locating the code that converts M-B to M-b when M-B is undefined
# 2000sep16
#
#####

# «meta-shift-letter»  (to ".meta-shift-letter")
# (find-angg "eev-extras.el" "eeg_in_emacs")

# 2005sep24:
# (find-enode "Key Sequence Input" "converted to lower case")

# These evaluate to different strings even in Emacs in console mode, see:
# "\M-b"
# "\M-B"
# (find-fline "~/MTA/Makefile" "loadkeys math850.map")
# (find-fline "~/MTA/math850.map" "48 = b")
# (eeman "5 keymaps" "action code is an ASCII char")

cd /usr/src/emacs20-20.7/
find | grep key

# (find-e20srcfile "src/" "key")
# (find-e20srcfile "src/keyboard.c")
# (find-e20srcfile "src/keyboard.c" "use the corresponding unshifted")
# (find-e20srcfile "src/keyboard.h")
# (find-e20srcfile "src/keymap.c")

# (find-e20srcfile "src/keymap.c" "define-key")




#####
#
# metakeyproblems
# 2021oct31
#
#####

# «metakeyproblems»  (to ".metakeyproblems")
# https://www.emacswiki.org/emacs/MetaKeyProblems

* (eepitch-libera "fsbot`")
* (eepitch-kill)
* (eepitch-libera "fsbot`")
,metakeyproblems
more
metakeyproblems




#####
#
# iso-accents (new)
# 2000oct19
#
#####

# «iso-accents»  (to ".iso-accents")
# (find-angg ".emacs" "iso-accents")

# 2024feb19: moved to:
# (find-angg ".emacs.unibyte" "fossils")


; (load-library "iso-acc")
; (find-efile "international/iso-acc.el")
; (iso-accents-customize "latin-1")
; (describe-variable 'iso-languages)
; (iso-accents-mode)

; (find-node "(elisp)Creating Strings")
; (aref [3 4 5 6] 2)
; (aref "3456" 2)
; (substring "abcdefg" 2)
; (describe-variable 'iso-languages)

(iso-accents-customize "latin-1")
(iso-accents-mode 1)
(iso-accents-mode nil)

; (describe-variable 'iso-languages)

(find-etag "iso-accents-accent-key")
(find-etag "iso-accents-compose")
(debug-on-entry 'iso-accents-compose)

international/mule-cmds.el:

; (find-etag "iso-accents-insert-offset")
; (describe-variable 'nonascii-insert-offset)

(setq iso-accents-insert-offset 0)


e20glimpse nonascii-insert-offset

; (find-efile "international/mule-cmds.el" "nonascii-insert-offset")
; (find-efile "international/mule-cmds.el" '* 2 "nonascii-insert-offset")
; (find-efile "international/mule-cmds.el" '* 3 "nonascii-insert-offset")
(find-etag "nonascii-insert-offset")

(insert-char (+ 2048 130) 1)

(iso-accents-compose "'"


Hi people,

I've found that iso-accents-mode has a strange behaviour when pushed
beyond its limits and I would like your advice on how to deal with it
elegantly. My two solutions at this moment are either to redefine the
function `iso-accents-compose' in my .emacs or to change the .el and
recompile the .elc, and I'm wondering if there's a better solution...
Please, this is only a *stylistic* question, and I *know* that I'm
being pretentious and futile, so by flaming me about that you won't be
telling me anything new... Directing me to other lists would be ok,
though. :-)

Here goes the description. Sorry for its length.

I have some MBs of notes in files written using a tweaked codepage 850
font in which some useless chars are replaced by mathematical symbols.
To edit these files I use GNU Emacs 20.7.2 in unibyte mode in a Linux
text console, setting the screen font to this font and adding some
"compose pairs" to the console keymap. When I enter a composite
character, for example by typing the sequence "<compose> ' e", Emacs
receives a "C-q" followed by the character 130.

I'm now trying to make these files editable under X-Windows, and for
that I'm adding a new language to iso-accents-mode. But there is a
problem: my font uses characters in the (deprecated!) range 128--159
and Emacs doesn't like them; when I type "'e" I get a beep, exactly as
if I had entered a char 130 without entering a C-q before.

The fix is to replace

	(vector
	 (if (and enable-multibyte-characters
		  (>= entry ?\200))
	     (+ iso-accents-insert-offset entry)
	   entry))

in the definition of `iso-accents-compose' by

        (vector (+ iso-accents-insert-offset entry))

to make all the composed characters be quoted; then 130 -> 2048+130,
that AFAIK in unibyte mode is inserted as a plain 130 instead of being
interpreted as a sort of C-M-b, and with that trick I can even use the
positions 0--31 of my font...

So, does anybody have any better ideas for working around that bug?
Ideally I would like to get something that worked in all recent GNU
Emacsen, as I use 20.7.2 on Debian GNU/Linux and BSDs, 20.3 on Debian
GNU/Hurd, and 20.4 on an Emacs-phobic RedHat box; I also use 19.34 in
smaller GNU/Linux machines, but in 19.34 there isn't even an
`iso-accents-insert-offset' variable...

Any ideas are welcome.



;; Fossils.

(load-library "iso-acc")

(setq iso-languages-orig iso-languages)

; (find-efile "international/iso-acc.el" "minor mode indicated")
(or (assq 'iso-accents-mode minor-mode-alist)
    (setq minor-mode-alist
 	  (append minor-mode-alist
 		  '((iso-accents-mode " ISO")))))

(defun iso-string-to-pairs (str)
  (if (equal str "") nil
    (let ((letter (aref str 0))
	  (accented-char (aref str 1))
	  (rest (substring str 2)))
      (cons (cons letter accented-char) (iso-string-to-pairs rest)))))

(defun iso-accents-by-strings (langname &rest pseudo-accent-strings)
  (setq iso-languages iso-languages-orig)
  (add-to-list
   'iso-languages
   (cons langname (mapcar (lambda (pseudo-accent-string)
			    (cons (aref pseudo-accent-string 0)
				  (iso-string-to-pairs
				   (substring pseudo-accent-string 1))))
			  pseudo-accent-strings)))
  (iso-accents-customize langname)
  (iso-accents-mode 1))


;; «iso-accents-compose_redef»  (to ".iso-accents-compose_redef")

;; Redefine iso-accents-mode to make it treat some characters in weird
;; ranges in the right way; this is a workaround for a semi-bug that I
;; stumbled on.

(defun iso-accents-compose (prompt)
  (let* ((first-char last-input-char)
	 (list (assq first-char iso-accents-list))
	 ;; Wait for the second key and look up the combination.
	 (second-char (if (or prompt
			      (not (eq (key-binding "a")
				       'self-insert-command))
			      ;; Not at start of a key sequence.
			      (> (length (this-single-command-keys)) 1)
			      ;; Called from anything but the command loop.
			      this-command)
			  (progn
			    (message "%s%c"
				     (or prompt "Compose with ")
				     first-char)
			    (read-event))
			(insert first-char)
			(prog1 (read-event)
			  (delete-region (1- (point)) (point)))))
	 (entry (cdr (assq second-char list))))
    (if entry
	;; Found it: return the mapped char (* quoted! *)
	(vector (+ iso-accents-insert-offset entry))
      ;; Otherwise, advance and schedule the second key for execution.
      (setq unread-command-events
	    (cons (list second-char) unread-command-events))
      (vector first-char))))







'aáeéiíoóuúAÁEÉIÍOÓUÚcçC
^aâeêoôuûAÂEÊO
`aàeèiìoòuùAÀEÈOÒU
~aãoõAÃO
\"aäeëiïoöuüAÄOÖU



# (find-status "emacs19-el")
# (find-vldifile "emacs19-el.list")
# (find-fline "/usr/doc/emacs19-el/")

# (find-efile "international/iso-acc.el" "nonascii-insert-offset")
# (find-e19file "iso-acc.el")




#####
#
# keymap -> iso-acc compose tables
# 2001oct08
#
#####

# «keymap2isoacc»  (to ".keymap2isoacc")
# (find-angg "glyphs.el" "iso-alt")
#*
cat ~/vtutil/mathlatin.map \
  | grep '^compose' \
  > /tmp/oc
cat /tmp/oc | sort | uniq -d
cat /tmp/oc | cut -b-16 | sort | uniq -d
cat > /tmp/p <<'---'
  if (m/compose '\\?(.)' '\\?(.)' to '\\?(.)'/) {print "$1$2$3"}
  else {print $_}
---
cat /tmp/oc | perl -nl /tmp/p | sort | uniq > /tmp/oc2

cat /tmp/oc2 | grep    "^[\"'^\`~]"
#*
cat /tmp/oc2 | grep -v "^[\"'^\`~]"
#*
perl -e '
  sub qu { print "<$_[0]>\n"; return 0 }
  print qu("a");
  print qu("\""), "\n";
'
#
# cat /tmp/oc2 | grep    "^[\"'^\`~]" \
cat /tmp/oc2 | grep -v "^[\"'^\`~]" \
  | perl -nle '
      sub qu { $_=$_[0]; s/"/\\"/; $_ }
      if (($n++ % 8)==0) { printf "\n   " }
      m/(.)(.)(.)/; printf " \"%s%s\" ?%s", qu($1), qu($2), qu($3);
    ' \
  | tee ~/o
#*




#####
#
# Saving macros
# 2000jan04
#
#####

# «saving_emacs_macros»  (to ".saving_emacs_macros")
# (find-enode "Save Keyboard Macro")

# (find-efunction 'insert-kbd-macro)
# (find-efunction 'read-kbd-macro)
# (find-efunctiondescr 'execute-kbd-macro)
# (find-elnode "Creating Symbols")

# (find-efile "edmacro.el" "insert-kbd-macro")
# (find-efile "edmacro.el" "defun insert-kbd-macro")
# (find-efile "edmacro.el" "defun format-kbd-macro")
# (find-efile "macros.el" "defun insert-kbd-macro")
# (load-library "edmacro")
# (load-library "macros")

# (find-elnode "Keyboard Macros")
(execute-kbd-macro "hello")
(read-kbd-macro "C-x 2")
(format-kbd-macro "\C-x2")
(format-kbd-macro "\C-x2" t)

# (format-kbd-macro last-kbd-macro)

# (insert-kbd-macro (make-symbol ""))
# (insert (format "(setq last-kbd-macro (read-kbd-macro %S))" (format-kbd-macro)))

# (setq last-kbd-macro (read-kbd-macro "# SPC (find-vldifile SPC \" NUL C-e ESC w .list\") C-a <down> RET <up> # SPC (find-fline SPC \"/usr/doc/ C-y /\") C-a <down>"))

# (setq last-kbd-macro (read-kbd-macro "NUL <down> C-w <down> C-y 2*<up> ESC z SPC ESC z SPC { \\ al SPC C-a <down> ESC z 3*SPC C-a <down>"))


# (find-node "(elisp)Keyboard Macros")
# (find-eev "eev-mklinks.el" "dff")

(defun dff () (interactive)
  (execute-kbd-macro
   (read-kbd-macro "C-a # SPC (find-vldifile SPC \" NUL C-e ESC w .list\")
		    C-a <down> RET <up> # SPC (find-fline SPC \"/usr/doc/
		    C-y /\") C-a <down>")))


#####
#
# elmacro
# 2022sep19
#
#####

# «elmacro»  (to ".elmacro")
# https://github.com/Silex/elmacro
# (find-epackage-links 'elmacro "elmacro" t)
# (find-epackage       'elmacro)
# (code-c-d "elmacro" "~/.emacs.d/elpa/elmacro-20210716.639/")
# (find-elmacrofile "")



#####
#
# Listing all macros
# 2019dec26
#
#####

# «all-macros» (to ".all-macros")
# (to "built-in-functions")

;; Macros:
;; (find-efunctiondescr 'dolist)
;; (find-efunction 'dolist)
(setq my-macros (apropos-internal "^.*$" 'macrop))
(defun my-describe (symbol) (format "(describe-function '%S)\n" symbol))
(find-estring (mapconcat 'my-describe my-macros ""))



#####
#
# defmacro
# 2023oct29
#
#####

# «defmacro»  (to ".defmacro")
# (find-elnode "Macros")
# (find-elinode "")
# (find-elinode   "defun")
# (find-efunction 'defun)
# (find-eppm     '(defun foo (a &rest r) (list a r)))



#####
#
# A macro that hides a big let*
# 2023oct29
#
#####

# «defmacro-let*»  (to ".defmacro-let*")
# (find-fline "~/LOGS/2023oct28.emacs")

(defmacro withbortsexp (sexp &rest code)
  `(let* ((sexp ,sexp)
	  (head (nth 0 sexp))
	  (headname (symbol-name head))
	  (headn (replace-regexp-in-string "[^0-9]" "" headname))
	  (psexp (nth 1 sexp))
	  (p2 (nth 2 psexp))
	  (p (eval psexp))
	  (short (format "Bort%sp%s" headn p))
	  (text (nth 2 sexp))
	  (tex (format "\\par \\Ca{%s} %s" short text))
          (asexp (format
                  "(find-books \"__analysis/__analysis.el\" \"bortolossi\" \"%s\" \"%s\")"
                  p2 text))
	  )
    ,@code))

(defmacro find-withbortsexp (&rest rest)
  (find-eppm `(withbortsexp ,@rest)))

;; Tests that need eev:
;; (find-eppm '(withbortsexp '(a3b (+ 4 5) "foo") p))
;; (find-eppm '(withbortsexp '(a3b (+ 4 5) "foo") tex))
;; (find-eppm '(withbortsexp '(a3b (+ 4 5) "foo") (+ 1 2) tex))
;;             (withbortsexp '(a3b (+ 4 5) "foo") (+ 1 2) tex)
;;        (find-withbortsexp '(a3b (+ 4 5) "foo") (+ 1 2) tex)
;;
;; Tests that don't need eev:
;; (macroexpand '(withbortsexp '(a3b (+ 4 5) "foo") (+ 1 2) tex))
;;               (withbortsexp '(a3b (+ 4 5) "foo") (+ 1 2) tex)
;;               (withbortsexp '(a3b (+ 4 5) "foo") p)
;;




#####
#
# DBG as a macro
# 2021oct13
#
#####

# «macro:DBG»  (to ".macro:DBG")
# See: (find-eev "eev-tlinks.el" "find-advicebefore-links")

;; Tests: (find-2a nil '(find-ebuffer "DBG"))
;;        (DBG-insert "%S\n" '(+ 1 2))
;;        (DBG0 + 1 2)
;;        (DBG + 1 2)
;;
(defun DBG-insert (fmt &rest rest)
  (with-current-buffer "DBG"
    (goto-char (point-max))
    (insert (apply 'format fmt rest))
    (goto-char (point-max))))

(defmacro DBG0 (&rest sexp)
  (DBG-insert "%S\n" sexp)
  (eval sexp))

(defmacro DBG (&rest sexp)
  (DBG-insert "%S\n" sexp)
  (let ((rslt (eval sexp)))
    (DBG-insert " -> %S\n" rslt)
    rslt))




#####
#
# macrostep
# 2022aug14
#
#####

# «macrostep»  (to ".macrostep")
# https://github.com/joddie/macrostep ->
# https://github.com/emacsorphanage/macrostep
# http://dorophone.blogspot.com/2011/04/deep-emacs-part-1.html
# http://dorophone.blogspot.com/2011/04/deep-emacs-lisp-part-2.html
# http://dorophone.blogspot.com/2011/05/monadic-parser-combinators-in-elisp.html
# (find-epackage-links 'macrostep "macrostep" t)
# (find-epackage       'macrostep)




#####
#
# fontsets
# 2000oct12
#
#####

# «fontsets»  (to ".fontsets")
# (find-es "chinese" "chinese_and_fontset")

# (find-e20file "international/fontset.el")

# (set-frame-font "fontset-standard")
# (let ((default-enable-multibyte-characters t)) (find-eetcfile "HELLO"))

cp /usr/share/emacs/20.7/etc/HELLO ~/tmp/HELLO
# (let ((default-enable-multibyte-characters t)) (find-fline "~/tmp/HELLO"))

# (find-etag "describe-fontset")

# (list-fontsets 1)
# (describe-fontset)
# (describe-fontset "fontset-standard")
# (find-enode "Defining Fontsets")




#####
#
# create-fontset
# 2023apr14
#
#####

# «create-fontset»  (to ".create-fontset")
# (find-fline "~/LOGS/2023apr13.emacs" "https://paste.debian.net/1277299/")

(create-fontset-from-fontset-spec  "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*")
(cl-dolist (l-sym (list nil 'latin 'han 'symbol 'cyrillic 'georgian 'armenian) t)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-ADBF-Source Code Pro-regular-normal-normal-*-*-*-*-*-m-0-iso10646-1")
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Mono-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Mono CJK SC-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Color Emoji-regular-normal-normal-*-*-*-*-*-m-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Symbols-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Symbols2-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-UFAS-Symbola-regular-normal-semicondensed-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Armenian-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1" nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-GOOG-Noto Sans Georgian-regular-normal-normal-*-*-*-*-*-*-0-iso10646-1"  nil 'append)
  (set-fontset-font "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*" l-sym "-PfEd-Unifont CSUR-medium-normal-normal-*-19-*-*-*-d-0-iso10646-1" nil 'append )
  )
(setf (alist-get 'font default-frame-alist) "-lockywolf-*-*-*-*-*-*-*-*-*-*-*-fontset-*")




#####
#
# set-fontset-font
# 2024oct18
#
#####

# «set-fontset-font»  (to ".set-fontset-font")
# (find-fline "~/LOGS/2024oct18.emacs" "/tmp/a.txt having the text")

;;-- (ee-copy-rest-3m nil ";;-- end" "/tmp/a.txt")
;; a � b º c � d À
(setq use-default-font-for-symbols nil)
(set-fontset-font t ?� (font-spec :family "Noto Sans Mono" :size 50))
(set-fontset-font t ?º (font-spec :family "Noto Sans Mono" :size 60))
(set-fontset-font t ?� (font-spec :family "Noto Sans Mono" :size 70))
(set-fontset-font t ?À (font-spec :family "Noto Sans Mono" :size 80))
;;-- end

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
emacs -Q /tmp/a.txt




#####
#
# coding systems
# 2005jan25
#
#####

# «coding-systems»  (to ".coding-systems")
# (find-elnode "Coding Systems")
# (find-eapropos "coding")
# buffer-file-coding-system
# (find-efunction 'describe-coding-system)
# (find-elnode "Index" "string-as-multibyte")
# (find-elnode "Index" "string-as-unibyte")
# (find-elnode "Index" "string-to-multibyte")
# (find-elnode "Index" "string-to-unibyte")
# (find-elnode "Index" "unibyte text")

(describe-coding-system 'latin-1)
(describe-coding-system 'latin-9)
(describe-coding-system 'utf-8)
(describe-coding-system 'raw-text)

(describe-character-set 'ascii)
(progn (describe-character-set 'latin-iso8859-1)
       (ee-goto-position "Internal multibyte sequence: 81 XX"))

(find-efunctiondescr  ' unify-8859-on-encoding-mode)
(find-efunctiondescr  ' unify-8859-on-decoding-mode)




#####
#
# coding:
# 2000oct22
#
#####

# «coding:»  (to ".coding:")
# (to "buffer-local")
# (to "file-variables")
# (find-es "escripts" "adding_coding:")
# (find-enode "Coding Systems" "With `raw-text',")
# (find-enode "Coding Systems" "the coding system `no-conversion'")
# (find-fline "~/00jul21.popmail" "`coding:'")
# (find-enode "Recognize Coding" "-*-mode: C; coding:")




#####
#
# process-coding-system
# 2021nov19
#
#####

# «process-coding-system»  (to ".process-coding-system")
# (find-angg ".emacs" "process-coding-system")
# (find-fline "~/LOGS/2021nov19.emacs" "grep zero *.agda")
# (find-fline "~/LOGS/2021nov19.emacs" "change it to (utf-8-unix . utf-8-unix)")
# (find-evardescr        'process-coding-system-alist)
# (find-evariable        'process-coding-system-alist)
# (find-elnode "Index" "* process-coding-system-alist:")
# (find-evardescr        'default-process-coding-system)
# (find-evariable        'default-process-coding-system)
# (find-elnode "Index" "* default-process-coding-system:")

;; (setq default-process-coding-system '(undecided-unix . utf-8-unix))
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))




#####
#
# find-wget-jan-2024
# 2024jan15
#
#####

# «find-wget-jan-2024»  (to ".find-wget-jan-2024")
# (find-angg "elisp/find-wget-jan-2024.el")
# (find-angg ".emacs.local.aspi" "find-wget")

(find-eapropos "process")
(find-eapropos "coding-system")
(find-eaproposf "coding-system")
(find-eaproposv "coding-system")
(find-eaproposv "coding")
(find-eaproposf "process")
(find-eaproposv "process")
(find-eapropos "coding-system" "coding-system-post-read-conversion")

(find-evardescr 'coding-system-list)
(find-evardescr 'coding-system-for-read)
(find-evardescr 'coding-system-for-write)

# (find-efunctiondescr 'insert)
# (find-efunction 'with-output-to-string)
# (find-efunctiondescr 'call-process)
# (find-angg "elisp/find-wget-jan-2024.el")

(let ((coding-system-for-read 'iso-latin-1-dos))
  (find-wget "http://anggtwu.net/LUA/Dang1.lua")
  )

(let ((coding-system-for-write 'iso-latin-1-dos))
  (find-wget "http://anggtwu.net/LUA/Dang1.lua")
  )




#####
#
# Notes on making my colored glyphs work on X
# 2000jun10
#
#####

# «glyphs_X»  (to ".glyphs_X")

gnudoit '(+ 1 2)'
gnudoit '(xxx-undefined)'

# (find-fline "~/glyphbug")

; For cp850:
;
(aset standard-display-table 174
      (vector (create-glyph (format "\e[32m%c\e[m" 174))))
(aset standard-display-table 175
      (vector (create-glyph (format "\e[32m%c\e[m" 175))))
(insert (format "%c%c" 174 175))

; Working version for X, using Gerd's hint:
;
(make-face 'eev-green)
(set-face-foreground 'eev-green "green")
(make-face 'eev-red)
(set-face-foreground 'eev-red "red")
(aset standard-display-table
  174 (vector (logior 171 (ash (face-id 'eev-green) 19))))
(aset standard-display-table
  175 (vector (logior 187 (ash (face-id 'eev-green) 19))))
(aset standard-display-table
  15 (vector (logior ?* (ash (face-id 'eev-red) 19))))
(insert (format "%c%c%c" 171 187 15))

# (find-e20file "term.el")
# (find-e20file "term.el" "\"yellow\"")
# (find-e20file "disp-table.el")

# Who is controlling the gnuserv?
#   window-system
gnudoit 'window-system'

(face-list)

# (find-enode "Faces")
# (find-elnode "Glyphs" "524288")
# (find-angg ".emacs" "glyphs512")

# (find-elnode "Face Functions")
# (find-elnode "Overlay Properties")
# (find-elnode "Overlay Properties" "`face'")
# (find-elnode "Overlay Properties" "foreground-color")
# (find-elnode "Overlay Properties" "overlay-get")
# (find-elnode "Managing Overlays")
# (find-elnode "Overlay Properties" "overlay-put")

# Works:
(overlay-put
  (make-overlay (point) (+ (point) 2) nil nil nil)
  'face 'edrx)
(overlays-in 0 (point-max))

# (find-elnode "Glyphs" "524288")
(aset standard-display-table ?« ?<)

# (find-e20file "disp-table.el")
# (find-e20file "disp-table.el" "defun create-glyph")
glyph-table





#####
#
# emacs20.7 source
# 2000aug12
#
#####

# «emacs20-src»  (to ".emacs20-src")
#
pdsc $SDEBIAN/dists/potato/main/source/editors/emacs20_20.7-2.dsc
cd /usr/src/emacs20-20.7/
  sleep 2; touch .stamp0; sleep 2
  find * | sort > .files
# rm -Rv $(find * | grep '\.elc$')
debian/rules binary	|& tee odrb
  find * -newer .stamp0 | sort > .files.post.stamp0
#

# (find-e20srcfile "")
# (find-e20srcfile "odrb")
# (find-e20srcfile "lisp/loadup.el")
# (find-e20srcfile ".files")
# (find-e20srcfile ".files.post.stamp0")
# (find-efile "loadup.el")

# (find-fline "$SDEBIAN/dists/potato/main/source/editors/")
# Try to regenerate all ".elc"s, the docstrings files, etc:

pdsc $SDEBIAN/dists/potato/main/source/editors/emacs20_20.7-2.dsc
cd /usr/src/emacs20-20.7/
find * | sort > ~/tmp/oemacs-files
# (find-fline "~/tmp/oemacs-files")

# (find-status "emacs20")
# (find-vldifile "emacs20.list")
# (find-fline "/usr/doc/emacs20/")

# (find-elnode "Documentation Basics")
# (find-fline "/usr/share/emacs/20.7/etc/DOC-20.7.2")

# Copy the .tar.gz to my freebsd partition (because its default emacs
# is broken).

cd $SDEBIAN/dists/potato/main/source/editors/
tar -tvzf emacs20_20.7.orig.tar.gz
mount -o remount,rw /freebsd/var
cp -iv emacs20_20.7.orig.tar.gz /freebsd/var/src/




#####
#
# interactive
# 2000oct22 / 2019sep04
#
#####

# «interactive»  (to ".interactive")
# (to "call-interactively")
# (find-elnode "Interactive Call")
# (find-elnode "Using Interactive")
# (find-elnode "Interactive Codes")
# (find-elnode "Interactive Examples")
# (find-elinode "Interactive")
# (find-efunctiondescr 'interactive)
# (find-efile "help.el")
# (find-elnode "Sets And Lists" "Function: member")
# (find-eaproposf "^read-")

# (find-egrep "zgrep --color -nH -e interactive *.el*")

(defun itest (&rest args) (interactive "r") (insert (format "%S\n" args)))
(defun itest (&rest args) (interactive "s") (insert (format "%S\n" args)))
(defun itest (&rest args) (interactive "S") (insert (format "%S\n" args)))
(global-set-key "\M-g" 'itest)

(defun itest (&rest args) (interactive "sTwo-character code: ")
  (insert (format "%S\n" args)))

# (find-elnode "Interactive Codes" "S" "An interned symbol")
# (find-eapropos "^read-*")
# (find-elnode "Minibuffer Completion")

(list (intern
  (read-no-blanks-input "Symbol: " "")
  ))




#####
#
# interactive-modes
# 2022jun18
#
#####

# «interactive-modes»  (to ".interactive-modes")
# https://lars.ingebrigtsen.no/2021/02/16/command-discovery-in-emacs/
# (find-efunctiondescr 'interactive)
# (find-efunction      'interactive)



#####
#
# cond
# 2023jan03
#
#####

# «cond»  (to ".cond")
# (find-elnode "Index" "* cond:")
# (find-eintrnode "Recursion with cond")
# (find-efunctiondescr 'cond)

(defun foo (x)
  (cond ((< x  5) "few")
	((< x 10) "some")
	(t        "many")))

(foo 1)
(foo 7)
(foo 200)



#####
#
# intern-soft
# 2023jan03
#
#####

# «intern-soft»  (to ".intern-soft")
# (find-efunctiondescr   'intern-soft)
# (find-elnode "Index" "* intern-soft:")
# (find-elnode "Creating Symbols")

(intern-soft "next-line")
(intern-soft "nil")




#####
#
# string-match and replace-regexp-in-string
# 2019aug11
#
#####

# «string-match»              (to ".string-match")
# «match-string»              (to ".match-string")
# «replace-regexp-in-string»  (to ".replace-regexp-in-string")
# (find-elnode "Searching and Matching")
# (find-elnode "Regexp Search"      "Function: string-match")
# (find-elnode "Simple Match Data"  "Function: match-string")
# (find-elnode "Search and Replace" "replace-regexp-in-string")
# (find-elnode "Regexp Special")
# (find-elnode "Regexp Backslash")

# (find-efunctiondescr 'string-match)
# (find-efunctiondescr 'string-match "case-fold-search")
# (find-efunctiondescr 'replace-regexp-in-string)

# (find-angggrep "grep --color -nH -e string-match   .emacs")
# (find-angggrep "grep --color -nH -e match-string   .emacs")
# (find-angggrep "grep --color -nH -e replace-regexp .emacs")
# (find-eevgrep  "grep --color -nH -e string-match   *.el")
# (find-eevgrep  "grep --color -nH -e replace-regexp *.el")

(replace-regexp-in-string "^\\(\\(lib\\)?.\\).*" "\\1" "")
(replace-regexp-in-string "^\\(\\(lib\\)?.\\).*" "\\1" "lua5.1")
(replace-regexp-in-string "^\\(\\(lib\\)?.\\).*" "\\1" "libjpeg")

# (find-efunctiondescr   'string-replace)
# (find-efunction        'string-replace)
# (find-elnode "Index" "* string-replace:")
# (find-efunctiondescr   'replace-regexp-in-string)
# (find-efunction        'replace-regexp-in-string)
# (find-elnode "Index" "* replace-regexp-in-string:")

(let ((case-fold-search t))   (string-match "a" "A"))
(let ((case-fold-search t))   (string-match "A" "s"))
(let ((case-fold-search nil)) (string-match "a" "A"))
(let ((case-fold-search nil)) (string-match "A" "a"))




#####
#
# (while (string-match ...) ...)
# 2021jan01
#
#####

# «while-string-match»  (to ".while-string-match")
# (find-elnode "Regexp Search")
# (find-elnode "Iteration" "Special Form: while")

(let ((bigstr "abc  def  gh ")
      (pos 0))
  (while (string-match "[a-z]+" bigstr pos)
    (insert "\n" (match-string 0 bigstr))
    (setq pos (match-end 0))))




#####
#
# s/// in strings
# 2000oct06
#
#####

# «replacing_in_strings»  (to ".replacing_in_strings")
# From a posting by [email protected] at the
# [email protected] list, 2000oct06:

(defun dos2unix ()
 "Convert a buffer from MS-DOS ^M end of lines to UNIX end of lines."
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))
(defun unix2dos ()
  "Convert a buffer from UNIX end of lines to MS-DOS ^M end of lines."
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\n" nil t) (replace-match "\r\n")))




#####
#
# hippie-expand
# 2022dec17
#
#####

# «hippie-expand»  (to ".hippie-expand")
# (find-angg ".emacs" "hippie-expand")
# (find-efile "hippie-exp.el")
# https://www.emacswiki.org/emacs/HippieExpand
# https://www.masteringemacs.org/article/text-expansion-hippie-expand
# https://www.reddit.com/r/emacs/comments/urmnjj/text_expansion_with_hippie_expand/
# https://emacs.stackexchange.com/questions/71958/hippie-expand-and-completion-failure




#####
#
# Notes on adapting eev.el to tcsh
# 2000febxx
#
#####

# «tcsh_export»  (to ".tcsh_export")
#*
cd /tmp/
expect -c 'spawn tcsh; puts "\n"; foreach li [split {\
echo $foo
foo=bar
set foo bar
echo $foo
set foo=bar
echo $foo
tcsh
  echo $foo
  exit
setenv foo bar
echo $foo
tcsh
  echo $foo
  exit
exit} "\n"] {
  expect "#"; send $li\n
}' | tee ~/o
#*
l -rf ~/o
#*




#####
#
# the "gawk" description of eev
# 2000mar14
#
#####

# (find-node "(emacs-e20)Lisp Libraries")
# «eev-gawkdescr»


  Hi. I have an Emacs Lisp package (eev.el) that is meant to let
  people share *nix tricks more easily and to make them addicted to
  source code and free software... here goes an example of how to use
  it: suppose that we're editing an ascii version of this text in an
  Emacs that has eev.el loaded (it was loaded with `(load-library
  "~/eev.el")', say). Then some portions of the block below can be
  interpreted in special ways:


# (code-c-d "gawk" "/usr/src/gawk-3.0.3/" "gawk")

rm -Rv /usr/src/gawk-3.0.3/
cd /usr/src/
dpkg-source -sn -x \
  /big/slinks2/dists/slink/main/source/interpreters/gawk_3.0.3-1.dsc
cd /usr/src/gawk-3.0.3/
debian/rules binary	|& tee odrb
etags *.[chy]

# (find-gawkfile "odrb" "strip")
# (find-gawkfile "debian/rules" "strip")
# In the top gawk dir there's a non-stripped binary; we use it.

# (find-gawknode "Numeric Functions")
# (find-gawkfile "awktab.c" "\"cos\"")
# (find-gawktag "do_cos")

cat > /tmp/awkprog <<'---'
BEGIN { print cos(0); }
---

%
br do_cos
set args -f /tmp/awkprog
run
p *tree
%
p *(tree->sub.nodep.l.lptr)
%
p *(tree->sub.nodep.l.ll)
%

# (gdb "gdb /usr/src/gawk-3.0.3/gawk")
# (find-gawktag "lnode")

# (find-angg "eev.el" "eev")
# (find-angg "eev.el" "code-c-d")
# (find-angg "eev.el" "code-c-d-explan1")
# (find-angg "eev.el" "code-c-d-explan2")
# (find-angg "eev.el" "gdb")
# (find-angg "eev.el" "bounded")


  Each expression within parentheses in a "#" line is in fact a block
  of Emacs Lisp code, that can be executed by placing the cursor just
  after the ")" and then typing C-x C-e (eval-last-sexp). The first of
  these expressions, the one that starts with "code-c-d", when
  executed will define many Lisp functions with "gawk" in their names,
  for example "find-gawkfile"; the third expression, `(find-gawkfile
  "debian/rules" "strip")', will open the file
  /usr/src/gawk-3.0.3/debian/rules and place the cursor right after
  the first occurrence of the string "strip"; the "find-gawknode"
  expression will open the info page named "(gawk)Numeric Functions";
  the one with "find-gawktag" finds, in the gawk source files, the
  definition of the funtion "do_cos". That is, these expressions work
  as hyperlinks.

  # (find-node "(emacs-e20)Tags")
  # (find-node "(emacs-e20)Lisp Eval")
  # (find-node "(emacs-lisp-intro)Run a Program")

  The first block of text without "#"s is meant to be executed by a
  shell; if you set the mark at one end of it, place the cursor at the
  other end, type M-x eev, and, at a shell, run "ee", then the lines
  in the block will be executed by the shell almost as if they were
  being typed directly on the keyboard, i.e., respecting "cd"s, "set"s
  and "alias"es (the block is executed with "source"; details at ...).
  On a Debian system this block opens the Debian source package for
  gawk, recompiles it and runs etags on the relevant source files, to
  create the index that will be used by "find-gawktag".

  # (find-node "(emacs-e20)Mark")
  # (find-node "(bash)Bourne Shell Builtins" "`.'")

  The block with the "%*"s has three sequences of gdb commands; they
  can be sent to gdb with M-x eeg, which is similar to M-x eev, or
  with eegdb-bounded, that sends everything between the first "%*"
  before the cursor and the first "%*" after it. As with eev, we need
  to give the command "ee" to gdb to execute the commands sequences.

  # (find-node "(gdb)Command Syntax")
  # (find-angg "eev.el" "bounded")
  # (find-fline "~/.gdbinit")

  The command `(gdb "gdb /usr/src/gawk-3.0.3/gawk")' opens a gdb
  session in an Emacs window to debug /usr/src/gawk-3.0.3/gawk.

  # (find-node "(emacs-e20)Starting GUD")
  # (find-node "(emacs-e20)Debuggers")
  # (find-node "(emacs-e20)Basic Window")

  So, the block above can be used to uncompress and install the gawk
  source code, to recompile it keeping the debugging symbols, to start
  a gdb session on it, and to trace its execution up to a certain
  point and then to show the values of some variables.




#####
#
# load (and require)
# 2021aug14
#
#####

# «load»  (to ".load")
# (find-efunctiondescr 'load)
# (find-efunction      'load)
# (find-elnode "Index" "* load:")
# (find-efunctiondescr 'require)
# (find-efunction      'require)
# (find-elnode "Index" "* require:")



#####
#
# load-path (and locate-library)
# 2019jun28
#
#####

# «load-path»      (to ".load-path")
# «locate-library»  (to ".locate-library")
# (find-enode "Variable Index" "* load-path:")
# (find-elnode "Index" "* load-path:")
# (find-enode "Lisp Libraries")
# (find-elnode "Library Search")

# (locate-library "eejump")
# (list-load-path-shadows "eejump")
# (find-estring (list-load-path-shadows t))
# (find-ebuffer "*Messages*")

# (find-eev "eev-code.el" "code-c-d-s" "ee-locate-library")




#####
#
# require
# 2020dec02
#
#####

# «require»  (to ".require")
# (find-efunction-links 'require)
# (find-efunctiondescr  'require)
# (find-efunction-links 'load)
# (find-efunctiondescr  'load)
# (find-elnode "Index" "* locate-library:")
# (find-efunctiondescr 'locate-library)
# (find-efunction      'locate-library)
# (locate-library "eev")
# (locate-library "eev.el")
# (find-fline (locate-library "eev.el"))
# (find-fline (file-name-directory (locate-library "eev.el")))




#####
#
# autoload
# 2021aug15
#
#####

# «autoload»  (to ".autoload")
# (find-elnode "Autoload")
# (find-elnode "Autoload" "magic autoload comment")
# (find-angg ".emacs" "autoloads")
# (find-efunctiondescr 'autoload)
# (find-efunction      'autoload)

https://amodernist.com/texts/emacs-compat.html

Currently compat has this cursed line in its main file: ;;;###autoload
(require 'compat) that is to say that force-loads itself
immediately.




#####
#
# compat
# 2024aug05
#
#####

# «compat»  (to ".compat")
# (find-epackage-links 'compat "compat" t)
# (find-epackages      'compat)
# (find-epackage       'compat)
# (code-c-d "compat" "~/.emacs.d/elpa/compat-30.0.0.0/" "compat")
# (find-compatfile "")
# (find-node "(compat)Top")




#####
#
# w3
# 2000may27
#
#####

# «w3»  (to ".w3")
# (find-status "w3-el-doc")
# (find-status "w3-el-e20")
# (find-status "w3-el-lisp")
# (find-vldifile "w3-el-doc.list")
# (find-vldifile "w3-el-e20.list")
# (find-vldifile "w3-el-lisp.list")
# (find-fline "/usr/share/doc/w3-el-doc/")
# (find-fline "/usr/doc/w3-el-e20/")
# (find-fline "/usr/doc/w3-el-lisp/")
# (find-fline "/usr/share/w3-el/")

# (find-fline "/usr/share/w3-el/devices.el" "\"XEmacs\" (emacs-version)")

cd /usr/share/emacs/site-lisp/w3-el/
etags *.el

# (find-node "(w3)Top")
# (find-node "(w3)Basic Usage")
# (find-node "(w3)Information")
# (find-node "(w3)Information" "current document's URL")

# (find-w3elfile "")
# (w3-fetch "http://127.0.0.1/cgi-tcl/")

# (find-w3eltag "w3-download-this-url")
# (find-w3eltag "w3-save-url")
# (find-w3eltag "w3-view-this-url")
# (find-w3eltag "url-view-url")
# (find-fline "/usr/doc/w3-el-doc/")
# (find-node "(elisp)Mode Help")
# (find-w3elfile "w3.el" "(defun w3-fetch ")
# (find-w3file "url.el" "Save history in")
# (find-w3file "w3.el" "Reuse URL")







#####
#
# old notes on w3 and glyphs
# 2000sep23
#
#####

; (find-node "(w3)Display Variables")
; (find-w3elfile "")
; (find-w3elfile "w3-cus.el")
;(setq w3-link-start-delimiter '("[" . "{{"))
;(setq w3-link-end-delimiter '("]" . "{{"))
;(setq w3-link-start-delimiter '("«" . ""))
;(setq w3-link-end-delimiter '("»" . ""))
(setq mew-mail-domain-list '("mat.puc-rio.br"))






#####
#
# LCD (the emacs lisp code directory)
#
#####

# export LCD=/snarf/ftp/gatekeeper.dec.com/pub/GNU/elisp-archive
# export ELISP=/usr/share/emacs/19.34/lisp

(find-fline "$LCD/LCD-datafile")
(find-fline "$LCD/lispdir.el")
(setq lisp-code-directory "$LCD/LCD-datafile")
(load-library "$LCD/lispdir")
(format-lisp-code-directory)

$LCD/packages/dismal-0.92.tar.Z

describe
describe-perl-symbol
maple-mode
spread
sokoban

cp -iv $LCD/modes/maple.el.Z $ELISP/
gzip -dv $ELISP/maple.el.Z
# (find-efile "maple.el")

cp -iv $LCD/modes/spread.el.Z $ELISP/
gzip -dv $ELISP/spread.el.Z
# (find-efile "spread.el")

lynx $LCD/




#####
#
# backtrace
# 2021jun24
#
#####

# «backtrace»  (to ".backtrace")

> Thank You. But I am sorry, I do not have much knowledge about
> internals. How do I make run emacs under gdb ?

Just say

gdb emacs
run

To get a backtrace after it's crashed, say "bt".




#####
#
# debug
# 2022dec14
#
#####

# «debug»  (to ".debug")
# (find-efile "emacs-lisp/debug.el")
# (find-eapropos "backtrace")

(defun myfact (n)
  (if (= n 10) (debug))
  (if (<= n 1) 1
    (* n (myfact (- n 1)))))

(myfact 1)
(myfact 5)
(myfact 15)

(find-epp (backtrace))
(find-estring (backtrace-to-string))
(find-efunction 'backtrace-to-string)




#####
#
# Debugging
# 2000nov13
#
#####

# «debugging»  (to ".debugging")

# (find-elinode "Debug")
# (find-elnode "Debugger")
# (find-elinode "debug-on-entry")

(defun triangle-bugged (number)
  "Return sum of numbers 1 through NUMBER inclusive."
  (let ((total 0))
    (while (> number 0)
      (setq total (+ total number))
      (setq number (1= number)))      ; Error here.
    total))

(triangle-bugged 4)
(debug-on-entry 'triangle-bugged)
(triangle-bugged 4)
(cancel-debug-on-entry 'triangle-bugged)
(triangle-bugged 4)

# The most important keys in debugger-mode:
# d - "descend"  - (find-etag "debugger-step-through")
# c - "continue" - (find-etag "debugger-continue")
# q - "quit"     - qui debugging mode

# (find-etag "debugger-mode-map")
# (find-efile "emacs-lisp/debug.el" "\"d\"")


# Is there a way to execute a programmed number of "d"s in
# debugger-mode? The following does not work:
#
(defun D (n) (interactive "p") (execute-kbd-macro "d" n))
(define-key debugger-mode-map "D" 'D)

# (find-elnode "Keyboard Macros")
# (execute-kbd-macro "d" 40)




#####
#
# debug
# 2004jul25
#
#####

# «debug.el»  (to ".debug.el")

(find-efunction 'debug)
(find-efile "emacs-lisp/debug.el")

(backtrace-frame 3)
(backtrace-frame 2)
(backtrace-frame 1)
(backtrace-frame 0)

(find-elnode "Internals of Debugger")

(find-efunction 'debugger-step-through)
(find-efunction 'debugger-continue)

(find-efile "emacs-lisp/debug.el" "--returning value:")
(find-efile "emacs-lisp/debug.el" "<debugger-mode-map>")




#####
#
# edebug
# 2000nov13
#
#####

# «edebug»  (to ".edebug")
# (find-elinode "edebug")
# (find-elnode "Edebug")
# (find-efile "emacs-lisp/edebug.el")
# (find-efile "emacs-lisp/edebug.el" "\"q\"")
# (find-efile "emacs-lisp/edebug.el" "evaluate a defun with C-M-x")
# (find-efile "emacs-lisp/edebug.el" "Global GUD bindings")
# (find-etag "edebug-defun")
# (find-efunction 'edebug-defun)

# (find-efunctiondescr 'edebug-mode)
# (find-efunction      'edebug-mode)

   Other frequently used commands are `b' to set a breakpoint at a stop
point, `g' to execute until a breakpoint is reached, and `q' to exit
Edebug and return to the top-level command loop.  Type `?' to display a
list of all Edebug commands.


# https://endlessparentheses.com/debugging-emacs-lisp-part-1-earn-your-independence.html

# An edebug session doesn't seem as easy to start as a
# "debug-on-entry" session - I found no command that would be a sort
# of "instrument-defuns-in-region", and so we need to place the cursor
# somewhere inside a defun and type M-x edebug-defun; I got no simple
# eval-last-sexp'able substitute, but we can assign a key for that:

(global-set-key "\M-D" 'edebug-defun)

# After the instrumentation if we execute a call to the instrumented
# function Emacs will enter edebug-mode; then the main keys will be
# [space] for "descend", "n" for "next", and "q" for "quit" (=
# top-level).

(defun triangle-recursively-bugged (number)
  "Return sum of numbers 1 through NUMBER inclusive.
Uses recursion."
  (if (= number 1)
      1
    (+ number
       (triangle-recursively-bugged
        (1- number)))))               ; Error here.

(triangle-recursively-bugged 3)
(top-level)


# A variation that makes it easier to run...
# (find-efunction 'edebug-defun)
# (find-efile "emacs-lisp/edebug.el" "through the code with SPC")
#
(global-set-key
 "\M-D" (lambda (dont-run-it) (interactive "P")
	  (let ((fun (save-excursion (beginning-of-defun)
				     (edebug-eval-defun 'edebug-it))))
	    (if (not dont-run-it) (apply fun ())))))

(defun test ()
  (+
   (+ 1000 200)
   (+ 30 4)
  )
)


# (find-fline "~/LOGS/2019sep09.emacs")
# (find-fline "~/LOGS/2019sep09.emacs" "edebug-global-break-condition")

<CaffeineVaccine> ashawley: Sorry, I didn't explain my question
                  well enough. So here's my situation: I have a
                  form. I instrument the form via
                  `edebug-eval-top-level-form'. This brings me into
                  `edebug'. I set a breakpoint. I use
                  `edebug-continue-mode' to get to the breakpoint.
                  Works perfectly. I `edebug-continue-mode' once
                  more to get to the end of the function, thus
                  exiting edebug. I, again,
                  `edebug-eval-top-level-form'. I use `edebu
<CaffeineVaccine> g-continue-mode'. It executes the function in
                  full without stopping at the previously set
                  breakpoint.
<twb> I have no idea, because the smartest I ever manage is C-u
      C-M-x to break on entry into a function
<CaffeineVaccine> twb: Just one breakpoint.
<CaffeineVaccine> twb: Super small function.
<CaffeineVaccine> twb: Do I have to save the breakpoint or
                  something for further executions?
<CaffeineVaccine> twb: Because I really don't want to be resetting
                  the breakpoints upon each execution of the
                  function.
<twb> CaffeineVaccine: dunno, sorry
<twb> CaffeineVaccine: C-u C-M-x isn't good enough?
<twb> CaffeineVaccine: C-M-x runs the command eval-defun
<CaffeineVaccine> twb: Ohhhh. So I have to specify how many times I
                  plan on running the function via a universal
                  argument.









#####
#
# old notes about debugging
#
#####

# (find-etag "debug-on-entry")
# (find-etag "debugger-mode")

# (find-elinode "Top")
# (find-elinode "Debugging")
# (find-elnode "Vectors")

# (find-elnode "Control Structures")
# (find-elnode "Catch and Throw")
# (find-etag "point-to-register")

# (debug-on-entry 'eelatex-bounded)

%
foo bar
%

(setq debug-on-error t)
(calendar)

(find-efile "calendar.el")

(find-fline "~/.emacs" "shrink-window")
(describe-function 'shrink-window)




#######
#
# etags hacking (pure)
#
#######

cd /usr/share/emacs/19.34/lisp/
agrep \" etags.el | sort
agrep \" etags.el | agrep \\\\ | sort
agrep -n \" etags.el | agrep \\\\
l -f $(locate '*TAGS')

(find-demutag "YYSTYPE")
(find-demufile "TAGS")

A parte antes do del (a subregexp 1) é sempre um segmento inicial de
uma linha?

(find-efile "etags.el")

(find-etag "find-tag-default")
(find-etag "etags-file-of-tag")
(find-etag "tag-re-match-p")

(find-elnode "Syntax of Regexps")

(find-etag "etags-tags-completion-table")

      ;; This monster regexp matches an etags tag line.
      ;;   \1 is the string to match;
      ;;   \2 is not interesting;
      ;;   \3 is the guessed tag name; XXX guess should be better eg DEFUN
      ;;   \4 is not interesting;
      ;;   \5 is the explicitly-specified tag name.
      ;;   \6 is the line to start searching at;
      ;;   \7 is the char to start searching at.




#####
#
# etags hacking (applied)
#
#####

(describe-function 'skip-chars-forward)
(describe-function 'looking-at)

(defun forth-word-at-cursor ()
  (save-excursion
    (buffer-substring
     (progn (skip-chars-backward "!-~") (point))
     (progn (skip-chars-forward "!-~") (point)))))




#####
#
# Old glyph stuff (many notes, and some tests)
# 2000dec14
#
#####

# «old_glyph_stuff»  (to ".old_glyph_stuff")

;;;;
;;;; Some further info on the display hacks.
;;;;
;
; First the credits: I got the coloured glyph trick from an old
; version of w3, a www browser for emacs:
; (find-fline "/usr/share/w3-el/w3-about.el" "<dt> Author")
; and I first learned how to use 512 char fonts by inspecting the
; output of showcfont on the ethiopic fonts...
;
; ...then I wrote a program to set up 512 char fonts, to modify 256
; char fonts, and other niceties; it is called vtutil, look for it in
; my Emacs page. It is still in the "ugly" stage, but that's because
; no one ever showed interest in it except me. :-)
;
; The crucial hint for making glyphs using faces came from Gerd
; Moellmann.
;
; (find-etag "create-glyph")
;
; (eeman "console_codes" "0x9B")
; (eeman "charsets" "xxxxyyyy")
;
; 155=128+27=0x9B is CSI (= esc[) on linux consoles.
; We'd better make the 155s as visually piercing as possible.
;
; We use unicode to display chars 0..31 and 155.
;   110xxxxx 10yyyyyy		-> 00000xxx xxyyyyyy
;   1110xxxx 10yyyyyy 10zzzzzz 	-> xxxxyyyy yyzzzzzz
;   11101111 100000yy 10zzzzzz 	-> 11110000 yyzzzzzz
;   (find-k22file "drivers/char/console.c" "into Unicode")
;   (find-k22file "drivers/char/consolemap.c" "direct font mapping")
;   (find-k22file "drivers/char/console.c" "direct-to-font")
;   (find-k22file "drivers/char/console.c" "case ESpercent:")
;   (find-elnode "Character Type")
;
;   (defun wrstr (s) (write-region s nil "/dev/tty1"))
;   (defun wruni (s) (wrstr (concat "\e%G" s "\e%@")))
;   (wrstr "\e%G\357\200\215\e%@")
;   (wruni "\357\200\215")
;   (wrstr (unichar 13))
;
; (find-e20file "")
; (find-e20file "startup.el" "standard-display-european")
; (find-e20file "term/internal.el" "standard-display")
; (find-e20file "disp-table.el")

; Old stuff commented out:
;
;(if (or (= emacs-major-version 19) (>= emacs-minor-version 4))
;    (progn
;      (standard-display-8bit 128 254)
;      (load-library "disp-table"))
;  (progn
;    ;; emacs20:
;    '(setq-default enable-multibyte-characters nil) ;I use cp850, not unicode.
;    '(setq enable-multibyte-characters t) ; for the default behaviour (?)
;    (standard-display-8bit 160 254)     ; Rendering of chars 128-159 as
;    (let ((i 128))                      ; "8bit" is broken on early emacs20's,
;      '(while (< i 160)                 ; so we use g1 glyphs for them.
;        (aset standard-display-table i
;              (vector (create-glyph (char-to-string i))))
;        ;;(standard-display-g1 i i)
;        (setq i (+ i 1))))
;    ))

; (debug-on-entry 'setglyphs)
; (find-elnode "Debugger Commands" "`b'")
; (find-elinode "debug")
; (find-elinode "Top")




#####
#
# Emacs20 bug - old notes
#
#####

# (find-node "(emacs)Single-Byte European Support")
set-language-environment

cd /usr/share/emacs/20.2/lisp/
find * -name '*.el' > .files.el
etags $(<.files.el)
glimpseindex -H . -y $(<.files.el)

# (code-c-d "e20" "/usr/share/emacs/20.2/lisp/" "emacs")
# (code-c-d "e20s" "/usr/src/emacs20-20.2/")
# (find-e20tag "set-language-environment")
# (find-e20tag "set-terminal-coding-system")
# (find-e20tag "standard-display-european")
# (find-e20tag "standard-display-8bit")

# (find-fline "/usr/share/emacs/20.2/etc/")
# (find-fline "/usr/share/emacs/20.2/etc/FAQ" "Using Emacs with Alternate Character Sets")

(standard-display-8bit 128 255)
(standard-display-default 128 255)
Problema:
  ~
acao
 '
ação

# (find-e20tag "standard-display-european")
# (find-e20file "international/fontset.el")

(list-coding-systems)
(list-coding-systems 1)

set-language-environment

and specify `Latin-N'.

   Emacs can display those characters provided the terminal or font in
use supports them.  Use the `M-x standard-display-european' command to
enable or disable European display mode.  With a numeric argument, `M-x
standard-display-european' enables European character display if and
only if the argument is positive.

(standard-display-european 1)

/usr/doc/expect5.24/examples/autoexpect emacs20 --no-windows ~/CRIM/010ideas
# (find-fline "~/script.exp")

pdsc /debian/main/source/editors/emacs20_20.2-7.dsc
debian/rules binary	|& tee odrb

cd /usr/src/emacs20-20.2/
find * -type f -and -not -name '*.elc' > .files
glimpseindex -H . -F < .files

e20sglimpse Fredraw_frame

# (find-e20sfile "src/.gdbinit")
# set args --no-windows
# source ~/e

# (find-e20sfile "src/dispnew.c")
# (find-e20sfile "src/dispnew.c" "redraw-frame")
# (find-elnode "Index")

# (find-node "(gdb)Attach")
# (find-node "(gdb)Command Files")

# (find-elnode "Terminal Output" "send-string-to-terminal")
# (find-enode "Choosing Modes" "-*-")
# (find-enode "File Variables")

# (find-e20sfile "etc/NEWS" "Displaying international")
# (find-e20sfile "etc/NEWS" "fontset")
# (find-e20sfile "etc/NEWS" "browse-url-lynx-emacs")
# (find-e20sfile "etc/NEWS" "speedbar")
# (find-e20sfile "etc/NEWS" "unibyte-display-via-language-environment")
# (find-e20sfile "etc/NEWS" "0237")
# (find-e20sfile "etc/NEWS" "** Changes relating to multibyte characters")
# (find-e20sfile "etc/LNEWS" "Display tables")

# (find-e20file "emacs-lisp/")
# (find-e20file "emacs-lisp/trace.el" "ack ")
# (find-e20file "sregex.el")

# (find-e20file "international/fontset.el")
xlsfonts | grep -i mule





#####
#
# emacs 20.3.2 (slink), tracing the glyph bug.
#
#####

# «tracing_the_glyph_bug»  (to ".tracing_the_glyph_bug")

apti liblockfile-dev

pdsc /big/slinks1/dists/slink/main/source/editors/emacs20_20.3-7.dsc
cd /usr/src/emacs20-20.3/

find * -type f -and -not -name '*.elc' > .files
# glimpseindex -n -H . -F < .files
etags src/*.[ch]

debian/rules binary	|& tee odrb


laf	\
    /usr/bin/emacs*			\
    /usr/src/emacs20-20.3/src/emacs*	\
    /usr/src/emacs20-20.3/debian/tmp/usr/bin/emacs-20.3		\
    /usr/src/emacs20-20.3/debian/tmp/usr/bin/emacs20

# (find-fline "~/eev.el" "eegdb-bounded")
# (gdb "gdb /usr/src/emacs20-20.3/src/emacs")
# (gdb "gdbattach /usr/src/emacs20-20.3/src/emacs")

/usr/src/emacs20-20.3/src/emacs \
  --no-windows --unibyte --no-init-file /home/root/glyphbug

# (find-fline "~/bin/gdbattach")
gdbattach /usr/src/emacs20-20.3/src/emacs


strace -f -o ~/s \
/usr/src/emacs20-20.3/src/emacs \
  --no-windows --unibyte --no-init-file /home/root/glyphbug

# (find-e20node "Bugs")
# (find-e20node "Checklist" "hung")
# (find-e20node "Initial Options")

# (find-e20stag "write_glyphs")
# (find-e20stag "encode_terminal_code")
# (find-e20stag "encode_coding")
# (find-e20stag "encode_coding_iso2022")

write_glyphs



%
set args --no-windows --unibyte --no-init-file /home/root/glyphbug
br 405
br 507
run -geometry 300x300+20-20

p *argv
n
p xpos
p ypos
p width
p height
p dest_geom_mask
cont

p xpos
p ypos
p width
p height
p xswa
%
p *(xswa.win_gravity)
%





#####
#
# formfeed-2021
# 2021may22
#
#####

# «formfeed-glyph-2021»  (to ".formfeed-glyph-2021")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg00822.html my answer
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg00821.html some links:
# https://depp.brause.cc/form-feed/
# https://www.emacswiki.org/emacs/PrettyControlL
# https://www.emacswiki.org/emacs/PageBreaks
# https://github.com/purcell/page-break-lines

This is what I use to make the formfeed and a few other special characters
be displayed as colored glyphs (and stand out):

;; Screenshot:
;; http://angg.twu.net/glyphs/eev-glyphs.el.png
;; The code below was mostly taken from:
;; http://angg.twu.net/eev-current/eepitch.el.html#glyphs
;; http://angg.twu.net/eev-current/eepitch.el

(defface eev-glyph-face-bluebg
  '((t (:background "blue")))
  "Face used for the glyph for backspace (char 8; a solid blue box).")

(defface eev-glyph-face-yellow-on-red
  '((t (:foreground "yellow" :background "red")))
  "Face used for the formfeed glyph (char 12).")

(defface eev-glyph-face-blue
  '((t (:foreground "blue")))
  "Face used for the glyph for CR (char 13).")

(defface eepitch-star-face
  '((t (:foreground "red")))
  "Face used for the red star glyph (char 15).")

(defun eepitch-set-glyph0 (pos &optional char face)
  "See: (find-eepitch-intro \"glyph\")"
  (aset standard-display-table pos
(if char (vector (make-glyph-code char face)))))

(defun eepitch-set-glyph (pos &optional char face)
  "See: (find-eepitch-intro \"glyph\")
and: (find-anchors-intro \"glyphs\")
This is the high-level version of `eepitch-set-glyph0', with a hack
to make it work similarly in unibyte and multibyte buffers."
  (eepitch-set-glyph0 pos char face)
  (if (<= 128 pos)
      (eepitch-set-glyph0 (make-char 'eight-bit pos) char face)))

(if (not standard-display-table)
    (setq standard-display-table (make-display-table)))

(eepitch-set-glyph    8 32 'eev-glyph-face-bluebg)
(eepitch-set-glyph   12 ?L 'eev-glyph-face-yellow-on-red)
(eepitch-set-glyph   13 ?M 'eev-glyph-face-blue)
(eepitch-set-glyph   15 ?* 'eepitch-star-face)

;; Test: (insert "\n" 8 12 13 15)

;; Cheers,
;;    Eduardo Ochs =)
;;    http://angg.twu.net/#eev





#####
#
# Emacs20, sending a bug report
#
#####

# (find-node "(gcc)Bugs")
# (find-node "(gcc)Bug Reporting")





######
#
# Trapping errors
#
######

# (find-node "(elisp)Handling Errors" "VAR PROTECTED-FORM")
# (find-efile "files.el" "condition-case")

eglimpse condition-case



#####
#
# Emacs20 fontsets
#
#####

# (find-vldifile "emacs20.list")
# (find-fline "/usr/doc/emacs20/")

# (find-fline "/usr/share/emacs/20.3/etc/")
# (find-fline "/usr/share/emacs/20.3/etc/HELLO")
# (find-fline "/usr/share/emacs/20.3/etc/NEWS" "HELLO")

cd ~/SLINK/
ls | grep font

# Potato:
apti xfonts-intl-phonetic

# (find-status "xfonts-intl-phonetic")
# (find-vldifile "xfonts-intl-phonetic.list")
# (find-fline "/usr/doc/xfonts-intl-phonetic/")

# Obsolete:
apti intlfonts-arabic intlfonts-asian intlfonts-chinese \
  intlfonts-chinese-big intlfonts-european intlfonts-japanese \
  intlfonts-japanese-big intlfonts-phonetic

# (find-fline "/usr/doc/intlfonts-arabic/")
# (find-fline "/usr/doc/intlfonts-asian/")
# (find-fline "/usr/doc/intlfonts-chinese-big/")
# (find-fline "/usr/doc/intlfonts-chinese/")
# (find-fline "/usr/doc/intlfonts-european/")
# (find-fline "/usr/doc/intlfonts-japanese-big/")
# (find-fline "/usr/doc/intlfonts-japanese/")
# (find-fline "/usr/doc/intlfonts-phonetic/")
# (find-vldifile "intlfonts-arabic.list")
# (find-vldifile "intlfonts-asian.list")
# (find-vldifile "intlfonts-chinese-big.list")
# (find-vldifile "intlfonts-chinese.list")
# (find-vldifile "intlfonts-european.list")
# (find-vldifile "intlfonts-japanese-big.list")
# (find-vldifile "intlfonts-japanese.list")
# (find-vldifile "intlfonts-phonetic.list")

# (find-e20node "Fontsets")
# (find-e20node "Defining Fontsets")
# (find-e20node "Mode Line" "CS states the coding system")
# (eeman "4 charsets" "ISO 2022 AND ISO 4873")
# (eeman "4 charsets" "UTF-8")
# (eeman "Tcl" "xhh")

# ranges
set r10   "\[\x80-\xBF\]"
set r110  "\[\xC0-\xDF\]"
set r1110 "\[\xE0-\xEF\]"

# (set-mstd-cchar 27 "31" "[")
# (find-fline "/usr/share/emacs/20.3/etc/HELLO")





######
#
# ISO 2022/4873
#
######

# (find-man "7 charsets" "ISO 2022 AND ISO 4873")

Switching  between  character sets is done using the shift
functions ^N (SO or LS1), ^O (SI or LS0),
ESC n (LS2),
ESC o (LS3),
ESC N (SS2),
ESC O (SS3),
ESC ~ (LS1R),
ESC } (LS2R),
ESC | (LS3R). The function LSn makes character set Gn the current one
for codes with high bit zero. The function LSnR makes character set Gn
the current one for codes with high bit one. The function SSn makes
character set Gn (n=2 or 3) the current one for the next character
only (regardless of the value of its high order bit).

A 94-character set is designated as Gn character set by an ESCape
sequence
ESC ( xx (for G0),
ESC ) xx (for G1),
ESC *  xx (for G2),
ESC + xx (for G3), where xx is a symbol or a pair of symbols found in
the ISO 2375 International Register of Coded Character Sets. For
example,
ESC ( @ selects the ISO 646 character set as G0,
ESC ( A selects the UK standard character set (with pound instead of
number sign),
ESC ( B selects ASCII (with dollar instead of currency sign),
ESC ( M selects a character set for African languages,
ESC ( ! A selects the Cuban character set, etc. etc.
A 96-character set is designated as Gn character set by an ESCape
sequence
ESC - xx (for G1),
ESC . xx (for G2) or
ESC / xx (for G3). For example,
ESC - G selects the Hebrew alphabet as G1.




#####
#
# The standard fontset
#
#####

# (find-node "(gawk)Command Line Field Separator")
# (find-eetcfile "CHARSETS")

#
grep '^##	' < /usr/share/emacs/20.7/etc/CHARSETS
awk -F: 'NF==10 {printf "%-23s %3d %d %d %d %d %d %d %d %s\n",
            $1, $2, $3, $4, $5, $6, $7, $8, $9, $10}' \
  < /usr/share/emacs/20.7/etc/CHARSETS
#

cd /usr/src/emacs20-20.3/
find * -type f -and -not -name '*.elc' > .files
glimpseindex -n -H . -F < .files

cd /usr/src/emacs20-20.3/
agrep -l 2022 $(<.files)

cd /usr/src/emacs20-20.3/
agrep -i UTF $(<.files)

# (find-e20sfile "src/coding.c" "** 2. Emacs internal format")
# (find-e20sfile "src/coding.c" "** 3. ISO2022 handlers")
# (find-e20sfile "src/coding.c" "  o coding-category-iso-7")
# (find-e20sfile "src/coding.c" "")
# (find-e20sfile "src/coding.h" "EMACS' INTERNAL FORMAT")
# (find-e20sfile "src/charset.h" "private dim1")






#####
#
# Making the files HELLOS and HELLOS2
#
#####

set mule1st  "\[\x80-\x9F\]"
set mulerest "\[\xA0-\xFF\]"
set string [exec cat /home/root/HELLO]
puts ";-*- coding: emacs-mule-unix -*-"
while {[regexp "($mule1st$mulerest+)(.*$)" $string {} mulestr string]} {
  puts $mulestr
}

eet | sort | uniq > ~/HELLOS


set highchar "\[\x80-\xFF\]"
set lines [split [exec cat /home/root/HELLOS] "\n"]
foreach li $lines {
  if {[regexp "$highchar+" $li highs]} {
    set mylist {}
    foreach c [split $highs {}] {
      scan $c "%c" code
      lappend mylist [format "%02x" $code]
    }
    puts "$li	$mylist"
  } else {
    puts $li
  }
}

eet > ~/HELLOS2



# (find-efile "simple.el" "what-cursor-position")



# (find-e20node "Coding Systems")
# (find-e20node "Specify Coding" "for the immediately following command")

# (find-e20file "")
# (find-e20file "language/")
# (find-e20file "international/")
# (find-e20file "international/quail.el")

# (find-e20tag "list-character-sets-1")
describe-current-coding-system-briefly

(set-buffer-file-coding-system 'emacs-mule-unix)

(defun ascstr32 (i lasti)
  (while (<= i lasti)
    (insert (format "%d: " i))
    (let ((j i)
	  (lastj (+ i 32)))
      (while (<= j lastj)
	(insert (format "%c" j))
	(setq j (+ j 1))))
    (setq i (+ i 32))
    (insert "\n")))

(ascstr32 32 128)

32:  !"#$%&'()*+,-./0123456789:;<=>?@
64: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
96: `abcdefghijklmnopqrstuvwxyz{|}~
128:

    (princ (format "%c" i) (current-buffer))
    (setq i (+ i 32))))

emacs20 -fn fontset-standard /usr/share/emacs/20.3/etc/HELLO

# (find-e20file "international/fontset.el")

lynx $S/http/www.debian.org/~hp/tutorial/debian-tutorial.html/ch-editor.html#s-editor-vi
edrxnetscape $S/http/www.debian.org/~hp/tutorial/debian-tutorial.html/ch-editor.html#s-editor-vi

# (find-enode "Debuggers")





####
#
# X resources for emacs
# 2004feb11
#
####

# «X_resources»  (to ".X_resources")
# (find-angg ".Xdefaults" "emacs")
# (find-enode "Resources X" "`foreground'")
# (find-enode "Resources X" "`background'")
# (find-enode "Lucid Resources")
# (find-efaqnode "Valid X resources")
# (find-elnode "Startup Summary")

# (find-fline "/usr/share/emacs/19.34/etc/FAQ" "\n\n68:")

# (find-man "emacs" "emacs.keyword:value")

# (find-efile "term/x-win.el" "foreground")

! (info "(emacs)Lucid Resources")
! (shell-command "xrdb -load ~/.Xdefaults")
! (shell-command "xrdb -load ~/.Xdefaults; emacs")
Emacs.pane.menubar.font: fixed
Emacs.pane.menubar.verticalSpacing: 0





######
#
# Emacspeak
# 2001oct17
#
######

# «emacspeak»  (to ".emacspeak")
# (find-shttpw3 "emacswiki.org/cgi-bin/wiki.pl?EmacSpeak")
# (find-shttpw3 "www-4.ibm.com/software/speech/dev/ttssdk_linux.html")
# Go to the IBM site and register... you will be offered the following
# packages:
#   ViaVoice ASR SDK for Linux V3:
#     viavoice_asr_sdk_3.tar (3MB)
#   ViaVoice Dictation Run Time Kit for for Linux V3:
#     viavoice_dict_rtk_3.tar (78MB)
#   ViaVoice Command & Control Run Time Kit for Linux V2:
#     viavoice_command_rtk_2.tar (13MB)
#   ViaVoice TTS SDK for Linux V5.1:
#     viavoice_tts_sdk_5.tar (.5MB)
#   ViaVoice TTS Run Time Kit for Linux V5.1:
#     viavoice_tts_rtk_5.tar (1.3MB)
# Fetch the last two.
# (find-fline "~/tmp/viavoice_tts_rtk_5.tar")
# (find-fline "~/tmp/viavoice_tts_sdk_5.tar")
#*
rm -Rv /tmp/viavoice/
mkdir  /tmp/viavoice/
cd     /tmp/viavoice/
tar -xvf ~/tmp/viavoice_tts_rtk_5.tar
tar -xvf ~/tmp/viavoice_tts_sdk_5.tar
alien ViaVoice_TTS_rtk-5.1-1.2.i386.rpm
alien ViaVoice_TTS_sdk-5.1-1.2.i386.rpm
mv -v viavoice-tts-rtk_5.1-2.2_i386.deb ~/tmp/
mv -v viavoice-tts-sdk_5.1-2.2_i386.deb ~/tmp/

#*

# Old stuff:
Pgrep m/emacspeak/i

apti emacspeak
# (find-vldifile "emacspeak.list")
# (find-fline "/usr/doc/emacspeak/")

# (find-fline "/usr/doc/HOWTO/Emacspeak-HOWTO.gz")

ftp://vpsyc.nott.ac.uk/pub/ritter/dismal


# «emacspeak-eflite»  (to ".emacspeak-eflite")
# 2006oct30, #emacs:
<e1f`> ,emacspeak
<fsbot> emacspeak is [0] a package which lets you use Emacs with an
        auditory user interface.
<fsbot> [1] In Debian, apt-get install eflite; apt-get install
        emacspeak; Then just select eflite from the configuration
        menu.,
<fsbot> [2] at http://emacspeak.sf.net,
<fsbot> [3] at http://www.emacswiki.org/cgi-bin/wiki.pl/EmacSpeak,
        ..[Type ,more]





#####
#
# Signing papers for the FSF
# 99dec26
#
#####

# «fsf_papers»

# (find-fline "~/99dec26.popmail" "snail this page")
# (find-fline "~/LATEX/eevcontract.tex")

cd ~/LATEX/; make eevcontract.dvi
xdvi eevcontract.dvi &

cd ~/LATEX/; make eevcontract.p01


%

Hi,

Gerd Moellman, the Emacs maintainer, told me to send you the data on
this page and the assignment contract, for {\tt eev.el}-related
bureaucracy. I hope I've got everything right...

% Other data, for copyrights, correspondence, etc.:

\medskip

Full name, citizenship, date of birth:

\smallskip

Eduardo Nahum Ochs, Brazilian, 7/feb/1971.

\medskip

Snail-mail address:

\smallskip

Av.\ Lineu de Paula Machado, 117/101 - Lagoa

Rio de Janeiro, RJ

CEP 22470-040

Brazil

\medskip

E-mail addresses:

\smallskip

{\tt [email protected]}

{\tt [email protected]}

\medskip

Homepage:

\smallskip

{\tt http://angg.twu.net/}

% \noindent This data is also available though my homepage, {\tt
% http://angg.twu.net/}, and I'll send a copy to you by e-mail to
% minimize the risk of typing errors...

\bigskip

\noindent [\ ], Edrx.


\vskip 4cm

Richard Stallman

545 Tech Sq rm 425

Cambridge, MA 02139

USA


%





#####
#
# calc
# 2000nov13 / 2013jul29 / 2019oct15
#
#####

# «calc»  (to ".calc")
# (find-node "(calc)Top")
# (find-node "(calc)Embedded Mode")

<Ardonik> M-x calc RET d B
<Ardonik> ' a*x^4+b*x^3+c*x^2+d*x+e RET
<Ardonik> a S x RET
<Ardonik> C-x 1

# Old:
# (find-status "calc")
# (find-vldifile "calc.list")
# (find-fline "/usr/doc/calc/")

# (find-vldifile "" "calc")
# (find-vldifile "calc.postinst")
# (find-vldifile "calc.prerm")

gv -seascape -antialias /usr/doc/calc/calccard.ps.gz &

# (code-c-d "calc" "/usr/share/emacs/site-lisp/calc/" "calc")
# (find-calcnode "Top")
# (find-calcfile "")

# (find-fline "/usr/lib/emacsen-common/packages/remove/" "calc")

Calc: Re: Severe regressions in context of keyboard macros
https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00424.html
https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00654.html





#####
#
# Cartão de visitas pra exposalt
# 00jan27
#
#####

%*
% (eelatex-bounded)
\catcode`�=13 \def�{$\blacksquare$}

Eduardo Ochs

% {\tt http://angg.twu.net/}

% {\tt http://angg.twu.net/emacs.html}

{\tt http://angg.twu.net/eev-manifesto.html}

{\tt http://angg.twu.net/e/escripts.html\#debugging\_gawk}


\tiny

\begin{verbatim}
# (code-c-d "gawk" "/usr/src/gawk-3.0.3/" "gawk")

rm -Rv /usr/src/gawk-3.0.3/
cd /usr/src/
dpkg-source -sn -x \
  /big/slinks2/dists/slink/main/source/interpreters/gawk_3.0.3-1.dsc
cd /usr/src/gawk-3.0.3/
debian/rules binary	|& tee odrb
etags *.[chy]

# (find-gawkfile "odrb" "strip")
# (find-gawkfile "debian/rules" "strip")
# In the top gawk dir there's a non-stripped binary; we use it.

# (find-gawknode "Numeric Functions")
# (find-gawkfile "awktab.c" "\"cos\"")
# (find-gawktag "do_cos")

cat > /tmp/awkprog <<'---'
BEGIN { print cos(0); }
---

%*
br do_cos
set args -f /tmp/awkprog
run
p *tree
%*
p *(tree->sub.nodep.l.lptr)
%*
p *(tree->sub.nodep.l.ll)
%*

# (gdb "gdb /usr/src/gawk-3.0.3/gawk")
# (find-gawktag "lnode")


# (find-angg "eev.el" "eev")
# (find-angg "eev.el" "code-c-d")
# (find-angg "eev.el" "code-c-d-explan1")
# (find-angg "eev.el" "code-c-d-explan2")
# (find-angg "eev.el" "gdb")
# (find-angg "eev.el" "bounded")
\end{verbatim}

%

# (find-fline "/usr/doc/texmf/generic/pstricks/")
cd /usr/doc/texmf/generic/pstricks/obsolete/


~/TCL/cartao -3.5 12 6 12   -3.5 -2 6 -2 > cartao1.tex ; make cartao1.dvi





mail -s 'Emacs e scripts' [email protected] <<'---'
Oi Godoy! Eu conversei com o Roxo na ExpoSAlt hoje, acabei mostrando
pra ele uma coisa que eu acabo empurrando pra todo mundo, que e' um
truque de, no Emacs, mandar blocos de texto para o shell ou para
outros interpretadores, e de interpretar as linhas de comentarios como
hiperlinks (que na verdade sao expressoes em Emacs Lisp que a gente
executa com C-x C-e). Bom, o Roxo falou que voce e' um Emacszeiro
fanatico (ele e' vi-zeiro) e eu resolvi mandar o link do pacote pra
voce.

De^ uma olhada em algum desses enderecos aqui:

  http://angg.twu.net/eev-mails.html
  http://angg.twu.net/eev-manifesto.html
  http://angg.twu.net/emacs.html
  http://angg.twu.net/hacks.html

Cada um acaba te levando a todos os outros se voce for seguindo os
caminhos mais interessantes.

  Tomara que voce goste. Um abraco,

    Eduardo Ochs
    [email protected]
    http://angg.twu.net/
---


mail [email protected] <<'---'
subscribe [email protected]
---





#####
#
# linux-br
# 00feb01
#
#####

# «eev_linux-br_message»

mail -s 'eev: Hiperlinks no Emacs' [email protected] <<'--%%--'
Oi. Eu tenho um pacote em Emacs Lisp (eev.el) que serve pras pessoas
poderem trocar truques mais facilmente e pra fazer com que as pessoas
fiquem viciadas em codigo fonte e software livre; gostaria que os
interessados dessem uma olhada. (Na verdade eu gostaria de dizer "usem
o eev e ajudem a salvar o mundo", mas isso pegaria muito mal).

Um exemplo de uso: digamos que a gente esta' editando esta mensagem
num Emacs que ja' carregou a biblioteca eev.el (com `(load-library
"~/eev.el")', digamos). Entao varios pedacos do bloco abaixo podem ser
interpretados de modo especial:



# (code-c-d "gawk" "/usr/src/gawk-3.0.3/" "gawk")

rm -Rv /usr/src/gawk-3.0.3/
cd /usr/src/
dpkg-source -sn -x \
  /big/slinks2/dists/slink/main/source/interpreters/gawk_3.0.3-1.dsc
cd /usr/src/gawk-3.0.3/
debian/rules binary	|& tee odrb
etags *.[chy]

# (find-gawkfile "odrb" "strip")
# (find-gawkfile "debian/rules" "strip")
# In the top gawk dir there's a non-stripped binary; we use it.

# (find-gawknode "Numeric Functions")
# (find-gawkfile "awktab.c" "\"cos\"")
# (find-gawktag "do_cos")

cat > /tmp/awkprog <<'---'
BEGIN { print cos(0); }
---

%^
br do_cos
set args -f /tmp/awkprog
run
p *tree
%^
p *(tree->sub.nodep.l.lptr)
%^
p *(tree->sub.nodep.l.ll)
%^

# (gdb "gdb /usr/src/gawk-3.0.3/gawk")
# (find-gawktag "lnode")

# (find-angg "eev.el" "eev")
# (find-angg "eev.el" "code-c-d")
# (find-angg "eev.el" "code-c-d-explan1")
# (find-angg "eev.el" "code-c-d-explan2")
# (find-angg "eev.el" "gdb")
# (find-angg "eev.el" "bounded")



As expressoes entre parenteses nos comentarios sao expressoes em Emacs
Lisp; elas podem ser executadas pondo o cursor logo depois de uma
delas e batendo C-x C-e (eval-last-sexp). A primeira, a do "code-c-d",
define varias funcoes com "gawk" no nome; a terceira, `(find-gawkfile
"debian/rules" "strip")', por exemplo, abre o arquivo
/usr/src/gawk-3.0.3/debian/rules e posiciona o cursor logo depois da
primeira ocorrencia do string "strip"; a com "find-gawknode" abre a
pagina de info chamada "(gawk)Numeric Functions"; a com "find-gawktag"
encontra, na fonte do gawk, a definicao da funcao "do_cos". Moral,
essas funcoes funcionam como hiperlinks.

O primeiro bloco de texto sem "#"s e' pra ser executado por um shell;
a gente marca o bloco, bate M-x eev, vai prum shell em outra janela ou
em outro virtual console e roda "ee"; essas linhas vao ser executadas
quase como se estivessem sendo batidas diretamente no shell, i.e.,
"cd"s, "set"s e "alias"es sao respeitados (o bloco e' executado com
"source"; detalhes na pagina). Pra quem estranhou o "dpkg-source" e o
".dsc": esse bloco abre o pacote Debian com a fonte do gawk, recompila
e roda o etags nos arquivos-fonte relevantes.

O bloco com os "%^"s tem tres sequencias de comandos para o gdb. Eles
podem ser mandados para o gdb com M-x eeg, que e' similar ao M-x eev,
ou com M-x eegdb-bounded, que manda tudo o que esta entre dois
delimitadores "%^". Como no caso do eev, a gente precisa dar o comando
"ee" dentro do gdb pra que eles sejam executados.

O `(gdb "gdb /usr/src/gawk-3.0.3/gawk")' abre um gdb, numa janela do
Emacs, pra debugar o /usr/src/gawk-3.0.3/gawk.

Moral, o blocao acima serve pra abrir a fonte do gawk, recompila-lo
com os simbolos para debugamento ("-g"), pra disparar um gdb nele, pra
seguir a execucao ate' um determinado ponto e pra mostrar os valores
de algumas variaveis.

Quem se interessar por favor de^ uma olhada em:

  http://angg.twu.net/eev-mails.html    <-- o blocao, com mais informacoes
  http://angg.twu.net/eev-manifesto.html  <-- umas ideias por tras do eev.el
  http://angg.twu.net/emacs.html  <-- links pra mais docs e pra fonte do eev

La' voces vao encontrar tambem mais de 800k em arquivos de notas
feitos pra serem "executados" com os truques do eev.el.

  Um abraco, e desculpem a mensagem gigante,
    Eduardo Ochs
    [email protected]
    http://angg.twu.net/


P.S.: me disseram que da' pra fazer algo parecido no vi. Alguem pode
me mostrar como?
--%%--





#####
#
# Keith Waclena's tutorial -> .th
# 2000mar01
#
#####

# «waclena1»
# (find-fline "$S/http/www.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html")

cd $S/http/www.lib.uchicago.edu/keith/tcl-course/
cp -v emacs-tutorial.html /tmp/
cd /tmp/
lynx -dump emacs-tutorial.html > emacs-tutorial.lynx

# (find-fline "/tmp/" "emacs-tutorial")
# (find-fline "/tmp/emacs-tutorial.lynx" "info2www")




#####
#
# info2www
# 2000mar01
#
#####

apti info2www
# (find-vldifile "info2www.list")
# (find-fline "/usr/doc/info2www/")

# (find-fline "~/TH/emacs-tutor.th")

lynx /usr/doc/info2www/info2www.html
lynx http://localhost/doc/info2www/
lynx 'http://localhost/cgi-bin/info2www?(emacs-e20)Top'




#####
#
# emacs unibyte paragraph bug
# 2000apr10
#
#####

# «unibyte_paragraph_bug»
# (find-fline "~/CRIM/013ideas" "Segunda, 10 de abril, 2000")

cd ~/tmp/
gzip -c6 < bug | uuencode bug.gz |& tee ~/o

# (find-e20node "Single-Byte European Support")
# (find-e20node "Understanding Bug Reporting")
# (find-e20node "Checklist")
# (find-e20node "Checklist" "Ffuncall")

mail -s 'undo working wrong after M-q on a certain unibyte file' \
  [email protected] <<'%%%'

If we type M-q at the end of a certain paragraph with some single-byte
characters in the range 0-31 and 128-255 (given below, uuencoded), and
then type C-_ to undo the fill-paragraph command, the original
paragraph comes back as a single long line, without newlines.

The undo works ok if I change the characters in the range 128-255 to
ASCII chars.

This bug was observed on the standard compiled version of emacs-20.5
on an i386 running Debian 2.2 (package "emacs20.5a-2"); when I tried
it on emacs-20.2 on an i386 running RedHat 6.1, the bug didn't show
up.


cd /tmp/
uudecode <<'---'
begin 644 bug.gz
M'XL(`%_&]#@``W53L6[;,!`=LG'QX!\X("H2`XIA-YL`#1WZ!1UCNSU1)X>`
MJ%-(RA!@:&B7_D;;C\EW]:C4CE,[!T'2W;OW[HFDOM"V:TI,8;F`D@`+9^H4
M/BX6BTRIE<:@N:1OTWQY#ZN2JNE^93$\.CN\@E<"1NSJ>OF"%M7^>CD,2GT"
ML^VP+E&4?T!!]DZS;=D%+!'(0N"630K4:PH,`D!G$30;CQF@$5_0/+/2W'BQ
M:6!'#IXZ`O;@Z>D[-8$\!-,R)!GFF(!_9D%LZP@"L2.+?J[49Z\=[:@I.3(=
MM35JLL+V,LL"0O7'V:Y&X$:,LF8G?`3?%3Z8T)F?HBINM;&R3D(35'.M'TG&
M2T%:=^C,KQW51\[O:)WEL@3RZFCKA*L^9),X?C+=Q\<PB07=!<GE/J9RP1@/
MF/?K,;M[C<CZVH_5(M<IYH5\MS[0-GEPV/A3E4,\]#FNWU0OJ\9EC*@HBSIF
M18[_>SC$B5KT\=)Y4MPXJNI+7HZ>JEN<Y=5M/UN?]UP8>&[VGP#.1@]XDQX+
M1^AF]I[_"R&;<.8DZKY5.VO9Y..V1RA)Y$\H]^,^#$ERR.-2G*1CN^1R()29
/TSR50ZO47U9XI#&+`P``
`
end
---
gzip -dvf bug.gz

# Then:
/usr/bin/emacs-20.5 --no-windows --unibyte --no-init-file bug
# and go to the end of the last paragraph, type M-q and C-_.


  Eduardo Ochs
    [email protected]
    [email protected]
    http://angg.twu.net/
%%%




#####
#
# indented-text-mode in emacs20
# 2000may01
#
#####

# «indented-text-mode»

# (find-fline "/usr/share/emacs/20.5/etc/NEWS" "Indented Text")
# (find-e20file "textmodes/text-mode.el")
# (find-e20file "textmodes/text-mode.el" "paragraph-indent-text-mode")
# (find-e20node "Text Mode")
# (find-e20node "Adaptive Fill")
# (find-elnode "Defining Functions" "defalias")

(defalias 'indented-text-mode 'text-mode)
(defalias 'indented-text-mode 'paragraph-indent-text-mode)

# (describe-function 'paragraph-indent-text-mode)

Argh, not working




#####
#
# Changing goto-position to let it accept sequences of strings
# 2000may10
#
#####

# «new_goto-position»  (to ".new_goto-position")
# The code here was moved to my ".emacs".
# (find-angg "eev.el" "goto-position")
# (find-angg ".emacs" "new_goto-position")

# (find-node "(elisp)Type Predicates")
# (find-node "(elisp)Iteration")
# (find-es "emacs" "debugging")

# (find-elnode "The Echo Area")
# (find-elnode "Building Lists" "make-list")
# (find-fline "~/eev.el" "goto-position")
# (find-elnode "Formatting Strings")

(message "trap: n=%S s=%S rest=%S" n s rest)
(setq debug-on-error t)
(goto-position 2100 '* 2 "os")
(nthcdr 2 '(9040 * "os" 2))




#####
#
# ange-ftp bug
# 2000jun01
#
#####

# «ange-ftp-bug»

# ange-ftp bug: all of these treat ee.sh as if it was a directory.
# Writing on it with eevn works, though.
# Note that nautilus is a Debian potato box.

(find-fline "/rootroot@nautilus:/home/root/bin/ee.sh")
(find-fline "/nautilus:/home/root/bin/ee.sh")
(find-fline "/nautilus:home/root/bin/ee.sh")


(find-fline "/nautilus:")

(find-efile "ange-ftp.el")
(find-efile "ange-ftp.el" "directory-p")
(find-efile "ange-ftp.el" "defun ange-ftp-file-directory-p")
(find-efile "ange-ftp.el" "put 'file-directory-p")
(find-efile "ange-ftp.el" "defun ange-ftp-real-file-directory-p")

(find-fline "/localhost:/")
(find-fline "/localhost:/home/root/bin/ee.sh")
(find-fline "/localhost:bin/ee.sh")





#####
#
# emacs20: potato packages
# 2000jun17
#
#####

# (find-status "emacs20")
# (find-vldifile "emacs20.list")
# (find-fline "/usr/doc/emacs20/")

# (find-status "emacs20-el")
# (find-vldifile "emacs20-el.list")
# (find-fline "/usr/doc/emacs20-el/")




#####
#
# semi
# 2000jun22
#
#####

# «semi»
# (find-status "semi")
# (find-vldifile "semi.list")
# (find-fline "/usr/doc/semi/")

# (find-status "semi-gnus")
# (find-vldifile "semi-gnus.list")
# (find-fline "/usr/doc/semi-gnus/")




#####
#
# gnus
# 2000jun22
#
#####

# (find-status "gnus")
# (find-vldifile "gnus.list")
# (find-fline "/usr/doc/gnus/")

# (find-node "(gnus)Top")
# (find-node "(gnus)Getting Mail")
# (find-node "(gnus)Getting Started Reading Mail")
# (find-node "(gnus)Comparing Mail Backends" "nnbabyl")
# (find-node "(gnus)Comparing Mail Backends" "worst choice")




#####
#
# reading mail in emacs
# 2000jun22
#
#####

# (find-shttpw3 "www.messengers-of-messiah.org/~csebold/emacs/why.phtml")
# But VM doesn't work in the current Emacs20's.
#
grep-available -i emacs \
  | grep-dctrl -i mail \
  | tee ~/o
#
# (find-fline "~/o")




#####
#
# nnml
# 2000nov02
#
#####

# «nnml»  (to ".nnml")
# (find-node "(gnus-e20)Mail Spool")




#####
#
# compile-command and file variables
# 2000jun30 / 2012oct15
#
#####

# «compile»  (to ".compile")
# «compile-command»  (to ".compile-command")
# «file-variables»   (to ".file-variables")
# (find-efunctiondescr 'compile)
# (find-efunction      'compile)

# (to "coding:")
# (to "safe-local-variable")

cd /usr/src/linux-2.2/
agrep compile-command $(find | grep '\.c$') \
  |& tee ~/o

# (find-k22file "drivers/net/de620.c" "compile-command")
# (find-enode "Compilation" "compile-command")
# (find-enode "File Variables")
# (find-enode "File Variables" ";;; Local Variables:")
# (find-enode "File Variables" "`normal-mode'")
# (find-enode "Safe File Variables")
# (find-enode "Safe File Variables" "risky")
# (find-elnode "Byte Compilation" "no-byte-compile: t")

# (find-efunction 'normal-mode)
# (find-efunction 'hack-local-variables)
# (find-elnode "Index" "* normal-mode:")

# (find-e20tag "find-file")



#####
#
# directory-variables
# 2022feb13
#
#####

# «directory-variables»  (to ".directory-variables")
# (find-enode "Directory Variables")
# (find-enode "Directory Variables" ".dir-locals.el")
# (find-enode "Directory Variables" "nil" "applies to any mode")
# (find-sh "locate dir-locals")
# (find-angg "notes/.dir-locals.el")
# (find-angg ".dir-locals.el")




#####
#
# compilation
# 2021feb18
#
#####

# «compilation»  (to ".compilation")
# (find-enode "Compilation")
# (find-enode "Compilation Mode")
# (find-enode "Compilation Mode" "M-g M-n" "next-error")
# (eek "M-h M-k  M-g M-n  ;; next-error")
# (find-efunction 'next-error)
# (find-evardescr 'compilation-error-regexp-alist)
# (find-evariable 'compilation-error-regexp-alist-alist)
# (find-evardescr 'compilation-error-regexp-alist-alist)
# (find-eppp       compilation-error-regexp-alist-alist)





####
#
# `eval' in file variables
# 2004mar17
#
####

# «file-variables:eval»  (to ".file-variables:eval")
# (find-enode "File Variables" "`eval'")

# (find-efunction 'find-file)
# (find-efunction 'find-file-noselect)
# (progn (find-efunction 'find-file-noselect)
         (ee-isearch "find-file-noselect-1"))
# (find-efunction 'find-file-noselect-1)
# (find-efunction 'find-file-noselect-1 "after-find-file")
# (find-efunction 'after-find-file)
# (find-efunction 'after-find-file "normal-mode")
# (find-efunction 'normal-mode)
# (find-efunction 'hack-local-variables)

# (find-efile "files.el" "(put 'eval 'risky-local-variable t)")
# (find-efunction 'hack-one-local-variable "Permit eval if not root and")

# (find-evariable 'enable-local-eval)





#####
#
# The "safe-local-variable" property
# 2000oct24 / 2022feb13
#
#####

# «safe-local-variable»  (to ".safe-local-variable")
# (to "file-variables")
# (find-egrep "grep --color=auto -nH --null -e safe-local *.el")
# (find-egrep "grep --color=auto -nH --null -e safe-local *.el | grep -a string-or-null")
# (find-egrep "grep --color=auto -nH --null -e safe-local *.el | grep -a put")
# (find-fline "~/bigsrc/.dir-locals.el")

# My first attempts to set "ee-temp-bounded-function" in the "Local
# Variables:" section of a file failed; here's why...

# (find-elnode "Invoking the Debugger")
# (find-e20tag "hack-one-local-variable")
# (find-e20file "files.el" "defun normal-mode")
# (find-e20file "files.el" "defun hack-local-variables ")
# (find-e20file "files.el" "defun hack-one-local-variable ")
# (find-e20file "international/mule.el" "defun set-auto-coding ")
# (find-e20file "international/mule.el" "defun make-coding-system ")
# (find-e20file "international/ccl.el")
# (find-fline "~/eev.el" "(put 'ee-temp-bounded-function")

(defun foo ()
  (hack-one-local-variable 'ee-hemp-bounded-function 'eediag-bounded))
(debug-on-entry 'foo)
(foo)

(defun foo ()
  (hack-one-local-variable 'ee-temp-bounded-function 'eediag-bounded))
(debug-on-entry 'foo)
(foo)





#####
#
# Controlling the indentation in C programs
# 2000jul10
#
#####

# «C_indentation»  (to ".C_indentation")
# Just some links, I'm still trying to learn how the make the "case"s
# stand two columns at the right of the "switch".

# (find-e20file "progmodes/")
# (find-e20file "progmodes/c-mode.el")
# (find-e20file "progmodes/c-mode.el" "c-style-alist")
# (find-e20file "progmodes/cc-styles.el")
# (describe-variable 'c-style-alist)
# (describe-function 'c-add-style)
# (setq c-indent-level 5)
# (setq c-label-offset 2)
# (describe-variable 'features)
# (describe-variable 'c-indentation-style)

# (find-e20file "progmodes/cc-compat.el")
# (require 'cc-compat)
# (c-set-style "BOCM")
# (find-e20node "Hooks")
# (find-elnode "Named Features")

(setq c-indent-level 4)
(setq c-continued-statement-offset 5)   ; empty?
(setq c-argdecl-indent 0)               ; empty?
(setq c-brace-offset -5)
(setq c-label-offset 2)

(setq c-indent-level 5)
(setq c-continued-statment-offset 5)
(setq c-argdecl-indent 0)
(setq c-brace-offset -5)
(setq c-label-offset -5)

(find-efile "progmodes/cc-cmds.el")
(find-efile "progmodes/cc-styles.el")
(find-efile "progmodes/cc-mode.el")
(find-efile "progmodes/cc-mode.el" "substitute-key-definition")
(find-evariable 'c-indentation-style)

# (find-node "(ccmode)Built-in Styles")
# (find-node "(ccmode)Styles" "The style variables are:")
# (find-node "(ccmode)Custom Brace and Colon Hanging")
# (find-node "(ccmode)Indentation Commands")








#####
#
# The kill ring
# 2000aug02
#
#####

# (find-e20node "Appending Kills")
# (find-e20node "Earlier Kills")





#####
#
# mailing lists
# 2000aug08
#
#####

# (find-fline "/usr/doc/emacs20/etc/")
# (find-fline "/usr/doc/emacs20/etc/FAQ")
# (find-fline "/usr/doc/emacs20/etc/MAILINGLISTS")

sendemail -s 'subscribe [email protected]' [email protected] <<'---'
subscribe [email protected]
---

# A list where I can ask questions about how to copyleft e-scripts:
# (find-fline "/usr/doc/emacs20/etc/MAILINGLISTS" "gnu-misc-discuss-request")




#####
#
# input methods
# 2000aug27
#
#####

# (find-e20node "Input Methods" "combines to form")
# (find-e20node "Select Input Method")

# (set-input-method "latin-1-prefix")
# (toggle-input-method)
# (describe-input-method "latin-1-prefix")
# (list-input-methods)




#####
#
# buffer-local variables
# 2000aug28
#
#####

# «buffer-local»  (to ".buffer-local")
# (find-efunction 'find-ebufferlocalvars)
# (to "coding:")
# (find-enode "Specifying File Variables")
# (find-elnode "Creating Buffer-Local")
# (find-elnode "Creating Buffer-Local" "make-variable-buffer-local")
# (find-elnode "Creating Buffer-Local" "buffer-local-variables")
# (find-elnode "Default Value")
# (find-elnode "Default Value" "setq-default")
# (describe-function 'set)
# (set (make-local-variable 'ee-delimiter-hash) "\n#-\n")
# ee-delimiter-hash

# (find-elnode "Creating Buffer-Local" "Function: buffer-local-variables")
# (find-epp (buffer-local-variables))

(defun bl () (interactive) (find-epp (buffer-local-variables)))

(find-w3m "http://www.gnu.org/")






#####
#
# dir-locals
# 2019may24
#
#####

# «dir-locals» (to ".dir-locals")
# (find-enode "Directory Variables" ".dir-locals.el")
# (find-enode "Directory Variables" "M-x add-dir-local-variable")
# (find-egrep "zgrep --color -nH -e dir-locals *.el*")
# (find-egrep "zgrep --color -nH -e dir-locals *.el.gz")
# (find-egrep "grep --color -nH -e dir-locals *.el */*.el")
# (find-egrep "grep --color -nH -e dir-locals-class-alist *.el */*.el")
# (find-sh "locate dir-locals")
# (find-efunction 'add-dir-local-variable)
# (find-efunction 'dir-locals-read-from-file)
# (find-efunction 'dir-locals-read-from-dir)
# (find-efunction 'dir-locals-set-class-variables)
# (find-efunction 'dir-locals-set-directory-class)
# (find-evardescr 'dir-locals-class-alist)
# (find-evariable 'dir-locals-class-alist)
# (find-efile "help-fns.el" "This variable's value is directory-local")
# (find-efunction 'help-fns--var-file-local)
# (alist-get class dir-locals-class-alist)
# (alist-get 'c-mode dir-locals-class-alist)
# (alist-get 'ee-preferred-c dir-locals-class-alist)

# (find-evariable 'ee-anchor-format)
# (find-eev ".dir-locals.el")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (put 'ee-foo  'safe-local-variable 'stringp)
rm -Rv   /tmp/a/
mkdir -p /tmp/a/b/c/

cat > /tmp/a/.dir-locals.el <<'%%%'
;; ee-foo
;; (eek "C-h v ee-foo")
((nil . ((ee-foo . "/tmp/a/"))))
%%%

cat > /tmp/a/b/.dir-locals.el <<'%%%'
;; ee-foo
;; (eek "C-h v ee-foo")
;; (add-dir-local-variable nil 'ee-plic "bletch")
((nil . ((ee-foo . "/tmp/a/b/"))))
%%%

cat > /tmp/a/b/c/.dir-locals.el <<'%%%'
;; ee-foo
;; (eek "C-h v ee-foo")
((nil . ((ee-foo . "/tmp/a/b/c/"))))
%%%

cat > /tmp/a/b/c/test <<'%%%'
;; ee-foo
;; (eek "C-h v ee-foo")
#  Local Variables:
#  ee-foo:  "test"
#  End:
%%%

# (find-fline "/tmp/a/.dir-locals.el")
# (find-fline "/tmp/a/b/.dir-locals.el")
# (find-fline "/tmp/a/b/c/.dir-locals.el")
# (find-fline "/tmp/a/b/c/test")


# (add-dir-local-variable nil 'ee-plic "bletch")








#####
#
# checkdoc
# 2007aug30
#
#####

# «checkdoc»  (to ".checkdoc")
# This block was very old - I just updated the links.
# (find-efile "emacs-lisp/checkdoc.el")

# (find-elnode "Text Representations")
# (find-efile "")
# (find-efile "international/codepage.el" "defvar cp850-decode-table")
# (find-efile "international/codepage.el" "Windows-1250: ISO-8859-2")
# (find-efile "term/internal.el")
# (find-egrep "grep -niH -e codepage $(find * -name '*.el')")

# (find-enode "Easy Customization")
# (find-elnode "Customization")

# (find-node "(cl)Efficiency Concerns")
# (find-efile "emacs-lisp/cl-extra.el" "cl-prettyexpand")
# (find-efile "emacs-lisp/pp.el")

# (find-efile "international/mule.el")




#####
#
# Changing some symbols' names in eev
# 2000sep05
#
#####

# (find-efile "textmodes/texinfo.el" "(defun texinfo-define-common-keys")

ee-default-strbounded-function	-> ee-temp-bounded-function
ee-strbounded			-> ?
ee-write-bounded		-> ?
ee-fstrbounded			-> ee-meta-bounded
ee-default-strbounded		-> same, or ee-bounded

se-to-string			-> ee-se-to-string
octal-to-num			-> ee-octal-to-number
format-and-eval			-> ee-format-and-eval
ee-infofile-now			-> ee-temp-infofile
ee-code-now			-> ee-temp-code




#####
#
# Adding a minor mode with just some keybindings
# 2000sep07
#
#####

# «easy-mmode»  (to ".easy-mmode")
# (find-angg ".emacs" "gdbk-mode")

# (find-enode "Commands of GUD")
# (find-node "(gdb)Emacs")
# (find-enode "Minor Modes")
# (find-enode "Mode Line")
# (find-elnode "Minor Modes")
# (find-elnode "Easy-Mmode")
# (find-e20file "emacs-lisp/easy-mmode.el")
# (find-e20file "gud.el" "finish")




#####
#
# temporary buffers
# 2000nov26
#
#####

# «temp-buffer»  (to ".temp-buffer")
# (find-elnode "Current Buffer" "with-temp-buffer")
# (find-etag "find-file")
# (find-etag "find-file-noselect")
# (find-efile "subr.el" "(defmacro with-temp-buffer")

(with-temp-buffer
  (insert-file-contents (substitute-in-file-name "$EEG"))
  (buffer-string))

# (pdb "/usr/share/doc/python/examples/Demo/tkinter/guido/hanoi.py")
# (pdb "/usr/lib/python1.5/pdb.py /usr/share/doc/python/examples/Demo/tkinter/guido/hanoi.py")

(setq ee-lines-list '("help" "b main" "run" "n" "n"))
(defun ee-comint-send-line () (interactive)
  (if ee-lines-list (progn (insert (car ee-lines-list))
			   (comint-send-input)
			   (setq ee-lines-list (cdr ee-lines-list)))))
(global-set-key "\M-L" 'ee-comint-send-line)






#####
#
# scrolling by one line at each time
# 2000oct06
#
#####

# «scrolling_one_line»  (to ".scrolling_one_line")
# (find-eetcfile "FAQ" "setq scroll-step")
# (setq scroll-step 1)
# (setq scroll-step 0)
# (find-node "(emacs-faq)Scrolling only one line")
# (find-enode "Scrolling")
# (find-enode "Scrolling" "`scroll-margin'")
# (find-elnode "Vertical Scrolling" "scroll-step")
# (find-elnode "Vertical Scrolling" "scroll-conservatively")

e20glimpse -i scroll
e20glimpse -i scroll-step
# (find-efile "terminal.el")
# (find-efile "follow.el")

(setq scroll-conservatively 1)
(setq scroll-step 1)

(setq scroll-conservatively nil)
(setq scroll-step nil)

(emacs-version)

#*
sendemail -s 'Scrolling line per line: bug' [email protected]<<'%%%'
> Try  (setq scroll-step 1)
>
> > -----Original Message-----
> > From: "Baenninger, Dominik" [SMTP:[email protected]]
> > Sent: Monday, January 22, 2001 5:27 PM
> > To:	[email protected]
> > Subject: Scrolling line per line
> >
> > Can anyone say, how I can tell emacs, that when I scroll with the
> > cursor, he should not forwarding several lines per step but only
> > line by line?
> >
> > Thanks
> > Dominik
> >
> > _______________________________________________
> > Help-gnu-emacs mailing list
> > [email protected]
> > http://mail.gnu.org/mailman/listinfo/help-gnu-emacs

  (Info-goto-node "(elisp)Vertical Scrolling")
  (setq scroll-step 1)
  (setq scroll-conservatively 1)

But this behaves somewhat strangely if we have wrapped lines. Example:

Suppose that we have a very long line, "foo....bar....baz....quux",
but with many more dots, between a line that says "(recenter -1)" and
one that says "(recenter 0)", i.e.,

(recenter -1)
foo.............................................................................bar.............................................................................baz.............................................................................quux
(recenter 0)

This would appear like

  +------------------+
  |                  |
  |                  |
  |                  |
  |(recenter -1)     |
  |foo..............\|
  |.bar.............\|
  |..baz............\|
  |...quux           |
  |(recenter 0)      |
  |                  |
  |                  |
  +------------------+

in a text window. Then in the following two situations we get a
half-screen of scrolling even with `scroll-step' (or
`scroll-conservatively' in newer Emacsen; see the info node "Vertical
Scrolling" in the Emacs Lisp manual) set to 1:


I) +------------------+       II) +------------------+
   |                  |           |(recenter 0)      |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |                  |           |                  |
   |(recenter -1)     |           |                  |
   |foo..............\|           |                  |
   +------------------+           +------------------+

with the cursor in the last     with the cursor in the
line and going down, and...     top line and going up.


Is there a known workaround for this? If not, should I file a bug
report? Or should I consider that this message will be already taken
as a bug report, even if it is being sent to the wrong list?

  Cheers,
  Buenas Salenas Cronopio Cronopio,
    Eduardo Ochs
    http://angg.twu.net/
    [email protected]


P.S.: I've tested this on GNU Emacsen 19.34, 20.7.2 and 21.0.93, on an
i386 that runs a rather standard Debian 2.2 GNU/Linux distribution.
%%%

#*


































(This is a miniature of a text window, of course).







 that is, something that would appe



 then in
the following two situations we will get half-screen of scrolling even
with `scroll-step' (or `scroll-conservatively'; see the info node
"Vertical Scrolling" in the Emacs Lisp manual) set to 1:





whose text will  that appears as:

+------------------+
|      	       	   |
|		   |
|		   |
|		   |
|                  |
|(recenter -1)     |
|foo..............\|
+------------------+





+------------------+
|      	       	   |
|		   |
|                  |
|(recenter -1)     |
|foo..............\|
|.bar.............\|
|..baz............\|
|...quux           |
|(recenter 0)	   |
|		   |
|		   |
+------------------+






(before)
foo...........\
.bar..........\
..baz.........\
...quux
(after)





#####
#
# ignoring errors
# 2000oct13
#
#####

# «ignoring_errors»  (to ".ignoring_errors")
# «ignore-errors»    (to ".ignore-errors")
# «condition-case»   (to ".condition-case")
# (find-elnode "Catch and Throw")
# (find-elnode "Handling Errors" "condition-case nil")
# (find-elnode "Handling Errors" "Special Form: condition-case")
# (find-elnode "Error Symbols")
# (find-elnode "Standard Errors")
# (find-elnode "Simple Macro")
# (find-efile "emacs-lisp/cl-macs.el" "ignore-errors")
# (find-efile "emacs-lisp/cl-macs.el" "defun gensym")
# (find-efunctiondescr 'ignore-errors)
# (find-efunction      'ignore-errors)

(condition-case nil
    (+ 1 2)
  (error nil))

(condition-case nil
    (quagawagga)
  (error nil))

(condition-case nil
    (erro "BLA")
  (error nil))

(defmacro ignore-errors (body) (list 'condition-case nil body '(error nil)))
(ignore-errors (+ 1 2))
(ignore-errors (quagawagga))

(defmacro ign-errors (body) (list 'condition-case nil body '(error nil)))
(ign-errors (+ 1 2))
(ign-errors (quagawagga))



#####
#
# catch and throw
# 2019aug05
#
#####

# «catch-and-throw» (to ".catch-and-throw")
# (find-elnode "Catch and Throw")
# (find-egrep "zgrep --color -nH -e catch *.el* */*.el*")




#####
#
# Pretty-printing
# 2000oct24 / 2022may10
#
#####

# «pretty-printing»  (to ".pretty-printing")
# (to "key_name")
# (find-efile "emacs-lisp/pp.el")
# (find-elnode "Function Cells")

# ee-temp-bounded-function
# (insert (pp (symbol-function 'ee-bounded)))
# (insert (pp (symbol-function (key-binding [f3]))))
# (insert (pp (symbol-function ee-temp-bounded-function)))

# (find-efunction 'pp-emacs-lisp-code)
# (find-efunction 'pp-to-string)




#####
#
# old version of `inn'
# 2000oct30
#
#####

# «inn-old»  (to ".inn-old")
# The function `inn' was replaced in 2000oct30 by one that could deal
# better with infofiles in non-standard paths; I'm keeping the old
# version here for reference, as it was a bit simpler.

(defun inn (arg)
  "Insert a hyperlink to the current info node.
With an argument try to use the short form, like `# (find-elnode \"Top\")'.
Without an argument always use long forms, like `(find-node \"(elisp)Top\")'."
  (interactive "P")
  (let (f node ee code s)
    (if (get-buffer "*info*")
	(progn
	  (save-excursion
	    (set-buffer "*info*")
	    (string-match "/\\([^/]*\\)$" Info-current-file)
	    (setq f (match-string 1 Info-current-file))
	    (setq node Info-current-node))
	  ;; For debugging:
	  ;; (insert (format "%s %s %s\n" f node ee-temp-infofile))
	  (insert (format ee-comment-format
			  (if (and arg (string= f ee-temp-infofile))
			      (format "(find-%snode \"%s\")" ee-temp-code node)
			    (format "(find-node \"(%s)%s\")" f node)))))
      (error "No curent info node"))))



#####
#
# old versions of `eelatex'
# 2000oct30
#
#####

# «eelatex-old»  (to ".eelatex-old")

;; Run `M-x eelatex' on a block of text and then do a "ee" on a shell;
;; a file ~/LATEX/tmp.tex will be written and "make" will be called to
;; generate a tmp.dvi from it... well, at least if you are on my
;; machine! The definition below is meant to be taken as an example
;; only, as it almost certainly won't work for you; it should be
;; trivial to redefine it in your .emacs, though.
;;
;; (find-fline "~/LATEX/tese2.sty")
;;
(defun eelatex (s e)
  "An `eev'-like function to run LaTeX on a block of text. (Please redefine!)"
  (interactive "r")
  (ee-write s e "cat > ~/LATEX/tmp.tex <<'--%%--'
                 \\input tese2.sty
                 \\begin{document}
                 % \\input mar99a.dnt
                 % \\input mar99b.dnt\n"
	    "\n\\end{document}\n--%%--
             cd ~/LATEX
             rm tmp.dvi
             make tmp.dvi\n"))


; (to "tese")
; An override for eev.el's eelatex
; (find-angg "eev.el" "eelatex")
; (find-es "tex" "edrxnotes")

' (defun eelatex (s e) (interactive "r")
    (ee-write s e "cat > ~/LATEX/tmp.tex <<'--%%--'
      \\input tese2.sty
      \\begin{document}\n"
	      "\n\\end{document}\n--%%--
      cd ~/LATEX
      rm tmp.dvi
      make tmp.dvi
      savetmptex\n"))




#####
#
# making `xmath' a toggle
# 2000nov01
#
#####

# «xmath-toggle»  (to ".xmath-toggle")
# (find-etag "set-frame-font")
# (find-elnode "Parameter Access")
# (find-elnode "Association Lists")

(frame-parameters (selected-frame))
(insert (format "\n%S\n" (frame-parameters (selected-frame))))
(pp (frame-parameters (selected-frame)))
(pp (frame-parameters (selected-frame)) (current-buffer))
(assoc 'font (frame-parameters (selected-frame)))




#####
#
# Making the first mouse click not move point
# 2000nov02
#
#####

# «mouse-select-window»  (to ".mouse-select-window")
# (find-efile "mouse.el" "[mode-line mouse-1] 'mouse-select-window")
# (find-efile "mouse.el" "defcustom mouse-yank-at-point")

# I want to make the mouse in an Emacs running on X behave as close as
# possible to how it does in VTs with gpm... The first two commands
# below still don't work as I wanted.

(global-set-key [mouse-1]		'mouse-select-window)
(global-set-key [double-mouse-1]	'mouse-set-point)
(setq mouse-yank-at-point t)

# (view-lossage)




#####
#
# mkto
# 2000nov11
#
#####

# «mkto»  (to ".mkto")

# (describe-function 'replace-regexp)
# (find-etag "replace-regexp")
# (find-efile "replace.el")
# (find-elnode "Index")
# (find-enode "Regexps")
# (find-enode "Regexps" "\n`^'")
# (describe-function 'narrow-to-region)
# (find-elnode "Narrowing")
# (find-elnode "Regexp Search")

# (find-angg ".emacs" "mkto")




#####
#
# emacs-21.1 (Debian source)
# 2001oct29
#
#####

# «emacs21»  (to ".emacs21")
#*
pdsc $SDEBIAN/pool/main/e/emacs21/emacs21_21.1-2.dsc
cd /usr/src/emacs21-21.1/

find * -name '*.[ch]' | sort > .files.ch
glimpseindex -H . -F < .files.ch
etags $(<.files.ch)

cd /usr/src/emacs21-21.1/lisp/
find * -name '*.el' | sort > .files.el
glimpseindex -H . -F < .files.el
etags $(<.files.el)

patch -b -p0 debian/control <<'%%%'
12c12
< Depends: emacsen-common (>= 1.4.10), dpkg (>= 1.9.0), ${shlibs:Depends}
---
> Depends: emacsen-common (>= 1.4.10), dpkg, ${shlibs:Depends}
%%%

patch -b -p0 debian/control.in <<'%%%'
12c12
< Depends: emacsen-common (>= 1.4.10), dpkg (>= 1.9.0), ${shlibs:Depends}
---
> Depends: emacsen-common (>= 1.4.10), dpkg, ${shlibs:Depends}
%%%

cd /usr/src/emacs21-21.1/
debian/rules binary	|& tee odrb

#*
# Random notes about installing emacs21:
aptrm calc	;# the emacs21 installation chokes on calc
cd /usr/src
dpkg -i \
  emacs21_21.1-2_i386.deb \
  emacs21-el_21.1-2_all.deb

# Errors:
#   install-info: unknown option `--remove-exactly'
#   grep: Unmatched ) or \)
# (find-man "1 grep" "lose their special meaning")

sh -x /var/lib/dpkg/info/emacs21.postinst |& tee ~/o
/usr/lib/emacsen-common/emacs-install emacs21 |& tee ~/o

# (find-fline "~/o")
# (find-fline "/var/lib/dpkg/info/emacs21.postinst" "ctags\\")
# (find-fline "/usr/lib/emacsen-common/packages/install/calc")
# (find-fline "/usr/lib/emacsen-common/emacs-install")

# (find-e21file "")
# (find-e21file "odrb")
# (find-e21file "debian/")
# (find-e21file "debian/changelog" "dpkg (>= 1.9.0)")
# (find-e21file "debian/emacs.postinst" "install-info")
# Note the "|| true"s; the install-info errors will be harmless.

#*
# (find-es "hurd" "emptyhurd_newdpkg")
cd /usr/src/
dpkg -i \
  dpkg-dev_1.9.16_all.deb \
  dpkg-doc_1.9.16_all.deb \
  dpkg_1.9.16_i386.deb
#*
cd /var/cache/apt/archives/
dpkg -i \
  dpkg-dev_1.6.15_all.deb \
  dpkg-doc_1.6.15_all.deb \
  dpkg_1.6.15_i386.deb
#*




#####
#
# emacs-21.0.103
# 2001jun26
#
#####

# (find-shttpw3 "www.mit.edu/afs/athena/astaff/project/emacs/beta/src/")
#*
cd /usr/src/
rm -Rv emacs-21.0.103/
tar -xvzf $S/http/www.mit.edu/afs/athena/astaff/project/emacs/beta/src/emacs-21.0.103.tar.gz

cd /usr/src/emacs-21.0.103/
find * -name '*.[ch]' | sort > .files.ch
glimpseindex -H . -F < .files.ch
etags $(<.files.ch)

cd /usr/src/emacs-21.0.103/lisp/
find * -name '*.el' | sort > .files.el
glimpseindex -H . -F < .files.el
etags $(<.files.el)

cd /usr/src/emacs-21.0.103/
chmod 755 configure move-if-change
./configure	|& tee oc

# With optimization I can't set a breakpoint at update_end, for example.
#make		|& tee om
#rm -v src/term.o; make CFLAGS=-g	|& tee om2

make CFLAGS=-g	|& tee om
#*




#####
#
# emacs-21.0.93
# 2001jan07
#
#####

# «emacs21-gdb»  (to ".emacs21-gdb")
# (to "emacs21-gdb_1")
# I'm having a problem with the rendering of certain textmode glyphs
# on Emacs21; I think that if I'm the only one using these glyphs then
# I should be in charge of fixing the support for them.
#*
cd /usr/src/
rm -Rv emacs-21.0.93/
tar -xvzf ~/tmp/emacs-21.0.93.tar.gz

cd /usr/src/emacs-21.0.93/
find * -name '*.[ch]' | sort > .files.ch
glimpseindex -H . -F < .files.ch
etags $(<.files.ch)

cd /usr/src/emacs-21.0.93/lisp/
find * -name '*.el' | sort > .files.el
glimpseindex -H . -F < .files.el
etags $(<.files.el)

cd /usr/src/emacs-21.0.93/
chmod 755 configure move-if-change
./configure	|& tee oc

# With optimization I can't set a breakpoint at update_end, for example.
#make		|& tee om
#rm -v src/term.o; make CFLAGS=-g	|& tee om2

make CFLAGS=-g	|& tee om

#*
/usr/src/emacs-21.0.93/src/emacs -nw ~/CRIM/015ideas

#*
# (gdbk-gdb t "/usr/src/emacs-21.0.93/src/emacs")
set args -nw /home/root/CRIM/014ideas
set env TERM linux
br Sredraw_screen

#*
# (gdbk-gdb t "/usr/src/emacs-21.0.93/src/emacs")
set args -nw /home/root/CRIM/014ideas
set env TERM linux
#tbr main
#tbr init_display
# tbr init_keyboard
# tbr init_sys_modes
#tbr Frecursive_edit
tbr recursive_edit_1
#tbr command_loop
run

#*
# (find-es "gdb" "invoking_gdbk")
cat > $EEG <<'---'
br Fredraw_frame
---

GNUCLIENT=no expect -c '
  spawn [set f /usr/src/emacs-21.0.93/src/emacs] -nw $env(HOME)/CRIM/014ideas
  interact "\033g" {catch {exec gnudoit "(gdbk-gdb nil \"$f [exp_pid]\")"}}
'



#####
#
# emacs21: debugging the display engine with eeg2
# 2001jan26
#
#####

# (find-es "console" "screen_demo_eeg2")
# (find-enode "Action Arguments")
# (to "gnuserv")
# (find-angg "EXPECT/eeg2" "read_EEG")
# (find-sitelispfile "gnuserv/gnuserv.el" "(defun gnuserv-start")

#*
cd /usr/src/emacs-21.0.93/
cd src/; rm term.o; make CFLAGS=-g

#*
# «emacs21-gdb_1»  (to ".emacs21-gdb_1")
# (to "emacs21-gdb")
# First we need to shut down the gnuserv of the current Emacs, because
# it is the emacs controlled by "screen" that should receive the
# commands.
gnudoit '(gnuserv-start 0)'

cat > /tmp/1.eeg <<'---'
tcl: # We're in emacs20; make sure the new Emacs will have a gnuserv.
tcl: ac {(gnuserv-start)} {^[E}
tcl: # Start a shell in a new "screen" window. Then use gnudoit to
tcl: # make our emacs20 visit this (!) e-script, and use expect to
tcl: # start an gnuservless emacs21; expect will trap `M-g' and make
tcl: # it do a gnudoit call to make emacs20 attach a gdb to the
tcl: # emacs21.
tcl: ac {^Ac}
gnudoit '(find-es "emacs" "emacs21-gdb_1")'
GNUCLIENT=no exec expect -c '
  spawn [set f /usr/src/emacs-21.0.93/src/emacs] -nw $env(HOME)/CRIM/014ideas
  interact "\033g" {catch {exec gnudoit "(gdbk-gdb nil \"$f [exp_pid]\")"}}
'
tcl: # Running `M-x cs' will switch to the evil display table and
tcl: # trigger the bug; the rendering will be wrong.
tcl: ac {^[xcs^M}
tcl: # We will send the magical `M-g'. Warn the user.
tcl: am {Next key: M-g!}; ac {^[g}
tcl: # Switch back to emacs20, that has just entered GUD mode.
tcl: ac {^A0}
tcl: # We tell gdb to set a breakpoint at Fredraw_frame, and continue.
br Fredraw_frame
br update_end
cont
tcl: # Back to emacs21.
tcl: ac {^A1}
tcl: # Issue an F4 (redraw-screen). The breakpoint will be reached.
tcl: am {Next key: F4.}; ac {^[[[D}
tcl: # Back to emacs20, that will be showing e21 stopped at the breakpoint.
tcl: ac {^A0}
tcl: am {You're on your own now.}
---

eeg2 -c "allowtcl; set ee_generic /tmp/1.eeg; readlines; now_in screen" \
  screen emacs20 -nw

#*
cd /usr/src/emacs-21.0.93/
l +/update_end $(e21sglimpse -l update_end)

#*
# (eeg-bounded 'once)
# Argh, a breakpoint
br update_end

#*




# (find-e21file "")
# (find-e21tag "redraw_display")
# (find-e21tag "enable_glyph_matrix_rows")
# (find-e21file "src/term.c" "void\nupdate_end (f)")

# (code-c-d "e21" "/usr/src/emacs-21.0.93/" "/usr/src/emacs-21.0.93/info/emacs")
# (code-c-d "e21" "/usr/src/emacs-21.0.93/")
# (find-e21file "om")
# (find-e21file "src/dispnew.c" "call0 (intern (\"tty-set-up-")
# (find-e21file "src/keyboard.c" "Lisp_Object\nrecursive_edit_1 ()")

Idea for the gdbk calls: if the kbrd arg is non-nil, create a new frame

# (find-e21node "")
# (find-e21node "Tab Stops")
# (Info-goto-node "(emacs)Concept Index")











#####
#
# hyperbole-videos
# 2019jun26
#
#####

# «hyperbole-videos» (to ".hyperbole-videos")
# «hyperbole»			(find-es "hyperbole" "hyperbole")
# «hyperbole-eev-mail-1»	(find-es "hyperbole" "hyperbole-eev-mail-1")
# «hyperbole-eev-mail-2»	(find-es "hyperbole" "hyperbole-eev-mail-2")
# «hyperbole-mailing-lists»	(find-es "hyperbole" "hyperbole-mailing-lists")
# «hyperbole-videos»		(find-es "hyperbole" "hyperbole-videos")
# (find-es "hyperbole" "hyperbole-videos")






# (to "coding:")
# (find-fline "/tmp/emacs.info")
# (find-enode "Recognize Coding" "coding:")
# (find-enode "File Variables")

# (find-etag "universal-coding-system-argument" ":")
# (describe-function 'read-coding-system)
# (read-coding-system "Coding:")

# (find-fline "~/LATEX/desenhos.014")

# (find-elfile "term/internal.el" "Let the unibyte version behave as Emacs 19 did.")


# (find-efile "ffap.el")


# (find-etag "Info-goto-emacs-key-command-node")
# (find-etag "Info-file-list-for-emacs")
# (find-etag "Info-find-emacs-command-nodes")
# (find-elnode "Symbol Plists")

(symbol-plist 'kill-line)





#####
#
# gnuserv
# 2019sep01
#
#####

# «gnuserv» (to ".gnuserv")
# (find-sh "apt-file search gnuserv")
# https://www.emacswiki.org/emacs/GnuClient
# (find-status   "gnuserv")
# (find-vldifile "gnuserv.list")
# (find-udfile   "gnuserv/")

# (find-fline "/etc/emacs/site-start.d/50gnuserv.el")
# (find-fline "/usr/bin/dtemacs")
# (find-fline "/usr/bin/gnuattach.emacs")
# (find-fline "/usr/bin/gnuclient.emacs")
# (find-fline "/usr/bin/gnudoit.emacs")
# (find-fline "/usr/bin/gnuserv")
# (find-fline "/usr/lib/emacsen-common/packages/install/gnuserv")
# (find-fline "/usr/lib/emacsen-common/packages/remove/gnuserv")
# (find-fline "/usr/share/applications/gnuserv.desktop")
# (find-udfile "gnuserv/README.Debian")
# (find-udfile "gnuserv/README.gz")
# (find-udfile "gnuserv/changelog.Debian.amd64.gz")
# (find-udfile "gnuserv/changelog.Debian.gz")
# (find-udfile "gnuserv/changelog.gz")
# (find-udfile "gnuserv/copyright")
# (find-fline "/usr/share/emacs/site-lisp/gnuserv/devices.el")
# (find-fline "/usr/share/emacs/site-lisp/gnuserv/gnuserv-compat.el")
# (find-fline "/usr/share/emacs/site-lisp/gnuserv/gnuserv.el")
# (find-man "1 dtemacs")
# (find-man "1 gnuserv")
# (find-man "1 gnuattach.emacs")
# (find-man "1 gnuclient.emacs")
# (find-man "1 gnudoit.emacs")




#####
#
# gnuserv (old)
# 2001jan17
#
#####

# «gnuserv-old»  (to ".gnuserv-old")
# (find-angg ".emacs" "gnuserv")
# (gnuserv-start)

# (find-status "gnuserv")
# (find-vldifile "gnuserv.list")
# (find-fline "/usr/doc/gnuserv/")
# (find-fline "/usr/doc/gnuserv/README.gz")

# (find-fline "/usr/share/emacs/site-lisp/gnuserv/devices.el")
# (find-fline "/usr/share/emacs/site-lisp/gnuserv/gnuserv-compat.el")
# (find-fline "/usr/share/emacs/site-lisp/gnuserv/gnuserv.el")

# (eeman "1 gnuclient")
# (eeman "1 gnudoit")
# (eeman "1 gnuserv")

# (find-fline "/etc/emacs/site-start.d/50gnuserv.el")
# (find-sitelispfile "gnuserv/gnuserv.el")
# (find-sitelispfile "gnuserv/gnuserv.el" "(defun server-edit-files ")

#*
gnudoit '(pwd)'
gnudoit '(find-enode "Top")'
# gnuclient +4 ~/CRIM/011ideas
#*
# Interacting with code-c-d:
# (find-angg ".emacs" "code-c-ds")
cd $(gnudoit '(substitute-in-file-name (ee-knuthfile ""))')
echo $(gnudoit '(substitute-in-file-name (ee-knuthfile "tex/texbook.tex"))')
#*
lsof \
  | grep '^\(gnuserv\|emacs\)' \
  | cut -b1-8,26- \
  | grep -v /lib/ \
  | tee ~/o
# (find-fline "~/o")
#*

echo hello > /tmp/o
strace -o ~/s -s 90 -f gnuclient /tmp/o
# (find-fline "~/s")
#*
gnudoit "(server-edit-files '((1 . \"/tmp/o\")))"
#*
gnudoit "(server-edit-files '((1 . \"/tmp/o\")))\004"
#*




#####
#
# tabs
# 2022jun09
#
#####

# «tabs»  (to ".tabs")

Check the docs for indent-tabs-mode. When nil, spaces will be used instead
of tabs.

# (find-evardescr 'indent-tabs-mode)
# (find-evariable 'indent-tabs-mode)
# (find-efunctiondescr   'indent-tabs-mode)
# (find-efunction        'indent-tabs-mode)
# (find-elnode "Index" "* indent-tabs-mode:")
# (find-elnode "Primitive Indent")
# (find-efunctiondescr 'untabify)
# (find-efunction      'untabify)

# (setq indent-tabs-mode nil)



#####
#
# tab-bar-and-tab-line
# 2022sep15
#
#####

# «tab-bar-and-tab-line»  (to ".tab-bar-and-tab-line")
# See `tab-bar-tab-name-function' and `tab-line-tab-name-function', both
# of which allow you to write custom functions.
# (find-efunctiondescr 'tab-bar-menu-bar)
# (find-efunction      'tab-bar-menu-bar)
# (find-efile "tab-bar.el")
# (find-efile "tab-line.el")



#####
#
# display-line-numbers
# 2022sep23
#
#####

# «display-line-numbers»  (to ".display-line-numbers")
# (find-fline "~/LOGS/2022sep23.emacs" "relative offset")
# (find-fline "~/LOGS/2022sep23.emacs" "display-line-numbers" "relative offset")

# (find-efunctiondescr 'display-line-numbers-mode)
# (find-efunction      'display-line-numbers-mode)
# (find-hfunction      'display-line-numbers-mode)
# (find-enode "Display Custom" "M-x display-line-numbers-mode")
# (Info-goto-emacs-command-node    'display-line-numbers-mode)
# (find-elnode "Index" "* display-line-numbers-mode:")
# (find-evardescr      'display-line-numbers)
# (find-evardescr      'display-line-numbers "relative")
# (find-evariable      'display-line-numbers)

(defun eejump-44  () (display-line-numbers-mode 'toggle))
(defun eejump-440 () (setq display-line-numbers 'relative))




#####
#
# add-to-list
# 2024jul23
#
#####

# «add-to-list»  (to ".add-to-list")
# (find-angg ".emacs" "add-to-alist")
# (find-angg ".emacs" "auto-mode-alist")
# (find-efunctiondescr   'add-to-list)
# (find-efunction        'add-to-list)
# (find-elnode "Index" "* add-to-list:")

(setq mylist '("b" "c" "d"))
(add-to-list 'mylist "a")
(add-to-list 'mylist "e" 'append)
(add-to-list 'mylist "e" 'append 'eq)




#####
#
# show-trailing-whitespace
# 2021nov27
#
#####

# «show-trailing-whitespace»  (to ".show-trailing-whitespace")
# (find-evardescr                'show-trailing-whitespace)
# (find-enode "Variable Index" "* show-trailing-whitespace:")
# (find-efunctiondescr 'show-trailing-whitespace)
# (find-efunction      'show-trailing-whitespace)
# (find-enode "Useless Whitespace" "whitespace-mode")

<grym> https://www.emacswiki.org/emacs/WhiteSpace
<grym> i (setq whitespace-style '(face tabs newline trailing
       tab-mark
<grym> space-before-tab space-after-tab))
<grym> (global-whitespace-mode 1)




#####
#
# seen
# 2022sep22
#
#####

# «seen»  (to ".seen")
# (find-angg ".emacs" "seen")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
grep '^(seen' ~/.emacs
grep '^(seen' ~/.emacs | gsub.lua '[ -~]+' '(find-fline "~/.emacs" "%0")' | tee /tmp/o






#####
#
# xemacs21
# 2000oct13
#
#####

# «xemacs21»  (to ".xemacs21")

# (find-node "(xemacs21)Top")
# (find-node "(xemacs-21.1.10/xemacs)Top")
# (code-c-d "xe" "/usr/lib/xemacs-21.1.10/lisp/" "xemacs-21.1.10/xemacs")
# (code-c-d "xel" "/usr/lib/xemacs-21.1.10/lisp/" "xemacs-21.1.10/lispref")
# (code-c-d "xei" "/usr/lib/xemacs-21.1.10/lisp/" "xemacs-21.1.10/internals")
# (code-c-d "xefaq" "/usr/lib/xemacs-21.1.10/lisp/" "xemacs-21.1.10/xemacs-faq")

# (find-node "(xemacs21)Top")
# (find-xenode "")
# (find-xelnode "")
# (find-xeinode "")
# (find-xefaqnode "")

# (find-xelnode "Glyphs")

# (find-xemnode "Variable Index")

# (find-status "xemacs21")
# (find-status "xemacs21-basesupport")
# (find-status "xemacs21-bin")
# (find-status "xemacs21-mule")
# (find-status "xemacs21-mulesupport")
# (find-status "xemacs21-support")

# (find-vldifile "xemacs21.list")
# (find-vldifile "xemacs21-basesupport.list")
# (find-vldifile "xemacs21-bin.list")
# (find-vldifile "xemacs21-mule.list")
# (find-vldifile "xemacs21-mulesupport.list")
# (find-vldifile "xemacs21-support.list")





#####
#
# faces in terminals (emacs21)
# 2001feb15
#
#####

# «faces»  (to ".faces")
# (find-angg ".emacs" "faces")

# (find-elnode "Changing Properties")
# (find-elnode "Changing Properties" "To remove all text properties")
# (find-elnode "Overlay Properties" "`(foreground-color . COLOR-NAME)'")
# (find-efile "facemenu.el" "(cons 'foreground-color (car list))")
# (find-elnode "Examining Properties")
# (find-elnode "Face Functions")
# (find-ecvssrctag "Fput_text_property")
# (find-ecvsfile "src/fontset.c" "jit-lock-mode")

# (font-lock-mode)

What is the "fontified" text property, and why can't I change
properties of text when it is t?

# (find-efile "fast-lock.el")
# (find-efile "font-lock.el")
# (find-efile "lazy-lock.el")
# (find-e21file "lisp/jit-lock.el")

# (find-efile "faces.el")
# (symbol-plist 'eev-red)
# (symbol-plist 'font-lock-comment-face)
# (find-variable 'font-lock-comment-face)
# (find-efile "font-lock.el" "(defface font-lock-comment-face")

# (find-elnode "Faces for Font Lock")
# (sexp-face 'font-lock-comment-face)
# (sexp-face 'font-lock-string-face)
# (sexp-face 'font-lock-keyword-face)
# (sexp-face 'font-lock-builtin-face)
# (sexp-face 'font-lock-function-name-face)
# (sexp-face 'font-lock-variable-name-face)
# (sexp-face 'font-lock-type-face)
# (sexp-face 'font-lock-constant-face)
# (sexp-face 'font-lock-warning-face)


# (find-e21file "lisp/custom.el")
# (find-e21file "lisp/cus-edit.el")
# (find-e21file "lisp/cus-face.el")
# (find-e21file "lisp/widget.el")
# (find-e21file "lisp/wid-edit.el")
# (find-e21file "lisp/wid-browse.el")

# (find-elnode "Managing Overlays")
(defun oa () (interactive) (message "%S" (setq ovs (overlays-at (point)))))
(customize)




#####
#
# Make the face fixed-pitch look nicer on my setting
# 2021oct17
#
#####

# «face-fixed-pitch»  (to ".face-fixed-pitch")
# (find-elnode "Attribute Functions" ":family")
# (find-efaces 'fixed-pitch)
# (find-efaces 'fixed-pitch-serif)
# (find-eface-links 'fixed-pitch)
# (customize-face 'fixed-pitch)
# (customize-face 'fixed-pitch-serif)
# (find-fline "~/.emacs.custom" "(custom-set-faces")
# (find-fline "~/.emacs.custom" "(custom-set-faces" "(fixed-pitch")





#####
#
# set-string-face
# 2019aug06
#
#####

# «set-string-face» (to ".set-string-face")
# (find-elnode "Changing Properties")
# (find-elnode "Changing Properties" "put-text-property")
# (find-elnode "Changing Properties" "To remove all text properties")
# (find-elnode "Overlay Properties" "`(foreground-color . COLOR-NAME)'")
# (find-efile "facemenu.el" "(cons 'foreground-color (car list))")

(find-efaces)
(find-efaces "dired-marked")
(setq a "foobar")
(put-text-property 0 5 'face 'dired-marked a)
(put-text-property 0 5 'face 'dired-marked a)
a
(setq b (format "\nplic%sploc" a))
(insert b)
(find-estring b)

;; (find-eevfile "eev-explain.el" "ee-set-string-face")
;; (find-angg ".emacs" "find-epalette")

;; (find-estring (ee-set-string-property "abcde" 'face 'dired-marked))
;; (find-estring (ee-set-string-face "abcde" 'dired-marked))
;; (find-estring (ee-set-string-fg "abcde" "magenta2"))
;; (ee-set-string-property "abcde" 'face 'dired-marked)
;; (ee-set-string-property "abcde" 'face nil)

(defun ee-set-string-property (str property-name value)
  (put-text-property 0 (length str) property-name value str)
  str)

(defun ee-set-string-face (str &optional face)
  (ee-set-string-property str 'face face))

(defun ee-set-string-fg (str &optional fg)
  (ee-set-string-face str (cons 'foreground-color fg)))









#####
#
# How Emacs implements hyperlinks in the `describe-{function,key}' pages
# 2001jun13
#
#####

# «describe-xxx_hyperls»  (to ".describe-xxx_hyperls")

(emacs-lisp-mode)
(load-library "help.el")
(progn (describe-key "\C-hl")
       (switch-to-buffer "*Help*")
       (ee-goto-position "`hel")
       (setq my-tpa (text-properties-at (point)))
       (kill-buffer (current-buffer))
       (insert (pp my-tpa)))

;; Here's the value of my-tpa that I got, pretty-printed:
;;
(setq my-tpa '(face underline
	       help-xref ((lambda (arg)
			    (let ((location (find-function-noselect arg)))
			      (pop-to-buffer (car location))
			      (goto-char (cdr location))))
			  view-lossage)
	       mouse-face highlight))

(progn (describe-key "\C-hl")
       (switch-to-buffer "*Help*")
       (describe-key "\r"))

(find-efile "help.el" "defun help-make-xrefs")
(find-efile "help.el" "defun help-follow ")
(find-efile "help.el" "defun find-function-noselect ")

(progn (describe-key "\C-hl")
       (switch-to-buffer "*Help*")
       (ee-goto-position "`hel")
       (debug) (help-follow (point)))

(symbol-file 'view-lossage)
(find-function-search-for-symbol 'view-lossage nil "help.el")
(find-function-noselect 'view-lossage)

(find-efile "help.el" "find-function-noselect")

(defun find-efunction (symbol)
  (let ((location (find-function-noselect symbol)))
    (switch-to-buffer (car location))
    (goto-char (cdr location))))

(defun find-evariable (symbol)
  (let ((location (find-function-noselect symbol)))
    (switch-to-buffer (car location))
    (goto-char (cdr location))))

(find-efunction 'view-lossage)
(find-efunction 'code-c-d)
(find-efunction 'find-efile)

(find-efile "emacs-lisp/find-func.el" "defun find-function-search-for-symbol")


(progn (describe-variable 'sentence-end-double-space)
       (switch-to-buffer "*Help*")
       (ee-goto-position "Defined in `text")
       (debug) (help-follow (point)))



#####
#
# How emacs implements the customization buffers
# 2001nov21
#
#####

# «customization-buffers»  (to ".customization-buffers")
# (to "describe-xxx_hyperls")
# (find-angg ".emacs" "isearch-faces")
# (find-e21file "lisp/")
# (find-e21file "lisp/isearch.el")
# (find-e21file "lisp/isearch.el" "defgroup isearch-faces")
# (find-e21file "lisp/isearch.el" "defface isearch-lazy-highlight-face")
# (find-efunction 'defface)
# (find-e21file "lisp/cus-edit.el")
# (find-elnode "Customization")

(progn (customize)
       (ee-goto-position "Editing group: [Go to")
       (describe-key "\r"))

(progn (customize)
       (ee-goto-position "Editing group: [Go to")
       (widget-button-press (point))
       (ee-goto-position "Matching group: [Go to")
       (widget-button-press (point))
       (ee-goto-position "Isearch group: [Go to")
       (widget-button-press (point))
       (ee-goto-position "Isearch Faces group: [Go to")
       (widget-button-press (point))
       (ee-goto-position "Isearch Lazy Highlight Face:(sample) ["))

(progn (customize)
       (ee-goto-position "Editing group: [Go to")
       (setq my-cp (get-char-property (point) 'button)))
(insert (pp my-cp))

(progn (customize)
       (ee-goto-position "Editing group: [Go to")
       (debug)
       (widget-button-press (point)))

(find-efunction 'widget-button-press)

(customize-group 'editing)
(customize-group 'isearch-faces)




#####
#
# customize-option / customize-variable
# 2022may01
#
#####

# «customize-option»  (to ".customize-option")
# (customize-variable 'subed-default-subtitle-length)
# (customize-option   'subed-default-subtitle-length)
# (find-ealias         'customize-variable)
# (find-efunctiondescr 'customize-option)
# (find-efunction      'customize-option)
# (find-efunctiondescr 'customize-group)
# (find-efunction      'customize-group)
# (find-efunctiondescr 'custom-unlispify-tag-name)
# (find-efunction      'custom-unlispify-tag-name)

# (custom-unlispify-tag-name 'foo-bar)

# (find-evariable 'custom-guess-name-alist)
# (customize-variable 'custom-guess-name-alist)
# (find-customizevariable 'custom-guess-name-alist)
# (find-customizegroup
# (find-evariable 'ee-custom-re)
# (find-efunction 'find-customizegroup)



# (find-efunction 'find-customizegroup)

	 (symbol (intern (downcase (replace-regexp-in-string " " "-" name)))))





#####
#
# man
# 2001jun10
#
#####

# «man»  (to ".man")
# (man "find")
#   (switch-to-buffer "*Man find*")
#   (switch-to-buffer "*Messages*")
#   (kill-buffer "*Man find*")
#   (man "find")
# (describe-function 'man)
# (describe-variable 'Man-notify-method)
# (find-efile "man.el")
# (find-efile "man.el" "defun man ")
# (find-efile "man.el" "defun Man-notify-when-ready ")
# (find-efile "man.el" "defun Man-bgproc-sentinel ")
# (find-efile "man.el" "(eq Man-notify-method 'friendly)")

# Reload the ".el" to make the functions more debuggable:
# (insert (pp (symbol-function 'man-follow)))
# (load-library "man.el")

# (progn (debug) (man "find"))

# (find-efile "man.el" "defun Man-getpage-in-background ")
# (kill-buffer "*Man find*")
# (Man-getpage-in-background "find")
# (progn (debug) (Man-getpage-in-background "find"))



# (global-set-key "\M-D" 'edebug-defun)
# (find-elnode "Edebug")
# Main edebug-mode keys: [space] for "descend", "n" for "next", "q"
# for "quit" (= top-level).

# (find-efile "man.el" "defun man ")
# (find-efile "man.el" "defun Man-bgproc-sentinel ")
# (man "find")
# (load-library "man.el")

# (find-angg ".emacs" "c-mode-hook")
# (describe-function 'add-hook)
# (find-efile "subr.el" "defun add-hook ")

# Man-notify-method is only used when the buffer already exists.
# (describe-variable 'Man-notify-method)
# (let ((Man-notify-method 'pushy)) (man "find"))

# (find-efile "man.el" "set-process-sentinel")
# (find-elnode "Process Information")
# (find-elnode "Defining Functions" "defalias")
# (find-elnode "Function Cells" "Function: fset")






# (switch-to-buffer "*Man find*")
# (switch-to-buffer "*Messages*")

# (find-fline "~/tmp/man.el")
# (find-efile "man.el")

# (load-library "man.el")

(progn
  (load-library "~/tmp/man.el")
  (fset 'Man-bgproc-sentinel-orig (symbol-function 'Man-bgproc-sentinel))
  (defun Man-bgproc-sentinel (process msg)
    (let ((Man-buffer (if (stringp process) (get-buffer process)
			(process-buffer process))))
      (eval 'bgproc-code1)
      (Man-bgproc-sentinel-orig process msg)
      (eval 'bgproc-code2)))
  ;;
  (fset 'Man-notify-when-ready-orig (symbol-function 'Man-notify-when-ready))
  (defun Man-notify-when-ready (man-buffer)
     (switch-to-buffer man-buffer)
     (ee-goto-position "made up"))
  )

a.7


(progn
  (condition-case nil
      (kill-buffer "*Man find*")
    (error nil))
  (setq bgproc-code1 nil)
  (setq bgproc-code2 nil)
  '(setq bgproc-code2
	'(progn
	   (message "Hello from code2!\n")
	   (switch-to-buffer Man-buffer)
	   (ee-goto-position "taken")
	   ))
  (man "find")
  ;; (switch-to-buffer "*Messages*")
  )



;; (find-fline "~/tmp/man.el")

(let ((Man-notify-method 'pushy)) (man "find"))

(let ((Man-notify-method 'bully))
  (man "find")
  (switch-to-buffer "*Man find*")
  (ee-goto-position "all files"))







# (find-fline "~/tmp/man.el" "defun Man-bgproc-sentinel")
# (find-elnode "Handling Errors")

(load-library "~/tmp/man.el")
(progn (find-fline "~/tmp/man.el" "defun man ") (edebug-defun))
(progn (find-fline "~/tmp/man.el" "defun Man-bgproc-sentinel ") (edebug-defun))
(kill-buffer "*Man find*")
(man "find")
(let ((Man-notify-method 'pushy)) (man "find"))

(let ((Man-notify-method 'bully))
  (man "find")
  (switch-to-buffer "*Man find*")
  (ee-goto-position "all files"))

man-follow




#####
#
# Man-fontify-manpage
# 2019jun25
#
#####

# «Man-fontify-manpage» (to ".Man-fontify-manpage")
# (find-eev "eev-blinks.el" "find-sh")
# (find-eev "eev-blinks.el" "find-sh" "find-sh-man-fontify")
# (find-man "1 less")
# (find-man "1 less" "overstruck")
# (find-efile "man.el" "defun Man-fontify-manpage")
# (find-efaces "\nMan-underline ")
# (find-eface 'Man-underline)

# (find-eface-links 'Man-overstrike)
# (find-eface-links 'Man-reverse)
# (find-eface-links 'Man-underline)

# (find-efunction 'find-sh)

(defun find-sh-man-fontify (buffer-name &optional command &rest pos-spec-list)
  (apply 'find-eoutput-reuse
	 buffer-name
	 `(progn
	    (insert (shell-command-to-string ,(or buffer-name command)))
	    (goto-char (point-min))
	    (Man-fontify-manpage))
	 pos-spec-list))

(find-sh-man-fontify "ri File.new")

code &rest pos-spec-list)


(defun find-eoutput-reuse (buffer-name code &rest pos-spec-list)









# (find-e21lfile "gnus/gnus-audio.el")
# (find-e21lfile "gnus/earcon.el")

(play-sound-file sound-file)
(play-sound-file "/snarf/ftp/ftp.funet.fi/pub/Linux/PEOPLE/Linus/SillySounds/english.au")

# (code-c-d "ttsound" "$S/http/www.bbc.co.uk/education/teletubbies/goodies/sounds/")
# (find-ttsoundfile "")
(play-sound-file (ee-ttsoundfile "po/ehoh.wav"))
(play-sound-file (ee-ttsoundfile "po/uhoh.wav"))


# (find-e21file "lisp/")
# (find-e21file "lisp/image.el")
# (find-e21file "lisp/image-file.el")
# (find-e21file "lisp/faces.el")



# (find-efile "emacs-lisp/find-func.el")
# (find-function 'eev)
# (find-variable 'ee-delimiter-hash)





# (find-node "(elisp)Overlay Arrow")
e20glimpse overlay-arrow
# (find-efile "gud.el")
# (find-efile "emacs-lisp/edebug.el")



(defun foo () (insert "foo!"))
(defun bar () (insert "bar!"))
;; This is like "(defun foo <definition of bar>)".
(defalias 'foo 'bar)
(foo)
(bar)






;; (find-elnode "Autoload" "magic autoload comment")
;; (find-elnode "Comment Tips")
;; (find-elnode "Library Headers")
;; (find-elnode "Documentation Tips")
;; (find-elnode "Documentation Tips" "single-quotes")
;; (find-elnode "Keys in Documentation")
;; (find-es "escripts" "eev-tutorial")

;; 2000aug28: I'm trying to move a lot of the documentation in this
;; file to "docstrings"; if you're reading this file in Emacs and you
;; have already loaded it as a library then you may execute the Lisp
;; hyperlinks below with C-x C-e, and they should give you a good
;; notion of how to use all this. The texts you'll meet may not be too
;; friendly, though.
;;
;; (describe-function 'find-fline)
;; (describe-function 'find-node)
;; (describe-function 'ee-goto-position)
;; (describe-function 'eev)
;; (describe-function 'eeman)
;; (describe-function 'eecd)
;; (describe-function 'eeg)
;; (describe-function 'eev-bounded)
;; (describe-function 'eelatex)
;; (describe-function 'eelatex-bounded)
;; (describe-function 'eeg-bounded)
;; (describe-function 'end-of-line-then-eval-last-sexp)
;; (describe-function 'ee-bounded)
;; (describe-function 'code-c-d)
;; (describe-function 'inn)
;; (describe-function 'dff)

;; The main use for this is in connection with an Expect script that
;; is also called


The "generic interface" is so simple that it is very difficult
;; to describe... basically you save a block with `M-x eeg', and using
;; an Expect script that is also called eeg you can paste lines from
;; the saved block to an application one by one (it won't work easily
;; from shell-mode, however, as it needs to trap some keys). See the
;; docs in the script.




;;;;
;;;; «keys»  (to ".keys")
;;;; Convenient key shortcuts.
;;;; You need to unquote them to make them work, of course.
;;;; Note that by default M-e is `forward-sentence' and M-k is
;;;; `kill-sentence'; the default bindings will be overwritten
;;;; by these.
;;
;; (find-node "(elisp)Quoting")
;; (find-node "(elisp)Changing Key Bindings")





features


# (list-colors-display)
# (find-e21file "lisp/facemenu.el" "defun list-colors-display")
# (find-e21file "lisp/faces.el" "defun defined-colors")
# (find-e21file "lisp/term/tty-colors.el" "tty-color-alist")



cd /usr/src/emacs-21.0.93/
l +/yellow $(e21sglimpse -l yellow)



# (find-elnode "Documentation Basics")
# (find-e21file "lib-src/")
# (find-e21file "lib-src/make-docfile.c")

cd /usr/src/emacs-21.0.93/
lib-src/make-docfile lisp/simple.elc




#####
#
# splitting eev.el
# 2001jul11
#
#####

# «split_eev»  (to ".split_eev")
#*
rm -Rv /usr/src/eev/
mkdir  /usr/src/eev/
cd /usr/src/eev/
cp -v ~/eev-all.el .
filter EEV   < eev-all.el > eev.el
filter LINKS < eev-all.el > eev-links.el
filter SAVE  < eev-all.el > eev-save.el
filter MISC  < eev-all.el > eev-misc.el
laf

#*
# (find-fline "~/eev-all.el")
# (find-fline "/usr/src/eev/eev.el")
# (find-fline "/usr/src/eev/eev-links.el")
# (find-fline "/usr/src/eev/eev-save.el")
# (find-fline "/usr/src/eev/eev-misc.el")

# (find-fline "/usr/src/eev/")





#####
#
# erc
# 2001jul26
#
#####

# «erc»  (to ".erc")
# (find-angg ".emacs" "erc")
# (find-ewikipage "EmacsIRCClient")

# http://www.emacswiki.org/cgi-bin/wiki/CategoryChatClient
# http://www.emacswiki.org/cgi-bin/wiki/EmacsIRCClient
# http://www.emacswiki.org/cgi-bin/wiki/ErcEmacsChannel
# http://www.emacswiki.org/cgi-bin/wiki/ErcCvsFeatures
# http://www.emacswiki.org/cgi-bin/wiki/BitlBee
# Nightly CVS snapshots:          http://erc.sf.net/snaps
# Gateway to other chat services: http://www.bitlbee.org/

#*
# 2005jan10: erc-5.0
# http://voxel.dl.sourceforge.net/sourceforge/erc/erc-5.0.tar.gz
#
rm -Rv ~/usrc/erc-5.0/
tar -C ~/usrc/ \
  -xvzf $S/http/voxel.dl.sourceforge.net/sourceforge/erc/erc-5.0.tar.gz
cd     ~/usrc/erc-5.0/

#*
# rm -Rv /usr/src/erc/
cd $usr_src/
cvs     -d:pserver:[email protected]:/cvsroot/erc login
cvs -z3 -d:pserver:[email protected]:/cvsroot/erc co erc
cd $usr_src/erc/

#*
# http://erc.sourceforge.net/snaps/
# http://erc.sourceforge.net/snaps/erc-2004-12-05.tar.gz
rm -Rv ~/usrc/erc/
tar -C ~/usrc/ -xvzf $S/http/erc.sourceforge.net/snaps/erc-2004-12-05.tar.gz
cd     ~/usrc/erc/

make clean	|& tee omclean
make 		|& tee om

#*
cd ~/usrc/erc/
make clean
make |& tee om

#*
(add-to-list 'load-path "~/usrc/erc/")
(load-library "erc-auto")
(setq erc-server "irc.freenode.net" ; changed, was irc.openprojects.net
      erc-port 6667
      erc-nick '("edrx" "edrx2" "edrx3")
      erc-user-full-name "Eduardo Ochs <http://angg.twu.net/>"
      erc-coding-system-for-target '(("#debian-br" . utf-8))
      erc-pals '("jahnke" "edrx2")
      erc-current-nick-highlight-type 'keyword)
(erc-completion-mode 1)
(erc-select)

(erc-select "im.bitlbee.org")

(load-library "erc-match")
(load-library "erc-pcomplete")
#*

# (find-ercfile "erc-track.el")

# (find-fline "$usr_src/erc/")
# (find-fline "$usr_src/erc/erc.el")
# (find-fline "$usr_src/erc/erc.el" "defun erc ")

(add-to-list 'load-path (substitute-in-file-name "$usr_src/erc/"))
;; (load-library "$usr_src/erc/erc.el")
(load-library "erc.el")
(setq erc-server "irc.freenode.net" ; changed, was irc.openprojects.net
      erc-port 6667
      erc-nick '("edrx" "edrx2" "edrx3")
      erc-user-full-name "Eduardo Ochs <http://angg.twu.net/>")
(load-library "erc-match")
(load-library "erc-pcomplete")
(setq erc-keywords '("edrx"))
(erc-select)
(erc)

# (find-fline "$usr_src/erc/erc.el" "M-x customize-group RET erc RET")
# (customize-group 'erc)
# (find-evariable 'erc-use-info-buffers)

# (find-ercfile "")
# (find-ercfile "erc-pcomplete.el")

# (find-ercfile "erc.el")
# (find-ercfile "erc.el" "erc-email-userid")
# (find-ercfile "erc.el" "erc-email-userid" "erc-email-userid")
(setq erc-email-userid "[email protected]")
# (find-progoutput "ps ax | grep identd")
# (find-man "identd")



####
#
# accents in erc
# 2004apr04
#
####

# «erc-accents»  (to ".erc-accents")




#####
#
# environment
# 2016sep18
#
#####

# «environment» (to ".environment")
# (find-evardescr 'process-environment)
# (find-evardescr 'process-environment "the first one")
# (find-efunction-links 'setenv)
# (find-efunction-links 'getenv)
# (find-efunction 'setenv)
# (find-efunction 'getenv)
# (find-elnode "System Environment")
# (find-eev "eev-env.el" "ee-setenv")
# (find-eev "eepitch.el" "with-pager-cat")
# (find-angggrep "grep --color -nH -e env .emacs")
# (find-angg ".emacs" "ee-with-env")









#####
#
# setenv (with thanks to delYsid from #emacs)
# 2001nov22
#
#####

# «setenv»  (to ".setenv")

(list
  (setq a 20)
  (let ((a a)) (setq a 32))
  a)
;;
;; -> (20 32 20)

(list
  (progn (setenv "FOO" "FOO") (getenv "FOO"))
  (let ((process-environment process-environment))
    (progn (setenv "FOO" "BAR") (getenv "FOO")))
  (getenv "FOO"))
;;
;; -> ("FOO" "BAR" "BAR")

;; (find-elnode "Sequence Functions" "Function: copy-sequence")
;; (describe-variable 'process-environment)
;; (find-efunction 'setenv "setcdr")

(list
 (progn (setenv "FOO" "FOO") (getenv "FOO"))
 (let ((process-environment (copy-sequence process-environment)))
   (setenv "FOO" "BAR") (getenv "FOO"))
 (getenv "FOO"))
;;
;; -> ("FOO" "BAR" "FOO")



#####
#
# Fixing Info-find-emacs-command-nodes
# 2001nov29
#
#####

# (find-efunction 'Info-goto-emacs-key-command-node)
# (find-efunction 'Info-goto-emacs-command-node)
# (find-efunction 'Info-find-emacs-command-nodes "(info-file \"emacs")
# (find-evariable 'Info-file-list-for-emacs)
#
# (describe-key "\C-h\C-k")
# (Info-goto-emacs-key-command-node "\C-hk")
# (Info-find-emacs-command-nodes 'describe-key)

# (find-efunction 'Info-find-emacs-command-nodes "(info-file \"emacs")

# Must change "emacs" to "emacs-e20" on Debian systems... I haven't
# done it permanently, though, just tested that the new definition
# works.





#####
#
# speadsheets
# 2004apr05
#
#####

# «spreadsheets»  (to ".spreadsheets")
# http://www.emacswiki.org/cgi-bin/wiki/SpreadSheet



#####
#
# ses21
# 2004apr05
#
#####

# «ses»  (to ".ses")
#*
rm -Rv ~/usrc/ses21-031130/
tar -C ~/usrc/ \
   -xvzf $S/http/home.comcast.net/~jyavner/ses/ses21-031130.tgz
cd ~/usrc/ses21-031130/
#*
# (code-c-d "ses" "~/usrc/ses21-031130/")
# (find-sesfile "")
# (find-sesfile "ses.elc" "Emacs version 21.3.50.1")

(add-to-list 'load-path "~/usrc/ses21-031130/")
(autoload 'ses-mode "ses.el" "Spreadsheet mode" t)

(progn (find-sesfile "ses-example.ses")
       (ses-mode))




#####
#
# dismal
# 2000jan07
#
#####

# «dismal»  (to ".dismal")
#
rm -Rv /usr/src/dismal-0.92/
cd /usr/src/
tar -xvzf $S/ftp/ftp.dl.ac.uk/src/Unix/Gnu/EmacsBits/elisp-archive/packages/dismal-0.92.tar.Z
cd /usr/src/dismal-0.92/
make	|& tee om

#
rm -Rv /usr/src/dismal-1.4/
cd /usr/src/
tar -xvzf $S/http/ftp.nottingham.ac.uk/pub/lpzfr/dismal-1.4.tar.gz
cd /usr/src/dismal-1.4/

make	|& tee om
#


# (code-c-d "dismal" "/usr/src/dismal-1.4/" "/usr/src/dismal-1.4/dismal")
# (find-dismalfile "")
# (find-dismalnode "Top")
# (find-dismalfile "dismal-mode-defaults.el" "to the load-path")
# (find-dismalfile "dismal.el")
# (find-dismalfile "dismal-mode.doc")
# (find-dismalfile "om")

(load "/usr/src/dismal-1.4/dismal-mode-defaults.el")
(find-dismalfile "test.dis")

# Too old, messes up the keys on e20




#####
#
# packages
# 2013sep21 / 2019feb25
#
#####

# «packages» (to ".packages")
# (find-es "eev" "eev-emacs-package")
# (find-eev-install-intro "4. Eev as an ELPA package")
# (find-enode "Packages")
# (find-elnode "Packaging")
# (find-elnode "Packaging Basics" "Name")
# (find-elnode "Packaging Basics" "Version")
# (find-elnode "Packaging Basics" "Brief description")
# (find-elnode "Packaging Basics" "Long description")
# (find-elnode "Packaging Basics" "Dependencies")
# (find-elnode "Packaging Basics" "package-initialize")
# (find-elnode "Package Archives")
# (find-evardescr 'package-archives)
# (find-efaqnode "Packages that do not come with Emacs")
# (find-efile "emacs-lisp/package.el")

# (find-fline "~/.emacs.d/elpa/")
# (find-fline "~/.emacs.d/elpa/archives/gnu/"   "archive-contents")
# (find-fline "~/.emacs.d/elpa/archives/melpa/" "archive-contents")
# (find-epp package-archives)
# (find-epp package-archive-contents)
# (find-epp (car package-archive-contents))
# (find-eppp (mapcar 'car package-archive-contents))
# (find-epp (nth 0 package-archive-contents))
# (find-epp (nth 1 package-archive-contents))
# (find-epp (nth 2 package-archive-contents))
# (find-epp (nth 2 package-archive-contents))
# (find-epp (car (nth 2 package-archive-contents)))

# (find-epp           (assoc 'helm package-archive-contents))
# (find-epp     (cadr (assoc 'helm package-archive-contents)))
# (find-estruct (cadr (assoc 'helm package-archive-contents)))
# (find-efile "emacs-lisp/package.el" "(cl-defstruct (package-desc")
# (find-egrep "zgrep --color -nH -e package-desc package.el.gz ")
# (find-node "(cl)Top")
# (find-node "(cl)Structures")
# (find-epackage 'helm)
# (find-efunction 'describe-package)
# (find-epp (assoc 'helm package-archive-contents))
# (find-epp (cadr (assq 'helm package-alist)))
# (package-desc-dir (cadr (assq 'helm package-alist)))

(describe-package-1 'helm)



(package-desc-dir (assoc 'helm package-archive-contents))



(defun ee-all-package-names0 () (mapcar 'car package-archive-contents))
(defun ee-all-package-names  () (mapcar 'symbol-name (ee-all-package-names0)))

(defun ee-map-packages (f) (mapcar

(defun find-mapconcat-packages (f &optional sep)
  (find-estring (mapconcat f package-archive-contents (or sep ""))))

(find-mapconcat-packages (lambda (p) (format "%S\n" (car p))))








(find-estring (mapconcat (lambda (p) (format "%S" (car p))) package-archive-contents "\n"))

(format "%S" 'format)

(find-epp (mapcar 'car package-archive-contents))

# (list-packages)
# (find-efunction 'list-packages)


# (find-eev "eev-pkg.el")

# (find-efunction 'package-install)
# (find-enode "Package Installation")
# http://elpa.gnu.org/
# http://marmalade-repo.org/

# (find-eevfile "eev-blinks.el" "defun find-etp")
# (find-evardescr 'package-archives)

(require 'package)
(add-to-list 'package-archives
    '("marmalade" .
      "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)
(package-refresh-contents)

# (find-fline "~/.emacs.d/elpa/")
# (find-fline "~/.emacs.d/elpa/archives/")
# (find-fline "~/.emacs.d/elpa/archives/gnu/archive-contents")
# (find-fline "~/.emacs.d/elpa/archives/marmalade/archive-contents")
# (find-fline "~/.emacs.d/elpa/archives/melpa/archive-contents")




#####
#
# How the subdirs of ~/.emacs.d/elpa/ are added to the load-path
# 2019apr06
#
#####

# «packages-load-path» (to ".packages-load-path")
# (find-fline "~/.emacs.d/elpa/")
# (find-egrep "zgrep --color -nH -e elpa *")
# (find-egrep "zgrep --color -nH -e .emacs.d/elpa *")
# (find-egrep "zgrep --color -nH -e package-enable-at-startup *")
# (find-efile "startup.el" "(defun command-line")
# (find-efile "startup.el" "initialize the package system")





#####
#
# A dummy package, for tests
# 2014aug17
#
#####

# «package-dummy» (to ".package-dummy")
# (find-enode "Packages")
# (find-elnode "Packaging")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

# (find-fline "/tmp/dummy-0.1/")
rm -Rv /tmp/dummy-0.1/
mkdir  /tmp/dummy-0.1/
cd     /tmp/dummy-0.1/

cat > dummy-pkg.el <<'%%%'
(define-package "dummy" "0.1")
%%%

cat > dummy-a.el <<'%%%'
(defun dummy-a () (insert "a"))
(provide 'dummy-a)
%%%

cat > dummy-b.el <<'%%%'
(defun dummy-b () (insert "b"))
(provide 'dummy-b)
%%%

cd /tmp/
tar -cvf /tmp/dummy-0.1.tar dummy-0.1/*.el

# Now the package file should be ready,
# and this should work:
#
#   (package-install-file "/tmp/dummy-0.1.tar")

# (find-fline "~/.emacs.d/elpa/")
# (find-fline "~/.emacs.d/elpa/dummy-0.1/")
# (find-elpafile "dummy-0.1/")
# (find-elpafile "dummy-0.1/dummy-autoloads.el")
# (find-epackages)
# (find-epackage 'dummy)

# (find-elnode "Docs and Compilation" "#$")





#####
#
# built-in packages
# 2014aug17
#
#####

# «packages-built-in» (to ".packages-built-in")
# (find-epackages)
# (find-epackages "\n  ansi-color " t)
# (find-epackage 'ansi-color)




#####
#
# package-install-file
# 2019apr27 / 2019sep24
#
#####

# «package-install-file» (to ".package-install-file")
# (find-es "eev" "eev-tar-windows")
# (find-efile "emacs-lisp/package.el" "M-x package-install-file")
# (find-eev-install-intro "5.4. `package-install-file'")

# (find-fline "~/LOGS/2019sep24.emacs" "<tromey> M-x package-install-file")

<edrx> ok, let me try something more interesting. =) suppose that I've
    downloaded an elpa package as a .tar file - this one:
    http://elpa.gnu.org/packages/eev-20190902.tar - and I open the
    directory where I've downloaded it in dired. How do I install the
    package from the .tar file?
<edrx> there's a function called package-untar-buffer in package.el.gz, but
    when I tried to use it on W$ a few months ago it didn't work...
<tromey> M-x package-install-file
<tromey> then give it the .tar file name
<edrx> tromey: thanks! trying!
<edrx> tromey: worked!!! thanks =) =) =)
<tromey> cool






#####
#
# package-initialize
# 2019may31
#
#####

# «package-initialize» (to ".package-initialize")
# (find-gitemacsfile "lisp/")
# (find-gitemacsfile "lisp/emacs-lisp/package.el")
# (find-gitemacsfile "lisp/emacs-lisp/package.el" "(defcustom package-enable-at-startup")
# https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00927.html

# https://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00154.html Radon Rosborough
# https://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00433.html Radon 2


Maybe a better option is

    (when package-enable-at-startup
      (package-initialize))

or

    (unless package-activated-list
      (package-initialize))







#####
#
# A way to download and untar a .tar using Lisp only
# 2019jun26
#
#####

# «package-untar» (to ".package-untar")
# (find-efile "emacs-lisp/package.el" "defun package-untar-buffer")
# (find-efile "tar-mode.el")
# (find-efile "tar-mode.el" "defun tar-untar-buffer")
# (find-eev2-links 2 "eev2-upload")

# (find-node "(elisp)Declaring Functions")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/eev-current/
tar -cvzf /tmp/eev2.tgz $(cd /tmp/eev-g/ && git ls-files)
tar -cvf  /tmp/eev2.tar $(cd /tmp/eev-g/ && git ls-files)
laf       /tmp/eev2.tgz
laf       /tmp/eev2.tar

# (find-fline "/tmp/eev2.tar")

  (setq  eev-tar-dir   "/tmp/eev-ut/")
  (setq  eev-tar-fname "/tmp/eev-ut/eev2.tar")
  (setq  eev-tar-url   "http://angg.twu.net/eev-current/eev2.tar")
  (mkdir eev-tar-dir   t)
  (setq  eev-tar-contents nil)
  (setq  eev-tar-contents (find-urlretrieve0 eev-tar-url))
  (length eev-tar-contents)
  (ee-write-string eev-tar-contents eev-tar-fname)
  (find-2a nil '(find-fline eev-tar-fname 1 '(tar-untar-buffer)))
  (eek "C-x o C-x 4 0")
  (find-2a nil '(find-fline eev-tar-dir nil '(eek "g")))




#####
#
# package-check-signature
# 2019oct12
#
#####

# «package-check-signature» (to ".package-check-signature")
# (find-egrep "zgrep --color -nH -e check-signature emacs-lisp/*.el*")
# (find-efile "emacs-lisp/package.el" "(defcustom package-check-signature")
# https://emacs.stackexchange.com/questions/233/how-to-proceed-on-package-el-signature-check-failure/52823#52823




#####
#
# package-create-tar
# 2020oct22
#
#####

# «package-create-tar»  (to ".package-create-tar")
# http://elpa.gnu.org/packages/eev.html
# http://elpa.gnu.org/packages/eev-20201013.tar
# (find-eev2-links)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/eev-g
mkdir   /tmp/eev-g/
cd      /tmp/eev-g/ && git clone https://github.com/edrx/eev.git .
cd      /tmp/eev-g/
git checkout UTF-8

rm -Rfv  /tmp/eev-tar/
mkdir -p /tmp/eev-tar/eev-20201022/
cd       /tmp/eev-tar/eev-20201022/
cp -iv  /tmp/eev-g/* .
rm -v    /tmp/eev-tar/eev-20201022/ChangeLog
cd       /tmp/eev-tar/
tar -cvf /tmp/eev-tar/eev-20201022.tar eev-20201022/
Scp-np   /tmp/eev-tar/eev-20201022.tar [email protected]:public_html/tmp/
# (find-fline "/tmp/eev-tar/eev-20201022.tar")


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -fv /tmp/eev-20201022.tar
cd     /tmp/
wget  http://angg.twu.net/tmp/eev-20201022.tar
# (package-install-file "/tmp/eev-20201022.tar")


ls * > ../.files.new

cd /tmp/eev-tar/
tar -xvf $S/http/elpa.gnu.org/packages/eev-20201013.tar
cd /tmp/eev-tar/eev-20201013/
ls * > ../.files.old

# (find-tkdiff "/tmp/eev-tar/.files.old" "/tmp/eev-tar/.files.new")
# (find-efile "emacs-lisp/package.el")
# (find-efunction 'package-install-file)
# (find-eevfile "eev-pkg.el")
# (find-eevfile "eev.el" "Version:")




#####
#
# package-duplicates
# 2022mar16
#
#####

# «package-duplicates»  (to ".package-duplicates")

(progn
  (find-ebuffer "*Packages*")
  (setq ee-packages-no-properties
    (buffer-substring-no-properties (point-min) (point-max))

(find-estring ee-packages-no-properties)
(ee-write-string ee-packages-no-properties "/tmp/opackages0")
(find-fline "/tmp/opackages0")
(find-fline "/tmp/opackages1")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
sort opackages0 > opackages1
awk '{print $1}' opackages1 | uniq -d

# (find-man "uniq")




#####
#
# Exploring duplicate package in another way
# 2022nov25
#
#####

# «package-duplicates-2»  (to ".package-duplicates-2")
# (find-efunctiondescr 'find-eregionpp)
# (find-efunction      'find-eregionpp)
# (find-evardescr 'package-archive-contents)
# (find-evariable 'package-archive-contents)
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00601.html Edrx: question
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00602.html Stefan 2
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00603.html Edrx 3
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00604.html Stefan 4

(defun p () (interactive) (find-ebuffer "*Packages*"))
(defun sr (b e) (interactive "r") (setq sr (buffer-substring b e)))

How do package.el handles "duplicate packages"?
Hi list,

where can I find information on how package.el handles packages that
are listed twice in the buffer that `M-x list-packages' creates? The
file package.el is very big and I find its code hard to follow, so any
hints like "read the commments in the places foo and bar" would help a
lot...

Here is an example (to make this question more interesting)...
"afternoon-theme" is one of these packages, and if I define these two
functions

  (defun my-p1 () (interactive) (setq my-p1 (tabulated-list-get-id)))
  (defun my-p2 () (interactive) (setq my-p2 (tabulated-list-get-id)))

and I run `M-x my-p1' on the line with the first "afternoon-theme" and
`M-x my-p2' on the second, then I can inspect the variables my-p1 and
my-p2 with:

  (describe-variable 'my-p1)
  (describe-variable 'my-p2)

One of them has these entries,

  :version (0 1)
  :archive "nongnu"

and the other has these:

  :version (20140104 1859)
  :archive "melpa"

and if I run this,

  (setq my-ps
    (cl-loop for (name . pdescs) in package-archive-contents
             if (eq name 'afternoon-theme)
             collect (cons name pdescs)))

  (describe-variable 'my-ps)

I see only one entry in package-archive-contents - the one in MELPA...

  Thanks in advance,
    Eduardo Ochs
    http://angg.twu.net/#eev
    http://angg.twu.net/eepitch.html


Any hints?


Ah, I missed that!

Note the current docstring doesn't mention that one of the entries is
for nongnu and the other one is for melpa:

  https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/package.el#n1513

  (defvar package-archive-contents nil
    "Cache of the contents of all archives in `package-archives'.
  This is an alist mapping package names (symbols) to
  non-empty lists of `package-desc' structures.")

Anyway, if I change the cl-loop in my previous e-mail to this,

  (setq my-ps
    (cl-loop for (name . pdescs) in package-archive-contents
             if (> (length pdescs) 1)
             collect (cons name pdescs)))

it produces a list of the packages with duplicate entries, and I can
use that to compare the two entries.

Next question: is there a way to determine which of the entries -
nongnu or melpa - corresponds to a version that is more recent?

Thanks in advance! =)
  Eduardo Ochs
  http://angg.twu.net/#eev






#####
#
# package-vc-install
# 2022dec05
#
#####

# «package-vc-install»  (to ".package-vc-install")
# https://tony-zorman.com/posts/package-vc-install.html 2022-11-30 / 
# https://tony-zorman.com/posts/use-package-vc.html 2023may18
# https://www.reddit.com/r/emacs/comments/z9i4ce/exploring_packagevcinstall_as_an_alternative_to/
# (find-efunctiondescr 'package-vc-install)
# (find-efunction      'package-vc-install)
# (find-hfunction      'package-vc-install)

;; (find-enode "Fetching Package Sources")
(package-vc-install "https://github.com/edrx/eev")
(eev-beginner)

(require 'eev-load)
(eev-mode 1)

** 2024jan23:
**
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/fake-home-dir/
mkdir   /tmp/fake-home-dir/
cd      /tmp/fake-home-dir/

cat   > /tmp/fake-home-dir/.bashrc <<'%%%'
  export PS1="\$PWD(\\u:TMP)# "
%%%
cat   > /tmp/fake-home-dir/a.el    <<'%%%'
  (package-vc-install "https://github.com/edrx/eev")
  (eev-beginner)
  (find-fline "~/.emacs.d/elpa/eev/")
  (find-fline "~/.emacs.d/elpa/eev/ChangeLog")
  (find-eevfile "")
  (find-eevfile "ChangeLog")
  (find-eevfile "VERSION")
%%%

 export HOME=$PWD
 export SHELL=/bin/bash
 bash
  ls -lAF ~/a.el
  /home/edrx/bigsrc/emacs30/src/emacs -fn 6x13 a.el
 exit




#####
#
# package-vc-upgrade
# 2024mar10
#
#####

# «package-vc-upgrade»  (to ".package-vc-upgrade")
# (find-efunctiondescr  'package-vc-upgrade)
# (find-efunction       'package-vc-upgrade)
# (find-hfunction       'package-vc-upgrade)
# (find-efunction-links 'package-vc-upgrade-all)
# (find-efunctiondescr  'package-vc-upgrade-all)
# (find-efunction       'package-vc-upgrade-all)
# (find-hfunction       'package-vc-upgrade-all)




#####
#
# package-upgrade
# 2024feb22
#
#####

# «package-upgrade»  (to ".package-upgrade")
# (find-efunctiondescr 'package-upgrade)
# (find-efunction      'package-upgrade)
# (find-hfunction      'package-upgrade)
# (find-enode "Command Index" "* package-upgrade:")



#####
#
# package-recompile-all
# 2024jul22
#
#####

# «package-recompile-all»  (to ".package-recompile-all")
# (find-efunction-links 'package-recompile-all)
# (find-efunction       'package-recompile-all)
# (find-efunctionpp     'package-recompile-all)



#####
#
# package-get-descriptor
# 2024oct20
#
#####

# «package-get-descriptor»  (to ".package-get-descriptor")
# (find-efunction 'package-install)
# (find-efunction 'package-get-descriptor)
# (find-epackage-links '0x0)
# (find-efunction 'ee-package-desc)




#####
#
# ee-package-dir
# 2020sep29
#
#####

# «ee-package-dir»  (to ".ee-package-dir")
# (to "cl-defstruct")
# (find-eev "eev-elinks.el" "find-epackage-links")
# (find-efile "emacs-lisp/package.el" "(cl-defstruct (package-desc")

;; Tests: (ee-package-desc 'lua-mode)
;;        (ee-package-desc 'tetris)
;;        (ee-package-desc 'foo)
;; See:   (find-efile "emacs-lisp/package.el" "(cl-defstruct (package-desc")
;; Adapted from: (find-efunction 'describe-package-1)
;;               (find-efunction 'describe-package-1 "(let* ((desc ")
;;
(defun ee-package-desc (pkg)
"An internal function used by `ee-package-dir'."
  (or (if (package-desc-p pkg) pkg)
      (cadr (assq pkg package-alist))
      (let ((built-in (assq pkg package--builtins)))
	(if built-in
	    (package--from-builtin built-in)
	  (cadr (assq pkg package-archive-contents))))))

;; Tests: (ee-package-dir 'lua-mode)
;;        (ee-package-dir 'tetris)
;;        (ee-package-dir 'foo)
(defun ee-package-dir (pkg)
"Convert the name of the package PKG to the directory where it was installed."
  (let* ((desc (ee-package-desc pkg))
	 (dir (and desc (package-desc-dir desc))))
    (if (stringp dir)
	(replace-regexp-in-string
	 "[^/]$" "\\1/"
	 (ee-shorten-file-name dir)))))

;; (find-epackages)
;; (ee-package-desc '0x0)
;; (ee-package-dir  '0x0)
;; (ee-package-desc 'foo)
;; (ee-package-dir  'foo)
;; (ee-package-desc 'lua-mode)
;; (ee-package-dir  'lua-mode)
;; (ee-package-desc 'tetris)
;; (ee-package-dir  'tetris)


(find-estring
(let* ((alist (seq-take package-alist 30000))
       (psymbols (mapcar 'car alist))
       (pnames (mapcar 'symbol-name psymbols))
       (pnames (sort pnames 'string<))
       (bigstr (mapconcat 'identity pnames "\n"))
       )
  bigstr)
)




#####
#
# EPL - Emacs Package Library
# 2022mar29
#
#####

# «epl»  (to ".epl")
# http://github.com/cask/epl
# (find-git-links "http://github.com/cask/epl" "epl")
# (code-c-d "epl" "~/usrc/epl/")
# (find-eplfile "")
# (find-eplfile "epl.el")
# (find-eplfile "test/resources/")

# (find-epackage-links 'epl "epl" t)
# (find-epackage       'epl)
# (code-c-d "epl" "~/.emacs.d/elpa/epl-20180205.2049/")
# (find-eplfile "")

# (find-sh "locate lisp-mnt")
# (find-efile "emacs-lisp/lisp-mnt.el")




#####
#
# packages: archive-contents
# 2014oct11
#
#####

# «archive-contents» (to ".archive-contents")
# http://am-1.org/~ivan/packages-el/
# http://am-1.org/~ivan/packages-el/archive-contents
# (find-fline "~/packages-el/archive-contents")
# (find-fline "~/LOGS/2014oct11.emacs")




#####
#
# elp
# 2022nov25
#
#####

# «elp»  (to ".elp")
# (find-efunctiondescr 'elp-instrument-package)
# (find-efunction      'elp-instrument-package)
# (find-efile "emacs-lisp/elp.el")
# (find-fsbot-links "elp")



#####
#
# ELPA
# 2019apr06
#
#####

# «elpa» (to ".elpa")
# (find-efaqnode "Packages that do not come with Emacs")
# (find-es "eev" "eev-pkg-submit-to-ELPA")



#####
#
# elpa-git
# 2019sep07
#
#####

# «elpa-git» (to ".elpa-git")
# http://git.sv.gnu.org/r/emacs/elpa.git
# (find-git-links "http://git.sv.gnu.org/r/emacs/elpa.git")
# (find-git-links "http://git.sv.gnu.org/r/emacs/elpa.git" "elpagit")
# (find-efunction 'find-git-links)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/elpa/
cd      ~/usrc/
git clone http://git.sv.gnu.org/r/emacs/elpa.git
cd      ~/usrc/elpa/

git pull

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/usrc/elpa/

export PAGER=cat
git branch --list -a
git branch --list -a   |& tee /tmp/oelpabranches
git for-each-ref
git log --oneline --graph --all -20

git checkout externals/eev
git checkout externals/undo-tree

# (find-fline "~/usrc/")
# (find-fline "~/usrc/elpa/")
# (find-gitk  "~/usrc/elpa/")

cat /tmp/oelpabranches
cat /tmp/oelpabranches | grep remotes/origin/externals
cat /tmp/oelpabranches | grep remotes/origin/externals | cut -b 18-
cat /tmp/oelpabranches | grep remotes/origin/externals | cut -b 18- | tee /tmp/oelpabranches2

for i in $(cat /tmp/oelpabranches2); do
  echo $i
  git checkout $i
  grep yank-media *.el
done

git checkout externals/eev
git checkout externals/undo-tree

# (find-fline "~/usrc/")
# (find-fline "~/usrc/elpa/")
# (find-gitk  "~/usrc/elpa/")

# (code-c-d "elpagit" "~/usrc/elpa/")
# (find-elpagitfile "")
# (find-elpagitfile "packages/")
# (find-elpagitfile "COPYING" "GNU GENERAL PUBLIC LICENSE" "Version 3")
# (find-elpagitfile "copyright_exceptions")
# (find-elpagitfile "externals-list")
# (find-elpagitfile "externals-list" "eev")

# (find-elpagitsh "find .* * | sort")



#####
#
# gnu-elpa-keyring-update
# 2024aug03
#
#####

# «gnu-elpa-keyring-update»  (to ".gnu-elpa-keyring-update")
# https://www.reddit.com/r/emacs/comments/bn6k1y/updating_gnu_elpa_keys/ (2019)
# http://elpa.gnu.org/packages/gnu-elpa-keyring-update.html
# https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00063.html DSutton
# https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00064.html SMonnier
# https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00091.html SMonnier
# https://lists.gnu.org/archive/html/help-gnu-emacs/2024-05/msg00248.html DMasterson
# https://lists.gnu.org/archive/html/help-gnu-emacs/2024-06/msg00012.html SMonnier: multiple signatures
# https://stackoverflow.com/questions/78381013/failed-to-verify-signature-archive-contents-sig-problem-with-emacs (2024)
# (find-eetcgrep "grep --color=auto -nH --null -e package-check-signature NEWS*")
# (find-efunctiondescr 'package-check-signature)
# (find-efunction      'package-check-signature)
# (to "elpa-problems-sep2019")
# (to "elpa-problems-apr2020")
# (to "archive-contents.sig")

(progn
  (package-initialize)
  (package-refresh-contents)
  (package-install 'eev)
  )
 
;; If the progn above fails, run this and then run the progn above again:
(progn
  (package-initialize)
  (setq package-check-signature nil)
  (package-refresh-contents)
  (package-install 'gnu-elpa-keyring-update)
  (setq package-check-signature t)
  )

;; (find-epackage-links 'gnu-elpa-keyring-update "geku" t)







#####
#
# elpa-problems-sep2019
# 2019oct02
#
#####

# «elpa-problems-sep2019» (to ".elpa-problems-sep2019")
# (to "gnu-elpa-keyring-update")
# https://lists.gnu.org/archive/html/emacs-devel/2019-09/index.html
# https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00677.html
# https://www.reddit.com/r/emacs/comments/bn6k1y/updating_gnu_elpa_keys/
# http://elpa.gnu.org/packages/gnu-elpa-keyring-update.html
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwDrbsbQQFxXxSbBzMWqhdtWWpk answer this

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# Prepare msgs.tgz
# (find-fline "$S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/" "msgs.tgz")
# https://lists.gnu.org/archive/html/emacs-devel/2019-09/index.html
# https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00677.html
#
function emacsdevelurl () {
  printf https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg%05d.html $1
}
function emacsdevelfile () {
  printf msg%05d.html $1
}
rm -Rfv /tmp/2019-09/
mkdir   /tmp/2019-09/
cd      /tmp/2019-09/
for i in $(seq 0 677); do
  wget -nc $(emacsdevelurl $i)
done
tar -cvzf msgs.tgz msg*.html

mkdir -p $S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/
cd       $S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/
cp -v /tmp/2019-09/msgs.tgz .
tar -xvzf msgs.tgz

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "$S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/")
cd             $S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/
function emacsdevelurl () {
  printf https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg%05d.html $1
}
function emacsdevelfile () {
  printf msg%05d.html $1
}
function emacsdevelfilebody () {
  cat $(emacsdevelfile $1) | awk '
    /<!--X-BotPNI-->/ { BOTTOM = 1 }
    BOTTOM != 1 { print }
  '
}

# (find-man "grep")
for i in $(seq 0 677); do
  emacsdevelfilebody $i | grep -i --quiet ELPA && echo $(emacsdevelurl $i)
done

# (find-fline "$S/https/lists.gnu.org/archive/html/emacs-devel/2019-09/msg00077.html")

wget -nc $(emacsdevelurl  123)
laf      $(emacsdevelfile 123)

# (find-fline "/tmp/2019-09/")




#####
#
# M-x list-packages -> blah elpa.gnu.org blah: "incomprehensible buffer"
# 2020may02
#
#####

# «elpa-problems-apr2020»  (to ".elpa-problems-apr2020")
# (to "elpa-problems-sep2019")
# https://mail.google.com/mail/ca/u/0/#sent/QgrcJHsTkKxVQLtMDgfsSbmJPwGCNJrhTJb
# https://mail.google.com/mail/ca/u/0/#search/incomprehensible/FMfcgxwHNCrfXvvnFXJfqKqzVgzXPrpg
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-04/msg01276.html
# M-x list-packages -> blah elpa.gnu.org blah: "incomprehensible buffer"

Hi list,

is ELPA working for everyone?

I was trying to record a screencast about Emacs and I decided to
create a new user with no rcfiles, and run everything from his
account. I then ran "emacs" to invoke the default Emacs here - this is
a Debian Stable, and M-x emacs-version says this:

  GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version
  3.24.5) of 2019-09-23, modified by Debian

Then I tried M-x list-packages. It did not list anything from ELPA,
and gave this error:

  error in process sentinel: Error retrieving:
  https://elpa.gnu.org/packages/archive-contents "incomprehensible
  buffer"

I installed gnu-elpa-keyring-update and tried M-x list-packages again;
same error. I started emacs again and ran M-x list-packages again:
same thing.

I would love to know how to debug the functions in package.el but I
don't. Please send sexps! =\

Btw, the file

  /home/eduardo/.emacs.d/elpa/archives/gnu/archive-contents/.signed

contains this, but in a single line:

  Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019)
  <[email protected]> (trust undefined) created at
  2020-04-26T22:05:02+0100 using RSA

and I've uploaded the contents of

  /home/eduardo/.emacs.d/elpa/archives/gnu/archive-contents

to:

  https://0x0.st/ieQc.txt

I also tried to run slight variants of the tests above with an emacs26
compiled from the git repo with:

  git checkout emacs-26.3
  ./autogen.sh
  ./configure
  make

and it also couldn't access ELPA if I ran it from my test user.

When I ran emacses using my default user ("edrx") and loading my
(HUUUGE) ~/.emacs file they didn't have any problems accesing ELPA and
MELPA, but I didn't perform many tests with them to discover what code
in my ~/.emacs was, huh, how do I say?, "fixing the bug".

  Thanks in advance =/,
    Eduardo Ochs
    http://angg.twu.net/emacsconf2019.html
    http://angg.twu.net/#eev




#####
#
# elpa-problems-apr2020: tests, version 1
# 2020may02
#
#####

# «elpa-problems-apr2020-t1» (to ".elpa-problems-apr2020-t1")
# (find-efunction 'eechannel-TWU)
# (find-angg ".emacs" "8th-bit-is-meta")

* (eek "C-x 1")
* (toggle-frame-fullscreen)
* (size 127 56)
* (eechannel-xterm "TEST" "bash" "-geometry +785+0"))
su - eduardo
edrx
ls -lAF
rm -Rfv .emacs*
ls -lAF
ls -lAF .gnupg
find    .gnupg
which emacs
emacs --version
emacs -nw

exit

* (eek "C-x 1")
* (toggle-frame-fullscreen)

* (eek "C-x 1")
* (toggle-frame-fullscreen)
* (size 127 56)
* (eechannel-xterm "TEST" "su - eduardo" "-geometry +785+0"))
edrx
rm -Rfv .emacs*
rm -Rfv .gnupg
ls -lAF
emacs -nw


* (eek "C-x 1")
* (toggle-frame-fullscreen)

* (eek "C-x 1")
* (toggle-frame-fullscreen)
* (size 127 56)
* (eechannel-xterm "TEST" "su - eduardo" "-geometry +785+0"))
edrx
rm -Rfv .emacs*
rm -Rfv .gnupg
ls -lAF




Hi, sorry for the delay...

Long story short: the Emacs that comes in Debian Stable - 26.1 -
cannot access ELPA when we run `M-x list-packages', and:

  1) this MAY BE due to a quirk in
     <https://elpa.gnu.org/packages/archive-contents>,

  2) I can't find a workaround that I can recommend to beginners.

I'll write about 26.3 in another message.



Now: long story long. I rewrote my tests in a format - using eev-isms
- that lets me re-execute them again very quickly without or with
modifications. Here are the commands; note that I am running them in
Debian Stable (a.k.a. "Buster").

  su - eduardo
    <p455w0rd>
  rm -Rfv .emacs*
  rm -Rfv .gnupg
  ls -lAF
  emacs --version
  apt-cache show emacs
    # Version: 1:26.1+1-3.2+deb10u1
    # See also: https://packages.debian.org/buster/emacs

  cat > o <<'%%%'
  (list-packages)
  (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
  (list-packages)
  %%%

  emacs -nw o
    M-x list-packages


If I run `M-x list-packages' - or if I type C-e C-x C-e in the first
line - it does not list anything from ELPA and gives this error:

  error in process sentinel: Error retrieving:
  https://elpa.gnu.org/packages/archive-contents "incomprehensible
  buffer"

If I then run the (setq ...) above, as suggested here,

  https://www.reddit.com/r/emacs/comments/cdf48c/failed_to_download_gnu_archive/

nothing changes, in the sense that if I then execute the
`(list-packages)' in the third line with C-e C-x C-e I still don't get
anything from ELPA, and I get the error "incomprehensible buffer".

I was working on the script of a screencast that would start with
instructions for installing a package from ELPA, but I am quite
embarassed by this bug... so I interrupted everything to discuss the
bug.

Is anyone else here able to reproduce it? Are there any easy fixes?
Are there any easy fixes that you would recommend to beginners who
happen to be using Debian Stable? Compiling a more recent Emacs from
git is not an "easy fix"...

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/emacsconf2019.html










ls -lAF
rm -Rfv .emacs*
ls -lAF
ls -lAF .gnupg
find    .gnupg
which emacs
emacs --version
emacs -nw

exit






#####
#
# MELPA
# 2019apr06
#
#####

# «melpa» (to ".melpa")
# (to "nongnu-elpa")
# (find-angg ".emacs" "packages-melpa")
# https://github.com/melpa/melpa
# http://melpa.org/#/
# http://melpa.org/#/0x0
# https://melpa.org/#/getting-started

# (find-fline "~/LOGS/2019apr06.emacs")

<bpalmer> edrx: melpa is run completely independently of
          emacs-devel
<bpalmer> edrx: you add a package to it by submitting a pull
          request to their github repository; then a melpa
          maintainer will check out your package.
<bpalmer> edrx: see https://github.com/melpa/melpa




#####
#
# melpa-stable
# 2019sep29
#
#####

# «melpa-stable» (to ".melpa-stable")
# (find-es "markdown" "markdown-mode")
# https://stable.melpa.org/#/markdown-mode
# https://github.com/melpa/melpa/issues/6656 [proposal] Abolish MELPA Stable





#####
#
# marmalade
# 2019sep21
#
#####

# «marmalade» (to ".marmalade")
# (find-es "ocaml" "tuareg-marmalade")
# https://marmalade-repo.org/
# https://marmalade-repo.org/#news
# https://marmalade-repo.org/#download




#####
#
# nongnu-elpa
# 2021may25
#
#####

# «nongnu-elpa»  (to ".nongnu-elpa")
# https://elpa.nongnu.org/nongnu/
# https://elpa.nongnu.org/
# https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg00325.html to rms

  (require 'package)
  (package-initialize)
  (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/"))
  (add-to-list 'package-archives '("melpa"  . "https://melpa.org/packages/"))
  (package-refresh-contents)
  (package-install 's)
  (describe-package 's)




#####
#
# rectangles
# 2019oct13
#
#####

# «rectangles» (to ".rectangles")
# (find-enode "Rectangles")
# (find-enode "Picture Mode")
# (find-enode "Rectangles in Picture")
# (find-enode "Rectangles in Picture" "C-c C-k")
# (find-enode "Rectangles in Picture" "C-c C-y")
# (find-efile "textmodes/picture.el")
# (find-efile "textmodes/picture.el" "(defvar picture-mode-map")
# (find-efile "rect.el")
# (find-efile "rect.el" "(defvar rectangle-mark-mode-map")
# (find-efile "rect.el" "(defun rectangle-exchange-point-and-mark")
# (find-efile "rect.el" "(defun open-rectangle")
# (find-efile "rect.el" "(defun apply-on-rectangle")
# (find-epackage 'phi-rectangle)
# (find-epackage 'rectangle-utils)
# (find-epackage 'smart-region)

# (eek "C-x r C-h")

(defalias 'rmm 'rectangle-mark-mode)
(rectangle-mark-mode)

https://duckduckgo.com/?q=picture-mode+site%3Aemacswiki.org&ia=web
https://www.emacswiki.org/emacs/PictureMode
https://www.emacswiki.org/emacs/PictureModeTrailingWhitespaceTrick
https://www.emacswiki.org/emacs/RectangleMark
https://www.emacswiki.org/emacs/rect-mark.el
https://www.emacswiki.org/emacs/RectangleCommands
https://www.emacswiki.org/emacs/Justify_Rectangle
https://www.emacswiki.org/emacs/CuaMode




# (find-efile "rect.el" "(defun delete-rectangle-line ")
# (find-efile "rect.el" "(defun delete-rectangle ")
# (find-elnode "Columns" "move-to-column")
# (progn (move-to-column 70 t) (insert "@"))
# (find-efunctiondescr 'interactive)

(defun foo-rectangle-line (startcol endcol fill)
  (move-to-column startcol t)
  (insert "@"))

(defun foo-rectangle (start end &optional fill)
  (interactive "r\nP")
  (apply-on-rectangle 'foo-rectangle-line start end fill))

(defalias 'fr 'foo-rectangle)








#####
#
# Life
#
#####

# «life»  (to ".life")
# (find-efile "play/life.el")

(progn
  (setq my-rectangle
   '("@@ "
     " @@"
     " @ "
     ))
  (setq my-rectangle
   '(" @          "
     "@           "
     "@          @"
     "@          @"
     "@@@@@@@@@@@@"))
  (setq my-rectangle '("@@@@@@@@@@"))
  (life 0.15))

(defun life-insert-random-pattern ()
  (insert-rectangle my-rectangle)
  (insert ?\n))

(life 0.15)

(life 0)



#####
#
# artist-mode
# 2021aug28
#
#####

# «artist-mode»  (to ".artist-mode")
# (find-efunctiondescr 'artist-mode)
# (find-efunction      'artist-mode)




#####
#
# Box drawing characters
# 2021aug28
#
#####

# «box-drawing»  (to ".box-drawing")
# (find-epackage-links 'ascii-art-to-unicode "aa2u" t)
# (find-epackage       'ascii-art-to-unicode)
# http://www.gnuvola.org/software/aa2u/
# (code-c-d "aa2u" "~/.emacs.d/elpa/ascii-art-to-unicode-1.13/")
# (find-aa2ufile "")

(defun eu () (interactive) (find-angg "LATEX/dednat6/eoo-unicode.lua"))




#####
#
# box characters
# 2007jul22
#
#####

# «box-chars»  (to ".box-chars")
;; (find-echarsetchars 'mule-unicode-2500-33ff "212x")
;; (find-eleimfile "quail/sgml-input.el")
;; (find-eleimfile "quail/sgml-input.el" "&box")
;; (find-angg ".emacs" "find-eunicodeucs")

(find-eoutput-rerun "*chars*"
  '(progn
    (insert 299124 299174 299127
            299168 299180 299171
            299130 299177 299133
            299121 299120)
    (insert 10)
    (insert 299052 299084 299056
            299068 299100 299076
            299060 299092 299064
            299042 299040)
    (insert 10)
    (insert 299181 299182 299184 299183)
    (insert 10)
    (insert 342899 342896 342898 342897)
 ))

;; &boxDR; &boxHD; &boxDL;
;; &boxVR; &boxVH; &boxVL;
;; &boxUR; &boxHU; &boxUL;
;; &boxV;  &boxH;
;;
;; &boxdr; &boxhd; &boxdl;
;; &boxvr; &boxvh; &boxvl;
;; &boxur; &boxhu; &boxul;
;; &boxv;  &boxh;
;;
;; (What are the sgml codes for the round corners?)
;;
;; &darr; &larr; &rarr; &uarr;




#####
#
# ascii-art-to-unicode
# 2020feb16
#
#####

# «ascii-art-to-unicode» (to ".ascii-art-to-unicode")
# http://elpa.gnu.org/packages/ascii-art-to-unicode.html
# (find-epackage 'ascii-art-to-unicode)
# (find-elpafile "ascii-art-to-unicode-readme.txt")
# (find-elpafile "ascii-art-to-unicode-1.12/")
# http://www.gnuvola.org/software/aa2u/
# http://ergoemacs.org/emacs/emacs_ascii_diagram.html
# (find-epackage-links 'ascii-art-to-unicode)

# (find-dednat6file "dednat6/eoo.lua")

# See also:
# https://gist.github.com/jasonm23/4fc09e7a20e55ec21bc834658d0545b6 ibm-box-drawing-hydra.el




#####
#
# palette
# 2007nov11
#
#####

# «palette»  (to ".palette")
# (find-angg ".emacs" "find-epalette")

(while (re-search-forward "#?[A-Za-z0-9]+" nil 'no-error)
  (set-text-properties
     (match-beginning 0) (match-end 0)
     `(face (foreground-color . ,(match-string 0)))))

LightSeaGreen MediumAquamarine aquamarine DarkSeaGreen SeaGreen
MediumSeaGreen ForestGreen PaleGreen SpringGreen green
MediumSpringGreen GreenYellow YellowGreen LimeGreen LightGreen
OliveDrab DarkOliveGreen DarkKhaki khaki LightGoldenrod PaleGoldenrod
yellow gold goldenrod peru orange DarkOrange RosyBrown tan HotPink
PaleVioletRed MediumVioletRed VioletRed DeepPink magenta1 magenta
magenta2 magenta3
 #aabbcc



#####
#
# pair-tree: explorable box diagrams for lists
# 2021jan26
#
#####

# «pair-tree»  (to ".pair-tree")
# (to "boxy")
# (find-emacs-tangents-links "2021" "01" "25" "msg00108" "txt8FTTLCd37j")
# https://www.reddit.com/r/planetemacs/comments/l1yzd3/pairtreeel_an_emacs_lisp_cons_cell_explorer/
# https://github.com/zainab-ali/pair-tree.el
# (find-epackage-links 'pair-tree)
# (find-epackage       'pair-tree)
# (code-c-d "pairtree" "~/.emacs.d/elpa/pair-tree-20211219.1816/")
# (find-pairtreefile "")
# (pair-tree '((1 2) (3 "4" "a long string")))




#####
#
# bad.el
# 2024oct10
#
#####

# «bad.el»  (to ".bad.el")
# (find-git-links "https://dataswamp.org/~incal/bad.git" "bad")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/bad/
cd      ~/usrc/
git clone https://dataswamp.org/~incal/bad.git
cd      ~/usrc/bad/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/usrc/bad/
git pull

# (code-c-d "bad" "~/usrc/bad/")
# (find-badfile "")
# (add-to-list 'load-path "~/usrc/bad/")
# (require 'bad-demo-draw-here)

# (find-badfile "")
# (find-badfile "bad-demo-draw-here.el")




#####
#
# boxy
# 2024oct11
#
#####

# «boxy»  (to ".boxy")
# (to "pair-tree")
# (find-es "js" "TAG")
# (find-epackage-links 'boxy "boxy" t)
# (find-epackage       'boxy)
# (find-epackage-links 'boxy-headings "boxyheadings" t)
# (find-epackage       'boxy-headings)
# (code-c-d "boxyheadings" "~/.emacs.d/elpa/boxy-headings-2.1.6/")
# (code-c-d "boxy"         "~/.emacs.d/elpa/boxy-1.1.4/")
# (find-boxyheadingsfile "")
# (find-boxyfile "")




#####
#
# uniline
# 2024oct22
#
#####

# «uniline»  (to ".uniline")
# https://mail.google.com/mail/u/0/#inbox/QgrcJHsBtPsqscRXxHPMkCpkFvmFjkVGWVb
# https://github.com/tbanel/uniline
# (find-epackage-links 'uniline)
# (find-epackages      'uniline)
# (find-epackage       'uniline)
# (code-c-d "uniline" "~/.emacs.d/elpa/uniline-20241017.803/")
# (find-unilinefile "")
# (find-git-links "https://github.com/tbanel/uniline" "uniline")
# (code-c-d "uniline" "~/usrc/uniline/")
# (find-unilinefile "")



#####
#
# ElpaKit
# 2014oct11
#
#####

# «elpakit» (to ".elpakit")
# https://github.com/nicferrier/elpakit
# http://www.emacswiki.org/emacs/ElpaKit

# https://www.youtube.com/watch?v=pMlZ9zPAqbI
# (find-youtubedl-links "/sda5/videos/" "Multi-file_Emacs_ELPA_packaging_with_elpakit" "pMlZ9zPAqbI" ".mp4" "elpakit")
# (code-video "elpakitvideo" "/sda5/videos/Multi-file_Emacs_ELPA_packaging_with_elpakit-pMlZ9zPAqbI.mp4")
# (find-elpakitvideo)
# (find-elpakitvideo "0:00")

# (code-c-d "elpakit" "~/usrc/elpakit/")
# (find-elpakitfile "")
# (find-elpakitfile "README.creole")









#####
#
# spread
# 2001oct08
#
#####

# «spread»  (to ".spread")
# (find-shttpw3 "www.cis.upenn.edu/~bcpierce/papers/")
cp -v $S/http/www.cis.upenn.edu/~bcpierce/papers/spread.el ~/tmp/
# (load-library "~/tmp/spread.el")
# (find-fline "~/tmp/spread.el")
# (find-efunction 'describe-mode)
# (find-elnode "Current Buffer")
# (with-temp-buffer (spread-mode) (describe-mode))

# But it seems to need several updates to work with FSF Emacs20...




#####
#
# menu bar
# 2001dec29
#
#####

# «menu-bar»  (to ".menu-bar")
# (find-efunctiondescr 'menu-bar-mode)
# (find-efunction      'menu-bar-mode)
# (find-angg ".emacs" "key_bindings" "lambda")
# (find-efile "menu-bar.el" "define-key global-map [menu-bar tools]")
# (find-efile "menu-bar.el" "define-key menu-bar-tools-menu [speedbar]")
# (find-efile "menu-bar.el" "defvar menu-bar-tools-menu")
# (find-efile "menu-bar.el")
# (find-efile "subr.el" "global-map, esc-map, and ctl-x-map")
# (find-efile "subr.el")
# (find-efile "tmm.el" "defsubst tmm-add-one-shortcut")
# (find-efunction 'menu-bar-mode)
# (find-elnode "Creating Keymaps")
# (find-elnode "Index" "menu-bar")
# (find-elnode "Menu Bar" "'undefined")
# (find-elnode "Menu Bar")
# (progn (describe-bindings) (ee-goto-position ""))
# (progn (describe-variable 'global-map) (ee-goto-position "menu-bar"))

(menu-bar-mode t)
(menu-bar-mode nil)

(progn
  (defvar menu-bar-eev-menu (make-sparse-keymap "(eev)"))
  (define-key global-map [menu-bar eev] (cons "(eev)" menu-bar-eev-menu))
  (define-key menu-bar-eev-menu [end-of-line-then-eval-last-sexp]
    '("C-e + eval-last-sexp" . end-of-line-then-eval-last-sexp))
  (define-key menu-bar-eev-menu [eval-last-sexp]
    '("eval-last-sexp" . eval-last-sexp))
  (define-key menu-bar-eev-menu [tutorial-pt]
    '("Tutorial (pt_BR)" . (lambda () (interactive)
			     (find-eev "e/tutorial.pt.e"))))
  (define-key menu-bar-eev-menu [tutorial]
    '("Tutorial" . (lambda () (interactive)
		     (find-eev "e/tutorial.e"))))
  (define-key menu-bar-eev-menu [key-help]
    '("Key help" . (lambda () (interactive)
		     (find-eev "e/keys.e"))))
  ;;
  ;; Refresh the menu bar:
  (progn (menu-bar-mode nil) (menu-bar-mode nil))
  )



#####
#
# inspecting menu-bar entries
# 2004sep12 / 2022feb26
#
#####

# «menu-bar-entries»  (to ".menu-bar-entries")
# (find-emenubar-links)

# (find-ekeydescr [(menu-bar) edit props rm])
# (find-efunctiondescr 'remove-text-properties)
# (eek "M-h M-k  <menu-bar> <edit> <Text Properties> <ra>")
# (eek "M-h M-k  <menu-bar> <edit> <Text Properties>	;; facemenu-menu\n<ra>")
# (eek "M-h M-f  facemenu-remove-all")

;; (find-eppp (lookup-key global-map [menu-bar]))




#####
#
# map-keymap
# 2022feb26
#
#####

# «map-keymap»  (to ".map-keymap")

(let (l)
  (map-keymap (lambda (e d) (setq l (cons e l)))
	      (lookup-key global-map [menu-bar]))
  l)

(loop for k being the key-codes of
          menu-bar-file-menu collect k)



#####
#
# tool-bar
# 2019jun18
#
#####

# «tool-bar» (to ".tool-bar")
# (tool-bar-mode)
# (tool-bar-mode t)
# (tool-bar-mode 0)
# (tool-bar-mode 1)
# (find-efunctiondescr 'tool-bar-mode)
# (find-efunction      'tool-bar-mode)
# (find-elnode "Tool Bar" ":image")
# (find-egrep "zgrep --color -nH -e :image *.el*")
# (find-egrep "zgrep --color -nH -e tool-bar-add-item *.el*")
# (find-egrep "zgrep --color -nH -e tool-bar-local-item *.el*")
# (find-efile "info.el" "defvar info-tool-bar-map")
# (find-efunction 'tool-bar-local-item)

(find-epp (tool-bar--image-expression "up-node"))

locate up-node.xpm

# (find-gitemacsfile "etc/images/" "up-node.pbm")




#####
#
# beep (a.k.a. ding)
# 2020dec30
#
#####

# «beep»  (to ".beep")
# (find-elnode "Beeping")
# (find-evardescr 'visible-bell)
# (find-evardescr 'ring-bell-function)
# (setq visible-bell t)
# (setq visible-bell nil)
# (setq ring-bell-function nil)
# (setq ring-bell-function (lambda ()))
# (beep)

# All code that currently beeps should use visual bell instead:
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-04/msg00772.html
# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=1305

https://github.com/rougier/nano-bell
https://github.com/purcell/mode-line-bell

# (find-fline "~/LOGS/2024jul20.emacs" "(send-string-to-terminal (char-to-string ?\\C-g))")






#####
#
# Beep music
# 2002apr30
#
#####

# «beep-music»  (to ".beep-music")

;; (find-elnode "Math Functions")
;; (find-es "console" "setbell")
;; (find-efunctiondescr 'write-region)
;; Check permissions: (find-sh "ls -l /dev/tty /dev/tty?; echo; id")

(progn
  (defun myfreq (n) (* 440 (expt 2 (/ n 12.0)))) ; not used
  (defun mytone-a (n) (format "\e[10;%d]" (* 440 (expt 2 (/ n 12.0)))))
  (defun mytone (n) (mytone-a (+ n 3)))	; n is the number of semitones above C
  (defun myduration (secs) (format "\e[11;%d]" (* secs 1000.0)))
  (defun myecho (str &optional secs) (write-region str nil "/dev/tty0")
    (if secs (sit-for secs)))
  (defun myt (n secs) (myecho (concat (mytone n) (myduration secs) "\a") secs))
  (defun myts (n secs &rest rest)
    (myt n secs)
    (if rest (apply 'myts rest)))
)

;; A quick test: a scale
(progn (myt 0 0.1) (myt 2 0.1) (myt 4 0.1)
       (myt 5 0.1) (myt 7 0.1) (myt 9 0.1) (myt 11 0.1)
       (myt 12 0.1)
)

;; A very rough approximation to the "By This River" (by Brian Eno) -
;; just because I want to type the melodic lines into Lilypond and
;; practice them on the viola later.
;;
(let* ((do- -12) (re- -10) (mi- -8) (fa- -7) (sol- -5) (la- -3) (si- -1)
       (do 0) (re 2) (mi 4) (fa 5) (sol 7) (la 9) (si 11)
       (do+ 12) (re+ 14) (mi+ 16) (fa+ 17) (sol+ 19) (la+ 21) (si+ 23)
       (rest -60)					; very low -> inaudible
       (d 0.2) (d/2 (/ d 2)) (d/4 (/ d 4)) (2d (* 2 d))	; durations
       )
  (myts do+ d si d sol d mi d   la d do d re d mi d)
  (myts rest d do d rest d re d rest d mi d rest 2d)

  (myts do+ d si d sol d mi d   la d do d re d mi d)
  (myts rest d do d rest d re d rest d mi d rest 2d)

  (myts sol 2d fa d mi d rest d)
  (myts mi d mi d fa d sol d fa d mi d fa 2d mi d rest d)

  (myts sol 2d fa d mi d rest d)
  (myts mi d mi d fa d sol d)
  (myts fa d mi d fa d mi d)
  (myts re d do d re d
        mi (* 1.75 d) rest d/4
        re (* 1.75 d) rest d/4
        do (* 1.75 d) rest d/4
	)
  (myts do d si- d do d si- d do d la- 2d)
)




#####
#
# async
# 2024may11
#
#####

# «async»  (to ".async")
# (find-epackage-links 'async "async" t)
# (find-epackages      'async)
# (find-epackage       'async)
# (code-c-d "async" "~/.emacs.d/elpa/async-20240323.1912/")
# (find-asyncfile "")
# (find-asyncfile "dired-async.el")
# https://github.com/jwiegley/emacs-async



#####
#
# dired
# 2002may01
#
#####

# «dired»  (to ".dired")
# (find-enode "Dired")
# (find-ekeymapdescr dired-mode-map)
# (find-ekeymapdescr dired-mode-map "% m")
# (find-efunctiondescr 'dired-mark-files-regexp)
# http://yummymelon.com/devnull/enhancing-dired-sorting-with-transient.html
# https://lmno.lol/alvaro/the-dired-abstraction
# https://www.reddit.com/r/emacs/comments/1etlt7e/some_findings_on_the_dired_abstraction/
# https://lobste.rs/s/zugavw/dired_abstraction

(find-fline "~/2017.2-C2/" 1 '(eek "% m jpg RET t k"))
(progn (find-fline "~/2017.2-C2/")
  (dired-mark-files-regexp "jpg")
  (dired-toggle-marks)
  (dired-do-kill-lines)
  )

;; In dired, to show only some files (walter's hint):
;; % m regexp RET t k

;; (find-efunction 'dired-do-kill-lines)
;; (find-efunction 'dired-mark-files-regexp)
;; (find-efunction 'dired-mark-files-regexp "string-match")
;; (find-efile "dired.el" "define-key map \"%m\"")

(progn
  (find-fline "$ES/")
  (dired-mark-files-regexp "^a.*")
)

(progn
  (find-fline "$ES/")
  (dired-mark-files-regexp "^\\(a.*\\|c.*\\)")
  (dired-do-toggle)
  (dired-do-kill-lines)
)

https://www.reddit.com/r/emacs/comments/t4gm6c/newish_package_diredcopypaste/




#####
#
# wdired
# 2023dec16
#
#####

# «wdired»  (to ".wdired")
# (find-enode "Wdired")
# (find-efile "wdired.el")
# (find-angg ".emacs" "wdired")
# (find-hvariable   'dired-mode-map)
# (find-ekeymapdescr dired-mode-map)




#####
#
# dired-marker-char
# 2022jul01
#
#####

# «dired-marker-char»  (to ".dired-marker-char")
# (find-evariable 'dired-marker-char)
# (find-egrep "grep --color=auto -nH --null -e marker-char dired.el")

(defun my/dired-toggle-mark ()
  "Implementation note: Dired literally searches for
dired-marker-char to determine if a file is marked or not.
#'dired-get-marked-files returns the file at point even if it's
not marked, thus unusable."
  (interactive)
  (let ((file (dired-file-name-at-point))
        (first-char (string-to-char (buffer-substring-no-properties
                                     (point-at-bol) (1+ (point-at-bol))))))
    (if (= first-char dired-marker-char)
        (dired-unmark file)
      (dired-mark file))))

(let ((dired-marker-char ?!)) (my/dired-toggle-mark))


# «find-dired-eek» (to ".find-dired-eek")
# (find-angg ".emacs" "find-dired-eek")




#####
#
# dired-listing-switches
# 2021feb17
#
#####

# «dired-listing-switches»  (to ".dired-listing-switches")
# (find-angg ".emacs" "dired-sort")
# (find-man "1 ls" "-h, --human-readable")
# (find-evardescr 'dired-listing-switches)
# (find-efile "dired.el" "s" "'dired-sort-toggle-or-edit")
# (find-efunctiondescr 'dired-sort-toggle-or-edit)
# (find-efunction      'dired-sort-toggle-or-edit)
# (defun dired-human () (interactive) (dired-sort-other "-alh"))

;; <find-dired-listing-switches-links>
;; Skel: (find-find-links-links-new "dired-listing-switches" "switches" "")
;;
(defun find-dired-listing-switches-links (&optional switches &rest pos-spec-list)
"Visit a temporary buffer containing hyperlinks for dired-listing-switches."
  (interactive)
  (setq switches (or switches "{switches}"))
  (apply
   'find-elinks
   `((find-dired-listing-switches-links ,switches ,@pos-spec-list)
     ;; Convention: the first sexp always regenerates the buffer.
     (find-efunction 'find-dired-listing-switches-links)
     (setq dired-listing-switches ,dired-listing-switches)
     (setq dired-listing-switches "-al")
     (setq dired-listing-switches "-alh")
     (find-evardescr 'dired-listing-switches)
     )
   pos-spec-list))

(defalias 'dls 'find-dired-listing-switches-links)

# (find-man "ls")
dired-listing-switches






#####
#
# dired-do-async-shell
# 2021oct09
#
#####

# «dired-do-async-shell»  (to ".dired-do-async-shell")
# (find-efunctiondescr 'dired-do-async-shell-command)
# (find-efunction      'dired-do-async-shell-command)



#####
#
# dired-jump
# 2023mar06
#
#####

# «dired-jump»  (to ".dired-jump")
# (find-efunction 'dired-jump)
# (find-efunction 'dired-goto-file)



#####
#
# dired-get-marked-files
# 2023apr04
#
#####

# «dired-get-marked-files»  (to ".dired-get-marked-files")
# (find-angg "LUA/Quadros1.lua")

(defun m () (interactive) (find-epp (dired-get-marked-files)))
(defun m () (interactive) (find-epp (dired-get-marked-files)))
(defun m () (interactive) (find-estring (mapconcat 'identity (dired-get-marked-files) "\n")))



#####
#
# dired-external-drives
# 2024feb20
#
#####

# «dired-external-drives»  (to ".dired-external-drives")
# https://irreal.org/blog/?p=11984 Opening Dired On External Drives
# https://mbork.pl/2024-02-17_Opening_external_drives_in_Dired



#####
#
# dired-hacks
# 2024sep19
#
#####

# «dired-hacks»  (to ".dired-hacks")
# (find-epackage-links 'dired-hacks-utils)
# (find-epackages      'dired-hacks-utils)
# (find-epackage       'dired-hacks-utils)
# (code-c-d "diredhacksutils" "~/.emacs.d/elpa/dired-hacks-utils-20240629.1906/")
# (find-diredhacksutilsfile "")

# https://github.com/Fuco1/dired-hacks
# (code-c-d "diredhacks" "~/usrc/dired-hacks/")
# (find-diredhacksfile "")

# (find-epackage-links 'assess "assess" t)

# (package-vc-install "https://github.com/Fuco1/dired-hacks")
# (find-epackage-links 'dired-hacks)
# (code-c-d "diredhacks" "~/.emacs.d/elpa/dired-hacks/")
# (find-diredhacksfile "")
# (find-diredhacksfile "tests/test-dired-collapse.el" "(require 'assess)")

;; (find-eaproposv "dired-")
;; (find-eaproposv "dired-.*-map")
# (find-diredhacksgrep "grep --color=auto -nH --null -e dired-filter *.el")
# (require 'dired-filter)
# (find-hfunction 'dired-filter-by-extension)





#####
#
# a macro for debugging
# 2002may07
#
#####

# «SAR»  (to ".SAR")
# (find-elnode "Macros")
# (find-elnode "Expansion")
# (find-elnode "Eval During Expansion")
# (find-angg ".emacs" "macros")

(progn
  (defmacro SAR (&rest rest)
    (insert (format "%S\n" rest))
    rest)
  (SAR + (* 2 3) (* 4 5))
)

(progn
  (defmacro SAR (&rest rest)
    (message "%S\n" rest)
    rest)
  (SAR + (* 2 3) (* 4 5))
)

(switch-to-buffer "*Messages*")

;; Oops, the second def bugs on emacs21.2.1, but I've been told that
;; it works on the CVS'ed version



#####
#
# Syntax tables
# 2002aug19
#
#####

# «syntax-tables»  (to ".syntax-tables")
# «trailing-whitespace-bug»  (to ".trailing-whitespace-bug")
# A demo of the nasty bug that almost made me stay with emacs20:
#*
# (find-eevfile "eeg4")
# (find-eevfile "libeeg/k")

cat > $EEG <<'%%%'
loadeeglibs all ;# (find-angg "eev/libeeg/all")
k M-x p i c t u r e - m o d e ret
k C-q C-o
# k C-c C-c
k M-x d e l e t e - t r a i l i n g - w h i t e s p a c e ret
k M-x p i c t u r e - m o d e - e x i t ret
k C-x C-c
%%%

# (find-enode "Option Index")
# (find-efunction 'picture-mode-exit)
# (find-efunction 'delete-trailing-whitespace)
eeg4 emacs21 -nw /tmp/t
eeg4 emacs21 -nw --no-init-file /tmp/t

#*
# (find-elnode "Syntax Table Functions" "Function: char-syntax")
# (string (char-syntax ? ))
# (string (char-syntax ?å))
# (string (char-syntax ?-))
# (describe-syntax)
# (find-efunction 'make-syntax-table)
# (describe-function 'copy-syntax-table)
# (find-elnode "Standard Syntax Tables")
# (describe-function 'standard-syntax-table)
# (find-efile "case-table.el")
# (find-efile "case-table.el" "(modify-syntax-entry c syntax (standard-syntax-table))")

# (find-elnode "Function Cells")

(if (not (fboundp 'original-make-syntax-table))
  (defalias 'original-make-syntax-table 'make-syntax-table))
;; And then create a wrapper around this, which I'm not going to do now



# 2004jan19
# Two ways to get around the bug:
# First way: changing all the standard syntax tables.
#
# (find-elnode "Standard Syntax Tables")
# (find-elnode "Standard Syntax Tables" "standard-syntax-table")
# (find-elnode "Syntax Table Functions")
# (find-elnode "Syntax Table Functions" "modify-syntax-entry")

(defun fix-syntax-table (&optional sdescr) (interactive)
  (if (not sdescr)
      (setq sdescr "w"))
  (mapc (lambda (i) (modify-syntax-entry i sdesc))
	'(1 2 3 4 5 6 7
	    11 12
	    14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31))
  (let ((i 128))
    (while (< i 160)
      (modify-syntax-entry i sdesc)
      (setq i (1+ i)))))

(with-syntax-table (standard-syntax-table) (describe-syntax))
(with-syntax-table text-mode-syntax-table  (describe-syntax))

# (find-elnode "Iteration")

# (with-syntax-table (standard-syntax-table) (describe-syntax))
# (with-syntax-table text-mode-syntax-table  (describe-syntax))
# (find-ecvsfile "src/syntax.c" "DEFUN (\"standard-syntax-table\"")
# (find-efile "textmodes/text-mode.el" "setq text-mode-syntax-table")

# (find-elnode "Advising Functions")
# (find-efunction 'defadvice)





#####
#
# face glyphs on console mode: bug on line wrapping
# 2002sep06
#
#####

# «face-glyph-bug»  (to ".face-glyph-bug")
#*
# (find-elnode "Non-ASCII in Strings")
# (find-elnode "Truncation" "`\\'")
cat > /tmp/bug <<'%%%'
(defun glyph-set-face (disptable disptablepos vtchar face)
  (aset disptable disptablepos
        (vector (if face (logior vtchar (ash (face-id face) 19))
                  vtchar))))

(progn (make-face 'glyph-face-red)
       (set-face-foreground 'glyph-face-red "red")
       (glyph-set-face standard-display-table 15 ?* 'glyph-face-red)
       )

(insert (concat "0123456789012345678901234567890123456789"
                "012345678901234567890123456789012345678" "\x0F"
                "0123456789"))
%%%
emacs21 --no-init-file -nw /tmp/bug

#*




#####
#
# string glyph bug on emacs21
# 2002sep06
#
#####

# «emacs21-string-glyph-bug»  (to ".emacs21-string-glyph-bug")
# (find-es "console" "glyphs512")
# (find-man "console_codes" "ECMA-48 Set Graphics Rendition")
# (find-man "console_codes" "ESC % @")
# (find-man "console_codes" "ESC % G")
# (find-man "7 utf-8")

#*
cat > /tmp/bug <<'%%%'
(progn

(defun glyph-needs-utf8 (vtchar)
  (or (< vtchar 32) (>= vtchar 256) (= vtchar 155)))

(defun glyph-as-utf8-string (vtchar)
  (if (glyph-needs-utf8 vtchar)
      (format "\e%%G\xef%c%c\e%%@"
              (+ 128 (logand (lsh vtchar -6) 7))
              (+ 128 (logand vtchar 63)))
    (format "%c" vtchar)))

(defun glyph-string (vtchar colorstr)
  (if colorstr (format "\e[%sm%s\e[m" colorstr (glyph-as-utf8-string vtchar))
    (glyph-as-utf8-string vtchar)))

(defun glyph-set-string (disptable disptablepos vtchar colorstr)
  (aset disptable disptablepos
        (vector (create-glyph (glyph-string vtchar colorstr)))))

(glyph-set-string standard-display-table 15 ?* "31")
(glyph-set-string standard-display-table 129 129 "34")
(insert "\x0F")
(insert "\x81")
)
%%%
emacs21 --no-init-file -nw /tmp/bug

#*
# Oops, this seems to work ok on 21.2.1...





#####
#
# Nuking backspaces (in manpages and such)
# 2002oct07
#
#####

# «backspaces»  (to ".backspaces")
# (find-efile "man.el" "defconst Man-sysv-sed-script")

# (find-es "mail" "mutt")




#####
#
# isearch
# 2021may12
#
#####

# «isearch»  (to ".isearch")
# (find-enode "Incremental Search")
# (find-eapropos "isearch")
# (find-eapropos "find-.*keymap")
# (find-evariable 'isearch-mode-map)
# (find-ekeymapdescr isearch-mode-map "toggle-regexp")
# (find-ekeymapdescr isearch-mode-map "isearch-query-replace-regexp")




#####
#
# query-replace
# 2021oct22
#
#####

# «query-replace»  (to ".query-replace")
# (find-angg ".emacs" "fooi")
# (find-angg ".emacs" "fooi-re")

# (find-efunctiondescr 'query-replace)
# (find-efunction      'query-replace)
# (Info-goto-emacs-command-node 'query-replace)
# (find-enode "Command Index" "* query-replace:")
# (find-evardescr   'query-replace-map)
# (find-evariable   'query-replace-map)
# (find-ekeymapdescr query-replace-map)




#####
#
# ee-isearch
# 2002nov24
#
#####

# «ee-isearch»  (to ".ee-isearch")
# (find-angg ".emacs" "ee-isearch")
# (key-binding "\C-s")
# (where-is 'isearch-forward)
# (find-efunction 'isearch-forward)
# (find-efunction 'isearch-repeat)
# (find-efunction 'isearch-update-ring)

(progn (isearch-update-ring "search-ring")
       (find-efile "isearch.el"))

(progn (isearch-update-ring "find")
       (isearch-forward))

# (describe-function 'isearch-forward)
# (find-efunction 'isearch-forward "isearch-mode t")
# (find-efunction 'isearch-mode)
# (find-evariable 'isearch-mode-map)
# (find-evariable 'isearch-mode-map "C-s")
# (find-efunction 'isearch-repeat-forward)

(progn (isearch-update-ring "find")
       (isearch-mode t nil nil t))

(progn (isearch-update-ring "find")
       (isearch-mode t nil nil nil)
       (isearch-repeat-forward))

(defun ee-isearch (string)
  (isearch-update-ring string)
  (isearch-mode t nil nil nil)
  (isearch-repeat-forward))

(ee-isearch "find")




#####
#
# ee-isearch-regexp
# 2003jul04
#
#####

# «ee-isearch-regexp»  (to ".ee-isearch-regexp")
# (find-angg ".emacs" "ee-isearch")
# (find-angg ".emacs" "ee-isearch-regexp")
# (find-efunction 'isearch-update-ring)
# (find-efunction 'isearch-forward-regexp)
# (find-evariable 'isearch-mode-map "Define M-C-s and M-C-r like")

(isearch-update-ring "find-e[lv]" t)
regexp-search-ring

(progn (isearch-update-ring "find-e[lv]" t)
       (isearch-mode t t)
       (isearch-repeat-forward))

(ee-isearch "find-e[lv]" t)
(ee-isearch-regexp "find-e[lv]")




#####
#
# calendar and diary
# 2002dec03 / 2019jan27
#
#####

# «calendar»  (to ".calendar")
# «diary»  (to ".diary")
# (find-angg ".emacs" "ee-calendar-generate")
# (find-enode "Calendar/Diary")
# (find-enode "Diary")
# (find-efunction 'calendar-generate)
# (find-angg "LUA/exifdatetime.lua" "ee-calendar-generate")

# (find-evariable 'diary-file)
# (find-evariable 'diary-file "not in one the above formats are ignored")
# (find-elfile "calendar/calendar.el")
# (find-elfile "calendar/diary-lib.el")
# (find-elfile "calendar/cal-french.el" "Messidor")

# (find-fline "~/diary")

#*
# If you don't want to overwrite your real ~/diary then abort NOW!
read
cat > ~/diary <<'%%%'
# (find-es "emacs" "diary")
# (calendar)
# (diary 7)

dec 04, 2002: (quarta)
	18:00: aula de viola; combinar o lance do livro com o Beto

dec 06, 2002: (sexta)
	10:00: meu seminário na PUC
	14:00: Técnica Alexander

dec 07, 2002: (sábado)
	20:00: Sarau na casa do Thiers
	20:00-24:00: Jam session
%%%

#*




#####
#
# Customizing font-lock-mode faces
# 2003jan03
#
#####

# «customize-face»  (to ".customize-face")
# (find-elfile "font-lock.el")
# (find-elfile "")
# (find-elfile "font-lock.el" "define-minor-mode font-lock-mode")
# (describe-function 'font-lock-mode)

# (customize-face)
# (progn (customize-face) (ee-goto-position "Font Lock"))

# (progn (customize-face) (ee-goto-position "Eev Blue"))
# (find-eev "glyphs.el" "face-glyphs")
# (describe-function 'customize-face)
# (find-efunction 'customize-face)

# (custom-unlispify-tag-name 'eev-yellow-on-red)

# (customize-face font-lock-builtin-face)
# (find-evariable 'font-lock-builtin-face)
# (find-elfile "font-lock.el" "(defface font-lock-builtin-face")




#####
#
# The kill ring
# 2003jan07
#
#####

# «kill-ring»  (to ".kill-ring")
# (find-enode "Kill Ring")
# (find-enode "Earlier Kills")

# (find-es "emacs")
# (describe-key [?\C-y])
# (describe-key [?\M-y])

# (find-efunction 'yank)
# (find-efunction 'yank-pop)
# (find-efunction 'kill-new)
# (find-evariable 'kill-ring)

(progn (setq kill-ring nil)
       (kill-new "An older kill")
       (kill-new "An old kill")
       (kill-new "A buried kill")
       (kill-new "The last kill"))

(describe-variable ' kill-ring)

(progn (yank) kill-ring)

(progn (yank 1) kill-ring)

(progn (yank 2) kill-ring)

(progn (yank 2) kill-ring)

# Not finished




#####
#
# browse-kill-ring
# 2021dec12
#
#####

# «browse-kill-ring»  (to ".browse-kill-ring")
# (find-epackage-links 'browse-kill-ring "browsekillring" t)
# (find-epackage       'browse-kill-ring)
# (code-c-d "browsekillring" "~/.emacs.d/elpa/browse-kill-ring-20200210.921/")
# (find-browsekillringfile "")
# https://github.com/browse-kill-ring/browse-kill-ring

# (find-epackage-links 'popup-kill-ring "popupkillring" t)
# (find-epackage       'popup-kill-ring)
# (code-c-d "popupkillring" "~/.emacs.d/elpa/popup-kill-ring-20131020.1854/")
# (find-popupkillringfile "")
# https://github.com/waymondo/popup-kill-ring





#####
#
# Regexp syntax
# 2003jan08
#
#####

# «regexp-syntax»  (to ".regexp-syntax")
# (find-enode "Regexps")
# (find-elnode "Searching and Matching")
# (find-elnode "Syntax of Regexps")
# (find-elnode "Regexp Special")
# (find-elnode "Regexp Backslash")

# (find-elnode "Regexp Special" "\n`.'")
# (find-elnode "Regexp Special" "\n`*'")
# (find-elnode "Regexp Special" "\n`+'")
# (find-elnode "Regexp Special" "\n`?'")
# (find-elnode "Regexp Special" "\n`*?', `+?', `??'")
# (find-elnode "Regexp Special" "\n`[ ... ]'")
# (find-elnode "Regexp Special" "\n`[^ ... ]'")
# (find-elnode "Regexp Special" "\n`^'")
# (find-elnode "Regexp Special" "\n`$'")
# (find-elnode "Regexp Special" "\n`\\'")

# (find-elnode "Regexp Backslash" "\n`\\|'")
# (find-elnode "Regexp Backslash" "\n`\\{M\\}'")
# (find-elnode "Regexp Backslash" "\n`\\{M,N\\}'")
# (find-elnode "Regexp Backslash" "\n`\\( ... \\)'")
# (find-elnode "Regexp Backslash" "\n`\\(?: ... \\)'")

# Plus several other backslash sequences that I don't use often.

# (find-efile "emacs-lisp/sregex.el")




#####
#
# regexp-quote
# 2019jan01
#
#####

# «regexp-quote» (to ".regexp-quote")
# (find-angg ".emacs" "ee-shell-quote")
# (find-elnode "Regexp Special" "[ ... ]")




####
#
# Understanding how <prefix> C-h lists the key bindings with that prefix
# 2003jan15
#
####

# «C-h-after-prefix»  (to ".C-h-after-prefix")

# (find-elnode "Help Functions")
# (find-elnode "Help Functions" "Variable: help-char")
# (find-elnode "Help Functions" "Variable: prefix-help-command")
# (find-elnode "Help Functions" "Function: describe-prefix-bindings")
# (find-efunction 'describe-prefix-bindings)
# (describe-bindings "\C-x")




#####
#
# Emacs from Git
# 2013may25
#
#####

# «emacs-from-git» (to ".emacs-from-git")
# (find-es "git" "emacs-from-git")



#####
#
# make bootstrap and make extraclean
# 2022sep19
#
#####

# «make-bootstrap»  (to ".make-bootstrap")
# (find-fline "~/bigsrc/emacs29/Makefile.in" "make extraclean")
# (find-fline "~/bigsrc/emacs29/Makefile.in" "make bootstrap")

make bootstrap does not remove auto-save and lock files, so it is
definitely not the same as make extraclean.

*** "make all" failed with exit status 2.
***
*** You could try to:
*** - run "make bootstrap", which might fix the problem
*** - run "make V=1", which displays the full commands invoked by make,
***   to further investigate the problem





#####
#
# emacs from the CVS
# 2004jan15
#
#####

# «emacs-from-cvs»  (to ".emacs-from-cvs")
# (code-c-d "emacscvs" "~/bigsrc/emacs/")
# (find-emacscvsfile "")
# (find-angg ".zshrc" "emacs-cvs")
# (find-fline "/var/lib/apt/lists/ftp.br.debian.org_debian_dists_testing_main_source_Sources" "Package: emacs21")
# (find-progoutput "apt-cache showsrc emacs21")
# http://ftp.debian.org/debian/pool/main/e/emacs21/emacs21_21.4a-1.dsc
#*
apt-get install libungif4-dev
#*
$SUDO apt-get build-dep emacs21

#*
# (find-node "(tar)gzip" "`-j'")
# (find-man "1 cvs")
# (find-node "(cvs)Top")
# (find-node "(cvs)Connecting via rsh")
# (find-node "(cvs)Connecting via rsh" "set `CVS_RSH' to `SSH'")
# (find-fsbot-answer "CvsEmacs")
# http://www.emacswiki.org/cgi-bin/wiki.pl/EmacsCVS
# http://www.emacswiki.org/cgi-bin/wiki.pl/EmacsCvsAndDebian
# http://angg.twu.net/.emacs.html#emacs-cvs
# (find-angg ".emacs" "emacs-cvs")
# (find-zsh "cd ~/bigsrc/; Pwd; df")
# (find-sh  "cd ~/bigsrc/; /bin/pwd; df")

# rm -Rv ~/bigsrc/emacs/
rm -Rf ~/bigsrc/emacs/
mkdir  ~/bigsrc/
cd     ~/bigsrc/
tar -C ~/bigsrc/ -xvjf ~/tmp/emacs-cvs.tar.bz2

cd     ~/bigsrc/
export CVS_RSH=ssh
cvs -z9 -d:pserver:[email protected]:/cvsroot/emacs co emacs  \
  2>&1 | tee ocvs

cd     ~/bigsrc/
tar -cvjf ~/tmp/emacs-cvs.tar.bz2 emacs

cd     ~/bigsrc/emacs/
find *                | sort > .files0
./configure      2>&1 | tee oc
find * -name '*.[ch]' | sort > .files.ch
make bootstrap   2>&1 | tee omb
make TAGS        2>&1 | tee omT

#*
# (find-emacscvsfile "README" "need version 4.2 or later of Texinfo")
# (to "texinfo-4.6")

cd ~/bigsrc/emacs/
./configure    |& tee oc

find * -name '*.[ch]' | sort > .files.ch

# make MAKEINFO=$HOME/usrc/texinfo-4.6/makeinfo/makeinfo bootstrap |& tee omb
make bootstrap |& tee omb

make TAGS |& tee omT

#*
# How to create a .tar.gz that includes the .elc's?
# (find-emacscvsfile "make-dist" "Creating tar file")
# This does not work - make-dist requires
# (to "autoconf-2.59")
# (find-emacscvsfile "make-dist")
# (find-emacscvsfile "make-dist" "autoheader")
# (find-emacscvsfile "omd")

cd ~/bigsrc/emacs/
PATH=$HOME/usrc/autoconf-2.59/bin:$PATH \
  ./make-dist --tar	|& tee omd

#*





# (find-emacscvsfile "lisp/emacs-lisp/bytecomp.el" "defvar no-byte-compile")
# (find-emacscvsfile "lisp/ChangeLog.9" "Don't compile if `no-byte-compile'")
# no-byte-compile: t
#*
eev-cd emacscvs lisp/
grep no-byte-compile *.el
#*
eev-cd emacscvs lisp/
l $(grep -l no-byte-compile *.el)
#*







#####
#
# texinfo 4.6
# 2004jan19
#
#####

# «texinfo-4.6»  (to ".texinfo-4.6")
# We need this to compile the CVS version of Emacs
# (find-status "texinfo")
# (find-vldifile "texinfo.list")
# (find-fline "/usr/doc/texinfo/")

#*
rm -Rv ~/usrc/texinfo-4.6/
cd     ~/usrc/
tar -xvzf $S/ftp/ftp.gnu.org/gnu/texinfo/texinfo-4.6.tar.gz
cd     ~/usrc/texinfo-4.6/
./configure	|& tee oc
make		|& tee om
make check	|& tee omc
#*

# (code-c-d "texinfo" "~/usrc/texinfo-4.6/")
# (find-texinfofile "")



#####
#
# autoconf 2.59
# 2004jan19
#
#####

# «autoconf-2.59»  (to ".autoconf-2.59")
# Apparently we need this to run "make-dist" on the CVS version of
# Emacs, but I couldn't make that to work
#*
rm -Rv ~/usrc/autoconf-2.59/
cd     ~/usrc/
tar -xvjf $S/ftp/ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2
cd     ~/usrc/autoconf-2.59/
./configure	|& tee oc
make		|& tee om
make check	|& tee omc

#*

# (find-status "autoconf")
# (find-vldifile "autoconf.list")
# (find-fline "/usr/doc/autoconf/")

tar -tvjf $S/ftp/ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2

# (find-elfile "international/mule-cmds.el")


anonftp ftp://ftp.gnu.org/gnu/automake/





(format "%c" (read (concat "?\\x" "40")))


(defun unquote-printable () (interactive)
  (progn
    (re-search-forward "=\\([0-9A-Fa-f][0-9A-Fa-f]\\)")
    (replace-match
     (format "%c" (read (concat "?\\x" (match-string 1))))
     'fixedcase)))


# Splash screen:

# (find-e21file "lisp/gnus/gnus-ems.el")
# (find-e21file "lisp/startup.el")
# (find-e21file "lisp/startup.el" "fancy-splash-head")
# (find-e21file "etc/" "gnu.xpm")
# (find-e21file "etc/" "splash.xpm")
# (find-e21file "etc/splash.xpm")
# (find-shttpw3 "savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/etc/splash.xpm")
# (find-fline "~/tmp/emacs-21.0.93-splash.xpm")
#*
display ~/tmp/emacs-21.0.93-splash.xpm &
display /usr/src/emacs21-21.1/etc/splash.xpm &
#*




#####
#
# splash-screen
# 2021jan08
#
#####

# «splash-screen»  (to ".splash-screen")
# (eek "M-h M-k  C-h C-a  ;; about-emacs")
# (find-efunctiondescr      'about-emacs)
# (find-efunction           'about-emacs)
# (fancy-splash-image-file)
# (find-file "/home/edrx/bigsrc/emacs27/etc/images/splash.svg")
# (fancy-splash-head)





#####
#
# some interesting wiki pages
# 2004jan19
#
#####

# sudo -u edrx mozilla 'http://www.emacswiki.org/cgi-bin/wiki.pl?GenericMode' &
# sudo -u edrx mozilla 'http://www.emacswiki.org/cgi-bin/wiki.pl?MultiTTYSupport' &

# (find-elnode "Printed Representation" "Hash notation cannot be read at all")




#####
#
# eshell
# 2004feb11
#
#####

# «eshell»  (to ".eshell")
# (find-es "eshell")
# (find-efile "eshell/")
# (find-ewikipage "CategoryEshell")
# (find-node "(eshell)Top")

# http://www.emacswiki.org/cgi-bin/wiki/EshellRedirection
# http://www.emacswiki.org/cgi-bin/wiki/EshellAndAngeFtp
# http://www.emacswiki.org/cgi-bin/wiki/EshellAndDired
# http://www.emacswiki.org/cgi-bin/wiki/EshellVisualCommands
# http://www.emacswiki.org/cgi-bin/wiki/CategoryEshell

lynx http://www.newartisans.com/johnw/eshell.html





#####
#
# "Emacs: ESHELL demo" by Protesilaos Stavrou
# 2020may13
#
#####

# «eshell-video» (to ".eshell-video")
# https://www.youtube.com/watch?v=L1f2tulD9N8&feature=youtu.be




#####
#
# try
# 2024mar10
#
#####

# «try»  (to ".try")
# (find-fline "~/LOGS/2024mar10.emacs" "(describe-package 'try)")
# (find-fline "~/LOGS/2024mar10.emacs2" "M-x try eev RET")
# (find-epackage-links 'try "try" t)
# (code-c-d "try" "~/.emacs.d/elpa/try-20181204.236/")
# (find-tryfile "")
# http://github.com/larstvei/try



#####
#
# font and geometry
# 2004feb11
#
#####

# «font-and-geometry»  (to ".font-and-geometry")
# (find-enode "Command Arguments")
# (find-enode "Window Size X" "-g WIDTHxHEIGHT")
# (find-enode "Font X" "`-fn NAME'")

xlsfonts | sort | grep '^[0-9]'
emacs -g 70x20 -fn 5x8

# (find-enode "Menu Mouse Clicks" "`S-Mouse-1'" "frame's principal font")
# (find-enode "Frame Parameters"  "frame's principal font" "`S-Mouse-1'")

(info "(emacs)Frame Parameters")




#####
#
# w3m
# 2004mar03 / 2020dec03
#
#####

# «w3m»  (to ".w3m")
# (find-angg ".emacs" "w3m-el")
# (find-epackage-links 'w3m)
# (find-epackage-links 'w3m nil t)
# (find-epackage       'w3m)
# http://emacs-w3m.namazu.org/
# http://emacs-w3m.namazu.org/info/emacs-w3m.html
# Test: (find-w3m "http://www.lua.org/start.html")
#       (find-w3m "~/TH/L/index.html")

# It needs this:
# (find-status   "w3m")
# (find-vldifile "w3m.list")
# (find-udfile   "w3m/")

# (code-c-d "w3m" "~/.emacs.d/elpa/w3m-20201129.2228/")
# (find-w3mfile "")

# Old version:
# (find-status   "w3m-el")
# (find-vldifile "w3m-el.list")
# (find-udfile   "w3m-el/")
# (code-c-d "w3m" "/usr/share/emacs/site-lisp/w3m/")
# (find-w3mfile "")

To run ee-goto-position in a w3m-generated page I need a hack like the
one I did on find-man - ee-goto-position should run only when the page
is ready.

# (add-to-list 'load-path "/usr/share/emacs/site-lisp/w3m/")
# (find-efunction 'w3m)

# (find-efunctiondescr 'w3m)
# (find-efunction      'w3m)
# (find-evardescr 'w3m-info-like-map)
# (find-evariable 'w3m-info-like-map)
# (find-evardescr 'w3m-lynx-like-map)
# (find-evariable 'w3m-lynx-like-map)

# (find-eminorkeymapdescr w3m-info-like-map)
# (find-eminormodekeymapdescr w3m-info-like-map)

describe-mode

(documentation major-mode)
(documentation 'w3m-mode)

(find-efunction 'documentation)
(find-efunctiondescr 'documentation)
(find-efunctiondescr 'substitute-command-keys)

(find-efunction 'w3m-mode)




#####
#
# w3mimgdisplay
# 2020dec03
#
#####

# «w3mimgdisplay»  (to ".w3mimgdisplay")
# https://unix.stackexchange.com/questions/368859/how-to-display-inline-images-in-a-terminal-that-update-on-scroll-with-w3mimgdisp
# (find-status   "w3m-img")
# (find-vldifile "w3m-img.list")
# (find-udfile   "w3m-img/")
# http://sourceforge.net/projects/w3m/
# http://emacs-w3m.namazu.org/info/emacs-w3m_16.html#SEC16
# (find-evardescr 'w3m-default-display-inline-images)
# (find-evariable 'w3m-default-display-inline-images)



#####
#
# w3m-goto-on-load
# 2022dec29
#
#####

# «w3m-goto-on-load»  (to ".w3m-goto-on-load")
# https://stackoverflow.com/questions/7458162/how-to-wait-for-an-event-in-emacs-lisp-function

(defun w3m-goto-on-load (url)
  "Go to a position after page has been loaded."
  (cond
    ((string-match "domain" url)
      (progn
        (set-window-start nil (search-forward "Search" nil t) nil)))
    (t nil)))

(add-hook 'w3m-display-hook 'w3m-goto-on-load)



#####
#
# w3m-forcing-html
# 2007jul23
#
#####

# «w3m-forcing-html»  (to ".w3m-forcing-html")
# http://emacs-w3m.namazu.org/
# http://emacs-w3m.namazu.org/info/emacs-w3m.html
# http://emacs-w3m.namazu.org/ml/
# http://emacs-w3m.namazu.org/ml/msg09438.html
# http://emacs-w3m.namazu.org/ml/msg09450.html

Visit these two urls:

  http://www.emacswiki.org/cgi-bin/emacs/rcirc-color.el
  http://www.emacswiki.org/cgi-bin/emacs/download/rcirc-color.el

The first one is HTML, the second one is not.
If I make local copies of these urls I will have

put these local copies at:

  file:///home/edrx/snarf/http/www.emacswiki.org/cgi-bin/emacs/rcirc-color.el
  file:///home/edrx/snarf/http/www.emacswiki.org/cgi-bin/emacs/download/rcirc-color.el

and then I will need some Apache trickery (involving CGIs, maybe?) to
let me access these local copies via HTTP, forcing the first one to be
treated as HTML...




#####
#
# w3m-upstream
# 2007jul23
#
#####

# «w3m-upstream»  (to ".w3m-upstream")
# (find-fline "~/tmp/emacs-w3m-cvs.tar.gz")
# (find-fline "~/.emacs" "~/usrc/emacs-w3m/")
#*
rm -Rv ~/usrc/emacs-w3m/
tar -C ~/usrc/ \
 -xvzf ~/tmp/emacs-w3m-cvs.tar.gz emacs-w3m
cd     ~/usrc/
export CVS_RSH=ssh
#   cvs -d :pserver:[email protected]:/storage/cvsroot login
cvs -z9 -d :pserver:[email protected]:/storage/cvsroot co emacs-w3m
tar -C ~/usrc/ \
 -cvzf ~/tmp/emacs-w3m-cvs.tar.gz emacs-w3m

#*
rm -Rv ~/usrc/emacs-w3m/
tar -C ~/usrc/ \
 -xvzf ~/tmp/emacs-w3m-cvs.tar.gz emacs-w3m
cd     ~/usrc/emacs-w3m/
autoconf
# ./configure |& tee oc
  ./configure --with-emacs=$HOME/bigsrc/emacs/src/emacs |& tee oc
make |& tee om

#*
# (code-c-d "emacsw3m" "~/usrc/emacs-w3m/" :grep)
# (find-emacsw3mfile "")

# Emacs-w3m of this version does not support Emacs 23; try the development version
# (find-emacsw3mgrep "grep -nH -e 'of this version' *.el")
# (find-emacsw3mgrep "grep -nH -e 'of this version' $(find *)")

(add-to-list 'load-path "~/usrc/emacs-w3m/")
# (find-evardescr 'load-path)




# (find-status   "w3m-el")
# (find-vldifile "w3m-el.list")
# (find-udfile   "w3m-el/")
# (find-node "(emacs-w3m)Top")

cvs -z9 -d:pserver:[email protected]:/cvsroot/emacs co emacs  \
  2>&1 | tee ocvs

cd     ~/bigsrc/
tar -cvjf ~/tmp/emacs-cvs.tar.bz2 emacs




#####
#
# find-face
# 2004mar17
#
#####

# «find-face»  (to ".find-face")
;; (find-elnode "Examining Properties")

(defun ee-create-buffer (name)
  (if (bufferp name) (kill-buffer name))
  (switch-to-buffer name))

(defun ee-insert-code-and-pp (what whattopp &optional separator)
  (insert what)
  (insert (or separator "\n   ==>\n"))
  (pp whattopp (current-buffer))
  (insert "\n"))

(defun find-text-properties-at-point (&rest rest)
  (interactive)
  (let* ((code1 "(text-properties-at (point))")
	 (rslt1 (eval (read code1)))
	 (buffer-name (format "*%s*" code1)))
    (ee-create-buffer buffer-name)
    (ee-insert-code-and-pp code1 rslt1)
    (apply 'ee-goto-position rest)))


;; (find-enode "Force Same Window")
;; (ee-one-window "foo" (insert "body1") (insert "body2"))
;; (ee-one-window "foo" (find-evardescr 'same-window-buffer-names))
;; (find-elnode "Index" "with-output-to")
;; (find-elnode "Current Buffer")

(defmacro ee-same-window (samewindowbuffername &rest body)
  `(let ((same-window-buffer-names
	 (cons ,samewindowbuffername same-window-buffer-names)))
    . ,body))

(defun find-ekeydescr (key &rest rest)
  (ee-same-window "*Help*" (describe-key key))
  (apply 'ee-goto-position rest))

(defun find-efacedescr (face &rest rest)
  (ee-same-window "*Help*" (describe-face face))
  (apply 'ee-goto-position rest))

(defun find-efaces (&rest rest)
  (ee-same-window "*Faces*" (list-faces-display))
  (apply 'ee-goto-position rest))

(defun find-etpat (&rest rest)
  (interactive)
  (let ((tpat (text-properties-at (point)))
	(buffername "*(text-properties-at (point))*"))
    (if (bufferp buffername) (kill-buffer buffername))
    (switch-to-buffer buffername)
    (insert "(text-properties-at (point))\n   ==>\n")
    (pp tpat (current-buffer))
    (apply 'ee-goto-position rest)))

(defun find-eltpat (&rest rest)
  (interactive)
  (ee-same-window "*Text Properties*" (list-text-properties-at (point)))
  (apply 'ee-goto-position rest))


(with-output-to-temp-buffer "temp" (insert "foo"))



(find-efile "facemenu.el")
(list-faces-display)
(list-text-properties-at (point))
(list-colors-display)

(find-efunction 'point-to-register)

(find-efacedescr font-lock-function-name-face)

			font-lock-function-name-face
(facep			font-lock-function-name-face)
(internal-lisp-face-p	font-lock-function-name-face)
(face-documentation	font-lock-function-name-face)
(describe-face		font-lock-function-name-face)

# (find-efile "faces.el")
# (find-elnode "Faces")
# (find-elnode "Face Attributes" "`:weight'" "extra bright")
# (find-elnode "Attribute Functions" "set-face-bold-p")

# (find-efunction 'defface)
# (find-efunction 'custom-declare-face)

(find-text-properties-at-point)



####
#
# c-mode-M-e
# 2004mar25
#
####

# «c-mode-M-e»  (to ".c-mode-M-e")
# (find-angg ".emacs" "M-e-in-c-mode")

;; Don't let c-mode's `c-end-of-statement' take over my M-e binding
;; (find-elnode "Hooks for Loading")
;; (find-efunction 'eval-after-load)
;;   (find-efile "bindings.el" "'forward-sentence")
;;   (find-efile "progmodes/cc-mode.el" "c-mode-base-map" "'forward-sentence")
;;   (find-efile "progmodes/awk-mode.el")
;; (find-fline "/tmp/dummy.c")
;; (find-fline "/tmp/dummy.awk")
;; (find-evardescr 'c-mode-map   "101")
;; (find-evardescr 'awk-mode-map "101")
;;
(eval-after-load "cc-mode"
  '(define-key c-mode-base-map "\ee" nil))

;; Add a binding "w" -> `dired-find-w3m' to dired
;; (find-efunction 'dired-find-file)
;; (find-evardescr 'dired-mode-map)
;; (find-evariable 'dired-mode-map)
;;
(defun dired-find-w3m () (interactive)
  "In dired, visit (with find-w3m) the file named on this line."
  (find-w3m (file-name-sans-versions (dired-get-filename) t)))
(eval-after-load "dired"
  '(define-key dired-mode-map "w" 'dired-find-w3m))



####
#
# eeplow
# 2004apr02
#
####

# «eeplow»  (to ".eeplow")

;; plow = past-line-other-window
;; (find-elnode "Window Configurations" "look inside of window configurations")
;; (find-elnode "Buffers and Windows" "Function: get-buffer-window")

(defvar ee-plow-target-buffer "#emacs")
(defvar ee-plow-lines-buffer "*plow*")

(defun ee-new-buffer (buffername &optional str)
  (get-buffer-create buffername)
  (with-current-buffer buffername
    (delete-region (point-min) (point-max))
    (when str (insert str) (goto-char (point-min))))
  buffername)

(defun ee-two-windows (buffertop bufferbottom)
  (switch-to-buffer buffertop)
  (delete-other-windows)
  (split-window-vertically)
  (other-window 1)
  (switch-to-buffer bufferbottom))

(defun ee-plow-send () (interactive)
  (if (not (= (point) (point-max)))
      (let ((linestr
	     (buffer-substring (progn (end-of-line) (point))
			       (progn (beginning-of-line) (point)))))
	(other-window 1)
	(insert linestr)
	(call-interactively (key-binding "\r"))
	(other-window -1)
	(ee-plow-next-line 1))))

(defun ee-plow-next-line (arg) (interactive "p")
  (let ((next-line-add-newlines nil))
    (next-line arg)))

;; (find-efunction 'next-line)

;; (setq ee-plow-mode-map nil)
;; (find-efunction 'define-minor-mode)

;; (fmakunbound 'ee-plow-mode)
;; (makunbound  'ee-plow-mode)
;; (makunbound  'ee-plow-mode-hook)
;; (makunbound  'ee-plow-mode-map)

(define-minor-mode ee-plow-mode
  "paste-line-other-window-mode mode" nil " plow"
  '(("\M-d" . ee-plow-send)
    ([down] . ee-plow-next-line)))

(defun eeplow (s e buffer) (interactive "r\nbTarget buffer: ")
  (ee-new-buffer ee-plow-lines-buffer (ee-se-to-string s e))
  (with-current-buffer ee-plow-lines-buffer
    (fundamental-mode)
    (ee-plow-mode))
  (setq ee-plow-target-buffer buffer)
  (ee-two-windows ee-plow-target-buffer ee-plow-lines-buffer))

;; (eeplow "test1\ntest2\ntest3" nil "*scratch*")
;; (eeplow "test1\ntest2\ntest3" nil "#emacs")




####
#
# self-insert-command
# 2004apr16
#
####

eev-cd ecvs src/
grep self-insert-command *.[ch]

# (find-ecvsfile "src/cmds.c" "self-insert-command")
# (find-elnode "Command Loop Info" "Variable: last-command-char")




####
#
# imenu
# 2004mar29
#
####

# (find-efile "imenu.el")
# http://yummymelon.com/devnull/til-imenu.html



####
#
# dictionary
# 2004apr08
#
####

#*
rm -Rv ~/usrc/dictionary-1.8.5/
tar -C ~/usrc -xvzf $S/http/ftp.debian.org/debian/pool/main/d/dictionary-el/dictionary-el_1.8.5.orig.tar.gz
cd ~/usrc/dictionary-1.8.5/
#*
# (code-c-d "dictionary" "~/usrc/dictionary-1.8.5/")
# (find-dictionaryfile "")
# (find-dictionaryfile "dictionary.el")
# (find-dictionaryfile "connection.el")
# (find-dictionaryfile "link.el")
# (find-dictionaryfile "dictionary-init.el")

(add-to-list 'load-path "~/usrc/dictionary-1.8.5/")
(setq dictionary-server "127.0.0.1")
(setq dictionary-use-single-buffer t)
(load-library "dictionary")

# (find-dictionaryfile "dictionary.el")
# (find-dictionaryfile "dictionary.el" "defun dictionary ")
# (find-dictionaryfile "README")

(progn (find-enode "Manifesto")
       (dictionary))

(defun find-dictionary (str &rest rest)
  (interactive (list (read-string "Search word: " (current-word))))
  (ee-same-window "*Dictionary buffer*"
		  (dictionary-search str)
		  (apply 'ee-goto-position rest)))

(dictionary-search "fuck me harder")
(find-dictionary   "fuck me harder")

(find-efunction 'dictionary "switch-to-buffer-other-window")

ee-same-window




#####
#
# gnus
# 2004apr06
#
#####

# «gnus»  (to ".gnus")
# (find-planner "ImapPage")

# (find-status "gnus")
# (find-vldifile "gnus.list")
# (find-fline "/usr/doc/gnus/")
# (find-status "ucf")
# (find-vldifile "ucf.list")
# (find-fline "/usr/doc/ucf/")




#####
#
# http-emacs
# 2004apr26
#
#####

# «http-emacs»  (to ".http-emacs")
#*
rm -Rv ~/usrc/http-emacs/
#*
export CVS_RSH=ssh
cd ~/usrc/
cvs -z3 -d:ext:[email protected]:/cvsroot/http-emacs co http-emacs
#*
cd ~/usrc/http-emacs/

# (code-c-d "httpemacs" "~/usrc/http-emacs/")
# (find-httpemacsfile "")

(add-to-list 'load-path "~/usrc/http-emacs")
(load-library "http-get")
(find-efunction 'http-url-encode)
(http-url-encode "Major Modes" nil)






#####
#
# EmacsUserLocations
# 2004apr18
#
#####

apti xplanet xplanet-images

#*
# http://www.emacswiki.org/cgi-bin/wiki/EmacsUserLocations
wget -O /tmp/emacswiki.markerfile "http://www.emacswiki.org/cgi-bin/wiki.pl?action=browse&id=EmacsUserLocations&raw=1"

#*
# (find-fline "/tmp/emacswiki.markerfile")
xplanet -markerfile /tmp/emacswiki.markerfile

#*
# Just a few people:
cat > /tmp/epeople <<'%%%'
  35.28    -78.63     "bpt"        # BrianTempleton
 -22.9     -43.23     "edrx"       # EduardoOchs
  47.83      8.57     "kensanata"  # AlexSchroeder
  55.935921 -3.194687 "lawrence"   # LawrenceMitchell
  38.0010   23.4355   "pgas"       # PierreGaston
  65.8003   21.704    "shapr"      # ShaeErisson
%%%
xplanet -markerfile /tmp/epeople
#*
# (find-es "x" "default_background")
xsetroot -default

#*




#####
#
# tetris
# 2004may14
#
#####

# «tetris»  (to ".tetris")
# (find-efile "play/tetris.el")
# (find-efile "play/gamegrid.el")

(require 'tetris)
(find-evariable 'gamegrid-xpm)
(find-evariable 'gamegrid-xbm)

(find-efunction 'tetris)
(find-efunction 'gamegrid-init)
(find-efunction 'gamegrid-initialize-display)


(require 'gamegrid)

(setq gamegrid-glyph-height 8)
(setq gamegrid-xpm "/* XPM */
static char *noname[] = {
/* width height ncolors chars_per_pixel */
\"8 8 3 1\",
/* colors */
\"+ s col1\",
\". s col2\",
\"- s col3\",
/* pixels */
\"-------+\",
\"--+---++\",
\"--....++\",
\"--....++\",
\"--....++\",
\"--....++\",
\"-+++++++\",
\"++++++++\"
};
")
(tetris)

(tetris)
(setq tetris-display-table
      (save-excursion (set-buffer "*Tetris*")
		      buffer-display-table))


(defmacro with-buffer (buffer &rest body)
  `(save-excursion (set-buffer ,buffer) . ,body))

(setq tetris-display-table (with-buffer "*Tetris*" buffer-display-table))
(setq tetris-face (with-buffer "*Tetris*" gamegrid-face))

;; (find-evardescr 'tetris-display-table)
;; (find-efacedescr 'gamegrid-face-*Tetris*)

;; (find-efile "play/tetris.el")
;; (find-efile "play/gamegrid.el")




;; (find-progoutput "dpkg -l")
;; (find-ecvsfile "oc")
;; (find-fline "/usr/X11R6/include/X11/xpm.h")
;; width height ncolors chars_per_pixel
;;
(setq tron-xpm "/* XPM */
static char *noname[] = {
\"3 3 3 1\",
\"+ s col1\",
\". s col2\",
\"- s col3\",
\"--+\",
\"-.+\",
\"+++\"
};
")

(defun tron-make-glyph (col1 col2 col3)
  `(image :type xpm
	  :data ,tron-xpm
	  :ascent center
	  :color-symbols (("col1" . ,col1)
			  ("col2" . ,col2)
			  ("col3" . ,col3))))

(setq tron-display-table [nil nil nil nil])

;; Old-style IBM PC "SCREEN 1:COLOR 0,0" colors:
;; 0=black, 1=green, 2=red, 3=yellow
(aset tron-display-table 0 (tron-make-glyph "#000000" "#000000" "#000000"))
(aset tron-display-table 1 (tron-make-glyph "#009900" "#00cc00" "#00ff00"))
(aset tron-display-table 2 (tron-make-glyph "#990000" "#cc0000" "#ff0000"))
(aset tron-display-table 3 (tron-make-glyph "#999900" "#cccc00" "#ffff00"))

(make-face 'tron-face)
(set-face-attribute 'tron-face nil :height 3)

(defun tron-insert-char (c)
  (insert-image (aref tron-display-table c) c))

(mapc 'tron-insert-char '(1 2 2 3 2 2 1 0 1 2))

(x-list-fonts "*unreadable*")
(set-face-font 'tron-face "nil2")


(make-face 'tron-face)
(set-face-font 'tron-face "nil2")
(describe-face 'tron-face)

(find-eevalread "(x-font-family-list)")

set-face-attribute


;; Tetris colors
(aset tron-display-table 0 (tron-make-glyph "#000000" "#000000" "#000000"))
(aset tron-display-table 1 (tron-make-glyph "#000099" "#0000cc" "#0000ff"))
(aset tron-display-table 2 (tron-make-glyph "#6b0099" "#8e00cc" "#b200ff"))
(aset tron-display-table 3 (tron-make-glyph "#999900" "#cccc00" "#ffff00"))
(aset tron-display-table 4 (tron-make-glyph "#990099" "#cc00cc" "#ff00ff"))
(aset tron-display-table 5 (tron-make-glyph "#009999" "#00cccc" "#00ffff"))
(aset tron-display-table 6 (tron-make-glyph "#009900" "#00cc00" "#00ff00"))
(aset tron-display-table 7 (tron-make-glyph "#990000" "#cc0000" "#ff0000"))
(aset tron-display-table 8 (tron-make-glyph "#4c4c4c" "#666666" "#7f7f7f"))

(setq buffer-display-table tron-display-table)
(setq buffer-display-table tetris-display-table)

;; (find-efile "faces.el")



;; (find-eevfile "glyphs.el")
;; (find-efile "play/tetris.el")
;; (find-efile "play/gamegrid.el")
;; (find-efunction 'insert-image)

;; (find-node "(elisp)Overlay Properties")
(get-char-property

    (aset standard-display-table
	  position (vector (create-glyph str)))


(insert-image (tron-make-glyph "#990099" "#cc00cc" "#ff00ff"))

(insert-image (aref tron-display-table 0) 0)
(insert-image (aref tron-display-table 1) 1)
(insert-image (aref tron-display-table 2) 2)
(insert-image (aref tron-display-table 3) 3)
(insert-image (aref tron-display-table 4) 4)
(insert-image (aref tron-display-table 5) 5)
(insert-image (aref tron-display-table 6) 6)
(insert-image (aref tron-display-table 7) 7)
(insert-image (aref tron-display-table 8) 8)

(defun tron-set-cell (x y c)
  (save-excursion
    (let ((buffer-read-only nil))
      (goto-char (tron-cell-offset x y))
      (delete-char 1)
      (insert-image (aref tron-display-table c) c))))

      (insert-char c 1)
      (gamegrid-set-face c))))



;; (find-efile "play/tetris.el")
;; (find-efile "play/gamegrid.el")
;; (find-efile "image.el")

;; (find-node "(elisp)Image Descriptors")
;; (find-node "(elisp)Display Property")
;; (find-node "(elisp)Other Display Specs")

;; (find-efunction 'gamegrid-set-cell)
;; (find-efunction 'gamegrid-set-timer)
;; (find-efunction 'gamegrid-colorize-glyph)
;; (find-eevalread "(tetris-display-options)")
;; (find-efunction 'xpm-convert-string)

(image-type-available-p 'xpm)

(defun tron-set-face (c)
  (add-text-properties (1- (point)) (point)
		       (list 'display (list (aref tron-display-table c)))))

(defun tron-cell-offset (x y)
  (+ tron-buffer-start
     (* (1+ tron-buffer-width) y)
     x))




      (loop for c from 0 to 255 do
	    (let ((glyph (aref gamegrid-display-table c)))
	      (when (and (listp glyph) (eq (car  glyph) 'image))
		(let ((height (cdr (image-size glyph))))
		  (if (or (null max-height)
			  (< max-height height))
		      (setq max-height height))))))




(with-buffer


;; (find-efunction 'gamegrid-setup-default-font)




#####
#
# tron
# 2004may15
#
#####

# «tron»  (to ".tron")
# (find-efile "play/tetris.el")
# (find-efile "play/gamegrid.el")

(require 'gamegrid)
(require 'tetris)

(defun tron-set-display-table ()
  (setq buffer-display-table tron-display-table))

;; (find-efunction 'gamegrid-setup-default-font)

(defun tron-setup-default-font (max-height)
  (set-face-attribute tron-face nil :height max-height))

;; (find-efunction 'gamegrid-display-type)
;; (find-eevalread "(tetris-display-options)")

(defun tron-initialize-display ()
  (setq tron-display-mode (tron-display-type))
  (setq tron-display-table (make-display-table))
  (setq tron-face-table (make-vector 256 nil))
  (loop for c from 0 to 255 do
    (let* ((spec (aref tron-display-options c))
	   (glyph (tron-make-glyph (car spec) (caddr spec)))
	   (face (tron-make-face (cadr spec) (caddr spec))))
      (aset tron-face-table c face)
      (aset tron-display-table c glyph)))
  (tron-setup-default-font)
  (tron-set-display-table)
  (setq cursor-type nil))


(defun tron-set-face (c)
  (if (eq tron-display-mode 'glyph)
      (add-text-properties (1- (point)) (point)
			   (list 'display (list (aref tron-display-table c))))
    (put-text-property (1- (point))
		       (point)
		       'face
		       (aref tron-face-table c))))


;; width height ncolors chars_per_pixel
;; colors
;; pixels

(setq tron-xpm "/* XPM */
static char *noname[] = {
\"6 6 3 1\",
\"+ s col1\",
\". s col2\",
\"- s col3\",
\"-----+\",
\"-....+\",
\"-....+\",
\"-....+\",
\"-....+\",
\"++++++\"
};
")
;; (find-e

(tetris)





#####
#
# planner from the ".tar.gz"s
# 2004apr05
#
#####

# «planner-nondebian»  (to ".planner-nondebian")
# http://www.emacswiki.org/cgi-bin/wiki/PlannerMode
# http://sacha.free.net.ph/notebook/emacs/sacha-stable.tar.gz
# http://sacha.free.net.ph/notebook/emacs/sacha-dev.tar.gz

psne http://sacha.free.net.ph/notebook/emacs/sacha-dev.tar.gz

#*
rm -Rv ~/usrc/sacha-stable/
rm -Rv ~/usrc/sacha-dev/
rm -Rv ~/usrc/emacs-wiki/
rm -Rv ~/usrc/planner/
rm -Rv ~/usrc/remember/
tar -C ~/usrc/ \
  -xvzf $S/http/sacha.free.net.ph/notebook/emacs/sacha-dev.tar.gz
cd ~/usrc/sacha-dev/
mv -v emacs-wiki planner remember ..

#*
(add-to-list 'load-path "~/usrc/emacs-wiki/")
(add-to-list 'load-path "~/usrc/planner/")
(code-c-d "emacswiki"   "~/usrc/emacs-wiki/")
(code-c-d "planner"     "~/usrc/planner/")
(require 'planner)





####
#
# planner on debian
# 2004mar16
#
####

# «planner»  (to ".planner")
# (find-fline "/etc/apt/sources.list")
deb     http://richip.dhs.org/~sachac/notebook/emacs/planner ./
deb-src http://richip.dhs.org/~sachac/notebook/emacs/planner ./
# (find-fline "/var/lib/apt/lists/")

apti emacs-wiki planner-el

# (find-status "emacs-wiki")
# (find-vldifile "emacs-wiki.list")
# (find-fline "/usr/doc/emacs-wiki/")
# (find-status "planner-el")
# (find-vldifile "planner-el.list")
# (find-fline "/usr/doc/planner-el/")

# (find-fline "/usr/share/emacs/site-lisp/emacs-wiki/emacs-wiki.el")
# (find-fline "/usr/share/emacs/site-lisp/planner-el/")

(customize-group 'emacs-wiki)
(customize-group 'planner)

(code-c-d "planner" "/usr/share/emacs/site-lisp/planner-el/")
(code-c-d "emacswiki" "/usr/share/emacs/site-lisp/emacs-wiki/")

(find-plannerfile "")
(find-plannerfile "planner.el" "planner-use-other-window")

(find-emacswikifile "emacs-wiki.el")

# (find-angg ".emacs" "brwl-and-friends")
# http://www.emacswiki.org/cgi-bin/wiki/PlannerModeQuickStart


    (if (emacs-wiki-link-at-point)
        (emacs-wiki-visit-link (match-string 0) buf other-window)

(progn (emacs-wiki-link-at-point) (match-string 0))

(progn (find-ebuffer "2004.04.04" "EmacsCvs")
       (find-ekeydescr "\r"))
(find-efunction 'emacs-wiki-follow-name-at-point)
(find-efunction 'emacs-wiki-visit-link)

(find-planner "EmacsCvsDebs")

EmacsCvs

    mkdir ~/Plans

    (add-to-list 'load-path "/directory/with/emacs-wiki")
    (require 'planner)
    (plan)




#####
#
# loop
# 2004may24
#
#####

# «loop»  (to ".loop")
# (to "cl-loop")
# (find-node "(cl)Loop Basics")

# (find-node "(cl)Efficiency Concerns")
# (find-node "(cl)Creating Symbols" "gensym")

(defun fatorial (n)
  (if (> n 1)
      (* n (fatorial (- n 1)))
    1))
(defun combinacao (a b)
  (/ (fatorial a)
     (fatorial b)
     (fatorial (- a b))))
(defun triangulo (n)
  (loop for linha from 0 to n do
	(loop for coluna from 0 to linha do
	      (insert (format "%4d" (combinacao linha coluna))))
	(insert "\n")))

(triangulo 11)

   1
   1   1
   1   2   1
   1   3   3   1
   1   4   6   4   1
   1   5  10  10   5   1
   1   6  15  20  15   6   1
   1   7  21  35  35  21   7   1
   1   8  28  56  70  56  28   8   1
   1   9  36  84 126 126  84  36   9   1
   1  10  45 120 210 252 210 120  45  10   1
   1  11  55 165 330 462 462 330 165  55  11   1




#####
#
# run-at-time
# 2022nov13
#
#####

# «run-at-time»  (to ".run-at-time")
# (find-eevgrep "grep --color=auto -nH --null -e run-at-time *.el")
# (find-efunctiondescr   'run-at-time)
# (find-efunction        'run-at-time)
# (find-elnode "Index" "* run-at-time:")

(defun tea (mins)
  (interactive "NMinutes: ")
  (message (format "(Brewing for %d minutes.)" mins))
  (run-at-time (* mins 60) nil '(lambda () (message "Tea's ready!"))))




#####
#
# overlays
# 2004jul09
#
#####

# «overlays»  (to ".overlays")
# (find-eev "eev-flash.el")
# https://github.com/emacsorphanage/ov overlays

# (find-elnode "Overlays")
# (find-elnode "Overlay Properties")
# (find-elnode "Managing Overlays")

(setq my-sexp-overlay (make-overlay (point) (- (point) 30)))
(overlay-put my-sexp-overlay 'face 'region)
(delete-overlay my-sexp-overlay)
(setq my-sexp-overlay nil)

(progn
  (setq my-sexp-overlay (make-overlay (point) (- (point) 30)))
  (overlay-put my-sexp-overlay 'face 'region)
  (run-at-time 1.5 nil
    (lambda ()
      (delete-overlay my-sexp-overlay)
      (setq my-sexp-overlay nil)))
  )

(defun delete-overlays-at-point () (interactive)
  (mapcar 'delete-overlay (overlays-at (point))))





#####
#
# enriched mode
# 2004aug01
#
#####

# «enriched-mode»  (to ".enriched-mode")
# (find-enode "Requesting Formatted Text")
# (find-efile "textmodes/")
# (find-efile "textmodes/enriched.el")
# (find-efile "textmodes/paragraphs.el")
# (find-efile "textmodes/paragraphs.el" "use-hard-newlines")
# (find-eetcfile "enriched.doc")

# (find-file (expand-file-name "enriched.doc" data-directory))



#####
#
# outline mode
# 2004aug02
#
#####

# «outline-mode»  (to ".outline-mode")
# (find-enode "Outline Mode")
# (find-enode "Outline Format" "outline-regexp")
# (find-efunction 'outline-minor-mode)
# (find-efunctiondescr 'outline-mode)
# (find-efile "outline.el")
# (find-fline "~/LOGS/2022jul01.emacs")

# (setq outline-minor-mode-prefix "\C-c")
# (load "outline")

# (outline-minor-mode 1)
# (outline-minor-mode 0)
# (find-evardescr 'outline-regexp)

# (make-local-variable 'outline-regexp)
# (setq outline-regexp "[#*%;]+")

C-c @ C-d	-- hide-subtree
C-c @ C-s	-- show-subtree

# (find-efunction 'outline-show-entry)

(find-eek "C-x 8 C-h")
(find-eek "C-x 8 C-h" nil '(find-emajormode-links))
(find-eek "C-x 8 C-h" "C-x 8 <")
(find-eek "C-x 8 C-h" "C-x 8 <" '(outline-show-entry))
(find-eek "C-x 8 C-h" nil '(eek "RET"))






#####
#
# emms
# 2004aug13 / 2020dec31
#
#####

# «emms»  (to ".emms")
# http://www.gnu.org/software/emms/
# https://www.emacswiki.org/emacs/EMMS
# https://www.gnu.org/software/emms/manual/#Quickstart-Guide
# (code-c-d "emms" "~/usrc/emms/" "~/usrc/emms/emms")
# (code-c-d "emms" "/usr/share/emacs/site-lisp/emms/" "emms")
# (find-emmsfile "")
# (find-emmsfile "emms-player-simple.el")
# (find-emmsfile "README")
# (find-emmsnode "")

<yrk> edrx: emms is currently available via elpa. melpa have never
      coordinated with me (the maintainer) so I have no idea what's
      up with that
<edrx> yrk: so it's better to use the version in elpa, right?
<yrk> edrx: that's where we (the emms devs) release to
<yrk> emms used to be released as a tarball, but then people asked
      for it to be available via elpa, so that is what we did
<edrx> yrk: ok, thanks!

# (find-epackage-links 'emms)
# (find-epackage       'emms)
# (code-c-d "emms" "~/.emacs.d/elpa/emms-6.3/")
# (find-emmsfile "")

#*
rm -Rv ~/usrc/emms/
cd     ~/usrc/
cvs -z3 -d:ext:[email protected]:/cvsroot/emms co emms
cd     ~/usrc/emms/
make clean
make emms-auto.el emms.info

#*
mkdir /tmp/emms/

#*
;; (find-emmsfile "")
(add-to-list 'load-path "~/usrc/emms/")
(require 'emms-auto)

(require 'emms)
(require 'emms-player-simple)
(require 'emms-source-file)
(require 'emms-pbi)
(define-emms-simple-player bplay "\\.[wW][aA][vV]$" "bplay")
(setq emms-player-list '(emms-player-mpg321
                         emms-player-ogg123
                         emms-player-bplay))


;; (find-fline "/hdb2/CDs/rips/stooges/")
;;
(emms-play-file "/hdb2/CDs/rips/stooges/track05.cdda.ogg")
(emms-add-file  "/hdb2/CDs/rips/stooges/track04.cdda.wav")
(emms-pbi 1)



# (find-emmsnode "basic-commands")
(emms-stop)
(emms-play-file "/hdb2/CDs/rips/stooges/")
(emms-start)





#####
#
# max-lisp-eval-depth
# 2004aug25
#
#####

# «max-lisp-eval-depth»  (to ".max-lisp-eval-depth")
# (find-evardescr 'max-lisp-eval-depth)
# (find-elnode "Eval" "max-lisp-eval-depth")
#*
cd ~/bigsrc/emacs/
grep max.lisp.eval.depth $(<.files.ch)
grep     lisp.eval.depth $(<.files.ch)
#*
# max_lisp_eval_depth
# (find-ecvsfile "src/eval.c")
# (find-efile "emacs-lisp/byte-opt.el" "Tail-recursion elimination")




#####
#
# writing emacs primitives in C
# 2004aug25
#
#####

# «writing-primitives»  (to ".writing-primitives")
# (find-elnode "Writing Emacs Primitives")
# (find-ecvsfile "src/eval.c")
# (find-ecvsfile "src/Makefile.in" "eval.o floatfns.o")
# (find-ecvsfile "src/Makefile.in" "eval.o:")
# (find-ecvsfile "src/lisp.h" "#define DEFUN(")
# (find-ecvsfile "src/lisp.h" "#define DEFUN(" "#define DEFUN(")
# (find-ecvsfile "src/lisp.h" "XSETINT")
# (find-efunctiondescr 'point)
# (find-efunctiondescr '-)
# (find-ecvsfile "src/editfns.c" "Fpoint")
#*
cd ~/bigsrc/emacs/src/
if   [[ ! -e eval.c.orig   ]]; then cp -v eval.c   eval.c.orig;   fi
# if [[ ! -e Makefile.orig ]]; then cp -v Makefile Makefile.orig; fi
# chmod 644 Makefile

#*
# Patches to apply by hand:
# 1) after: (find-ecvsfile "src/eval.c" "defsubr (&Sbacktrace_frame);")
#      add: defsubr (&Slisp_eval_depth);
# 2) after: (find-ecvsfile "src/eval.c" "backtrace-frame" "\n}\n")
#      add:

/* LNAME, FNAME, SNAME, MIN, MAX, INTERACTIVE, DOC */
DEFUN ("lisp-eval-depth",
       Flisp_eval_depth,
       Slisp_eval_depth, 0, 0, 0,
       doc: /* Returns the value of the internal variable lisp_eval_depth. */)
     ()
{
  Lisp_Object temp;
  XSETINT (temp, lisp_eval_depth);
  return temp;
}

#*
# (find-ecvsfile "om-patched")
cd ~/bigsrc/emacs/
make |& tee om-patched

#*
cat > /tmp/l-e-d <<'%%%'
(find-efunctiondescr 'lisp-eval-depth)
(lisp-eval-depth)
(+ (lisp-eval-depth) 0)
%%%

emacs-cvs -nw /tmp/l-e-d

#*





#####
#
# built-in-functions
# 2019dec22
#
#####

# «built-in-functions» (to ".built-in-functions")
# (to "all-macros")
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00602.html
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwGCQcXBLPlDpkPDlvsRgxXGKst
# (find-efunctiondescr 'car)
# (find-efunctiondescr 'car "built-in function")
# (find-efunction 'describe-function)
# (find-efunction 'describe-function "built-in")
# (find-efunctiondescr 'fboundp)
# (find-efunctiondescr 'boundp)
# (find-efunctiondescr 'subrp)
# (subrp (symbol-function 'car))
# (find-elnode "Index" "* subrp:")

;; Primitives:
(defun fboundp-and-subrp (symbol)
  (and (fboundp symbol) (subrp (symbol-function symbol))))

(setq my-primitives (apropos-internal "^.*$" 'fboundp-and-subrp))

(defun my-describe (symbol) (format "(describe-function '%S)\n" symbol))

(find-estring (mapconcat 'my-describe my-primitives ""))


;; Code by tali713, 2020dec19
;;
(defvar *built-ins* nil "Alist of builtin functions and special forms")
(setq *built-ins*
      (let (subroutines)
        (mapatoms (lambda (atom)
                    (and (or (functionp atom)
                             (special-form-p atom))
                         (subrp (symbol-function atom))
                         (push atom subroutines))))
        (mapcar (lambda (subroutine)
                  `(,subroutine . ,(symbol-function subroutine)))
                subroutines)))



Ok...

I don't think I can help, then...

I've been teaching Emacs to lots of newbies lately, but my approach is
exactly the opposite of that - I prefer to suppose that their memory
is very bad and that they have very little focus, and I start by
teaching them how to create sexp hyperlinks to everything that they
find interesting in the info manual, in the elisp source, in manpages,
in PDFs, and in several other kinds of places... here are four links
to my approach if you'd like to take a look:

   http://angg.twu.net/eev-intros/find-here-links-intro.html
   http://angg.twu.net/emacsconf2019.html
   http://angg.twu.net/eev-intros/find-emacs-keys-intro.html
   http://angg.twu.net/eev-intros/find-eev-quick-intro.html

[[]],
  Eduardo Ochs
  http://angg.twu.net/#eev



#####
#
# mapatoms - and finding all functions of a certain form
# 2021dec18
#
#####

# «mapatoms»  (to ".mapatoms")
# (find-efunctiondescr 'fboundp)
# (find-efunctiondescr 'boundp)
# (find-efunctiondescr 'subrp)
# (subrp (symbol-function 'car))
# (find-elnode "Index" "* subrp:")
# (find-node "(cl)Iteration" "cl-do-all-symbols")
# (find-clnode "Other Clauses" "if CONDITION CLAUSE")

(find-efunctiondescr 'fboundp)

(defun foo (symbol)
  (if (fboundp symbol)
    (let* ((def (symbol-function symbol)))
      (and (listp def)
           (eq (car def) 'lambda)
           (< (length (ee-defun-str-for symbol)) 120)
	   ))))

(foo 'eek)

;; Broken:
(setq my-symbols
 (cl-do-all-symbols sym
   if (fboundp sym)
   and (let* ((def (symbol-function symbol)))
         (and (listp def)
              (eq (car def) 'lambda)))
   collect sym))




#####
#
# hyperlinks to the C source of emacs's primitives
# 2004aug26
#
#####

# «find-eCfunction»  (to ".find-eCfunction")

(load "find-func.el")
(load "help-fns.el")
(find-efunctiondescr '-)

;; (help-args (- "src/data.c") category help-function-def-button)

(find-efunction 'find-function-C-source)
(find-efunction 'help-C-file-name)
(find-efunction 'describe-function-1 "'C-source")

(symbol-name 'point)
(subr-name (symbol-function '-))

(help-C-file-name "-" 'subr)
(help-C-file-name '- 'subr)

* (when (eq file (quote C-source)) (setq file (help-C-file-name ... ...)))

find-function-C-source is a compiled Lisp function in `find-func'.
(find-function-C-source FUN-OR-VAR FILE VARIABLE-P)

(let ((fname (expand-file-name "data.c" find-function-C-source-directory)))
  (find-function-C-source '- fname nil))




#####
#
# setq-local
# 2021jan08
#
#####

# «setq-local»  (to ".setq-local")
# (find-efunctiondescr 'setq-local)
# (find-efunction      'setq-local)
# (find-elnode "Creating Buffer-Local" "Command: make-local-variable")
# (find-elnode "Creating Buffer-Local" "Macro: setq-local")
# (find-epp (macroexpand '(setq-local a 42)))

(setq aaa 42)
(make-local-variable 'aaa)
(setq aaa 99)
;;
;; (find-epp (buffer-local-variables) "aaa")
;;
(kill-local-variable 'aaa)
aaa

(setq aaa 42)
(setq-local aaa 99)
aaa
;; --> 99
;;
;; (find-epp (buffer-local-variables) "aaa")
;;
(kill-local-variable 'aaa)
aaa
;; --> 42

(setq-local mode-line-format nil)
(kill-local-variable 'mode-line-format)
(force-mode-line-update)




#####
#
# mode line
# 2004aug28 / 2021jan08
#
#####

# «mode-line»  (to ".mode-line")
# (find-elnode "Mode Line Format")
# (find-elnode "Mode Line Data")
# (find-evariable 'mode-line-modified)
# (find-evardescr 'mode-line-format)
# (find-epp        mode-line-format)

# (find-efunctiondescr 'format-mode-line)
# (find-efunction      'format-mode-line)
# (find-evardescr 'mode-line-format)
# (find-evariable 'mode-line-format)
# (info "(elisp)Refresh Screen")

# (setq-local mode-line-format nil)
# (kill-local-variable 'mode-line-format)
# (redraw-display)



#####
#
# global-mode-string
# 2024feb24
#
#####

# «global-mode-string»  (to ".global-mode-string")
# (find-evardescr 'global-mode-string)
# (find-hvariable 'global-mode-string)
# (find-elnode "Index" "* global-mode-string:")

(setq my-gms-var " VAR")
		                 global-mode-string
		         (append global-mode-string '(my-gms-var))
(setq global-mode-string (append global-mode-string '(my-gms-var)))
		                             global-mode-string
	                 (remove 'my-gms-var global-mode-string)
(setq global-mode-string (remove 'my-gms-var global-mode-string))




#####
#
# lighter
# 2023feb08
#
#####

# «lighter»  (to ".lighter")
# https://lists.gnu.org/archive/html/emacs-devel/2023-02/msg00203.html Basil:

Some modes expose the mode lighter as a user option,
e.g. flymake-mode-line-lighter.  I suspect fewer do so in emacs.git than
in the wider ecosystem.

FWIW I use delight from GNU ELPA for this purpose, e.g.:

  (delight
   '((emacs-lisp-mode "(�)" :major)
     (lisp-interaction-mode "(�)" :major)))



#####
#
# mode-line-highlight
# 2023jan28
#
#####

# «mode-line-highlight»  (to ".mode-line-highlight")
# (find-efile "progmodes/elisp-mode.el" "(lexical-binding (:propertize \"/l\"")
# (find-efile "faces.el" "(defface mode-line-highlight")
# (find-eface-links 'mode-line-highlight)
# (find-eface-links 'warning)

(define-minor-mode MAIN-mode
  "Help 1"
  :init-value t
  :global t
  :lighter (propertize " MAIN" 'face 'eev-glyph-face-yellow-on-red))

(define-minor-mode MAIN-mode
  "Help 1"
  :init-value t
  :global t
  :lighter (propertize " MAIN" 'face 'warning))

(find-eppm '

(define-minor-mode MAIN-mode
  "Help 1"
  :init-value t
  :global t
  :lighter (propertize " MAIN" 'face 'region))

)

(define-minor-mode MAIN-mode
  "Help 1"
  :init-value t
  :global t
  :lighter " ")


(find-eppm '

(define-derived-mode my-emacs-lisp-mode lisp-data-mode
  `("ELisp"
    (lexical-binding (:propertize "/l"
                      help-echo "Using lexical-binding mode")
                     (:propertize "/d"
                      help-echo "Using old dynamic scoping mode"
		      face warning)))
  ""
  :group 'lisp
  )

)







#####
#
# compilation-mode
# 2021dec12
#
#####

# «compilation-mode»  (to ".compilation-mode")
# (find-angg ".emacs" "no-mode-line")
# (find-efunctiondescr 'compilation-mode)
# (find-efunction      'compilation-mode)
# (find-evardescr      'mode-line-format)
# (find-evardescr      'mode-line-format "nil means don" "t display a mode line")
# (find-evariable      'mode-line-format)
# (find-evardescr      'mode-line-buffer-identification)
# (find-evariable      'mode-line-buffer-identification)
# (find-efunctiondescr 'propertized-buffer-identification)
# (find-efunction      'propertized-buffer-identification)





#####
#
# generic modes
# 2013jul27
#
#####

# «generic-x»  (to ".generic-x")
# (find-efunction 'fvwm-generic-mode)
# (find-efile "emacs-lisp/generic.el")
# (find-efile "generic-x.el")
# (find-efile "generic-x.el" "declare-function")
# (find-elnode "Generic Modes")





#####
#
# key translations
# 2004aug28
#
#####

# «key-translations»  (to ".key-translations")
# There are things like
# M-[ [ 3 ~       <deletechar>
# in the output of C-h b - i.e., of (describe-bindings).
# How do I get those?

# (find-elnode "Translating Input")
# (find-elnode "Translating Input" "Variable: function-key-map")

(load "term/xterm.el")
(find-efile "term/xterm.el")

(find-eevfile "eev-dev.el" "define-key")
(define-key eev-mode-map [f3]   'eebd-function)
(define-key function-key-map "\M-[[3~" 'up)
(define-key function-key-map "\M-[[3~" 'deletechar)
(define-key function-key-map "\e[3~" [deletechar])

(progn (describe-bindings) (ee-isearch "3 ~"))
(progn (describe-bindings) (ee-isearch "<deletechar>"))




#####
#
# propertize
# 2004aug28
#
#####

# «propertize»  (to ".propertize")
# (find-angggrep "grep --color=auto -nH --null -e proper elisp/*.el")
# (find-angggrep "grep --color=auto -nH --null -e proper eev-current/*.el")
# (find-elnode "Special Properties")
# (find-elnode "Face Attributes")
# (find-elnode "Display Property")
# (find-efunctiondescr 'propertize)
# (find-efunctiondescr 'put-text-property)
# (find-efunctiondescr 'add-display-text-property)

(equal (propertize "foo" 'face 'foo)
       "foo")

(insert
 (propertize "a"
   'face '(:foreground "red" :background "#223344")
   'mouse-face '(:foreground "green")
))

(insert (propertize "abcd" 'face '(:foreground "yellow")))
(insert (propertize "abcd" 'face 'eev-glyph-face-green))

# (find-angg ".emacs" "ee-set-region-face")
# (find-epp (mapcar (lambda (face) (cons (face-id face) face)) (face-list)))




#####
#
# find-epropertize
# 2024oct11
#
#####

# «find-epropertize»  (to ".find-epropertize")
# (find-eev "eev-blinks.el" "find-epropertize")
# (find-elnode "Special Properties" "help-echo")
# (find-elnode "Special Properties" "keymap")
# (find-elnode "Special Properties" "minibuffer-message")
# (find-elnode "Special Properties" "point-entered")
# (find-elnode "Special Properties" "cursor-sensor-functions")
# (find-egrep "grep --color=auto -nH --null -e cursor-sensor-functions *.el */*.el")

(find-estring (propertize "a" 'face '(:foreground "red")))
(find-estring (propertize "a" 'face '(:background "red")))
(find-estring (propertize "a" 'help-echo '(:background "red")))

(defun find-epropertize (properties)
  (let* ((str1 (apply 'propertize "Some text" properties))
         (str (concat str1 "\n\n")))
    (find-2a nil `(find-estring ,str 3))))

(find-epropertize '(face (:foreground "red")))
(find-epropertize '(face (:foreground "yellow" :background "red")))
(find-epropertize '(face                      (:background "red")))
(find-epropertize '(face font-lock-comment-face))
(find-epropertize '(mouse-face highlight))

(setq       ee-fep-keymap (make-sparse-keymap))
(define-key ee-fep-keymap (kbd "C-c C-c") 'next-line)
(find-epropertize `(keymap ,ee-fep-keymap))
(find-epropertize `(keymap ,ee-fep-keymap mouse-face highlight))






#####
#
# default-face-attributes
# 2022may14
#
#####

# «default-face-attributes»  (to ".default-face-attributes")
# «ee-mono-height»           (to ".ee-mono-height")
# (find-angg ".emacs" "ee-set-region-face")
# (find-eface-links 'variable-pitch)
# (find-eface-links 'default)
# (find-epp (face-all-attributes 'variable-pitch (selected-frame)))

(set-frame-font "Monospace 16")
(set-frame-font "Monospace 40")
(describe-face 'default)
(find-epp (face-all-attributes 'default (selected-frame)))

(defun ee-mono-height (height)
 `(:family "DejaVu Sans Mono"
   :foundry "PfEd"
   :width normal
   :height ,height
   :weight regular
   :slant normal))

(setq ee-mono-16 (ee-mono-height 158))
(setq ee-mono-40 (ee-mono-height 398))

(ee-set-region-face (ee-bol) (+ 4 (ee-bol)) '(:foreground "green"))
(ee-set-region-face (ee-bol) (+ 4 (ee-bol)) ee-mono-16)
(ee-set-region-face (ee-bol) (+ 4 (ee-bol)) ee-mono-40)
(ee-set-region-face (ee-bol) (+ 4 (ee-bol)) (ee-mono-height 398))

(defun bigc (pos) (interactive "d")
  (ee-set-region-face (+ -1 pos) pos ee-mono-40))

(defun ee-set-region-face (start end face)
  (put-text-property start end 'face face))
(defun ee-set-region-fg (start end fg)
  (put-text-property start end 'face `(:foreground ,fg)))

(ee-set-region-fg (point) (+ 30 (point)) "yellow")

(defun sf0 (s e) (interactive "r") (ee-set-region-fg s e "yellow"))




# (find-sh "xlsfonts | sort | grep    ^-")
# (find-sh "xlsfonts | sort | grep -v ^-")
xterm -fn 10x20 &

Q: how to set a piece of text to a specific (non-fontset-ish) font?




#####
#
# the `keymap' and `display' text properties
# 2004sep13
#
#####

# «keymap-property»  (to ".keymap-property")
# (find-elnode "Format of Keymaps")
# (find-elnode "Special Properties" "keymap")

(let ((action (lambda () (interactive)
		(highlight-temporarily
		 (previous-char-property-change (point))
		 (next-char-property-change (point))))))
  (insert (propertize "press `?' on me"
		      'keymap `(keymap (?? . ,action)))))

# «display-property»  (to ".display-property")
# (find-angg ".emacs" "show-as-image")
# (find-elnode "Special Properties" "`display'")
# (find-elnode "Other Display Specs")
# (find-elnode "Image Descriptors")

(let* ((fname "~/IMAGES/kaoya.png")
       (image-data (with-temp-buffer
		     (set-buffer-multibyte nil)
		     (insert-file-contents-literally fname)
		     (buffer-string)))
       (display-props `(image :type png :data ,image-data)))
  (insert (propertize "?" 'display display-props)))





#####
#
# elpoint
# 2004aug22
#
#####

# Not working yet - problems with the gothic fontset
# (find-status "elpoint")
# (find-vldifile "elpoint.list")
# (find-fline "/usr/share/doc/elpoint/")
# (find-fline "/usr/share/doc/elpoint/examples/")
# (find-fline "/usr/share/emacs/site-lisp/elpoint/ept-setup.el")
# (find-fline "/usr/share/emacs/site-lisp/elpoint/")
# (setq ept-use-kochi nil)
# (require 'ept-setup)
# (find-fline "/usr/share/doc/elpoint/examples/sample.ept.gz")
#*
rm -Rv /tmp/elpoint/
mkdir  /tmp/elpoint/

#*




#####
#
# frames / 2021oct30
# 2004sep05
#
#####

# «frames»  (to ".frames")
# (find-elnode "Initial Parameters")

# (find-elnode "Parameter Access")
# (find-eapropos "frame")
# (find-eapropos "window")

(set-frame-font "5x7")
(set-frame-font "fixed")
(set-frame-font "nil2")

(find-eapropos "frame")

(frame-list)
(selected-frame)
(frame-root-window)
(window-buffer (frame-root-window))
(buffer-file-name (window-buffer (frame-root-window)))

(frames-on-display-list)
(frame-parameter nil 'display)

(make-frame)
(find-evardescr 'frame-title-format)
modify-frame-parameters

# (find-eapropos "window")




#####
#
# scroll bars
# 2004sep06
#
#####

# «scroll-bars»  (to ".scroll-bars")
# (find-elnode "Standard Faces")
# (find-eapropos "scroll-bar")
# (find-eapropos "set-face")

(set-face-background 'scroll-bar "gray20")
(set-face-foreground 'scroll-bar "blue")
(set-face-foreground 'scroll-bar nil)
(find-efacedescr 'scroll-bar)

(toggle-horizontal-scroll-bar)
(toggle-scroll-bar nil)
(scroll-bar-mode nil)
(set-scroll-bar-mode nil)
(set-scroll-bar-mode 'left)
(set-scroll-bar-mode 'right)




#####
#
# ebnf2ps
# 2004sep15
#
#####

# «ebnf2ps»  (to ".ebnf2ps")
#*
cat > /tmp/foo.ebnf <<'%%%'
;; (find-efile "progmodes/ebnf2ps.el")
;; (require 'ebnf2ps)
;; (ebnf-print-buffer "/tmp/foo.ps")
;; (start-process "gv" nil "gv" "/tmp/foo.ps")
;;
EBNF = {production}+.
production = non_terminal "=" body ".".   ;; production
body = {sequence || "|"}*.                ;; alternative
sequence = {exception}*.                  ;; sequence
exception = repeat [ "-" repeat].         ;; exception
repeat = [ integer "*" ] term.            ;; repetition
term = factor
     | [factor] "+"                       ;; one-or-more
     | [factor] "/" [factor]              ;; one-or-more
     .
factor = [ "$" ] "\"" terminal "\""       ;; terminal
       | [ "$" ] non_terminal             ;; non-terminal
       | [ "$" ] "?" special "?"          ;; special
       | "(" body ")"                     ;; group
       | "[" body "]"                     ;; zero-or-one
       | "{" body [ "||" body ] "}+"      ;; one-or-more
       | "{" body [ "||" body ] "}*"      ;; zero-or-more
       | "{" body [ "||" body ] "}"       ;; zero-or-more
       .
non_terminal = "[!#%&'*-,0-:<>@-Z\\\\^-z~\\240-\\377]+".
terminal = "\\([^\"\\]\\|\\\\[ -~\\240-\\377]\\)+".
special = "[^?\\n\\000-\\010\\016-\\037\\177-\\237]*".
integer = "[0-9]+".
comment = ";" "[^\\n\\000-\\010\\016-\\037\\177-\\237]*" "\\n".
%%%

#*
# (find-fline "/tmp/foo.ebnf")




#####
#
# constant variables (keywords)
# 2004oct06
#
#####

# «keywords»  (to ".keywords")
# (find-elnode "Constant Variables")
(keywordp :foo)
(keywordp 'a)

# (find-eevfile "eev-dev.el" "ee-goto-position")
# (find-node "(elisp)Function Cells")

# To do: add support for `:ov' (overstring), before the name of the
# file (?) in find-fline and friends

(defun defun-backup-maybe (fun-symbol-orig fun-symbol)
  (or (fboundp fun-symbol-orig)
      (fset fun-symbol-orig (symbol-function fun-symbol))))

(defun-backup-maybe 'ee-goto-position-orig 'ee-goto-position)

(defun ee-goto-position (&rest pos-spec-list)
  (if




#####
#
# timers
# 2004oct08
#
#####

# «timers»  (to ".timers")
# (find-elnode "Timers")
# (find-efunction 'run-at-time)
# (find-efunctiondescr 'run-at-time)

# (find-angg "elisp/tron.el")
# (find-efunction 'run-with-timer)

# (find-efunction-links 'list-timers)
# (find-efunctiondescr  'list-timers)
# (find-efunction       'list-timers)
# (find-elnode "Index" "* list-timers:")

# (find-eevfile "eev-flash.el" "run-at-time")






#####
#
# hooks
# 2000nov05 / 2022jan30
#
#####

# «hooks»  (to ".hooks")
# (find-efunctiondescr 'add-hook)
# (find-efunction      'add-hook)
# (find-elnode "Hooks")
# (find-elnode "Setting Hooks")

(defun edrx-hook () (message "Hello!\n"))
(add-hook 'latex-mode-hook 'edrx-hook)
(add-hook 'LaTeX-mode-hook 'edrx-hook)

# (find-fline "~/LATEX/tese2.sty")
# (switch-to-buffer "*Messages*")

# My own autojoin for erc:
# 2004oct08

# (find-rfcfile "rfc2812.txt")
# (find-ercfile "erc.el" "end of MOTD")
# (find-evariable 'erc-after-connect)
# (find-evardescr 'erc-after-connect)
# (find-elnode "Hooks")
# (find-evariable 'erc-server-name)

;; (find-angg ".emacs" "freenode-join")

(defun erc-usermodelinux-joins (&rest rest)
  (message (format "erc-usermodelinux-joins: %S" rest)))

(defun erc-usermodelinux-joins (&rest rest)
  (with-current-buffer "irc.usermodelinux.org:6667"
    (erc-cmd-JOIN "#uml")))

(add-hook 'erc-after-connect 'erc-usermodelinux-joins)

(erc-select :server "irc.usermodelinux.org" :port 6667)

(defun freenode-join (channelname)
  (with-current-buffer "irc.freenode.net:6667"
    (erc-cmd-JOIN channelname)))


irc.usermodelinux.org
#uml





#####
#
# completing debian package names
# 2004oct12
#
#####

# «apt-cache-pkgsearch»  (to ".apt-cache-pkgsearch")
#*
apt-cache pkgsearch netc
#*
apt-cache pkgsearch netc
from man apt-cache: "pkgnames [ prefix ] (...) The output is suitable
for use in a shell tab complete function and the output is generated
extremely quickly."
anyone knows how to use apt-cache pkgsearch for completion in emacs?
I'd like to use it in an interactive function that jumps to the
description of a package in /var/lib/dpkg/info/available ...
btw: grep apt-cache $(find /usr/share/emacs/site-lisp/
 /etc/emacs/site-start.d/ -type f) gives nothing here

# (find-elnode "Minibuffer Completion")
# (find-elnode "Completion Commands")
# (find-elnode "Programmed Completion")

# (find-efunctiondescr 'minibuffer-complete)




#####
#
# customize-themes
# 2022apr16
#
#####

# «themes»            (to ".themes")
# «customize-themes»  (to ".customize-themes")
# (eek "M-h M-k  <menu-bar> <options> <customize> <customize-themes>")
# (find-enode "Custom Themes")
# (find-enode "Creating Custom Themes")
# (find-efunctiondescr 'customize-themes)
# (find-efunction      'customize-themes)
# (customize-themes)
# (find-evardescr 'custom-theme-load-path)
# (find-evariable 'custom-theme-load-path)
# (find-evardescr 'custom-theme-directory)
# (find-evariable 'custom-theme-directory)
# (find-evardescr 'data-directory)
# (find-evariable 'data-directory)
# (find-eetcfile "")
# (find-eetcfile "themes/")
# (find-eetcfile "themes/modus-themes.el")
# (find-fline "~/.emacs.d/")
# https://www.emacswiki.org/emacs/CustomThemes
# https://www.emacswiki.org/emacs/ColorThemes



#####
#
# modus-themes
# 2021nov22
#
#####

# «modus-themes»  (to ".modus-themes")
# (find-epackage-links 'modus-themes "modusthemes" t)
# (find-epackage       'modus-themes)
# (code-c-d "modusthemes" "~/.emacs.d/elpa/modus-themes-20211122.446/" "modus-themes")
# (find-modusthemesfile "")
# (find-node "(modus-themes)Top")
# (find-modusthemesnode "")

# https://protesilaos.com/codelog/2021-11-18-modus-themes-1-7-0/
# https://christiantietze.de/posts/2023/01/modus-themes-v4-changes/

# (find-youtubedl-links "/sda5/videos/" "Emacs_-_modus-themes_version_4_major_feature" "kPNMHrF4Lq8" ".webm" "modusthemes4")
# (code-video "modusthemes4video" "/sda5/videos/Emacs_-_modus-themes_version_4_major_feature-kPNMHrF4Lq8.webm")
# (find-modusthemes4video "0:00")
# (find-yttranscript-links "modusthemes4" "kPNMHrF4Lq8")

https://protesilaos.com/codelog/2023-01-06-re-modus-questions-disability/
https://lists.sr.ht/~protesilaos/modus-themes/




#####
#
# color-themes
# 2019aug18
#
#####

# «themes»  (to ".themes")
# (find-epackages)
# (find-sh "grep theme /tmp/o")
# https://www.emacswiki.org/emacs/ColorTheme
# https://www.emacswiki.org/emacs/ColorThemes
# https://www.emacswiki.org/emacs/ColorThemeQuestions
# http://www.nongnu.org/color-theme/
# options -> customize emacs -> custom themes

# https://www.emacswiki.org/emacs/CustomThemes
# (find-enode "Custom Themes")
# (find-epackage 'theme-looper)
(code-c-d "themelooper" "~/.emacs.d/elpa/theme-looper-20190501.127/")
;; (find-themelooperfile "")

# (find-epackage 'theme-looper)
# (code-c-d "themelooper" "~/.emacs.d/elpa/theme-looper-20190501.127/")
# (find-themelooperfile "")
# (find-themelooperfile "theme-looper.el")
# (load "theme-looper.el")
# (global-set-key (kbd "C-}") 'theme-looper-enable-next-theme)
# (global-set-key (kbd "C-{") 'theme-looper-previous-next-theme)
# (custom-available-themes)

# (eek "C-}")
# (eek "C-{")

# (find-epackage 'abyss-theme)
# (code-c-d "abysstheme" "~/.emacs.d/elpa/abyss-theme-20170808.1345/")
# (find-abyssthemefile "")
# (find-elpafile "abyss-theme-readme.txt")
# https://github.com/mgrbyte/emacs-abyss-theme
# (load "abyss-theme.el")

# (find-epackage 'alect-themes)



#####
#
# A quick hack to make emacs-git use my emacs24 colors
# 2019oct29
#
#####

# «theme-my-emacs24» (to ".theme-my-emacs24")
# (find-angg ".emacs" "emacs27-adjust-faces")
# (find-efaces "fringe")
# (find-efaces "font-lock-")

(setq my-bg-faces '(
  fringe
  ))

(setq my-fg-faces '(
  error
  font-lock-builtin-face
  font-lock-comment-delimiter-face
  font-lock-comment-face
  font-lock-constant-face
  font-lock-doc-face
  font-lock-function-name-face
  font-lock-keyword-face
  font-lock-negation-char-face
  font-lock-preprocessor-face
  font-lock-regexp-grouping-backslash
  font-lock-regexp-grouping-construct
  font-lock-string-face
  font-lock-type-face
  font-lock-variable-name-face
  font-lock-warning-face

  minibuffer-prompt
  info-header-xref

  ))

(find-epp `(progn
  ,@(mapcar (lambda (f) `(set-face-background ',f ,(face-background f)))
           my-bg-faces)
  ,@(mapcar (lambda (f) `(set-face-foreground ',f ,(face-foreground f)))
           my-fg-faces)
  ))









#####
#
# color-theme.el
# 2004oct21
#
#####

# «color-theme.el»  (to ".color-theme.el")
# http://www.emacswiki.org/cgi-bin/wiki/ColorTheme
# http://www.emacswiki.org/cgi-bin/wiki/ColorThemeMaker
# http://www.emacswiki.org/elisp/color-theme.el.gz
#*
zcat $S/http/www.emacswiki.org/elisp/color-theme.el.gz > ~/elisp/color-theme.el
#*
# (load-library "color-theme.el")

(color-theme-select)
(color-theme-describe)

(color-theme-lawrence)
(color-theme-jsc-dark)
(color-theme-billw)
(color-theme-andreas)
(color-theme-arjen)
(color-theme-hober)
(color-theme-emacs-21)

(color-theme-print)

# «dto»
# dto uses this (and is having problems with
(color-theme-dark-blue2)
(color-theme-terryp)



#####
#
# toggle-theme
# 2022oct21
#
#####

# «toggle-theme»  (to ".toggle-theme")
# (find-efunctiondescr 'toggle-theme)
# (find-efunction      'toggle-theme)



#####
#
# standard-themes
# 2022dec01
#
#####

# «standard-themes»  (to ".standard-themes")
# (find-epackage-links 'standard-themes "standardthemes" t)
# (find-epackage       'standard-themes)
# (code-c-d "standardthemes" "~/.emacs.d/elpa/standard-themes-1.0.2/")
# (find-standardthemesfile "")
# https://github.com/protesilaos/standard-themes
# https://git.sr.ht/~protesilaos/standard-themes



#####
#
# disable-theme
# 2024feb18
#
#####

# «disable-theme»  (to ".disable-theme")
# (find-efunction 'disable-theme)




#####
#
# fontifying a whole buffer
# 2004oct25
#
#####

# «fontify-whole-buffer»  (to ".fontify-whole-buffer")

(defvar modeless nil)
(make-variable-buffer-local 'modeless)

(defun find-modeless (&rest pos-spec-list)
  (if modeless
      (apply 'ee-goto-position pos-spec-list)
    (let ((modeless-buffer-name (concat (buffer-name) " (modeless)")))
      (if (get-buffer modeless-buffer-name)
	  (apply 'find-ebuffer modeless-buffer-name pos-spec-list)
	(let ((contents (buffer-substring (point-min) (point-max))))
	  (find-ebuffer modeless-buffer-name)
	  (setq modeless t)
	  (insert contents)
	  (goto-char (point-min))
	  (apply 'ee-goto-position pos-spec-list))))))

(defun ee-kill-buffer (buffer-or-name &rest rest)
  (if (get-buffer buffer-or-name) (kill-buffer buffer-or-name))
  (if rest (apply 'ee-kill-buffer rest)))

;; (find-efunctiondescr 'font-lock-mode)
;; (find-efunctiondescr 'font-lock-fontify-buffer)
;; (find-evardescr 'font-lock-support-mode)
;; (find-evardescr 'font-lock-support-mode)
;; (find-efunctiondescr 'lazy-lock-mode)
;; (find-efunctiondescr 'fast-lock-mode)
;; (find-efunctiondescr 'jit-lock-mode)
 (setq font-lock-maximum-decoration t)

;; Choose files:
;; (find-efile "")

;; follow.el is big (80KB).
;; Font-locking doesn't happen immediately
;;
(progn (ee-kill-buffer "follow.el" "follow.el (modeless)")
       (find-efile "follow.el")
       ;; (font-lock-fontify-buffer)
       (font-lock-mode 1)
       (jit-lock-fontify-now)
       (find-modeless 200))

;; abbrevlist.el is small (1.5KB).
;; Font-locking doesn't happen immediately
;;
(progn (find-efile "abbrevlist.el")
       (font-lock-mode 1)
       (find-modeless 200))

;; (find-efile "font-lock.el")
;; (find-efile "jit-lock.el")
;; (find-efile "lazy-lock.el")
;; (find-efile "fast-lock.el")





#####
#
# key sequence echo messages
# 2004nov15
#
#####

# «key-sequence-echo-message»  (to ".key-sequence-echo-message")

...here's where I'm now: I still haven't found out how C-h has a
different prompt - "(Type ? for further options)" - and how I can set
such prompts in my keymaps... I think this deserves 17 lines of flood...
.
(key-binding "\C-h")
help-command
(symbol-function 'help-command)
(symbol-plist 'help-command)
(setq a (symbol-function 'help-command))
(describe-variable 'a)
.
cd /usr/share/emacs/21.3/lisp/
grep -i 'for further options' $(find * -name '*.el')
.
this only finds the string in emacs-lisp/helper.el - which means
the string comes from the source code. Grepping the source I find it
at: (find-ecvsfile "src/keyboard.c" "(Type ? for further options)")

# (find-efile "help.el")
# (find-efile "help-macro.el")
# (find-efile "emacs-lisp/helper.el")





#####
#
# ee-thing-at-point: notes and drafts
# 2004aug20
#
#####

# «ee-stuff-around-point»  (to ".ee-stuff-around-point")
# (find-eevfile "eev-dev.el" "ee-stuff-around-point")
# (find-efile "thingatpt.el")

# In eev I'm using something similar to thing-at-point but technically
# much simpler; that's because I don't understand thing-at-point well
# enough.

(defun ee-thing-at-point (kind-of-thing &optional show-it)
  (interactive "SKind of thing: \np")
  (let ((thing (thing-at-point kind-of-thing)))
    (if show-it (message "%S" thing)
      thing)))

(defun ee-word-at-point (&optional show-it)
  (interactive "p")
  (ee-thing-at-point show-it))

(call-interactively 'ee-thing-at-point)

(call-interactively
 (lambda (&rest args)
   (interactive "SKind of thing: \np")
   args))

(thing-at-point 'word)

;; Reducing empty strings to nil (for debpackages, for example:

(defun ee-empty-becomes-nil (str)
  (if (equal str "") nil str))

;; (info "(emacs)Dynamic Abbrevs")




#####
#
# thing-at-point-url-regexp
# 2019jul09
#
#####

# «thing-at-point-url-regexp» (to ".thing-at-point-url-regexp")
# (find-gitemacsfile "lisp/ChangeLog.16" "thing-at-point-url-regexp" "deleted")
# (find-eev "eev-tlinks.el" "find-git-links")
# (find-egrep "zgrep --color -nH -e url-regexp thingatpt.el*")
# (find-evardescr 'thing-at-point-beginning-of-url-regexp)
# (find-evariable 'thing-at-point-beginning-of-url-regexp)
# (find-evardescr 'thing-at-point-uri-schemes)
# (find-evariable 'thing-at-point-uri-schemes)
# (find-evariable 'thing-at-point-uri-schemes "git://")

# (find-efunctiondescr 'thing-at-point)
# (find-efunction 'thing-at-point)
# (find-elnode "Index" "* thing-at-point:")

# (find-efile "thingatpt.el")



#####
#
# ffap
# 2001jul26
#
#####

# «ffap»  (to ".ffap")
# (find-efile "ffap.el" "url from the text around")

/usr/share/emacs/20.7/lisp/ffap.el
ftp://127.0.0.1/

(require 'ffap)
(ffap-bindings)




#####
#
# basic datatypes: cons, string, symbol, window, buffer, etc
# 2004dec16
#
#####

# «datatypes»  (to ".datatypes")

# (find-ecvsfile "src/")
# (find-ecvsfile "src/lisp.h")
# (find-ecvsfile "src/lisp.h"  "\nunion Lisp_Object\n")
# (find-ecvsfile "src/lisp.h"   "\nenum Lisp_Type\n")
# (find-ecvsfile "src/lisp.h"   "\nenum Lisp_Misc_Type\n")
# (find-ecvsfile "src/lisp.h" "#define XCONS(a)")
# (find-ecvsfile "src/lisp.h" "#define XSTRING(a)")
# (find-ecvsfile "src/lisp.h" "#define XSYMBOL(a)")

# (find-ecvsfile "src/lisp.h" "\nstruct Lisp_Cons\n")
# (find-ecvsfile "src/lisp.h" "\nstruct Lisp_String\n")
# (find-ecvsfile "src/lisp.h" "\nstruct Lisp_Symbol\n")

# (find-ecvsfile "src/frame.h"  "\nstruct frame\n")
# (find-ecvsfile "src/window.h" "\nstruct window\n")
# (find-ecvsfile "src/buffer.h" "\nstruct buffer_text\n")
# (find-ecvsfile "src/buffer.h" "\nstruct buffer\n")

# Select the right tags table by hand:
# code-c-d:    (setq ee-ecvstagsfile "~/bigsrc/emacs/TAGS")
# C source:    (setq ee-ecvstagsfile "~/bigsrc/emacs/src/TAGS")
# Lisp source: (setq ee-ecvstagsfile "~/bigsrc/emacs/src/TAGS-LISP")
# (find-ecvsfile "omT")
# (find-ecvsfile "src/" "TAGS")



#####
#
# disassemble
# 2004dec16
#
#####

# «disassemble»  (to ".disassemble")
# (find-efunction 'disassemble)
# (find-efile "emacs-lisp/")
# (find-elnode "Disassembly")

# (find-efile "emacs-lisp/bytecomp.el")
# (find-efile "emacs-lisp/byte-opt.el")
# (find-efile "emacs-lisp/byte-run.el")
# (find-efile "emacs-lisp/disass.el")

(defun factorial (integer)
  "Compute factorial of an integer."
  (if (= 1 integer) 1
    (* integer (factorial (1- integer)))))

(factorial 4)

(disassemble 'factorial)




#####
#
# Erc bugs
# 2004dec16
#
#####

# «erc-bugs»  (to ".erc-bugs")

I use a dial-up connection, and if I start an Emacs session when I'm
offline, then connect, then run erc-select, I get this error:

  open-network-stream-nowait:
  irc.freenode.net/6667 Temporary failure in name resolution

Emacs sessions started while I'm online don't have this problem and
connect normally.

This bug shows up both in sarge's Emacs and in CVS Emacs.

People on #emacs have suggested me to try this:
  (open-network-stream "test" "*test*" "irc.freenode.net" 6667)
but I still don't see the connection...




#####
#
# htmlfontify
# 2013sep27 / 2019mar03
#
#####

# «htmlfontify»  (to ".htmlfontify")
# (find-epackages 0 "htmlfontify")
# (find-epackage 'htmlfontify)

# (find-sh "locate htmlfontify")
# (find-efile "htmlfontify.el")
# (find-node "(htmlfontify)Top")
# (find-node "(htmlfontify)Usage & Examples")
# (find-node "(htmlfontify)Interactive")
# (require 'htmlfontify)
# (find-efunction 'htmlfontify-buffer)
# (find-evariable 'htmlfontify-manual)

# (find-fline "~/eev-current/eev-brxxx.el")

# (find-eevfile                 "eev-brxxx.el")
# (find-sh0 "cp -v ~/eev-current/eev-brxxx.el /tmp/")
# (find-fline "/tmp/eev-brxxx.el")
# (find-fline "/tmp/eev-brxxx.el.html")
#       file:///tmp/eev-brxxx.el.html
#

# (find-fline "/tmp/eev-brxxx.el.html")
#
# Fixes needed for eev:
#   font-family: fixed -> monospace
#   force the presence of glyph fonts
#   (find-efile "htmlfontify.el" "hfy-sprintf-stylesheet")
#   (find-efile "htmlfontify.el" "hfy-compile-stylesheet")
# (find-node "(htmlfontify)Non-interactive" "`hfy-compile-stylesheet'")

<mbrumlow> edrx: I use htmlfontify right now.
<mbrumlow> edrx: here is a example
           https://brumlow.io/~m/p/scpaste.el.html
<mbrumlow> there is htmlize too I think.

<edrx> any users of htmlfontify here?
<MoziM> libertyprime: are these minor modes that you invoke
        manually?
<edrx> I am trying to use it for some of my elisp files, but only a
       few of the faces that I use become monospaced fonts in the
       html output... example:
       http://angg.twu.net/hf/eev-template0.el.html
<ashawley> edrx: Probably goes away when you try with emacs -Q?
<edrx> ashawley: good idea. trying...
<edrx> ashawley: that nailed it. With "-Q" all the faces were
       converted to "font-family: DejaVu Sans Mono" in the style
       block, and without "-Q" they were converted to "font-family:
       fixed". Thanks for the idea! =)






#####
#
# htmlfontify and mkhtml
# 2004dec28
#
#####

# «mkhtml»  (to ".mkhtml")
# «htmlfontify-old» (to ".htmlfontify-old")
# http://www.emacswiki.org/cgi-bin/wiki/SaveAsHtml
# http://rtfm.etla.org/emacs/htmlfontify/
# http://rtfm.etla.org/emacs/htmlfontify/htmlfontify_0.20+texinfo.tar.gz

# http://www.emacswiki.org/elisp/mkhtml.el
cp -v $S/http/www.emacswiki.org/elisp/mkhtml.el ~/elisp/

# http://list-archive.xemacs.org/xemacs-beta/199811/msg00318.html
# (find-fline "$S/http/list-archive.xemacs.org/xemacs-beta/199811/msg00318.html"
              "htmlize-make-face-hash")
# (find-fline "~/elisp/htmlize.el")

# (require 'htmlize)
# (require 'mkhtml)

;; (find-fline "/tmp/foo.el")
;; (find-efunction 'mkhtml-any-buffer)
;; (find-elnode "Special Properties" "`mouse-face'")
;; (emacs-lisp-mode)

(defun set-sexp-mouse-face (target)
  (let ((e (point))
	(b (save-excursion (eek-backward-sexp))))
    (put-text-property b e 'mouse-face target)))

(set-sexp-mouse-face "http://127.0.0.1/vcarchives/")

;; (mkhtml-any-buffer)
;; (find-fline ".")

;; Oh no:
;; save-excursion: Symbol's function definition is void: htmlize-make-face-hash
;; A version of htmlize with `htmlize-make-face-hash':
;; http://list-archive.xemacs.org/xemacs-beta/199811/msg00318.html




#####
#
# emacs-bidi
# 2005jan03
#
#####

# «emacs-bidi»  (to ".emacs-bidi")
# Just to take a look at emacs-bidi's input methods. I'm just
# trying to find a reasonable way for typing a few sentences in
# Arabic in Emacs - it doesn't matter if I'll have to type each
# word starting by the last character.

# http://www.m17n.org/emacs-bidi/arabic.html
# http://www.m17n.org/emacs-bidi/
# ftp://ftp.m17n.org/pub/mule/.notready/m17nfonts.tar.gz

#*
rm -Rv ~/bigsrc/emacs-bidi/
tar -C ~/bigsrc/ \
  -xvzf $S/ftp/ftp.m17n.org/pub/mule/.notready/emacs-bidi-0.9.1.tar.gz
cd     ~/bigsrc/emacs-bidi/
find * | sort > .files

#*
# (code-c-d "ebidi" "~/bigsrc/emacs-bidi/")
# (find-ebidifile "")
# (find-ebidifile ".files")
# (find-ebidifile "lisp/international/bidi.el")
# (find-ebidifile "lisp/language/")
# (find-ebidifile "lisp/language/arab-util.el")
# (find-ebidifile "lisp/language/arabic.el")




#####
#
# Notes on protecting some erc buffers against accidental killing
# 2005jan03
#
#####

# «kill-buffer-protect»  (to ".kill-buffer-protect")
# Note: there's a package that does that, but I can't remember
# its name

(get-buffer-create "foo")
(with-current-buffer "foo"
  (insert "this is buffer foo\n"))
(kill-buffer "foo")

(find-ebuffer "foo")

(defun foo-kill-buffer-function ())
(defun foo-kill-buffer-function ()
  (if (equal (buffer-name) "foo")
      (error "Buffer foo doesn't want to be killed!")))

(let ((kill-buffer-hook (cons 'foo-kill-buffer-function kill-buffer-hook)))
  (kill-buffer "foo"))




#####
#
# x-symbol
# 2005jan08
#
#####

# «x-symbol»  (to ".x-symbol")
# (find-status   "x-symbol")
# (find-vldifile "x-symbol.list")
# (find-udfile   "x-symbol/")
# (find-vldifile "x-symbol.postinst")
# (find-fline "/etc/emacs/site-start.d/50x-symbol.el")
# (find-fline "/usr/share/emacs/site-lisp/x-symbol/etc/")
# (find-fline "/usr/share/emacs/site-lisp/x-symbol/etc/pcf/")

# (find-node "(x-symbol)Top")
# (find-node "(x-symbol)X-Symbol Internals")

# x-symbol is buggy on CVS Emacs, run with debug-on-error (M-5 M-e) if
# needed

(load "/etc/emacs/site-start.d/50x-symbol.el")
(x-symbol-initialize)
(x-symbol-grid)

(ascstr 0 255)

(progn (find-estring "")
       (insert (propertize (make-string 4 7351) 'face 'x-symbol-face))
       )

# (find-eapropos "x-symbol")
# (find-efunction 'x-symbol-mode)

(progn (find-fline "/tmp/foo.tex")
       (x-symbol-mode 1))

# http://x-symbol.sourceforge.net/details.html

# (find-fline "/usr/share/emacs/site-lisp/x-symbol/")
# (find-evariable 'x-symbol-latin1-fonts)
# (find-sitelispfile "x-symbol/x-symbol-vars.el" "defvar x-symbol-latin1-fonts")
# (find-sitelispfile "x-symbol/x-symbol.el" "-init-cset x-symbol-latin1-cset")
# (find-sitelispfile "x-symbol/x-symbol.el" "defvar x-symbol-latin1-table")


         Family: adobe-helvetica
Font or fontset: fontset-x-symbol-face





#####
#
# buttons
# 2005jan11 / 2022jun23
#
#####

# «buttons»  (to ".buttons")
# (find-elnode "Buttons")
# (find-angg "emlua/emlua-buttons.el")
# (find-efunction 'describe-function-1)
# (find-efunction 'describe-function-1 "help-xref-button")
# (find-efunctiondescr 'describe-function)
# (find-efunctiondescr 'describe-function "`help-")
# (find-elnode "Special Properties" "`category'")
# (find-fline "~/LOGS/2024may12.emacs" "insert-text-button")

# (find-efunctiondescr 'button-describe)
# (find-efunction      'button-describe)

# (find-eapropos "button")
# (find-eapropos "button" "button-activate")
# (find-eapropos "button" "button-at")
# (find-eapropos "button" "button-map")
# (find-eapropos "button" "\nbutton-type")
# (find-eapropos "button" "elisp-refs--describe-button")
# (find-eapropos "button" "help-button-action")
# (find-eapropos "button" "help-insert-xref-button")
# (find-eapropos "button" "helpful--buffer-button")

# (find-elnode "Making Buttons")
# (find-egrep "grep --color=auto -nH --null -e buttonize *.el */*.el")

# (find-efunctiondescr 'buttonize)
# (find-efunction      'buttonize)
# (find-elnode "Index" "* buttonize:")

(setq ee-b
  (buttonize
   "foo"
   (lambda (&rest rest) (find-2a nil '(find-epp rest)))))

(text-properties-at 0 ee-b)
(find-einspector ee-b)
(find-einspector '(text-properties-at 0 ee-b))

(defun emlua-button-pp (sexp)
  `(lambda (&rest rest) (find-2a nil '(find-epp ,sexp))))

(defun find-eppr (sexp) `(lambda (&rest rest) (find-2a nil '(find-epp ,sexp))))

(setq ee-b1 (buttonize "(+ 1 2)" (find-eppr '(+ 1 2))))
(setq ee-b2 (buttonize "(+ 3 4)" (find-eppr '(+ 3 4))))
(insert "\n" ee-b1 ee-b2)




   (lambda (&rest rest) (find-2a nil '(find-epp rest)))))


(insert "\n" ee-b)
foo

(find-einspector ee-b)



#####
#
# insert-text-button
# 2023jan02
#
#####

# «insert-text-button»  (to ".insert-text-button")
# (find-efunctiondescr   'insert-text-button)
# (find-efunction        'insert-text-button)
# (find-elnode "Index" "* insert-text-button:")
# (find-elnode "Making Buttons")
# (find-elnode "Button Properties")
# (find-fline "~/LOGS/2024aug10.incal")

(progn (insert "\n") (insert-text-button "foo")
       (insert "\n") (insert-text-button "bar") (insert "\n"))

(insert-text-button "foo")
foo
foo


(lambda (&rest rest) (find-2a nil '(find-epp rest))





#####
#
# bhl
# 2005jan12
#
#####

# «bhl»  (to ".bhl")
# (find-status   "bhl")
# (find-vldifile "bhl.list")
# (find-udfile   "bhl/")
# (load "/etc/emacs/site-start.d/50bhl.el")




#####
#
# hyperlinks that call functions that use with-output-to-temp-buffer
# 2005jan12
#
#####

# «with-output-to-temp-buffer»  (to ".with-output-to-temp-buffer")

;; This one doesn't jump to the right place.
(progn (list-colors-display)
       (goto-char 0) (search-forward " bisque"))

;; This one jumps to the right place, but if you're using
;; the default value for `pop-up-windows' - (setq pop-up-windows t)
;; instead of what I use, (setq pop-up-windows nil)
;; - then you'll end up with two windows displaying the "*Colors"
;; buffer.
(progn (list-colors-display)
       (switch-to-buffer "*Colors*")
       (goto-char 0) (search-forward " bisque"))

;; (find-efunction 'list-colors-display)
;; (find-efunction 'list-faces-display)
;; (find-efunctiondescr 'with-output-to-temp-buffer)
;; (find-eev "eev-dev.el")

(defmacro ee-no-pop-up-windows (sexp)
  `(let ((pop-up-windows-orig pop-up-windows))
     (setq pop-up-windows nil)		; "let pop-up-windows" doesn't work
     (unwind-protect ,sexp
       (setq pop-up-windows pop-up-windows-orig))))

# (find-eCfunction 'with-output-to-temp-buffer)
# (find-efunctiondescr 'with-output-to-temp-buffer)
# (require 'bytecomp)
# (find-efunction 'byte-compile-with-output-to-temp-buffer)
# (find-efile "emacs-lisp/bytecomp.el" "byte-temp-output-buffer-setup")

# (find-esh "grep temp.output.buffer.show $(find * -name '*.el')")







#####
#
# a fix for the buggy hyperlink functions (those that called wottb)
# 2005jan12
#
#####

# «find-wottb-call»  (to ".find-wottb-call")

(defun find-wottb-call (sexp bufname &rest pos-spec-list)
  "Hyperlink to functions that call `with-output-to-temp-buffer'.
Evaluate SEXP with a trick to not let it split the current window,
then switch to the buffer that it created (it must be called BUFNAME),
then go to the position specified by POS-SPEC-LIST.\n
 (Do I need to say that this is a horrible hack?)"
  (let ((pop-up-windows-orig pop-up-windows))
    (setq pop-up-windows nil)		; "let pop-up-windows" doesn't work
    (unwind-protect (eval sexp)
      (setq pop-up-windows pop-up-windows-orig)))
  (set-buffer bufname)
  (apply 'ee-goto-position pos-spec-list))

(defun find-eapropos (regexp &rest pos-spec-list)
  (interactive "sApropos symbol (regexp): ")
  (apply 'find-wottb-call '(apropos regexp) "*Apropos*" pos-spec-list))

(defun find-efunctiondescr (symbol &rest pos-spec-list)
  (interactive (find-function-read))
  (apply 'find-wottb-call '(describe-function symbol) "*Help*" pos-spec-list))

(defun find-evariabledescr (symbol &rest pos-spec-list)
  (interactive (find-function-read 'variable))
  (apply 'find-wottb-call '(describe-variable symbol) "*Help*" pos-spec-list))

(defun find-ekeydescr (key &rest pos-spec-list)
  (interactive "kFind function on key: ")
  (apply 'find-wottb-call '(describe-key key) "*Help*" pos-spec-list))

(defun find-efacedescr (face &rest pos-spec-list)
  (interactive (list (read-face-name "Describe face")))
  (apply 'find-wottb-call '(describe-face face) "*Help*" pos-spec-list))

(defun find-efaces (&rest pos-spec-list)
  (interactive)
  (apply 'find-wottb-call '(list-faces-display) "*Faces*" pos-spec-list))

(defun find-ecolors (&rest pos-spec-list)
  (interactive)
  (apply 'find-wottb-call '(list-colors-display) "*Colors*" pos-spec-list))

(defun find-efunctiond (function &rest pos-spec-list)
  (interactive (find-function-read))
  (apply 'find-wottb-call '(disassemble function) "*Disassemble*"
	 pos-spec-list))


;; (find-eapropos "unwind" "\nunwind-protect")
;; (find-efunctiondescr 'find-function "load-path")
;; (find-evariabledescr 'pop-up-windows "new windows")
;; (find-ekeydescr "\C-x40" "delete")
;; (find-efacedescr 'italic "Slant")
;; (find-efaces " italic")
;; (find-ecolors " bisque")
;; (find-efunctiond 'find-file "switch-to-buffer")

;; (disassemble 'find-file)
;; (setq pop-up-windows nil)
;; (setq pop-up-windows t)

;; To do: give examples of the call.
;; (find-wottb-call '(list-colors-display) "*Colors*" " bisque")

;; Note: unfortunately that doesn't work 100% - when we have several
;; windows `with-output-to-temp-buffer' will use another window for
;; the help buffer.




#####
#
# rcirc
# 2004dec23
#
#####

# «rcirc»  (to ".rcirc")
# (find-angg ".emacs" "rcirc")
# http://savannah.nongnu.org/download/rcirc/rcirc-0.8.tar.gz
#*
rm -Rv ~/usrc/rcirc-0.8/
tar -C ~/usrc/ \
  -xvzf $S/http/savannah.nongnu.org/download/rcirc/rcirc-0.8.tar.gz
cd     ~/usrc/rcirc-0.8/

#*
# http://www.nongnu.org/rcirc/
# (code-c-d "rcirc" "~/usrc/rcirc/")
# (add-to-list 'load-path "~/usrc/rcirc/")
# (find-rcircfile "")
#*
rm -Rv ~/usrc/rcirc/
mkdir  ~/usrc/rcirc/
cd     ~/usrc/
export CVS_RSH=ssh
cvs -d:ext:[email protected]:/cvsroot/rcirc co rcirc
cd     ~/usrc/rcirc/

# (find-rcircfile "rcirc.el" "read-only")
# (load-file "~/usrc/rcirc/rcirc.el")

#*
# (find-fline "~/elisp/rcirc.el")
# (load-file  "~/elisp/rcirc.el")

#*
# (code-c-d "rcirc" "~/usrc/rcirc-0.8/")
# (find-rcircfile "")
# (find-rcircfile "rcirc.el")
# (find-rcircfile "rcirc.texi")
# (add-to-list 'load-path "~/usrc/rcirc-0.8/")
# (require 'rcirc)

# (find-efunction 'rcirc)
(rcirc "irc.freenode.net" 6667 "edrx_r")

(code-c-d "rcirc" "~/usrc/rcirc-0.8/")
(defun rcirc-steps ()
  (interactive)
  (require 'rcirc)
  (setq rcirc-time-format "")
  (rcirc "irc.freenode.net" 6667 "edrx_r" '("#emacs" "#eev")))

# (require 'erc)
# (find-efunction 'rcirc-next-active-buffer)
# (find-efunction 'erc-track-switch-buffer)

Connecting to irc.freenode.net...done
#<process irc.freenode.net>
error in process filter: rcirc-print: Wrong type argument: sequencep, 35
error in process filter: Wrong type argument: sequencep, 35




#*
# Old stuff (2004dec):
# http://www.emmett.ca/~rcyeske/rcirc/
#*
rm -Rv ~/usrc/rcirc/
mkdir  ~/usrc/rcirc/
cd $S/http/www.emmett.ca/~rcyeske/rcirc/ && cp -iv * ~/usrc/rcirc/
cd     ~/usrc/rcirc/

#*
# (load-file "~/usrc/rcirc/rcirc.el")
# (code-c-d "rcirc" "~/usrc/rcirc/")
# (find-rcircfile "")
# (find-rcircfile "rcirc.el")

# (find-efunction 'rcirc)
# (setq rcirc-nick "edrx2")
# (rcirc rcirc-server rcirc-port "edrx2")

(add-to-list 'load-path "~/usrc/rcirc/")
(require 'rcirc)
(setq rcirc-nick "edrx2")
(rcirc rcirc-server "6667" "edrx2")

;; To examine rcirc's variables:
;; (find-rcircsh "grep make-local-variable rcirc.el")
;;
(defun values-of (varlist)
  (mapconcat (lambda (v) (format ";; %S\n%s\n" v (pp-to-string (eval v))))
	     varlist ""))
(setq interesting-rcirc-vars
      '(rcirc-nick rcirc-nick-table rcirc-server rcirc-victim
	rcirc-parent-buffer rcirc-last-buffer
	rcirc-process rcirc-process-output
	rcirc-insert-marker rcirc-input-ring))

(find-estring
 (with-current-buffer "#[email protected]"
   (values-of interesting-rcirc-vars)))
(find-estring
 (with-current-buffer "irc.freenode.net"
   (values-of interesting-rcirc-vars)))

;; (find-elnode "Hash Access")
;; (find-efunction 'rcirc-nick-channels)
;;
(find-epp
 (with-current-buffer "irc.freenode.net"
   (rcirc-nick-channels rcirc-process "edrx2")))


(find-estring (values-of interesting-rcirc-vars))

(find-estring
 (with-current-buffer "#[email protected]"
   (values-of '(rcirc-nick rcirc-server rcirc-victim
		rcirc-process rcirc-insert-marker rcirc-input-ring))))

(find-estring
 (with-current-buffer "irc.freenode.net"
   (values-of '(rcirc-nick-table rcirc-parent-buffer rcirc-last-buffer
		rcirc-process-output rcirc-insert-marker rcirc-input-ring))))

(find-estring
 (with-current-buffer "#[email protected]"
   (values-of interesting-rcirc-vars)))

(find-estring
 (with-current-buffer "irc.freenode.net"
   (values-of interesting-rcirc-vars)))




(find-epp (sort (mapcar 'buffer-name (buffer-list)) 'string<))

(find-elinks
 (mapcar (lambda (bname) (ee-pph `(find-ebuffer ,bname)))
	 (sort (mapcar 'buffer-name (buffer-list))
	       'string<)))

"irc.freenode.net"

# (find-rcircfile "")
# (find-rcircfile "rcirc.el" "C-c `")




#####
#
# rcirc for the git repo
# 2019aug25
#
#####

# «rcirc-git» (to ".rcirc-git")
# https://github.com/rcy/rcirc/blob/master/rcirc.el
# https://www.emacswiki.org/emacs/rcirc




#####
#
# circe
# 2019apr05
#
#####

# «circe» (to ".circe")
# (find-es "irc" "SASL-circe")
# (find-es "circe" "circe-git")



#####
#
# iswitchb
# 2005jan14
#
#####

# «iswitchb»  (to ".iswitchb")
# (find-enode "Iswitchb")
# (find-efile "iswitchb.el")

# (find-efile "isearchb.el")



#####
#
# hunting for help-C-file-name
# 2005jan14
#
#####

# «help-C-file-name»  (to ".help-C-file-name")

;; This works - it jumps to the source code in C for `+'.
;; <ret> -> button-action -> help-button-action.
(progn (delete-other-windows)
       (find-efunctiondescr '+ "`")
       ;; (debug)
       (help-button-action (button-at (point))))

;; This works too - it jumps to the source code in C for `+'.
(progn (delete-other-windows)
       (find-efunctiondescr '+ "`")
       (let* ((b (button-at (point)))
	      (bs (button-start b))
	      (bhf (button-get b 'help-function))
	      (bha (button-get b 'help-args)))
	 ;; (debug)
	 (help-do-xref bs bhf bha)))

;; (find-efunction 'help-do-xref)

;; The function in bhf/help-function is defined in "help-mode.el", at:
;; (find-efile "help-mode.el" "define-button-type 'help-function-def")
;; Try: (load "help-mode.el")
;;      (load "help-mode.elc")
;; How I discovered that: with (disassemble bhf) and:
;; (find-esh "grep help-C-file-name $(find * -name '*.el')")
;;
(progn (delete-other-windows)
       (find-efunctiondescr '+ "`")
       (let* ((b (button-at (point)))
	      (bs (button-start b))
	      (bhf (button-get b 'help-function))
	      (bha (button-get b 'help-args)))
	 ;; (disassemble bhf)
	 (find-epp (list 'b= b 'bs= bs 'bhf= bhf 'bha= bha))
	 ))

;; Something similar for variables:
;; (find-efile "help-mode.el" "define-button-type 'help-variable-def")



;; (find-eCfunction '+)
;; (find-eCfunction 'with-output-to-temp-buffer "unev")




#####
#
# arabic fonts
# 2005jan27
#
#####

# «arabic-fonts»  (to ".arabic-fonts")
# (find-zsh "installeddebs | sort | grep arabic")
# (find-zsh "availabledebs | sort | grep arabic")
# (find-equailfile "arabic.el")
# (find-enode "Bidirectional Editing")

# (find-status   "xfonts-intl-arabic")
# (find-vldifile "xfonts-intl-arabic.list")
# (find-udfile   "xfonts-intl-arabic/")

(view-hello-file)
(find-einsert '((1569 2000)))

(progn (find-estring "")
       (insert "-*- coding: iso-2022-7bit -*-\n\n")
       (ascstr  6818   6827) (insert "\n\n")
       (ascstr  6829   6853) (insert "\n")
       (ascstr  6854   6867) (insert "\n")
       (ascstr  6868   6889) (insert "\n\n")
       (ascstr 14369  14388) (insert "\n")
       (ascstr 14389  14412) (insert "\n")
       (ascstr 14413  14432) (insert "\n")
       (ascstr 14433  14446) (insert "\n")
       )

(find-fline "/usr/share/i18n/charmaps/UTF-8.gz")
(find-fline "/usr/share/i18n/charmaps/UTF-8.gz" "ARABIC LETTER ALEF")
(find-efunction 'describe-char "U+%04X")

(find-node "(recode)Charset and Surface Index")

# How do I get the unicode codes for these chars? (Esp. to get their
# names?)




#####
#
# "don't font-lock this"
# 2005feb08
#
#####

# «dont-font-lock-this»  (to ".dont-font-lock-this")
# (find-efile "")
# (find-efile "font-core.el")
# (find-evariable 'font-lock-global-modes)
# (find-efunction 'font-lock-unfontify-region)
# (find-efunction 'font-lock-default-unfontify-region)

(defun foo () (interactive)
  (font-lock-unfontify-region (point) (mark)))

# http://www.emacswiki.org/elisp/ewb.el
# http://www.emacswiki.org/cgi-bin/wiki/MultipleModes
# ftp://dlpx1.dl.ac.uk/fx/emacs/multi-mode.el

# (find-efile "hi-lock.el")




#####
#
# lookup-key
# 2021jul26
#
#####

# «lookup-key»  (to ".lookup-key")
# (find-fline "~/LOGS/2021jul26.emacs")

# (find-elnode "Searching Keymaps")
# (find-elnode "Key Lookup")
# (find-elnode "Functions for Key Lookup")
# (find-elnode "Controlling Active Maps")
# (find-elnode "Keymaps and Minor Modes")

# (find-evardescr 'minor-mode-map-alist)
# (find-evariable 'minor-mode-map-alist)
# (find-epp        minor-mode-map-alist)
# (find-eppp (mapcar 'car minor-mode-map-alist))

# (find-eev-intro "(require 'dash)")

# (lookup-key (current-global-map) (kbd "<up>"))
# (find-elnode "Scanning Keymaps")

# (find-efunctiondescr 'accessible-keymaps)
# (find-efunction      'accessible-keymaps)
# (find-efunctiondescr 'current-minor-mode-maps)
# (find-efunction      'current-minor-mode-maps)

(setq ak (accessible-keymaps (current-global-map)))
(find-epp (car ak))
(find-epp (mapcar 'car ak))
(find-epp (current-minor-mode-maps))
(find-eaproposf "keymap")
(find-ekeymapdescr (cdr (nth 0 ak)))
(find-ekeymapdescr (cdr (nth 1 ak)))
(find-ekeymapdescr (cdr (nth 2 ak)))
(find-eminorkeymapdescr)
(find-eminormodekeymapdescr)

(find-efunction 'find-ekeymapdescr)
(find-efunction 'find-eminorkeymapdescr)
(find-efunction 'find-eminormodekeymapdescr)

;; Test: (find-ekeymapdescr isearch-mode-map "toggle-regexp")
;; Test: (find-eminorkeymapdescr 'eev-mode)

https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg01798.html Making a key undefined again




#####
#
# keymap-lookup
# 2024mar05
#
#####

# «keymap-lookup»  (to ".keymap-lookup")

(lookup-key eev-mode-map (kbd "M-h M-h"))
(lookup-key  my-mode-map (kbd "M-h M-h"))

(keymap-lookup eev-mode-map "M-h")
(keymap-lookup eev-mode-map "M-h M-h")
(keymap-lookup eev-mode-map "M-h M-h M-h")
(keymap-lookup eev-mode-map "M-h M-h M-h M-h")
(keymap-lookup eev-mode-map "M-h M-h")
(keymap-lookup  my-mode-map "M-h M-h")

(commandp (keymap-lookup eev-mode-map "M-h"))
(commandp (keymap-lookup eev-mode-map "M-h M-h"))
(commandp (keymap-lookup eev-mode-map "M-h M-h M-h"))
(commandp (keymap-lookup  my-mode-map "<f7>"))


# (find-efunction-links 'lookup-key)
# (find-efunction-links 'keymap-lookup)
# (find-efunctiondescr  'keymap-lookup)
# (find-efunction       'keymap-lookup)



#####
#
# define-derived-mode
# 2024mar06
#
#####

# «define-derived-mode»  (to ".define-derived-mode")
# (find-egrep "grep --color=auto -nH --null -e define-derived-mode *.el */*.el")




#####
#
# transparency in keymaps
# 2005feb12
#
#####

# «transparence-in-keymaps»  (to ".transparence-in-keymaps")
# minor-mode-map-alist
# (find-elnode "Active Keymaps")
# (find-elnode "Changing Key Bindings")
# (find-elnode "Index" "* function-key-map:")
# (find-elnode "Active Keymaps" "Function: current-active-maps")
# (find-elnode "Functions for Key Lookup" "Function: current-active-maps")
# (find-eCfunction 'current-active-maps)
# (find-epp (current-active-maps))




#####
#
# greek
# 2005mar07
#
#####

# «greek»  (to ".greek")
;; Kristi [Stassinopoulou]

(progn (find-estring "")
       (insert 332666 332737 332719 332739 332740 332727))

(progn (find-estring "")
       (ascstr 332600 332800) (insert "\n\n")
       (ascstr 332657 332713) (insert "\n")
       (ascstr 332721 332745) (insert "\n")
       (insert 332762 "\n"))

(eev-glyph-set  ?\^B 332722 'eev-glyph-face-bang)
(eev-glyph-set  ?\^B 332722)
(eev-glyph-set  ?\^B)

(set-input-method "greek")
(set-input-method "greek-postfix")




#####
#
# input methods for (modern) greek
# 2006sep22
#
#####

# «greek-input-methods»  (to ".greek-input-methods")
# (find-eleimfile "quail/greek.el")
# (find-eleimfile "quail/greek.el" "\"greek\" \"Greek\"")
# (find-eleimfile "quail/greek.el" "\"greek-postfix\" \"GreekPost\"")
# (find-fline "~/LOGS/2006sep22.emacs")

<pgas> edrx: M-x describe-fontset RET
<zpg> brb
*** zpg QUIT "ERC Version 5.1.3 (IRC client for Emacs)"
<pgas> for greek I have
       greek-iso8859-7-efont-fixed-medium-r-normal--16-160-75-75-c-80-iso10646-1
<edrx> and I have this: greek-iso8859-7   -*-iso8859-7
       [-Misc-Fixed-Medium-R-Normal--6-60-75-75-C-40-ISO8859-7]
<edrx> aha (or kind of).


# (find-efunctiondescr 'describe-fontset)
# (find-efunction 'describe-fontset)
# (describe-fontset "")
#
# (find-efunction 'list-fontsets)
# (list-fontsets nil)
# (list-fontsets 1)
#
# (find-evardescr 'fontset-alias-alist)
# (find-efunction 'print-fontset)
# (find-efunction 'describe-fontset)




#####
#
# greek-ibycus4
# 2024oct06
#
#####

# «greek-ibycus4»  (to ".greek-ibycus4")
# https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00114.html




#####
#
# mathematical chars in X
# 2005may09
#
#####

# «math-chars-in-X»  (to ".math-chars-in-X")
#*
xfd -fn -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1 &
#*
cd ~/bigsrc/emacs/lisp/international/
grep mule-unicode-2500-33ff *.el
#*

;; Math chars from the range mule-unicode-0100-24ff:
(progn (find-estring "")
       (insert 342769 342770 342827 "\n")
       (ascstr 342896 342979) (insert "\n")
       (ascstr 342980 343032) (insert "\n")
       (ascstr 343033 343123) (insert "\n")
       (ascstr 343124 343233) (insert "\n")
       (ascstr 343234 343331) (insert "\n")
       (ascstr 343332 343399) (insert "\n")
       (ascstr 343400 343478) (insert "\n")
       (ascstr 343479 343534) (insert "\n")
       (ascstr 343535 343610) (insert "\n")
       (ascstr 343611 343662) (insert "\n"))

;; Math chars from the range mule-unicode-2500-33ff:
(progn (find-estring "")
       (ascstr 299040 299115) (insert "\n")
       (ascstr 299116 299199) (insert "\n")
       (ascstr 299200 299247) (insert "\n")
       (ascstr 299248 299323) (insert "\n")
       (ascstr 299324 299391) (insert "\n")
       (ascstr 299424 299475) (insert "\n")
       (ascstr 299476 299561) (insert "\n")
       (ascstr 299713 299720) (insert "\n")
       (ascstr 299731 299819) (insert "\n")
       (ascstr 299821 299847) (insert "\n")
       (ascstr 299862 299892) (insert "\n")
       (ascstr 299896 299943) (insert "\n")
       (ascstr 299954 299966) (insert "\n"))

;; Math chars using the xsymb font (a proportional font):
(progn (find-estring "")
       (ascstr 7201 7258) (insert "\n")
       (ascstr 7259 7294) (insert "\n")
       (ascstr 7329 7377) (insert "\n")
       (ascstr 7378 7422) (insert "\n")
       (ascstr 7457 7508) (insert "\n")
       (ascstr 7509 7550) (insert "\n")
       (ascstr 7584 7631) (insert "\n")
       (ascstr 7632 7660) (insert "\n"))

;; (find-efile "international/mule-diag.el" "defvar non-iso-charset-alist")
;; (find-efile "loaddefs.el" "mule-unicode-0100-24ff")
;; (find-efile "ps-mule.el" "mule-unicode-0100-24ff")

;; (list-character-sets nil)
;; (describe-fontset nil)

(defun foo () (interactive)
  (insert (format "(ascstr %d %d)\n"
		  (char-after (point-at-bol))
		  (char-before (point-at-eol))))
  (eek "<down>"))





#####
#
# fontsets
# 2005mar07
#
#####

# «fontsets-cvs»  (to ".fontsets-cvs")
;; http://www.emacswiki.org/cgi-bin/wiki/FontSets
;; (find-efunction  'create-fontset-from-fontset-spec)
;; (find-eCfunction 'set-fontset-font)

;; (x-decompose-font-name "fixed")

# (list-fontsets 1)
# (describe-fontset)
# (describe-fontset "fontset-standard")
# (find-enode "Defining Fontsets")




#####
#
# Hello World (an eval-buffer trick)
# 2005jul05
#
#####

# «hello-world-eval-buffer»  (to ".hello-world-eval-buffer")
# Adapted from:
# http://www.emacswiki.org/cgi-bin/wiki/HelloWorld

(find-estring ";;;;;;;; (sit-for 0.2)
10 (princ \"Hello world \" t)
20 (goto-char 10)

;;;;;;;; (eval-buffer)
")

# (find-eCfunction 'eval-buffer)

# (code-c-d "esrc" "~/bigsrc/emacs/src/")
# (find-esrctag "Feval_buffer")
# (find-esrctag "readevalloop")




#####
#
# describing keymaps
# 2005jul18
#
#####

# «find-ekeymapdescr»  (to ".find-ekeymapdescr")
# (find-efunction 'find-ekeymapdescr)
# (find-ekeymapdescr dired-mode-map)
# (find-ekeymapdescr dired-mode-map "% m")

;; (find-estring (documentation 'emacs-lisp-mode))
;; (find-estring (documentation 'emacs-lisp-mode t))
;; (find-elnode "Keys in Documentation" "{MAPVAR}")
;; (find-efunction 'dired-mode)
;; (find-estring (documentation 'dired-mode))

;; (find-esh "grep 'function &optional raw' *.el emacs-lisp/*.el")
;; (find-efile "emacs-lisp/advice.el" "'documentation")
;; (find-ecvssh "cd src; grep documentation *.c")
;; (find-ecvsfile "src/doc.c" "Fdocumentation")
;; (find-ecvsfile "src/doc.c" "Fdocumentation" "Fsubstitute_command_keys")

;; (find-estring (substitute-command-keys "\\<eev-mode-map>\\{eev-mode-map}"))
(substitute-command-keys "\\<dired-mode-map>\\{dired-mode-map}")

(find-estring
 (let ((map dired-mode-map)) (substitute-command-keys "\\<map>\\{map}")))

(find-estring (let ((m shell-mode-map)) (substitute-command-keys "\\<m>\\{m}")))



#####
#
# active-keymaps
# 2023jan17
#
#####

# «active-keymaps»  (to ".active-keymaps")
# (find-elnode "Active Keymaps")
# (find-epp (current-active-maps))
# (find-epp (current-active-maps t))
# (find-eminormodes-links)

# (find-hvariable 'eev-mode-map)
# (find-efunction 'helpful-variable)

# (find-epackage-links 'helpful "helpful" t)
# (find-epackage       'helpful)
# (code-c-d "helpful" "~/.emacs.d/elpa/helpful-20221209.1743/")
# (find-helpfulfile "")
# (find-helpfulgrep "grep --color=auto -nH --null -e view-literal *.el")



#####
#
# links for index info nodes
# 2005jul31
#
#####

# «find-node_index»  (to ".find-node_index")
# (find-node "(texinfo)Printing Indices & Menus" "(line")
# (find-enode "Command Index" "auto-fill-mode")
# (find-enode "Command Index" "auto-fill-mode" '(eek "RET"))

(eesteps '(
  (find-enode "Command Index" "auto-fill-mode")
  "C-a C-SPC C-SPC" "4*<down>" "M-w"
  (find-estring "")
  "C-y"))

* auto-fill-mode:                        Auto Fill.           (line  17)
* auto-lower-mode:                       Frame Parameters.    (line   9)
* auto-raise-mode:                       Frame Parameters.    (line   9)
* auto-revert-mode:                      Reverting.           (line  38)

# (find-efunction 'Info-index)
# (find-efunction 'Info-index-node)
# (find-efunction 'Info-extract-menu-node-name)
# (find-efunction 'Info-extract-menu-node-name "(line +")




#####
#
# Info-index
# 2021aug01
#
#####

# «Info-index»  (to ".Info-index")
# (find-elnode "Index" 1              "debug-on-message" )
# (find-elnode "Index" 1 '(Info-index "debug-on-message"))
# (find-clnode "Function Index")

# (find-efunctiondescr 'Info-index)
# (find-efunction      'Info-index)



#####
#
# info-initialize
# 2022feb04
#
#####

# «info-initialize»  (to ".info-initialize")
# (find-efile "info.el")
# (find-efile "info.el" "(defun info-initialize")




#####
#
# Info-copy-current-node-name
# 2022oct18
#
#####

# «Info-copy-current-node-name»  (to ".Info-copy-current-node-name")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00423.html
# (find-efunctiondescr 'Info-copy-current-node-name)
# (find-efunction      'Info-copy-current-node-name)

In Info mode `c' runs `Info-copy-current-node-name',
whose docstring is:

  "Put the name of the current Info node into the kill ring.
  The name of the Info file is prepended to the node name in parentheses.
  With a zero prefix arg, put the name inside a function call to `info'."

Try to run this with your favorite variant of `C-x C-e':

  (info "(eintr) Top")

then navigate to another section, and type `M-0 c'. This will put a
sexp like (for example) this one in the kill ring:

  (info "(eintr) Kill Ring")

Then you can copy that sexp to your notes and use it as a hyperlink.
Do that for all the pages that you find relevant.
Good fortune will follow.

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/#eev


P.S.: one can use this to access the eintr with just `M-x ei':
  (defun ei () (interactive) (info "(eintr) Top"))
but many people hate functions with very short names like that one.




#####
#
# edb
# 2005sep01
#
#####

# «edb»  (to ".edb")
# http://www.glug.org/people/ttn/software/edb/
# http://www.glug.org/people/ttn/software/edb/edb-1.25.tar.gz
#*
rm -Rfv ~/usrc/edb-1.25/
tar -C ~/usrc/ -xvzf \
  $S/http/www.glug.org/people/ttn/software/edb/edb-1.25.tar.gz

cd ~/usrc/edb-1.25/
./configure --prefix ~/usrc/edb-1.25/

#*
# (code-c-d "edb" "~/usrc/edb-1.25/" "edb")
# (add-to-list 'Info-default-directory-list ee-edbdir)
# (find-edbnode "Top")
# (find-edbfile "")

# Related:
# xemacs manual:
# PostgreSQL Support
# http://www.xemacs.org/Documentation/21.5/html/lispref_62.html#SEC803




#####
#
# prefix-macro
# 2005nov02
#
#####

# «prefix-macro»  (to ".prefix-macro")

(setq prefix-macro-string ";; ")

;; Version 1
(defun prefix-macro (prefix)
  "No docs. To pretty-print the source: (find-efunctionpp 'prefix-macro)"
  (interactive "sPrefix string: ")
  (setq prefix-macro-string prefix)
  (setq last-kbd-macro "\C-a\M-:(insert prefix-macro-string)\r\C-a\C-n")
  (message "prefix-macro-string set to %S" prefix))

;; Version 2 (equivalent, but uses read-kbd-macro)
(defun prefix-macro (prefix)
  "No docs. To pretty-print the source: (find-efunctionpp 'prefix-macro)"
  (interactive "sPrefix string: ")
  (setq prefix-macro-string prefix)
  (setq last-kbd-macro
	(read-kbd-macro
	 "C-a M-: (insert SPC prefix-macro-string) RET C-a <down>"))
  (message "prefix-macro-string set to %S" prefix))




#####
#
# prefix-region
# 2005nov02
#
#####

# «prefix-region»  (to ".prefix-region")
;; From XEmacs (thx to bpalmer)

(defun prefix-region (prefix)
  "Add a prefix string to each line between mark and point."
  (interactive "sPrefix string: ")
  (if prefix
      (let ((count (count-lines (mark) (point))))
	(goto-char (min (mark)(point)))
	(while (> count 0)
	  (setq count (1- count))
          (beginning-of-line 1)
	  (insert prefix)
	  (end-of-line 1)
          (forward-char 1)))))

# (find-es "emacs" "saving_emacs_macros")




#####
#
# setting the mode-line face for borderless windows
# 2006mar26
#
######

# «mode-line-face-borderless»  (to ".mode-line-face-borderless")

(customize-face 'mode-line)
(find-efaces)
(find-ecolors)
(find-elnode "Index" "* set-face-attribute:")
(find-elnode "Attribute Functions")

;; Reset to default
;; (find-efacedescr 'mode-line)
;; (find-efacedescr 'mode-line-inactive)
;; (find-efacedescr 'scroll-bar)
;;
(set-face-background 'mode-line "grey75")
(set-face-attribute  'mode-line nil :box '(:line-width -1 :style released-button))
(set-face-foreground 'mode-line-inactive "grey80")
(set-face-background 'mode-line-inactive "grey30")
(set-face-attribute  'mode-line-inactive nil :weight 'light)
(set-face-background 'scroll-bar "grey75")

;; Good settings for when Emacs is in a borderless window
;; (find-anggfile ".fvwm/keys.fvwm" "!Borders")
;;
(set-face-background 'mode-line "bisque4")
(set-face-attribute  'mode-line nil :box nil)
(set-face-foreground 'mode-line-inactive nil)
(set-face-background 'mode-line-inactive "saddlebrown")
(set-face-attribute  'mode-line-inactive nil :box nil)
(set-face-background 'scroll-bar "grey32")

;; Problem: that only looks really good when the scroll bar is off...
;; Idea: 4-S could cycle `vertical-scroll-bar' (a buffer-local
;; variable) for the current buffer between three states: unset, left,
;; and nil. Hmm, how do I write that?
;;
;; (find-elnode "Scroll Bars" "vertical-scroll-bar")
;; (find-elnode "Intro to Buffer-Local")
;; (local-variable-p 'vertical-scroll-bar)
;; (local-variable-if-set-p 'vertical-scroll-bar)

(set-face-background 'mode-line "grey50")
(set-face-background 'mode-line "grey40")
(set-face-background 'mode-line "bisque")
(set-face-background 'mode-line "darkgoldenrod")
(set-face-background 'mode-line "saddlebrown")

(find-efacedescr 'mode-line)





#####
#
# window configurations
# 2006jul13
#
#####

# «window-configurations»  (to ".window-configurations")
# (find-angg ".emacs" "find-C-x")
;; More about window configurations:
;; (find-efunction 'window-configuration-to-register)
;; (find-evardescr 'register-alist)
;; (find-node "(elisp)Window Configurations")
;; (find-efile "winner.el")




#####
#
# emacs-wget
# 2007jan12
#
#####

# «emacs-wget»  (to ".emacs-wget")
# http://pop-club.hp.infoseek.co.jp/emacs/emacs-wget/emacs-wget-0.5.0.tar.gz
# (code-c-d "emacswget" "~/usrc/emacs-wget-0.5.0/")
# (find-emacswgetfile "")
# (find-emacswgetfile "README")
# (find-emacswgetfile "USAGE")
# (find-emacswgetfile "wget.el")
#*
rm -Rv ~/usrc/emacs-wget-0.5.0/
tar -C ~/usrc/ -xvzf \
  $S/http/pop-club.hp.infoseek.co.jp/emacs/emacs-wget/emacs-wget-0.5.0.tar.gz
cd     ~/usrc/emacs-wget-0.5.0/

#*




#####
#
# load-history
# 2007feb23
#
#####

# «load-history»  (to ".load-history")

(info "(elisp)Where Defined")
(find-node "(elisp)Eval" "Command: eval-region")
(find-node "(elisp)Eval" "Command: eval-buffer")
(find-fline "~/LOGS/2007feb23.emacs" "(elisp)Where Defined")

(find-epp (car load-history))
(mapcar 'car load-history)
(find-estring (mapconcat 'car load-history "\n"))
(find-elinks (mapcar (lambda (fname+) `(find-fline ,(car fname+))) load-history))
(find-elinks (mapcar (lambda (fname+) `(find-epp (assoc ,(car fname+) load-history))) load-history))

;; The two "find-elinks" lines above generate lines like these...
(find-fline "/home/edrx/.emacs")
(find-epp (assoc "/home/edrx/.emacs" load-history))

(symbol-file 'eejump 'defun)
(assoc (symbol-file 'eejump 'defun) load-history)
(find-epp (assoc (symbol-file 'eejump 'defun) load-history))


#*
mkdir /tmp/where/
cat > /tmp/where.el <<'%%%'
(defvar where-file nil)
(setq where-file (symbol-file 'where-file 'defvar))
%%%
cat > /tmp/where/where.el <<'%%%'
(defvar where-file nil)
(setq where-file (symbol-file 'where-file 'defvar))
%%%

#*
(load "/tmp/where.el")
where-file
(symbol-file 'where-file 'defvar)

# (find-eCfunction 'load)
# (find-eCfunction 'load "Get the name for load-history")



mkdir /tmp/where/






#####
#
# dired and tar-mode
# 2007mar07
#
#####

# «dired-and-tar-mode»  (to ".dired-and-tar-mode")
# (find-efunction-links 'tar-extract)
# (find-efunction 'dired-move-to-filename)

# (find-fline "~/flipbooks/")
# (find-fline "~/flipbooks/" "ee-glyph_001.png" '(eek "RET"))
# (find-fline "~/flipbooks/" "ee-glyph_001.png" '(eek "C-h k RET"))
# (find-fline "~/flipbooks/" "ee-glyph_001.png" '(dired-advertised-find-file))
# (find-fline "~/flipbooks/" "ee-glyph_001.png" '(dired-get-filename))
# (find-fline "~/flipbooks/" "ee-glyph_001.png" '(progn (debug) (dired-get-filename)))
# (find-fline "~/flipbooks/eesteps.tgz")
# (find-fline "~/flipbooks/eesteps.tgz" "eesteps_004.png" '(eek "RET"))
# (find-fline "~/flipbooks/eesteps.tgz" "eesteps_004.png" '(eek "C-h k RET"))
# (find-fline "~/flipbooks/eesteps.tgz" "" '(find-evardescr 'tar-parse-info))

# How do I implement something like this?...
# (find-fline "/tmp/flipbooks/eesteps.tgz!eesteps_002.png")




#####
#
# emacsclient
# 2022nov25
#
#####

# «emacsclient»  (to ".emacsclient")
# (find-anggfile "LUA/EmacsClient1.lua")
# (find-enode "Emacs Server")
# (find-efile "server.el")
# (find-efunctiondescr 'server-start)
# (find-efunction      'server-start)
# (find-efunctiondescr 'make-network-process)
# (find-efunction      'make-network-process)
# (find-elnode "Network Processes")
# (find-elnode "Processes")
# (find-elnode "Network Servers")
# (find-egrep "grep --color=auto -nH --null -e make-network-process *.el */*.el")

# (find-sh "locate emacsclient")
# (find-man "1 emacsclient")
# (find-man "1 emacsclient.emacs")
# (find-gitemacsfile "lib-src/")
# (find-gitemacsfile "lib-src/emacsclient.c")
# (find-sh "emacsclient --help")

* (server-start)
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
w emacsclient
emacsclient --eval '(+ 1 2)'

cat > /tmp/o.el <<'%%%'
  (find-fline "~/TODO")
%%%
emacsclient --eval '(load "/tmp/o.el")'

* (server-stop)






#####
#
# emacsclient and multi-tty
# 2007oct27
#
#####

# «emacsclient-and-multi-tty»  (to ".emacsclient-and-multi-tty")
# Is gnudoit obsolete?

# (find-enode "Invoking emacsclient")
# (find-ecvsfile "lib-src/emacsclient.c")
# (find-ecvssh "lib-src/emacsclient --version")
# (find-ecvssh "lib-src/emacsclient --help")
# (find-ecvssh "lib-src/emacsclient --help" "-c, --current-frame")
# (find-ecvssh "lib-src/emacsclient --help" "-e, --eval")
# (find-ecvssh "lib-src/emacsclient --help" "-n, --no-wait")
# (find-ecvssh "lib-src/emacsclient --no-wait --eval '(+ 1 2)'")
# (find-ecvssh "lib-src/emacsclient -c -n -e '(+ 1 2)'")

# If I omit the "-c" (= "--current-frame") it tries to create a new frame...
# and I have the impression that "-n" ("--no-wait") is irrelevant with "-e".
# (eev "~/bigsrc/emacs/lib-src/emacsclient -c    -e '(+ 1 2)'")
# (eev "~/bigsrc/emacs/lib-src/emacsclient -c -n -e '(+ 1 2)'")

# (eev "~/bigsrc/emacs/lib-src/emacsclient /tmp/foo")
# (eev "~/bigsrc/emacs/lib-src/emacsclient -c /tmp/foo")

# Multi-tty:
# (find-ecvssh   "lib-src/emacsclient --help")
# (find-ecvssh   "lib-src/emacsclient --help" "-t, --tty")
# (eev "~/bigsrc/emacs/lib-src/emacsclient -t /tmp/foo")

# It unsets my guillemet glyphs... strange.
# (find-efunction 'eev-set-default-glyphs)
# (eev-set-default-glyphs)





#####
#
# flet and cl-flet
# 2005jan13
#
#####

# «flet»  (to ".flet")
# «cl-flet»  (to ".cl-flet")
# (find-clnode "Modify Macros" "Special Form: letf")
# (find-clnode "Function Bindings")
# (find-efunction 'flet)
# (find-es "lisp" "flet")
# (find-eev "eev-lean4.el" "ee-let*-macro-leandoc")

(require 'cl)

(defun square (x) (* x x))
(defun cube (x) (* x (square x)))
(cube 3)
(flet ((square (x) 10))
      (cube 4))

# (find-efunctiondescr 'cl-flet)
# (find-efunction      'cl-flet)
# (find-clnode "Function Bindings")





#####
#
# setf
# 2021mar15
#
#####

# «setf»  (to ".setf")
# https://www.reddit.com/r/emacs/comments/m4fe7r/found_out_setf_is_totally_undervalued/
# (find-elnode "Setting Generalized Variables")
# (find-efunction 'setf)
# (find-egrep "grep --color=auto -nH --null -e gv-define *.el */*.el")

# (find-efunctiondescr 'alist-get)
# (find-efunction      'alist-get)
# (function-get 'alist-get 'gv-expander)

(setq myalist '((a "AA") (b "BB") (c "CC")))
      (alist-get 'b myalist)
(setf (alist-get 'b myalist)            "FOO")
                    myalist
(setf (alist-get 'b myalist)            nil)
                    myalist
(setf (alist-get 'b myalist nil remove) nil)
                    myalist

(find-eppm '
  (setf (alist-get 'b myalist) "FOO")
)




#####
#
# letf
# 2007dec13
#
#####

# «letf»  (to ".letf")
# (find-node "(cl)Modify Macros" "letf")
# (find-node "(cl)Basic Setf")

(defun foo (a) (format "foo: %s" a))
(defun bar (a) (format "bar: %s" a))

   (lambda (a) (format "bar: %s" a))

(letf (((symbol-function 'foo)
	(lambda (a) (format "bar: %s" a))
	))
  (foo "plic"))

(foo "plic")


# Why:

<edrx> (progn (require 'dired) (dired-copy-file
       "/scp:edrx@caramelo:/home/edrx/o" "/usr/" 'ok-flag))
<edrx> this gives a permission denied error, but even if I wrap the
       dired-copy-file in a save-excursion tramp shows a buffer
       with the error (something that I can't interpret, just a
       sexp with pairs of numbers)
<edrx> this buffer goes away when I type a key - any key.
<edrx> anyone knows if there's a variable that makes tramp not show
       that?

(require 'dired)
(dired-copy-file "/scp:edrx@caramelo:/home/edrx/o" "/usr/" 'ok-flag)
(save-excursion
  (dired-copy-file "/scp:edrx@caramelo:/home/edrx/o" "/usr/" 'ok-flag))

;; (find-eapropos "tramp")
;; (find-efunction 'tramp-message)
;; (find-efunction 'tramp-error-with-buffer)
;; (find-es "emacs" "letf")

(letf (((symbol-function 'tramp-error-with-buffer)
	(lambda (a b c d) (message d))
	))
  (dired-copy-file "/scp:edrx@caramelo:/home/edrx/o" "/usr/" 'ok-flag)
  )

;; But this ^ doesn't work - the buffer with the numbers still
;; appears...





#####
#
# cl-letf
# 2020dec28
#
#####

# «cl-letf»  (to ".cl-letf")
# (find-node "(cl)Function Index" "* cl-letf:")
# (find-node "(cl)Setf Extensions")
# (find-elnode "Setting Generalized Variables")
# (find-elnode "Setting Generalized Variables" "symbol-function")

(defun foo () (insert "\nFOO"))
(defun bar () (insert "\nBAR"))
(defun plic () (foo) (bar))
(plic)

(find-epp (macroexpand
  '(setf (symbol-function 'foo) (symbol-function 'bar))
  ))

(find-epp (macroexpand '
  (cl-letf (((symbol-function 'foo) (symbol-function 'bar))) (plic))
  ))

(cl-letf (((symbol-function 'foo) (symbol-function 'bar))) (plic))
(plic)


(find-eppm
'(setf (symbol-function 'foo) (symbol-function 'bar))
)

(find-eppm
'(cl-letf (((symbol-function 'foo) (symbol-function 'bar))) (plic))
)

 (plic)
 (cl-letf (((symbol-function 'foo) (symbol-function 'bar))) (plic))




#####
#
# cl-loop
# 2021apr23
#
#####

# «cl-loop»  (to ".cl-loop")
# (find-kla-intro "8. `cl-loop'")
# (find-node "(cl)Loop Examples")
# (find-clnode "Loop Facility")
# (find-clnode "Loop Basics")
# (find-clnode "Loop Examples")
# (find-clnode "For Clauses")
# (find-clnode "For Clauses" "as" "is a synonym for the word" "for")
# (find-clnode "For Clauses" "for VAR from EXPR1 to EXPR2 by EXPR3")
# (find-clnode "For Clauses" "for VAR in LIST by FUNCTION")
# (find-clnode "For Clauses" "for VAR on LIST by FUNCTION")
# (find-clnode "For Clauses" "for VAR in-ref LIST by FUNCTION")
# (find-clnode "For Clauses" "for VAR across ARRAY")
# (find-clnode "For Clauses" "for VAR across-ref ARRAY")
# (find-clnode "For Clauses" "for VAR being the elements of SEQUENCE")
# (find-clnode "For Clauses" "for VAR being the elements of-ref SEQUENCE")
# (find-clnode "For Clauses" "for VAR being the symbols [of OBARRAY]")
# (find-clnode "For Clauses" "for VAR being the hash-keys of HASH-TABLE")
# (find-clnode "For Clauses" "for VAR being the hash-values of HASH-TABLE")
# (find-clnode "For Clauses" "for VAR being the key-codes of KEYMAP")
# (find-clnode "For Clauses" "for VAR being the key-bindings of KEYMAP")
# (find-clnode "For Clauses" "for VAR being the key-seqs of KEYMAP")
# (find-clnode "For Clauses" "for VAR being the overlays [of BUFFER]")
# (find-clnode "For Clauses" "for VAR being the intervals [of OBJECT]")
# (find-clnode "For Clauses" "for VAR being the frames")
# (find-clnode "For Clauses" "for VAR being the windows [of FRAME]")
# (find-clnode "For Clauses" "for VAR being the buffers")
# (find-clnode "For Clauses" "for VAR = EXPR1 then EXPR2")
# (find-clnode "For Clauses" "destructuring")
# (find-clnode "Other Clauses" "with VAR = VALUE")
# (find-node "(cl)Accumulation Clauses")
# (find-node "(cl)Accumulation Clauses" "collect")
# http://www.gigamonkeys.com/book/loop-for-black-belts.html
# http://www.lispworks.com/documentation/HyperSpec/Body/06_.htm
# (find-es "lisp" "loop")
# (to "loop")
#
# (find-eppm '(cl-loop for k from 1 do (if (foo) (cl-return (bar)))))

(cl-loop for i from 2 to 5
         collect i)

(cl-loop for a from 2 to 5
         for b = (* a 10)
         collect (list a b))

(cl-loop for a in (list 1 2 4 8)
         for b in (list 10 100)
         collect (* a b))

(cl-loop for a in (list 1 2 4 8)
         nconc (cl-loop for b in (list 10 100)
                        collect (* a b)))

(cl-loop for a from 2 to 5
         for b in (list a)
         collect (list a b))

(cl-loop for a from 2 to 5
         do (let ((b (* a 10)))
           (collect (list a b))))

(cl-loop for p in '((1 . 10) (2 . 20))
	 as h = (car p)
         as tl = (cdr p)
         if (> h 1)
            collect tl)

(cl-loop for p in '((1 . 10) (2 . 11))
	 nconc (let ((h (car p))
                     (tl (cdr p)))
                 (when (> h 1)
                   (list tl))))

(find-einsert
  (cl-loop for i from 1000 to 1100 by 20
           collect (list i (+ 19 i))
           collect "\n"
           )
  )

(cl-loop for i from 1 to 10
	 do (let* ((core (make-string i ?=)))
	          (if (= i 5) (cl-return core))))


(cl-loop for i from 1 to 10
         with core = (* 10 i)
         do (if (= i 5) (cl-return core)))

(cl-loop for i from 1 to 10
         with core = 22
         do (if (= i 5) (cl-return i)))

(cl-loop for i from 1
         with core = 22
         do (if (= i 5) (cl-return i)))


(make-string 5 ?=)

<dale> edrx: Honestly expect that to work. I guess you want
       (cl-loop for a in (list 1 2 4 8) nconc (cl-loop for b in
       (list 10 100) collect (* a b)))
<dale> edrx: I meant to say, I honestly expected your way to work,
       at least at first glance.



#####
#
# for-by
# 2022oct27
#
#####

# «for-by»  (to ".for-by")
# (find-clnode "For Clauses" "for VAR in LIST by FUNCTION")
# (find-clnode "For Clauses" "for VAR on LIST by FUNCTION")
# (find-clnode "For Clauses" "for x on my-list by 'cddr")
# (find-fline "~/LOGS/2022oct27.emacs")

(cl-loop for sublist on '(a b c d e f)
	 collect sublist)

(cl-loop for sublist on '(a b c d e f) by 'cddr
	 collect sublist)

(cl-loop for (x y . rest) on '(a b c d e f) by 'cddr
	 collect (list x y rest))

(cl-loop for (x y) on '(a b c d e f) by 'cddr
	 collect (list x y))



(cl-loop for (x y) on '(a b c d e f g h) by 'cddr
	 collect (list x y))

(cl-loop for sublist on '(a b c d e f g h) by 'cddr
	 collect sublist)



#####
#
# cl-loop-nested-fors
# 2022nov15
#
#####

# «cl-loop-nested-fors»  (to ".cl-loop-nested-fors")

(cl-loop for a in '(1 2 3 4)
         for b in '(5 6 7 8)
         collect (list a b))

(cl-loop for a in '(1 2 3)
         append (cl-loop for b in '(4 5 6)
                collect (list a b)))



#####
#
# cl-loop: problem with for if for if
# 2022nov15
#
#####

# «cl-loop-for-if-for-if»  (to ".cl-loop-for-if-for-if")
# (find-fline "~/LOGS/2022nov15.emacs" "<edrx> either nested fors or if")

(setq mylist '((1 2 3) (nil nil 4) (5 6 7) (nil nil 8)))

(cl-loop for (a b c) in mylist
         for aa = a
         if aa
         for bb = b
         if bb
         collect (list aa bb c))

;; ^ Result:     ((1 2 3) (nil nil 4) (5 6 7) (nil nil 8))
;;   I expected: ((1 2 3)             (5 6 7))

(cl-loop for (a b c) in mylist
         for aa = a
         for bb = b
         if aa
	 if bb
         collect (list aa bb c))

;; ^ Result: ((1 2 3) (5 6 7))



(find-eppm '
(cl-loop for (a b c) in mylist
         for aa = a
         if aa
         for bb = b
         if bb
         collect (list aa bb c))
)

(find-eppm '
(cl-loop for (a b c) in mylist
         for aa = a
         for bb = b
         if aa
         if bb
         collect (list aa bb c))
)



#####
#
# cl-loop-concat
# 2023apr15
#
#####

# «cl-loop-concat»  (to ".cl-loop-concat")
# (find-angg ".emacs.templates" "find-expands-links")

(cl-loop for s in '("a" "bb" "ccc")
         concat s)




#####
#
# cl-destructuring-bind
# 2022jul09
#
#####

# «cl-destructuring-bind»  (to ".cl-destructuring-bind")
# (find-clnode "Macros" "cl-destructuring-bind")
# (find-efunctiondescr 'cl-destructuring-bind)
# (find-efunction      'cl-destructuring-bind)
# (find-efunctiondescr 'seq-let)
# (find-efunction      'seq-let)

# (find-books "__comp/__comp.el" "graham-common-lisp")
# http://clhs.lisp.se/Body/m_destru.htm
# http://asymmetrical-view.com/2008/09/18/destructuring-bind.html
# https://stackoverflow.com/questions/17717546/elisp-destructuring-bind-for-cons-cell

(cl-destructuring-bind (&optional a b &rest rest) '(1)       (list a b))
(cl-destructuring-bind (&optional a b &rest rest) '(1 2 3 4) (list a b))
(cl-destructuring-bind (&optional a b)            '(1 2 3 4) (list a b))
(cl-destructuring-bind (a b c d)                  '(1 2 3 4) (list a b))



#####
#
# cl-map
# 2022dec15
#
#####

# «cl-map»  (to ".cl-map")
# (find-efunction-links 'cl-map)
# (find-efunctiondescr  'cl-map)
# (find-clnode "Mapping over Sequences" "Function: cl-map ")

(cl-map 'vector 'identity [2 3 55])
(cl-map 'vector (lambda (x) (* 10 x)) [2 3 55])

(find-eppp o)
(cl-map 'vector 'ee-no-properties o)
(aref o 0)
(car (aref o 0))



#####
#
# cl-progv
# 2023oct28
#
#####

# «cl-progv»  (to ".cl-progv")
# (find-efunction-links 'cl-progv)
# (find-clnode "Function Index" "cl-progv")

(cl-progv '(a b c) '(1 2 3) (+ a (* b c)))
;; => 7



#####
#
# cl-defgeneric
# 2023oct29
#
#####

# «cl-defgeneric»  (to ".cl-defgeneric")
# (find-eshellgrep "grep --color=auto -nH --null -e defgeneric *.el")
# (find-clnode "Function Index" "cl-defgeneric")
# (find-efunctiondescr 'cl-defgeneric)
# (find-efunction      'cl-defgeneric)
# (find-clfile         "cl-generic.el" "(defmacro cl-defgeneric")



#####
#
# cl-defmethod
# 2024oct11
#
#####

# «cl-defmethod»  (to ".cl-defmethod")
# (to "eieio")
# (find-angg ".emacs" "eieio")
# (find-egrep "grep --color=auto -nH --null -e cl-defmethod *.el */*.el")




#####
#
# seq-let
# 2023mar11
#
#####

# «seq-let»  (to ".seq-let")
# (find-efunctiondescr 'seq-let)
# (find-efunction      'seq-let)
# (find-elnode "Index" "* seq-let:")
# (find-efunction 'ee-closure-to-lambda)

(seq-let (prop-beg prop-end prop-table) (css--complete-property)

(seq-let [a b c d] '(22 33 44 55) a)
(seq-let [a b c d e] '(22 33 44 55) a)
(seq-let [a b c d e] [22 33 44 55] a)
(seq-let [a b c d e] [22 33 44 55] e)
(seq-let [a b c d e] (symbol-function 'breww) c)


          (seq-let [first second] [1 2 3 4]
            (list first second))





#####
#
# seq-filter
# 2023nov05
#
#####

# «seq-filter»  (to ".seq-filter")
# (find-efunctiondescr   'seq-filter)
# (find-efunction        'seq-filter)
# (find-elnode "Index" "* seq-filter:")
# (find-efunctiondescr            'cl-remove-if)
# (find-efunction                 'cl-remove-if)
# (find-clnode "Function Index" "* cl-remove-if:")



#####
#
# seq-mapcat
# 2024oct06
#
#####

# «seq-mapcat»  (to ".seq-mapcat")
# (find-efunctiondescr 'seq-mapcat)
# (find-efunction      'seq-mapcat)
# (find-elnode "Index" "* seq-mapcat:")

(seq-mapcat #'seq-reverse '((3 2 1) (6 5 4)))
  ;;-> (1 2 3 4 5 6)





#####
#
# for
# 2022sep05
#
#####

# «for»  (to ".for")
# (find-epackage-links 'for "for" t)
# (find-epackage       'for)
# (code-c-d "for" "~/.emacs.d/elpa/for-20220905.1622/" "for")
# (find-forfile "")
# (find-fornode "")
# https://github.com/usaoc/elisp-for


#####
#
# loopy
# 2022sep05
#
#####

# «loopy»  (to ".loopy")
# (find-epackage-links 'loopy "loopy" t)
# (find-epackage       'loopy)
# (find-epackage       'loopy-dash)
# (code-c-d "loopy" "~/.emacs.d/elpa/loopy-20220821.1746/" "loopy")
# (find-loopyfile "")
# (find-loopynode "")





#####
#
# My e-mail about find-man, beep, and cl-letf
# 2020dec29
#
#####

# «find-man-email-2020dec29»  (to ".find-man-email-2020dec29")
# (find-angg "elisp/find-man.el")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2020-12/msg01100.html
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-01/msg00020.html
# (find-evardescr 'Man-notify-method)
# (find-evariable 'Man-notify-method)
# (find-efile "man.el")
# (find-efile "man.el" "(defun Man-notify-when-ready")
# (find-efile "man.el" "(defun Man-notify-when-ready" "'polite")
# (find-efile "man.el" "(defun Man-notify-when-ready" "(beep)")
# (find-efile "man.el" "(defun Man-translate-references")
# (find-egrep "grep --color -nH --null -e Man-notify-when-ready man.el")
# (find-egrep "grep --color -nH --null -e Man-cooked-hook man.el")
# (find-egrep "grep --color -nH --null -e Man-mode-hook man.el")
# (find-egrep "grep --color -nH --null -e Man-start-calling man.el")
# (find-efile "man.el" "(defsubst Man-build-man-command")
# (find-efile "man.el" "[formatting...]")
# (find-efile "man.el" "formatted")
# (find-efile "man.el" "%s man page formatted")
# (find-efunctionpp 'Man-mode)
# (load "man.el")


How do I make `man' run some code after the manpage is fully rendered?

Hi list,

How do I make `man' run some code after the manpage is fully
rendered? In my package "eev" I have several functions that work
as sexp hyperlinks and that accept extra arguments indicating
strings to search for... for example, this sexp

  (find-man "bash(1)" "single-character")

should work as a hyperlink to the first occurrence of the
string "single-character" in the bash manpage... ok, let me be
more precise. The sexp above should do this:

  1) run (man "bash(1)") with settings to make it display the manpage
     in the current window,

  2) wait until the manpage is fully rendered,

  3) go to (point-min),

  4) run (search-forward "single-character").

For doing (2) I had an ugly solution usign a defadvice that stopped
working in some version of Emacs 25 (if I remember correctly)... I
spent some hours today trying to reimplement (2) by redefining `beep'
temporarily, and I got the code below, but when `man' has to render a
big page it calls `beep' before the page is totally ready... see the
comments and the tests below.

Any hints would be greatly appreciated. Btw: is this the right place
for asking this? Or should I try emacs-devel, or what?

  Cheers, thanks in advance,
    Eduardo Ochs
    http://angg.twu.net/#eev
    http://angg.twu.net/emacsconf2019.html
    http://angg.twu.net/emacsconf2020.html



Here is the code:
-- snip, snip --


;; This is a miniature of the real `ee-goto-position'. See:
;; http://angg.twu.net/LATEX/2019emacsconf.pdf#page=5
;; http://angg.twu.net/eev-intros/find-refining-intro.html#1
;; http://angg.twu.net/eev-current/eev-blinks.el.html#ee-goto-position
;;
(defun ee-goto-position-mini (&rest pos-spec-list)
  (when pos-spec-list			; if pos-spec-list is non-nil
    (goto-char (point-min))		; then go to (point-min)
    (dolist (str pos-spec-list)		; and for each string in pos-spec-list
      (search-forward str))))		; search forward for that string

(setq ee-man-bufname       nil)
(setq ee-man-pos-spec-list nil)

(defun ee-man-goto-pos-spec-list ()
  (with-current-buffer ee-man-bufname
    (apply 'ee-goto-position-mini ee-man-pos-spec-list)))

(defun ee-man-beep ()
  "A hack: `ee-find-man' makes `man' run this instead of `beep'."
  (ee-man-goto-pos-spec-list)
  (switch-to-buffer ee-man-bufname nil t))

(defun ee-find-man (topic &rest pos-spec-list)
  "Like (man TOPIC), but also searches for the strings in POS-SPEC-LIST.
Ideally this function should run `ee-man-goto-pos-spec-list'
after the manpage is fully rendered, but I haven't been able to
find a way to do that - HELP! It seems that it is calling
`ee-man-beep' after the man buffer is ready and the backgound
processes are all set up, without waiting for the background
processes to finish..."
  (setq topic (Man-translate-references topic))
  (setq ee-man-bufname (concat "*Man " topic "*"))
  (setq ee-man-pos-spec-list pos-spec-list)
  (cl-letf ((Man-notify-method 'polite)
            ((symbol-function 'beep) (symbol-function 'ee-man-beep)))
    (man topic)))


;; Tests:
;; (require 'man)
;; (ee-find-man "bash")
;; (ee-find-man "bash(1)")
;; (ee-find-man "bash(1)" "single-character")




#####
#
# defadvice
# 2020dec29
#
#####

# «defadvice»  (to ".defadvice")
# «advice-add»  (to ".advice-add")
# (find-elnode "Porting Old Advice" "old" "defadvice")
# (find-efunction 'defadvice)
# (find-efunctiondescr 'advice-add)
# (find-efunction      'advice-add)
# (find-efunctiondescr 'add-function)
# (find-efunctiondescr 'add-function ":after")
# (find-efunction      'add-function)
# (find-efunctiondescr 'advice-remove)
# (find-efunction      'advice-remove)

(defun foo (n) (insert (format "FOO%d" n)))
(defun bar (n) (insert (format "BAR%d" n)))
(defun plic (n) (insert "\n") (foo n) (bar (1+ n)))
(plic 20)

(defun ppar (n) (insert (format "(%d)" n)))
(advice-add 'foo :after 'ppar)
(plic 20)

(advice-remove 'foo 'ppar)
(plic 20)
FOO20BAR21

(find-efunctionpp 'foo)
(find-efunctionpp 'bar)
(find-efunctionpp 'plic)

      (symbol-plist    'foo)
      (symbol-function 'foo)
(setf (symbol-plist    'foo) nil)
(setf (symbol-function 'foo) nil)


FOO20BAR21



# (find-elnode "Advising Functions")

     (advice-add 'my-double :filter-return #'my-increase)

   After adding this advice, if you call `my-double' with `3', the
return value will be `7'.  To remove this advice, say

     (advice-remove 'my-double #'my-increase)



#####
#
# advice-examples
# 2022jan20
#
#####

# «advice-examples»  (to ".advice-examples")
# (find-elnode "Advising Functions")
# (find-efunction 'advice-add)
# (find-elnode "Advice Combinators" ":filter-return")
# (find-elnode "Advice Combinators" ":before")

  (defun my-double   (x) (* x 2))
  (defun my-increase (x) (+ x 1))
  (my-double 3)
  (advice-add 'my-double :filter-return #'my-increase)
  (my-double 3)
  (advice-remove 'my-double #'my-increase)
  (my-double 3)

  (find-2a nil '(find-efunctiondescr 'my-double))
  (advice-add             'my-double :filter-return #'my-increase)
  (find-2a nil '(find-efunctiondescr 'my-double))
  (advice-remove          'my-double                #'my-increase)
  (find-2a nil '(find-efunctiondescr 'my-double))

  (advice--make-docstring 'my-double)
  (advice-add             'my-double :filter-return #'my-increase)
  (advice--make-docstring 'my-double)
  (advice-remove          'my-double                #'my-increase)
  (advice--make-docstring 'my-double)


#####
#
# advice-log
# 2022jan20
#
#####

# «advice-log»  (to ".advice-log")
# (find-elnode "Advising Named Functions")
# (find-elnode "Advising Named Functions" "Function: advice-add")

  (defun my-foo (a b) (+ a b))
  (setq  my-log nil)
  (defun my-log-foo (&rest r) (setq my-log `((my-foo ,@r) ,@my-log)))
  ;;
  (my-foo 1 10)
  (my-foo 2 20)
  (advice-add    'my-foo :before #'my-log-foo)
  (my-foo 3 30)
  (my-foo 4 40)
   my-log
  (advice-remove 'my-foo         #'my-log-foo)
  (my-foo 5 50)
  (my-foo 6 60)
   my-log


  (setq  my-log nil)
  (defun my-log (f r) (setq my-log (cons (cons f r) my-log)))
  (defun my-log-my-foo (&rest r) (my-log 'my-foo r))
  ;;
  (defun my-foo (a b) (+ a b))
  (my-foo 1 10)
  (my-foo 2 20)
  (advice-add    'my-foo :before #'my-log-my-foo)
  (my-foo 3 30)
  (my-foo 4 40)
   my-log
  (advice-remove 'my-foo         #'my-log-my-foo)
  (my-foo 5 50)
  (my-foo 6 60)
   my-log

  (setq  my-log nil)
  (defun my-log (f r) (setq my-log (cons (cons f r) my-log)))
  (defun my-log-help-do-xref (&rest r) (my-log 'help-do-xref r))
  (advice-add    'help-do-xref :before 'my-log-help-do-xref)
  (advice-remove 'help-do-xref         'my-log-help-do-xref)
  my-log



#####
#
# find-mylog-links
# 2022jan20
#
#####

# «find-mylog-links»  (to ".find-mylog-links")
# (find-angg "elisp/find-mylog-links.el")
# (find-angg "elisp/find-ealias.el")
# (find-angg ".emacs.templates" "find-mylog-links")
# (find-mylog-links 'FOO)

(defun FOO (a b) (+ a b))
(FOO 1 10)
(FOO 2 20)

(setq  mylog nil)
(defun mylog (f r) (setq mylog (cons (cons f r) mylog)))
(defun mylog-FOO (&rest r) (mylog 'FOO r))
(advice-add 'FOO    :before 'mylog-FOO)
;;
;; These calls will be logged:
(FOO 3 30)
(FOO 4 40)
;;
(advice-remove 'FOO         'mylog-FOO)
(find-2a nil '(find-eppp mylog))

;; These calls will not be logged:
(FOO 5 50)
(FOO 6 60)

;; Inspect the contents of mylog:
(find-2a nil '(find-eppp mylog))





#####
#
# fontset math chars bug
# 2008mar14
#
#####

# «fontset-math-chars-bug»  (to ".fontset-math-chars-bug")
# http://article.gmane.org/gmane.emacs.bugs/17717
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-03/msg00090.html
# (find-angg ".emacs" "gnu.emacs.bugs")
# (find-efile "")
# (find-efile "ChangeLog")
# (find-ecvsfile "")
# (find-ecvsgrep "grep -niH -e mincho $(cat .files.ch)")
# (find-ecvsgrep "grep -niH -e GB18030 $(cat .files.ch)")
# (find-egrep "grep -niH -e GB18030 $(find *)")
# (find-efile "international/fontset.el")
# (find-elnode "Fontsets")
# (find-elnode "Fontsets" "set-fontset-font")
# (find-eapropos "charset")
# (find-eapropos "fontset")
# (find-efunction 'describe-char "\"display\"")
# (list-fontsets nil)
# (list-fontsets t)

# From: Eduardo Ochs <[email protected]>
# Subject: font used for some mathematical characters
# Newsgroups: gnu.emacs.bug
# Date: Fri, 14 Mar 2008 15:41:24 -0300

Some very recent changes in CVS Emacs have changed the the fonts that
are selected for displaying some mathematical characters, in a bad
way... The three sexps below will create a buffer with two problematic
characters (displayed with the face "highlight", for visibility), and
with several sexps that can be executed with C-x C-e to change to
frame font and to inspect the fonts used for individual characters.

--snip--snip--

(defun fontbug-propertize (c)
  (propertize (string c) 'face 'highlight))

(defun fontbug-string (c1 c2)
  (format "\
P%sQ <--| P
 |       |
 |  <->  |
 v       v
 R |--> Q%sS\n\n"
	  (fontbug-propertize c1)
	  (fontbug-propertize c2)))

(progn
  (switch-to-buffer "o")
  (delete-region 1 (point-max))
  (insert
   (string ?& 8743 10 10)
   (fontbug-string ?& ?>)
   (fontbug-string 8743 8835)  ;; problematic chars
   "(set-frame-font \"fixed\")\n"
   "(set-frame-font \"10x20\")\n"
   "(require 'descr-text)\n"
   "(describe-char-display 1 (char-after 1))\n"
   "(describe-char-display 2 (char-after 2))\n"
   "(internal-char-font 1)\n"
   "(internal-char-font 2)\n"
   ))

--snip--snip--

When I use the font "fixed", the two
"describe-char" lines return this:

  ("fixed:pixelsize=13:foundry=misc:weight=regular:slant=roman:width=semi-condensed" . "27")
  ("-Daewoo-Mincho-Medium-R-Normal--16-120-100-100-C-160-KSC5601.1987-0" . "217C")

and the "logical and" and "supset"/"implies"
chars (8743 and 8835) are taken from the "-Daewoo-..."
font and are ~ 2.5 times wider than normal chars.

When I use the font "10x20" the two
"describe-char" lines return this:

  ("fixed:pixelsize=20:foundry=misc:weight=regular:slant=roman:width=normal" . "08")
  ("fixed:pixelsize=20:foundry=misc:weight=regular:slant=roman:width=normal" . "C63")

and all the characters are the same size.

By the way, here "fixed" is the same font as "6x13"; I checked with:

  xlsfonts | grep -v \\-
  xlsfonts -l -fn fixed
  xlsfonts -l -fn 6x13

Versions: I am using a Debian 4.0 ("Etch", stable) GNU/Linux system;
and running "(emacs-version)" returns:
  => "GNU Emacs 23.0.60.2 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
      of 2008-03-14 on persephone"

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/
    [email protected]


2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;








#####
#
# mkto bug (multibyte vs unibyte)
# 2008mar14
#
#####

# «emacs-cvs-mkto-bug»  (to ".emacs-cvs-mkto-bug")
# (find-efunction 'mkto)
# (find-efunctionpp 'mkto)
# (find-elnode "Non-ASCII Characters")
# (find-elnode "Text Representations" "multibyte-string-p")
# (find-elnode "Converting Representations")
# (find-elnode "Converting Representations" "Function: string-make-unibyte")
# (find-elnode "Converting Representations" "Function: string-make-multibyte")
# (find-elnode "Converting Representations" "Function: string-to-multibyte")

(let* ((a (symbol-function 'mkto))
       (b (cadddr a))
       (c (cadr b))
       (d (caddr c))
       (s1 (cadr d))
       (s2 (caddr d))
       )
  (list s1 s2
  (multibyte-string-p s1)
  (multibyte-string-p s2)
  ))

(setq s1 "^\\(.+ \\)\253\\([!-~]+\\)\273$")
(setq s2 "\\1\253.\\2\273\t(to \"\\2\")\n\\&  (to \".\\2\")")
(setq m1 (string-to-multibyte s1))
(setq m2 (string-to-multibyte s2))
(setq u1 (string-make-unibyte m1))
(setq u2 (string-make-unibyte m2))

(multibyte-string-p s1)
(multibyte-string-p s2)
(multibyte-string-p m1)
(multibyte-string-p m2)
(multibyte-string-p u1)
(multibyte-string-p u2)




#####
#
# Converting hex <-> decimal
# 2019mar13
#
#####

# «hex» (to ".hex")
# (find-angg ".emacs" "find-echars-around")
# (find-angg ".emacs" "find-echars-around" "ee-hex-at-bol")
# http://ergoemacs.org/emacs/elisp_converting_hex_decimal.html
# https://stackoverflow.com/questions/2358604/convert-decimal-hex
# (find-efunctiondescr 'string-to-number)
# (find-elnode "Integer Basics" "#x2c")
# (read "#x100")




#####
#
# hexl-mode
# 2019jan12
#
#####

# «hexl-mode» (to ".hexl-mode")
# (find-efunction 'hexl-mode)
# (find-efunction 'hexl-find-file)




#####
#
# creating files in utf-8 and latin-1
# 2008apr08 / 2019jan12
#
#####

# «creating-utf8-files»  (to ".creating-utf8-files")
# (find-angg ".emacs" "ee-anchor-back")
# (find-efunction 'add-file-local-variable-prop-line)
# (find-man "1 echo")
# (find-man "1 echo" "-e")
# (find-man "1 echo" "\\xHH")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/ec2/
mkdir  /tmp/ec2/
cd     /tmp/ec2/
{ echo    ';;; -*- coding: latin-1; -*-'
  echo -e ';; \xabfoo\xbb'
  echo    ';; buffer-file-coding-system'
  echo    ';; (ee-anchor-back)'
} > latin-1
{ echo    ';;; -*- coding: raw-text; -*-'
  echo -e ';; \xabfoo\xbb'
  echo    ';; buffer-file-coding-system'
  echo    ';; (ee-anchor-back)'
} > raw-text
{ echo    ';;; -*- coding: utf-8; -*-'
  echo -e ';; \xc2\xabfoo\xc2\xbb'
  echo    ';; buffer-file-coding-system'
  echo    ';; (ee-anchor-back)'
} > utf-8


(find-fline     "/tmp/ec2/latin-1")
(hexl-find-file "/tmp/ec2/latin-1")
(find-fline     "/tmp/ec2/raw-text")
(hexl-find-file "/tmp/ec2/raw-text")
(find-fline     "/tmp/ec2/utf-8")
(hexl-find-file "/tmp/ec2/utf-8")



# Old:
# (find-es "console" "non-utf-8")
# (find-efunctiondescr 'hexl-mode)





#####
#
# skeletons
# 2008apr24
#
#####

# «skeletons»  (to ".skeletons")
# (find-efile "skeleton.el")
# (find-egrep "grep -nH -e skeleton $(find * -name '*.el')")
# (find-efile "textmodes/tex-mode.el" "define-skeleton tex-insert-braces")
# (find-efile "textmodes/tex-mode.el" "define-skeleton latex-insert-block")
# (find-node "(autotype)Top")
# (find-node "(autotype)Using Skeletons")




#####
#
# Help:IPA
# 2008apr26
#
#####

# «Help:IPA»  (to ".Help:IPA")
# (find-angg "elisp/help-ipa.el")
# http://en.wikipedia.org/wiki/Help:IPA
# (find-sh "tr '\"' '\n' < $S/http/en.wikipedia.org/wiki/Help:IPA | grep ogg | sort")
# (find-sh "tr '\"' '\n' < $S/http/en.wikipedia.org/wiki/Help:IPA | grep ogg | sort | grep http | uniq")
# (find-sh "tr '\"' '\n' < $S/http/en.wikipedia.org/wiki/Help:IPA | grep ogg | sort | grep http | uniq | tee /tmp/oggs")
#*
rm -Rv ~/usrc/help-ipa/
mkdir  ~/usrc/help-ipa/
cd     ~/usrc/help-ipa/
tar -xvzf ~/tmp/help-ita.tgz
for i in $(cat /tmp/oggs); do
  echo $i
  if [ ! -e $(basename $i) ]; then wget $i; fi
  # Don't download the oggs that we already have
done
tar -cvzf ~/tmp/help-ita.tgz *.ogg

#*

# (find-sh "grep audio /tmp/ipa2")
# (fooi-re "|{{audio-pipe|\\([^|]+\\)|[^|]+|<big>\\[&nbsp;\\([^&]+\\)&nbsp;\\]</big>}}" "\"\\2\" \"\\1\"")




#####
#
# The different display tables used by unibyte and latin-1 buffers
# 2008may20
#
#####

# «display-table-latin-1»  (to ".display-table-latin-1")
# (find-angg ".emacs" "find-euboutput")
# (find-elnode "Display Tables")
# (find-elnode "Active Display Table")
# (find-elnode "Glyphs")
# (find-elnode "Index" "* string-make-multibyte:")
# (find-elnode "Lisp and Coding Systems")
# (find-elnode "Coding System Basics" "Function: coding-system-get")
# (find-elnode "Explicit Encoding")

# (find-eevfile "eev-glyphs.el")
# (find-eevfile "eev-math-glyphs.el")

(progn
  (find-estring "áéíóú")
  (describe-coding-system nil)
  )




#####
#
# The "fixed" font became "sony-fixed"
# 2008may24
#
#####

# «sony-fixed»  (to ".sony-fixed")

<edrx> hello - I updated CVS emacs here and now the "-fn fixed"
       command-line parameter acts differently than before... it
       chooses a big, ugly font. (describe-face 'default) now
       reports:
<edrx>    Family: sony-fixed
<edrx>     Width: normal
<edrx>    Height: 120
<edrx>   ...
<edrx>      Font: #<font-object
       -sony-fixed-medium-r-normal--16-120-100-100-c-80-iso8859-1>
<edrx>   Fontset:
       -sony-fixed-medium-r-normal--16-*-75-75-c-80-fontset-auto2
<edrx> (btw: this is the first time that I see a #<font-object _> -
       is this a new datatype?)
<edrx> ah, and `(set-frame-font "10x20")' doesn't work anymore -
       "set-frame-font: Font `10x20' is not defined" - but
       `(set-frame-font "terminus-16")' works; `(set-frame-font
       "fixed")' runs without errors, but it chooses the "sony"
       font mentioned above.

<edrx> hmm
<edrx> (x-list-fonts "*" nil (selected-frame))
<edrx> lists lot of #<font-entity _> objects
<edrx> it's a whole new scary world

# (find-eface-links 'default)
# (find-efacedescr 'default)
# (find-elnode "Editing Types")
# (info "(elisp)Editing Types")
# (set-frame-font "fixed")
# (set-frame-font "10x20")
# (set-frame-font "terminus-16")
# (find-ecvsfile "")
# (find-ecvsfile "src/")
# (find-ecvssrcgrep "grep -nH -e font-object *")
# (find-elnode "Top")

# (find-efunction 'set-frame-font)
# (find-epp (x-list-fonts "*" nil (selected-frame)))
# (find-elnode "Fontsets")
# (find-elnode "Fontsets" "Function: set-fontset-font")
# (find-efile "")
# (find-egrep "grep -nH -e set-fontset-font $(find * -name '*.el')")
# (find-egrep "grep -nH -e sony-fixed $(find * -name '*.el')")
# (find-egrep "grep -nH -e sony $(find * -name '*.el')")
# (find-ecvssrcgrep "grep -nH -e sony *")

# (find-es "x")
# (find-sh "xlsfonts | grep fixed | sort")
# (find-sh "xlsfonts | grep sony | sort")

-misc-fixed-medium-o-normal--0-0-75-75-c-0-iso8859-1




#####
#
# fontsets
# 2008may26
#
#####

# «find-fontset-links»  (to ".find-fontset-links")
# (find-angg ".emacs" "find-fontset-links")

(find-fontset-links	 ,@rest)
(find-efunction 'find-fontset-links)

(find-es "emacs" "sony-fixed")
(find-efunctiondescr 'set-fontset-font)
(find-efunction 'set-fontset-font)
(find-elnode "Index" "* set-fontset-font:")
(find-egrep "grep -nH -e set-fontset-font $(find * -name '*.el')")
(find-egrep "grep -nH -e fontset $(find * -name '*.el')")
(find-efile "international/fontset.el" "set-fontset-font" "(#xE000 . #xF8FF)")

(list-fontsets nil)
(list-fontsets 1)
(describe-fontset ___)

(fontset-list)
(mapcar 'fontset-plain-name (fontset-list))
(mapcar 'x-decompose-font-name (fontset-list))
(find-efunction 'fontset-plain-name)
(query-fontset "fontset-startup")
(query-fontset "fontset-default")
(query-fontset "fixed")

(find-eface-links 'default)
(find-efacedescr 'default)

(set-frame-font "fixed")
(set-frame-font "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1")
(set-frame-font "10x20")
(set-frame-font "terminus-16")

(find-elnode "Type Predicates")
(find-efunction 'x-resolve-font-name)
(x-resolve-font-name "fixed")
(type-of (x-resolve-font-name "fixed"))
(aref (x-resolve-font-name "fixed") 0)
(aref [6 7 8] 2)
(x-compose-font-name (x-resolve-font-name "fixed"))

(find-efunction 'create-fontset-from-ascii-font)
(create-fontset-from-ascii-font "fixed")
(create-fontset-from-ascii-font "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1")
(x-decompose-font-name (x-resolve-font-name "fixed"))

(x-list-fonts "fixed" nil nil 1)
(ee-pp0 (car (x-list-fonts "fixed" nil nil 1)))
(find-estring (mapconcat 'ee-pp0 (x-list-fonts "fixed" nil nil nil) "\n"))

(find-efile "international/mule-diag.el")
(find-efile "international/fontset.el")

(find-efunction 'setup-default-fontset)

(find-efunction 'new-fontset)
(find-elnode "Index" "* new-fontset:")
(find-elnode "Fontsets")

(find-efunction-links 'create-fontset-from-fontset-spec)
(find-efunctiondescr 'create-fontset-from-fontset-spec)
(find-efunction 'create-fontset-from-fontset-spec)
(find-elnode "Index" "* create-fontset-from-fontset-spec:")

(find-es "x" "fonts.alias")
(find-sh "xlsfonts | grep fixed | sort")
(find-fline "/usr/share/fonts/X11/misc/fonts.alias" "fixed")

(find-bgprocess "xterm -fn 10x20")
(find-bgprocess "xterm -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1")
(find-ebuffer "*Messages*")

(find-man "1 xfd")
(find-bgprocess "xfd -fn fixed")
(find-bgprocess "xfd -fn 10x20")
(find-bgprocess "xfd -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1")
(find-bgprocess "xfd -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1")

(find-eapropos "fontset")
(find-eapropos "xl")
(list-fontsets nil)
(list-fontsets t)

(find-eapropos "xlfd")
(find-efunctiondescr 'font-xlfd-name)
(font-xlfd-name "fixed")
(font-xlfd-name (x-list-fonts "fixed" nil nil 1))
(find-egrep "grep -nH -e font-xlfd-name $(find * -name '*.el')")




#####
#
# ee-font-alias and ee-set-frame-font
# 2008jun01
#
#####

# «ee-font-unalias»    (to ".ee-font-unalias")
# «ee-set-frame-font»  (to ".ee-set-frame-font")
# (find-angg ".emacs" "ee-font-unalias")
# (find-angg ".emacs" "ee-set-frame-font")

# http://article.gmane.org/gmane.emacs.devel/98168
# (find-angg ".emacs" "gnu.emacs.devel")
# (find-sh "xlsfonts")
# (find-sh "xlsfonts -ll -fn 7x13")
# (find-sh "xlsfonts -ll -fn 7x13 | grep ' FONT '")
# (find-sh "xlsfonts -ll -fn 7x13 | grep ' FONT ' | cut -b29-")
# (find-sh "xlsfonts -ll -fn 7x13 | grep ' FONT ' | cut -b29- | tr A-Z a-z")
# (find-sh "xlsfonts -ll -fn 7x13 | grep ' FONT ' | cut -b29- | tr A-Z a-z | head -n1")

# Current font:
# (find-efunctiondescr 'set-frame-font)
# (find-efunction      'set-frame-font)
# (find-elnode "Parameter Access" "frame-parameters")
# (find-epp (frame-parameters (selected-frame)))
# (find-epp (frame-parameters (selected-frame)) "font")
# (frame-parameter (selected-frame) 'font)

# (set-frame-font "Monospace Bold 9")
# (set-frame-font "Monospace Bold 12")
# (set-frame-font "Monospace 7")
# (set-frame-font "Monospace 9")
# (set-frame-font "Monospace 12")



#####
#
# font-log
# 2008may30
#
#####

# «font-log»  (to ".font-log")
# (find-egrep "grep -nH -e font-log $(find * -name '*.el')")
# (find-efunction 'font-show-log)
# http://article.gmane.org/gmane.emacs.devel/98030
# http://article.gmane.org/gmane.emacs.devel/97989
# http://article.gmane.org/gmane.emacs.devel/97563



#####
#
# glyphs as conses
# 2008jul03
#
#####

# «glyphs-as-conses»  (to ".glyphs-as-conses")
# http://article.gmane.org/gmane.emacs.bugs/17576
# http://article.gmane.org/gmane.emacs.bugs/17607
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-02/msg00132.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-02/msg00163.html
# (find-efunction 'ee-glyph)
# (find-efunction 'make-glyph-code)
# (find-efile "disp-table.el" "defun make-glyph-code" "(cons char fid)")






#####
#
# case in replace-regexp
# 2008jul02
#
#####

# «case-in-replace-regexp»  (to ".case-in-replace-regexp")
# (find-efunction 'replace-regexp-in-string)
# (find-elnode "Index" "* replace-regexp-in-string:")
# (find-elnode "Replacing Match")
# (find-elnode "Search and Replace")
# (find-elnode "Searching and Case")

(replace-regexp-in-string "[ab]" "xx" "foobar")
(replace-regexp-in-string "[ab]" "xx" "fooBar")
(replace-regexp-in-string "[ab]" (lambda (s) "ww") "fooBar")
(replace-regexp-in-string "[ab]" (lambda (s) "ww") "fooBar" 'fixedcase)



#####
#
# time stamps
# 2008jul21
#
#####

# «time-stamp»  (to ".time-stamp")
# (find-enode "Time Stamps")
# (find-efunction 'time-stamp)



#####
#
# format-time-string
# 2024jul13
#
#####

# «format-time-string»  (to ".format-time-string")
# (find-es "telega" "search-by-date")
# (find-efunction 'parse-time-string)
# (find-elnode "Index" "* decode-time:")
# (find-elnode "Index" "* format-time-string:")
# (find-elnode "Index" "* parse-time-string:")
# (find-elnode "Index" "* encode-time:")
# (find-elnode "Index" "* time-convert:")

(setq ee-seconds
  (time-convert
    (encode-time
      (parse-time-string "2023-12-31 23:59:28")
      )
    'integer)
  )




#####
#
# anchors in latin-1 buffers: a problem
# 2008oct21
#
#####

# «anchors-in-latin-1»  (to ".anchors-in-latin-1")
# (find-TH "emacs" "unibyte-multibyte")
# (find-angg ".emacs" "save-this-block-as")
# http://article.gmane.org/gmane.emacs.bugs/21772
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-10/msg00830.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-01/msg00040.html

(setq ee-delimiter-semisnip "\n;;--------snip,snip--------\n")
(eeb-define 'eeb-string 'ee-se-to-string ee-delimiter-semisnip nil t t)
(defun save-this-block-as (fname) (eev (ee-once (eeb-string)) nil fname))

(find-fline "/tmp/1.txt")
(find-fline "/tmp/2.txt")
 (load-file "/tmp/1.txt")

(find-fline "/tmp/3.txt")
(eev "emacs-default -Q /tmp/3.txt")

# (find-eapropos "multibyte")
# (multibyte-string-p "«foo»")
# (multibyte-string-p "foo")
# (multibyte-string-p ee-anchor-format)
# (multibyte-string-p ee-anchor-format)
# (defun msp (str) (multibyte-string-p str))
# (find-elnode "Converting Representations")
# (find-elnode "Coding System Basics" "`raw-text'")
# (find-elnode "Coding System Basics" "`emacs-internal'")
# (find-elnode "Coding System Basics" "latin-1")
# (find-elnode "Lisp and Coding Systems" "coding-system-charset-list")
# (find-elnode "Lisp and Coding Systems" "detect-coding-region")
# (find-elnode "Explicit Encoding")

# Sent to: (find-angg ".emacs" "gnu.emacs.bugs")
#          (find-efunction 'report-emacs-bug)
# Subject: unibyte->multibyte conversion problem (in search-forward and friends)
# Date:    2008oct21


Hello,

this may not be exactly a bug, I'm just struggling with an obscure
part of Emacs... anyway, I did my best to make this look like a nice
bug report, and to make the tests clear enough to help other people
who also find unibyte<->multibyte conversions obscure...

The short story
===============
Let me refer to strings like "<<tag>>" - where the "<<" and ">>" stand
for guillemets, i.e., the characters that we type with `C-x 8 <' and
`C-x 8 >' - as "anchors". So: if I produce an anchor string in a
unibyte buffer and then I search for an occurrence of that string in
multibyte buffer, the search fails.

The two small blocks below illustrate this. Instructions: save the
first one to "/tmp/1.txt", the second one to "/tmp/2.txt", and then
run:

  (load-file "/tmp/1.txt")

It will show "uni" in the "*Messages*" buffer, and the search will
fail. The detailed message about the failure of the search will be
like this:

  progn: Search failed: "\302\253foo\302\273"

meaning the anchor string has been incorrectly converted.



;;--------snip,snip--------
;; -*- coding: raw-text-unix -*-
;; (save-this-block-as "/tmp/1.txt")
(progn
  (find-file "/tmp/2.txt")
  (goto-char (point-min))
  (setq anchorstr "«foo»")
  (message (if (multibyte-string-p anchorstr) "multi" "uni"))
  (search-forward anchorstr))
;;--------snip,snip--------

;;--------snip,snip--------
;; -*- coding: latin-1 -*-
;; (save-this-block-as "/tmp/2.txt")
(search-forward "«foo»")
;; «foo»
;;--------snip,snip--------



The long story
==============
Save the block below as "/tmp/3.txt" and follow the instructions in
it. Note that it doesn't have any non-ascii characters - the anchors
are produced by running the "(insert ...)" sexps.



;;--------snip,snip--------
;; -*- coding: latin-1 -*-
;; (save-this-block-as "/tmp/3.txt")

;; Run the "progn" below with C-x C-e.
;; It will create a line like this:
;; <<anchor>>\253anchor\273\253anchor\273\253anchor\273
;; (but the "<<", ">>", "\253", "\273" are single characters).
;; Don't delete that line, it will be used later.
;;
(progn
  (defun mmb (str) (string-make-multibyte str))
  (defun mub (str) (string-make-unibyte   str))
  (insert 171 "anchor" 187)
  (insert           "\253anchor\273")
  (insert      (mub "\253anchor\273"))
  (insert (mmb (mub "\253anchor\273")))
  )


;; Now try to save this file.
;; Emacs will complain about the "\253"s and "\273"s - it will
;; say that iso-latin-1-unix and utf-8-unix cannot encode them.
;; The "<<" and ">>" are ok, though...
;;
;; So: leave the "<<anchor>>" above, delete the "\253anchor\273"s,
;; save this file, and reload it. DON'T SKIP THIS STEP - the
;; charset properties mentioned below behave differently before
;; and after reloads, and I don't know exactly the mechanics of
;; this... 8-\
;;
;; If we inspect the "<<", ">>" "\253", "\273" with `C-x ='
;; we see this:
;; Char: << (171, #o253, #xab, file #xAB)
;; Char: >> (187, #o273, #xbb, file #xBB)
;; Char: \253 (4194219, #o17777653, #x3fffab, raw-byte)
;; Char: \253 (4194235, #o17777673, #x3fffbb, raw-byte)
;;
;; Now mark the "<<anchor>>" above and copy it to the top of
;; the kill ring with `M-w'. Let's examine the results of
;; several obvious ways to (re)create the "<<anchor>>"
;; above as a string...
;; Here are some of the results:
;;
;;               "\253anchor\273"   ==> "<<anchor>>"
;;          (mub "\253anchor\273")  ==> "<<anchor>>"
;;     (mmb (mub "\253anchor\273")) ==> "\253anchor\273"
;;               (car kill-ring)    ==>
;;               #("<<anchor>>" 0 8 (charset iso-8859-1))
;;          (mub (car kill-ring))   ==> "<<anchor>>"
;;     (mmb (mub (car kill-ring)))  ==> "\253anchor\273"

                            "\253anchor\273"
                       (mub "\253anchor\273")
                  (mmb (mub "\253anchor\273"))
             (mub (mmb (mub "\253anchor\273")))
(mapcar 'identity           "\253anchor\273")
(mapcar 'identity      (mub "\253anchor\273"))
(mapcar 'identity (mmb (mub "\253anchor\273")))
                            (car kill-ring)
                       (mub (car kill-ring))
                  (mmb (mub (car kill-ring)))
(mapcar 'identity           (car kill-ring))
(mapcar 'identity      (mub (car kill-ring)))
(mapcar 'identity (mmb (mub (car kill-ring))))


;; This is the weird part.
;; Let's insert another "<<anchor>>"/"\253anchor\273" pair, and
;; let's try to jump to its "anchors" with `search-backward'.

(insert 171 "anchor" 187 "\n\253anchor\273")



(search-backward            "\253anchor\273")
(search-backward       (mub "\253anchor\273"))
(search-backward  (mmb (mub "\253anchor\273")))
(search-backward            (car kill-ring))
(search-backward       (mub (car kill-ring)))
(search-backward  (mmb (mub (car kill-ring))))

;; Only "(search-backward (car kill-ring))" jumps to
;; "<<anchor>>" - all the others jump to "\253anchor\273".
;; The trick - aha! - is that "(car kill-ring)" holds this
;; string,
;;
;;          (car kill-ring)    ==>
;;          #("<<anchor>>" 0 8 (charset iso-8859-1))
;;
;; and the "(charset iso-8859-1)" property is essential...
;;--------snip,snip--------


What is the standard way to convert unibyte strings (for example
anchor strings, generated from code in raw-text-unix ".el" files) to
strings with the right charset property (if needed) and the right
encoding? I couldn't find the functions for that...

  Cheers, thanks in advance,
    Eduardo Ochs
    eduardoochs at gmail.com
    http://angg.twu.net/



P.S.: (emacs-version) ==>
"GNU Emacs 23.0.60.1 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
 of 2008-10-11 on dekooning"
--end of mail--




#####
#
# anchors in latin-1, bis
# 2008oct24
#
#####

# «anchors-in-latin-1-2»  (to ".anchors-in-latin-1-2")
# (find-elnode "Converting Representations")
# (find-TH "emacs" "unibyte-multibyte")

;;--------snip,snip--------
;; -*- coding: latin-1 -*-
;; (save-this-block-as "/tmp/4.txt")

(setq <<foo>> "\253foo\273")
(setq <<foo>>uni    (string-to-unibyte   <<foo>>))
(setq <<foo>>multi  (string-to-multibyte <<foo>>))
(setq <<foo>>uni+   (decode-coding-string <<foo>>uni   'iso-8859-1))
(setq <<foo>>multi+ (decode-coding-string <<foo>>multi 'iso-8859-1))

;; Note: <<foo>>uni  is unibyte,
;;   but <<foo>>uni+ is multibyte
;; (and <<foo>>uni+ = <<foo>>multi+)
(multibyte-string-p <<foo>>)
(multibyte-string-p <<foo>>uni)
(multibyte-string-p <<foo>>multi)
(multibyte-string-p <<foo>>uni+)
(multibyte-string-p <<foo>>multi+)

(insert 171 "foo" 187)

(search-backward <<foo>>uni)
(search-backward <<foo>>multi)
(search-backward <<foo>>uni+)
(search-backward <<foo>>multi+)
;;--------snip,snip--------

(setq ee-anchor-format (encode-coding-string "«%s»" 'iso-8859-1))
(multibyte-string-p    (encode-coding-string "«%s»" 'iso-8859-1))
(multibyte-string-p   (format ee-anchor-format "foo"))
(decode-coding-string (format ee-anchor-format "foo") 'iso-8859-1)
(decode-coding-string                          "foo"  'iso-8859-1)
;;  => #("<<foo>>" 0 5 (charset iso-8859-1))
;;  => "foo"
(setq <<%s>>  (encode-coding-string "«%s»"  'iso-8859-1))
(setq <<foo>> (encode-coding-string "«foo»" 'iso-8859-1))
(multibyte-string-p "«%s»")
(multibyte-string-p <<%s>>)
(multibyte-string-p <<foo>>)
(decode-coding-string <<foo>> 'iso-8859-1)
(decode-coding-string  "foo"  'iso-8859-1)
(find-fline "/tmp/2.txt" <<foo>>)
(find-fline "/tmp/2.txt" foo>>)
(multibyte-string-p (format "%c%s%c" 171 "foo" 187))
(multibyte-string-p (concat (list 171 ?f ?o ?o 187)))






#####
#
# gdb'ing emacs
# 2008oct23
#
#####

# «gdb-ing-emacs»  (to ".gdb-ing-emacs")
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-03/msg00101.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-03/msg00454.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-03/msg00457.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-03/msg00467.html
# (find-ecvssh "grep -i gdb   .files0")
# (find-ecvssh "grep -i debug .files0")
# (find-ecvsfile "etc/DEBUG")
# (find-ecvsfile "etc/DEBUG" "** Examining Lisp object values")
# (find-ecvsfile "src/.gdbinit")

;; (sin 0)
;; (find-efunction 'sin)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
emacs-default --eval '(sin 0)'
emacs-default --eval '(message ee-anchor-format "foo")'

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
~/bigsrc/emacs/src/
gdb emacs
br Fsin
set args --eval '(sin 0)'
run




#####
#
# Debian Lenny's problems with my .emacs
# 2009may03
#
#####

# «lenny-emacs-init»  (to ".lenny-emacs-init")
# (find-fline "/etc/" "emacs")
# (find-fline "/etc/emacs/site-start.d/")
# By default there's no "/etc/emacs21/"...
# Running the "mkdir" below solves the initialization problem,
# running the "rm" below makes it start happening again.
# (find-sh0 "sudo mkdir -p /etc/emacs21/site-start.d/")
# (find-sh0 "sudo rm -Rv   /etc/emacs21/")

Warning (initialization): An error occurred while loading `/home/edrx/.emacs':

File error: Opening directory, No such file or directory, /etc/emacs21/site-start.d

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.




#####
#
# bitmap-mule
# 2009jul26
#
#####

# «bitmap-mule»  (to ".bitmap-mule")
# (find-available "bitmap-mule")
# (find-status   "bitmap-mule")
# (find-vldifile "bitmap-mule.list")
# (find-udfile   "bitmap-mule/")
# (find-fline "/usr/share/pixmaps/bitmap-mule/")



#####
#
# Rudel (a collaborative editing environment)
# 2009sep22
#
#####

# «rudel»  (to ".rudel")
# http://rudel.sourceforge.net/




#####
#
# comint-mode gets stuck where shell-mode doesn't
# 2010oct09
#
#####

# «comint-gets-stuck»  (to ".comint-gets-stuck")
# This problem is a show-stopper for eepitch-comint.

# Run this before:
(defun eepitch-zsh () (interactive) (eepitch-comint "zsh" "zsh"))

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
-- This one gets stuck
li = io.read()
foo

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
lua51
-- This one does not get stuck
li = io.read()
foo

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# This one does not get stuck
read A
foo
echo $A

* (eepitch-zsh)
* (eepitch-kill)
* (eepitch-zsh)
# This one does not get stuck
read A
foo
echo $A




#####
#
# comint-process-echoes
# 2011nov03
#
#####

# «comint-process-echoes»  (to ".comint-process-echoes")
# 2011nov03: Found the culprit! It was this line:
#   (find-evariable 'comint-process-echoes)
#   (find-evardescr 'comint-process-echoes)
# (find-elnode "Index" "* make-local-variable:")

#*
# (eev-bounded)
cat > /tmp/test <<'%%%'
* (progn (load "/etc/emacs/site-start.d/90eev.el") (eev-activate-initial))
* (defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r45 -geometry +512+0"))
* (defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r45"))
* (eepitch-gs)
% This is problematic. Comint gets stuck here...
(This is a \
string \
that has no \
newlines)
==
* (eepitch-kill)
* (load "/home/edrx/eev-current/eepitch.el")
* (defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r45"))
* (eepitch-gs)
% This is problematic. Comint gets stuck here...
(This is a \
string \
that has no \
newlines)
==
%%%

#*

# For the binary search I commented out a part of my .emacs (from some
# point to the end) with
# (progn 			; ^^^
# )	 			; ^^^
# and took notes of when the block happened...

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
emacs -geometry +0+0 -fn 6x13    /tmp/test
emacs -geometry +0+0 -fn 6x13 -Q /tmp/test

# (find-fline "~/.emacs" "^^^")
# emacs -Q with ^^^ at  739: nothing blocks
# emacs    with ^^^ at  423: all ok
# emacs    with ^^^ at 3000: all ok
# emacs    with ^^^ at 3496: all ok
# emacs    with ^^^ at 3710: all ok
# emacs    with ^^^ at 3913: all ok
# emacs    with ^^^ at 3990: all ok
# emacs    with ^^^ at 3998: ?
# emacs    with ^^^ at 4000: all block
# emacs    with ^^^ at 5000: all block





#####
#
# comint-password
# 2022nov19
#
#####

# «comint-password»  (to ".comint-password")
# (find-angg ".emacs" "eepitch-password-prompt")
# (In buffer *shell*) [email protected]'s password:
# (find-egrep "grep --color=auto -nH --null 'buffer.*password' *.el */*.el")
# (find-efunctiondescr 'comint-watch-for-password-prompt)
# (find-efunction      'comint-watch-for-password-prompt)
# (find-evardescr 'comint-password-prompt-regexp)
# (find-evariable 'comint-password-prompt-regexp)
# (find-hvariable 'comint-password-prompt-regexp)
# (find-elnode "Standard Properties" "standard-value")
# (find-efunctiondescr 'regexp-opt)
# (find-efunction      'regexp-opt)

(get 'comint-password-prompt-regexp 'standard-value)

(rx unmatchable)

(setq comint-password-prompt-regexp (default-value 'comint-password-prompt-regexp))

(get 'comint-password-prompt-regexp 'standard-value)





#####
#
# ee-gformat
# 2011feb24
#
#####

# «ee-gformat»  (to ".ee-gformat")
# (find-eevfile "eev-insert.el" "defun ee-gformat")
# (find-angg "LUA/lua50init.lua" "gformat")
;; (find-elnode "Index" "* replace-regexp-in-string:")
;; (find-elnode "Replacing Match")
;; (replace-regexp-in-string "^.*$" "<\\&_\\&>" "foo")
;; (replace-regexp-in-string "^.*$" "<\\&_\\&>" "foo \n bar")
;; (replace-regexp-in-string "\\`\\(.\\|\n\\)*\\'" "<e: \\&_\\&>" "FOO \n BAR")
;; (replace-regexp-in-string "\\`\\(.\\|\n\\)*\\'" "<e: \\&_\\&>" "FOO \n BAR" 'fixedcase)
;; (replace-regexp-in-string "\\`\\(.\\|\n\\)*\\'" "<e: \\&_\\&>" "foo \n bar" 'fixedcase)
;;          (ee-gformat "<\\&_\\&>")
;; (funcall (ee-gformat "<\\&_\\&>") "foo bar")
;; (funcall (ee-gformat "<\\&_\\&>") "foo \n bar")
;;          (ee-gmapconcat "<\\&_\\&>" ", ")
;; (funcall (ee-gmapconcat "<\\&_\\&>" ", ") (ee-split "foo bar"))
;; (funcall (ee-gmapconcat "  (setq \\& (or \\& \"{\\&}\"))\n") (ee-split "foo bar"))

(defun ee-gformat (fmt)
  `(lambda (str) (replace-regexp-in-string
		  "\\`\\(.\\|\n\\)*\\'" ,fmt str 'fixedcase)))

(defun ee-gmapconcat-split (fmt sep str)
  (mapconcat (ee-gformat fmt) (ee-split str) (or sep "")))

(defun ee-gmapconcat (fmt &optional sep)
  `(lambda (seq) (mapconcat (ee-gformat ,fmt) seq ,(or sep ""))))

(defun ee-gformat-now (fmt str)
  (funcall (ee-gformat fmt) str))
(defun ee-gmapconcat-now (fmt sep seq)
  (funcall (ee-gmapconcat fmt sep) seq))
(defun ee-gmapconcat-split (fmt sep str)
  (funcall (ee-gmapconcat fmt sep) (ee-split str)))


(ee-gmapconcat-split "  (setq \\& (or \\& \"{\\&}\"))\n" nil "foo bar")
(ee-gmapconcat-split "  (setq \\& (or \\& \"{\\&}\"))\n" nil "")




#####
#
# gdb-mi
# 2011nov20
#
#####

# «gdb-mi»  (to ".gdb-mi")
# (find-angg ".emacs" "gdb")
# (find-es "gdb" "gdb-squeeze")
# http://emacswiki.org/emacs/GDB-MI/
# (find-enode "GDB Graphical Interface")
# (find-efile "")
# (find-efile "progmodes/")
# (find-efile "progmodes/gdb-mi.el")
# (find-efile "progmodes/gdb-mi.el" "*input/output of ")
# (find-efile "progmodes/gud.el")
# (find-efile "progmodes/gud.el" "gdb-mi is loaded")
# (find-egrep "grep -nH -e gdb-mi progmodes/*.el")
# (find-eevgrep "grep -nH -e '=mi' *.el")
# (find-angggrep "grep -nH -e '=mi' .emacs")

# (find-gdbnode "Emacs")
# (find-gdbnode "Emacs" "GUD buffer")
# (find-gdbnode "GDB/MI")
# (find-gdbnode "Mode Options" "--interpreter=mi")
# (find-gdbnode "Interpreters")
# (find-gdbnode "Interpreters" "`mi'")




#####
#
# CC mode
# 2011nov20
#
#####

# «C-mode»  (to ".C-mode")
# (find-angg ".emacs" "cc-mode")
# (find-node "(ccmode)Top")
# (find-angg "vtutil/pio_fontx.c")

(code-c-d "ccmode" (ee-efile "progmodes/") "ccmode")
;; (find-ccmodefile "")
;; (find-ccmodefile "" "cc-align")
;; (find-ccmodenode "")
;; (find-ccmodenode "Electric Keys")
;; (find-ccmodenode "Getting Started" "Electric Indentation" "C-c C-l")





#####
#
# Tramp
# 2004dec23 / 2012apr09
#
#####

# «tramp»  (to ".tramp")
# (find-node "(tramp)Top")
# http://www.gnu.org/software/tramp/
# http://www.gnu.org/software/tramp/#Obtaining-Tramp
# http://lists.gnu.org/archive/html/tramp-devel/
# ftp://ftp.gnu.org/gnu/tramp/tramp-2.2.4.tar.gz
#*
rm -Rv ~/usrc/tramp-2.2.4/
tar -C ~/usrc/ -xvzf \
  $S/ftp/ftp.gnu.org/gnu/tramp/tramp-2.2.4.tar.gz
cd     ~/usrc/tramp-2.2.4/

# (find-angg "bin/emacs-default")

./configure --help      |& tee och
./configure --with-emacs=$HOME/bigsrc/emacs/src/emacs  |& tee oc
make lisp               |& tee oml
make MAKEINFO=makeinfo  |& tee ommi

#*
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/tramp-2.2.4/

# «load-new-tramp»  (to ".load-new-tramp")
# (add-to-list 'load-path "~/usrc/tramp-2.2.4/lisp/")

# (find-angg ".emacs" "info-path")
# (add-to-list 'Info-additional-directory-list "~/usrc/tramp-2.2.4/info/")

# (code-c-d "tramp" "~/usrc/tramp-2.2.4/" "~/usrc/tramp-2.2.4/info/tramp")
# (find-trampfile "")
# (find-trampfile "texi/Makefile" "makeinfo --no-split")
# (find-trampfile "texi/Makefile" "localinfodir")
# (find-trampfile "texi/tramp-emacs.html/")
# (find-trampfile "info/")
# (find-trampnode "")
# (find-trampnode "Ad-hoc multi-hops")
# (find-trampnode "Multi-hops" "/sudo:randomhost")

# Sudo trick not working:
# (find-newhost-links "gwen" "192.168.1.101")
#   (find-fline "/sudo::/")
#   (find-fline "/sudo:localhost:/")
#   (find-fline "/ssh:edrx@gwen:/")
#   (find-fline "/sudo::|ssh:edrx@gwen:/")
#   (find-fline "/sudo:gwen:/")
#   (find-fline "/sudo:192.168.1.101:/")

# Old:
# (find-node "(tramp)Top")
# (find-node "(tramp)Inline methods" "`sudo'")
# (find-node "(tramp)Filename Syntax")
# (find-node "(tramp)Default Method" "/ssh:root@otherhost:/etc/motd")
# (find-fline "/sudo:root@localhost:/etc/fstab")

# Errors, 2013jul05:
Copy `/sda6/nikon/parabens_edwin/parabens_edwin_5.jpg' to `/scp:[email protected]:/home/edrx/slow_html/PURO/parabens_edwin_5.jpg' failed:
(file-error Couldn't find exit status of `(/usr/bin/zsh -c scp -p -q -r -o ControlPath=/tmp/tramp.6122eH3.%r@%h:%p -o ControlMaster=auto -o ControlPersist=no /sda6/nikon/parabens_edwin/parabens_edwin_5.jpg edrx\@angg.twu.net\:/home/edrx/slow_html/PURO/parabens_edwin_5.jpg && echo tramp_exit_status 0 || echo tramp_exit_status 1)')




#####
#
# tramp-debug
# 2021jan13
#
#####

# «tramp-debug»  (to ".tramp-debug")
# (find-efile "net/" "tramp.el")
# (find-efile "net/tramp.el")
# (find-efile "net/tramp-sh.el" "Opening connection for")
# (find-efunction 'with-tramp-progress-reporter)
# (find-efunction 'tramp-message)
# (find-evardescr 'tramp-verbose)

# (find-elnode "Index" "* buffer-list:")
# (find-efunctiondescr   'buffer-list)
# (find-efunction        'buffer-list)
# (find-eppp (mapcar 'buffer-name (buffer-list)))
# (find-ebuffer       "*tramp/scp [email protected]*")
# (find-ebuffer "*debug tramp/scp [email protected]*")

# (find-fline "~/LOGS/2021jan13.emacs" "(setq tramp-verbose 5)")

# (setq tramp-verbose 5)
# (find-twupfile "")
# (setq tramp-verbose 3)




#####
#
# Tramp from the git repo
# 2013mar02
#
#####

# «tramp-from-git» (to ".tramp-from-git")
# http://www.gnu.org/software/tramp/#Obtaining-Tramp
# http://lists.gnu.org/archive/html/tramp-devel/
# (add-to-list 'load-path "~/usrc/tramp/lisp/")
# (add-to-list 'Info-additional-directory-list "~/usrc/tramp/info/")

* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
# http://www.gnu.org/software/tramp/#Obtaining-Tramp
rm -Rfv ~/usrc/tramp/
mkdir   ~/usrc/tramp/
cd      ~/usrc/tramp/
git clone git://git.savannah.gnu.org/tramp.git .

# To update:
cd ~/usrc/tramp/
git pull

#*
# (find-fline "~/usrc/tramp/")
cd      ~/usrc/tramp/
autoconf





#####
#
# tramp-plink
# 2008jan18
#
#####

# «tramp-plink»  (to ".tramp-plink")
# (find-es "w32" "putty")




#####
#
# tramp-prompt
# 2021feb21
#
#####

# «tramp-prompt»  (to ".tramp-prompt")
# https://blog.twonegatives.com/post/615830090370187264/effective-emacs-how-to-have-your-fancy-prompt-and





#####
#
# tramp-2.1.9
# 2007may21
#
#####

# «tramp-2.1.9»  (to ".tramp-2.1.9")
# (find-angg ".emacs" "tramp-2.1.9")
# ftp://ftp.gnu.org/gnu/tramp/tramp-2.1.9.tar.gz
#*
rm -Rv ~/usrc/tramp-2.1.9/
tar -C ~/usrc/ -xvzf \
  $S/ftp/ftp.gnu.org/gnu/tramp/tramp-2.1.9.tar.gz
cd     ~/usrc/tramp-2.1.9/

#*
# (code-c-d "tramp" "~/usrc/tramp-2.1.9/")
# (code-c-d "tramp" "~/usrc/tramp-2.1.9/" "~/usrc/tramp-2.1.9/info/tramp")
# (find-trampfile "")
# (find-trampnode "")





#####
#
# Password caching
# 2011nov27
#
#####

# «password-cache»  (to ".password-cache")
# (find-angg ".emacs" "tramp-2.1.9")
# (find-eapropos "password" "password-cache")
# (find-efile "password-cache.el")
# (find-efile "password-cache.el" "(make-vector 7 0)")




#####
#
# Multi-hop methods for tramp
# 2011nov27
#
#####

# «multi-hop»  (to ".multi-hop")
# (find-angg ".emacs" "varda")
# (find-node "(tramp)Multi-hops")

a quick question about tramp and multi-hops, related to:
  (info "(tramp)Multi-hops")
  (describe-variable 'tramp-default-proxies-alist)
I can access files on the machine "varda" with both these sexps,
  (find-file "/scp:edrx@varda:")
  (find-file "/ssh:edrx@varda:")
and there I can do sudo without password and ssh locally to root with, say, password 1234.
so: how can I access files as root on varda via tramp? it should be something like this,
  (setq         tramp-default-proxies-alist nil)
  (add-to-list 'tramp-default-proxies-alist '("varda\\'" "\\`root\\'" "/ssh:%h:"))
but what [...]

I turns out that this works:

  (find-file "/ssh:root@varda:")
  (find-file "/ssh:root@varda:/")
  (find-file "/ssh:root@varda:/etc/")




#####
#
# CUA mode
# 2011dec01
#
#####

# «cua-mode»  (to ".cua-mode")
# (find-enode "CUA Bindings")
# (find-efile "emulation/")
# (find-efile "emulation/cua-base.el")
# (find-efile "emulation/cua-gmrk.el")
# (find-efile "emulation/cua-rect.el")
# (find-efunctiondescr 'cua-mode)




#####
#
# Undo
# 2019feb09
#
#####

# «undo» (to ".undo")
# https://www.emacswiki.org/emacs/CategoryUndo



#####
#
# undo-boundary (thx to ljf)
# 2011dec28
#
#####

# «undo-boundary»  (to ".undo-boundary")

in the code below,
  (defun f (str) (format "<%s>" str))
  (defun g () (interactive)
    (insert (f (delete-and-extract-region (point-at-bol) (point-at-eol)))))
why does undo consider that g is an atomic operation?
if I insert "foo" in a line, then run M-x g, then the line becomes "<foo>",
  but with an intermediate step: "foo" -> "" -> "<foo>"...
if I then run "undo" what happens is "foo" <- "<foo>".
Emacs does the right thing, but I don't understand how that's implemented.
pointers would be highly appreciated =)

# (find-elnode "Index" "* undo-boundary:")




#####
#
# undo-tree
# 2021nov21
#
#####

# «undo-tree»  (to ".undo-tree")
# (find-efunctiondescr 'undo-tree-mode)
# (find-efunction      'undo-tree-mode)

# (find-epackage-links 'undo-tree "undotree" t)
# (find-epackage       'undo-tree)
# (code-c-d "undotree" "~/.emacs.d/elpa/undo-tree-0.7.5/")
# (find-undotreefile "")





#####
#
# backup-inhibited
# 2012apr24
#
#####

# «backup-inhibited»  (to ".backup-inhibited")
# (find-fline "/etc/apt/sources.list")
# (find-fline "/etc/hosts")
#   (setq backup-inhibited t)




#####
#
# aliases for variables
# 2012oct01
#
#####

# «defvaralias»  (to ".defvaralias")
# (find-elnode "Variable Aliases")

(defvaralias 'ee-H 'ee-hyperlink-prefix)
;; (ee-template0 "{ee-H}Hello")




#####
#
# fringe
# 2019aug29
#
#####

# «fringe» (to ".fringe")
# (find-elnode "Fringes")
# https://emacs.stackexchange.com/questions/5342/how-do-i-set-the-fringe-colors-to-whatever-is-the-background-color
# (find-eface-links 'fringe)
# (find-efaces "fringe")
# (find-eface 'fringe)

# In emacs24:
# (set-face-foreground 'fringe nil)
# (set-face-background 'fringe "grey10")

# In emacs27:
# (set-face-foreground 'scroll-bar "#2c2c2c")
# (set-face-background 'scroll-bar "#d4d4d4")
# This looks ugly on dark backgrounds!




#####
#
# Where GUD stores the current source line
# 2012nov07
#
#####

# «gud-fringe» (to ".gud-fringe")

# (find-egrep "grep -niH -e xpm progmodes/*.el")
# (find-egrep "grep -niH -e pbm progmodes/*.el")
# (find-egrep "grep -niH -e breakpoint-xpm-data progmodes/*.el")
# (find-egrep "grep -niH -e find-image             progmodes/*.el")
# (find-egrep "grep -niH -e fringe                 progmodes/*.el")
# (find-egrep "grep -niH -e triangle               progmodes/*.el")
# (find-egrep "grep -niH -e fringe-indicator-alist progmodes/*.el")
# (find-egrep "grep -niH -e overlay-arrow-position progmodes/*.el")
# (find-egrep "grep -niH -e last-frame             progmodes/*.el")
# (find-egrep "grep -niH -e frame-handler          progmodes/*.el")
# (find-efile "progmodes/")
# (find-efile "progmodes/gdb-mi.el" "breakpoint-xpm-data")
# (find-efile "progmodes/gdb-mi.el" "breakpoint-enabled-icon")
# (find-efile "progmodes/gdb-mi.el" "define-fringe-bitmap")
# (find-efile "progmodes/gud.el" "gud-last-frame")
# (find-eetcfile "images/gud/")
# (find-eetcfile "images/gud/break.xpm")
# (find-elnode "Fringes")
# (find-elnode "Fringe Indicators" "left-triangle")
# (find-elnode "Fringe Indicators" "fringe-indicator-alist")
# (find-elnode "Overlay Arrow" "overlay-arrow-position")
# (find-esgrep "grep -nH -e ptype *.e")

gdb-selected-frame
gdb-selected-file
gdb-selected-line

(find-fline gdb-selected-file gdb-selected-line)


          (setq gud-last-frame (cons gdb-selected-file gdb-selected-line))




#####
#
# fringe-bitmaps
# 2024mar26
#
#####

# «fringe-bitmaps»  (to ".fringe-bitmaps")
# (find-elnode "Fringe Bitmaps" "right-arrow warning")

     (overlay-put
      (make-overlay (point) (point))
      'before-string (propertize
                      "x" 'display
                      `(left-fringe right-arrow warning)))





#####
#
# frame geometry (for screencasts)
# 2012nov13
#
#####

# «frame-geometry» (to ".frame-geometry")
# (find-es "x" "xwininfo")

;; (find-elnode "Size of Window")
;; (find-elnode "Size of Window" "window-pixel-edges")
;; (find-elnode "Management Parameters" "`outer-window-id'")
;; (find-es "x" "xwininfo")
;; (find-elnode "Parameter Access")
;; (find-epp (frame-parameters))
;; (find-xwininfo "")
;; (find-xwininfo0 "| grep Width: | awk '{print $2}'")
;; (find-xwininfo0 "| grep Height: | awk '{print $2}'")
;; (window-edges)
;; (window-pixel-edges)

(defun find-xwininfo0 (str)
  (let ((id (frame-parameter (selected-frame) 'outer-window-id)))
    (find-sh0 (format "xwininfo -id %s %s" id str))))

(defun find-xwininfo (str &rest pos-spec-list)
  (find-estring (find-xwininfo0 str) pos-spec-list))

(defun ee-aligned (pow2 n) (= 0 (logand (- pow2 1) n)))
(defun ee-align   (pow2 n) (while (not (ee-aligned pow2 n)) (setq n (1+ n))) n)
;; (ee-align 8 20)

(defun ee-scast-geometry0 (h v)
  (format "%dx%d+0+0" (+ 18 (* 6 h)) (* 13 v)))
(defun ee-scast-geometry (ah av)
  (ee-scast-geometry0
   (ee-align ah (frame-parameter (selected-frame) 'width))
   (ee-align av (frame-parameter (selected-frame) 'height))))
(setenv "GEOMETRY" (ee-scast-geometry 1 1))

(setq ee-scast-cmdline
 "avconv -loglevel quiet -r 5 -s $GEOMETRY -f x11grab -i $DISPLAY /tmp/out.mp4")

(defun ee-scast-start () (interactive)
  (find-sh0 "rm -f /tmp/out.mp4")
  (setenv "GEOMETRY" (ee-scast-geometry))
  (find-bgprocess ee-scast-cmdline))
(defun ee-scast-stop  () (interactive)
  (find-sh0 "killall avconv"))

;; (ee-scast-start)
;; (ee-scast-stop)
;; (find-fline "/tmp/" "out.mp4")
;; (find-video "/tmp/out.mp4")

(find-bgprocess ee-scast-cmdline))

(ee-scast-geometry0 167 46)
(ee-scast-geometry)




#####
#
# Adjust the geometry
# 2012nov16 / 2016oct08
#
#####

# «adjust-geometry» (to ".adjust-geometry")
# (to "toggle-frame-maximized")
# (find-elnode "Size and Position" "set-frame-height")
# (find-elnode "Size and Position" "set-frame-width")
# Some things here don't work in maximized windows...
#   (find-angg ".fvwm/.fvwm2rc" "no-super-key" "F8" "Maximize")

(set-frame-width nil 160)
(set-frame-width nil 167)

;; Starting size:   (set-frame-size nil  80 35)
;; For screencasts: (set-frame-size nil 167 59)
;; Maximized:       (set-frame-size nil 210 61)
;;
;; (frame-parameter nil 'width)
;; (frame-parameter nil 'height)

;; Old:

(defun eegeom-adjust (dx dy)
  (set-frame-parameter nil 'width  (+ dx (frame-parameter nil 'width)))
  (set-frame-parameter nil 'height (+ dy (frame-parameter nil 'height))))

(defun eeframe-get (symbol)       (frame-parameter (selected-frame) symbol))
(defun eeframe-set (symbol v) (set-frame-parameter (selected-frame) symbol v))

(set-frame-width (selected-frame) 160)
(set-frame-width (selected-frame) 167)

(eeframe-get 'width)
(eeframe-set 'width 160)

(defun eeframe-width () (frame-parameter nil 'width)

(eegeom-adjust -1 0)
(eegeom-adjust 1 0)





#####
#
# Fontifying an arbitrary buffer as info
# 2012nov18
#
#####

# «fontify-as-info» (to ".fontify-as-info")
;; (find-efunction 'info)
;; (find-efile "info.el" "info-title-2")
;; (find-efile "info.el" "defun Info-fontify-node")
;; (find-efile "info.el" "defun Info-fontify-node" ";; Fontify titles")
;; (find-fline "/usr/share/info/emacs-24/elisp.info.gz")

;; (find-elnode "Faces")
;; (find-elnode "Face Attributes" ":underline")


(defun ee-intro-face (c)
  (cond ((= c ?*) 'info-title-1)
	((= c ?=) 'info-title-1)
	((= c ?-) 'info-title-2)
	(t        'info-title-3)))

;; This is practically a copy of:
;; (find-efile "info.el" "defun Info-fontify-node" ";; Fontify titles")
(defun ee-intro-fontify ()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (and (re-search-forward
		 "\n\\([^ \t\n].+\\)\n\\(\\*\\*+\\|==+\\|--+\\|\\.\\.+\\)$"
		 nil t)
		;; Only consider it as an underlined title if the ASCII
		;; underline has the same size as the text.  A typical
		;; counter example is when a continuation "..." is alone
		;; on a line.
		(= (string-width (match-string 1))
		   (string-width (match-string 2))))
      (let* ((c (preceding-char))
	     (face (ee-intro-face c)))
	(put-text-property (match-beginning 1) (match-end 1)
			   'face face))
      ;; This is a serious problem for trying to handle multiple
      ;; frame types at once.  We want this text to be invisible
      ;; on frames that can display the font above.
      (when (memq (framep (selected-frame)) '(x pc w32 ns))
	(add-text-properties
	 (1- (match-beginning 2)) (match-end 2)
	 '(invisible t front-sticky nil rear-nonsticky t))))))

(defalias 'eif 'ee-intro-fontify)




#####
#
# Sticky Properties
# 2019feb04
#
#####

# «sticky» (to ".sticky")
# (find-elnode "Sticky Properties")
# (find-eevfile "eev-intro.el" "invisible t front-sticky")

;; Is this problem related to stickiness?
;; Killing a title line in info includes the "\n===="/"\n----" thing...

(find-2a nil ' (find-elnode "Sticky Properties" "31.19.6 Stickiness"))
(eek "M-o C-a C-SPC C-e M-w M-o")
(ee-last-kill)
(car kill-ring)

# A solution:
# https://emacs.stackexchange.com/questions/13480/copy-text-as-it-is-rendered-by-emacs
# https://www.emacswiki.org/emacs/subr%2B.el
# http://www.emacswiki.org/emacs/download/subr%2b.el
# (find-fline "$S/http/www.emacswiki.org/emacs/download/subr+.el")
# (find-fline "$S/http/www.emacswiki.org/emacs/download/subr+.el" "of-visible")






(progn
  (find-enode "Executing Lisp")
  (write-region (point-min) (point-max) "/tmp/i")
  (find-fline "/tmp/i")
  (Info-fontify-node)
  )

(progn
  (find-sh "cat /tmp/i")
  (Info-fontify-node)
  )

(progn
  (find-eepitch-intro)
  (Info-fontify-node)
  )




#####
#
# Adjust PATH
# 2012nov20
#
#####

# «adjust-PATH» (to ".adjust-PATH")
# https://gist.github.com/34b59137063404db0f56

(defun read-lines (file)
  "Return a list of lines in FILE."
  (with-temp-buffer
    (insert-file-contents file)
    (split-string
     (buffer-string) "\n" t)
    ) )

(defun jdv-split-path-from-file (lines)
  (let ((linelist (if (listp lines) lines (list lines)) ))
    (split-string (car linelist) ":" t)))

(let ((path-file (expand-file-name "~/.emacs_path")))
  (when (file-exists-p path-file)
    (setenv "PATH"
            (mapconcat 'identity
                       (delete-dups
                        (append
                         (jdv-split-path-from-file (read-lines path-file))
                         (split-string (getenv "PATH") ":" t))) ":"))))



#####
#
# Emacsconf
# 2013jan06
#
#####

# «emacsconf» (to ".emacsconf")
# http://lists.hugadev.com/listinfo.cgi/emacs-conf-hugadev.com
# http://lists.hugadev.com/pipermail/emacs-conf-hugadev.com/
# http://lists.hugadev.com/pipermail/emacs-conf-hugadev.com/2013-January.txt
# http://lists.hugadev.com/pipermail/emacs-conf-hugadev.com/2012-December.txt.gz

# My submission:
# http://lists.hugadev.com/pipermail/emacs-conf-hugadev.com/2013-January/000120.html
# http://angg.twu.net/emacsconf.html



#####
#
# EmacsConf 2013
# 2013sep26
#
#####

# «emacsconf-2013» (to ".emacsconf-2013")
http://www.youtube.com/playlist?list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&feature=plcp Emacs Conference 2013
http://www.youtube.com/watch?v=hEqqbq0lL4k&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=1 XWidgets - Joakim Verona (Emacs Conf 2013)
http://www.youtube.com/watch?v=H9E5qmiuYOQ&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=2 Emacs Wiki - Nic Ferrier - Emacs Conference 2013
http://www.youtube.com/watch?v=gswAVtzQ7to&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=3 Arxana - Joe Corneli - Emacs Conference 2013
http://www.youtube.com/watch?v=-jSePveaIPA&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=4 Emacs Live - Sam Aaron - Emacs Conference 2013
http://www.youtube.com/watch?v=Z7-tWOl07hY&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=5 El-get - Dimitri Fontaine - Emacs Conference 2013
http://www.youtube.com/watch?v=VhnEQj7Sn8E&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=6 From Marmalade to Emacs - Michael Olson - Emacs Conference 2013
http://www.youtube.com/watch?v=RvPFZL6NJNQ&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=7 Emacs Lisp Development - John Wiegley - Emacs Conference 2013
http://www.youtube.com/watch?v=ApoNHiLZVCA&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=8 Package Management - Nic Ferrier, Steve Purcell, Dimitri Fontaine - Emacs Conference 2013
http://www.youtube.com/watch?v=eZDWJfB9XY4&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=9 SLIME - Luke Gorrie - Emacs Conference 2013
http://www.youtube.com/watch?v=uRO3dNJx5Dw&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=10 Project Grok - Steve Yegge - Emacs Conference 2013

http://www.youtube.com/watch?v=BQUd3VjqENU&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=11 Fixing My ELisp - Christophe Rhodes - Emacs Conference 2013 Lightning Talks
http://www.youtube.com/watch?v=ufE-aBQXg-A&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=12 Javascript REPL - Kris Jenkins - Emacs Conference 2013 Lightning Talks
http://www.youtube.com/watch?v=ARa5GlzxGvw&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=13 Intro to One-Key - Ben Veal (Joe Bloggs) - Emacs Conference 2013 Lightning Talks
http://www.youtube.com/watch?v=REvuT16GRVA&list=PL4th0AZixyRE9bb8OevAb7I8RuaWJQWnO&index=14 Minor Mode for Writing - Daniel Szmulewicz - Emacs Conference 2013 Lightning Talks
http://sachachua.com/blog/2013/04/emacs-conference-2013-sketchnotes-also-pdf/

http://nic.ferrier.me.uk/
https://www.emacswiki.org/emacs/NicFerrier
http://nic.ferrier.me.uk/blog/2013_01/year-in-emacs



#####
#
# emacsconf-2019
# 2019aug25
#
#####

# «emacsconf-2019» (to ".emacsconf-2019")
# (find-fline "~/LOGS/2019aug24.emacsconf")
# (find-THfile "index.blogme" "EmacsConf2019")
# (find-THfile "emacsconf2019.blogme")
# https://emacsconf.org/2019
# https://emacsconf.org/2019/submit
# https://news.ycombinator.com
# https://news.ycombinator.com/item?id=20553826
# https://lobste.rs/s/f9plml/emacsconf_2019_call_for_proposals
# https://old.reddit.com/r/emacs/comments/cjam80/
# https://lists.gnu.org/archive/html/emacsconf-discuss/

# (find-here-links-intro)
# (find-here-links-intro "1. Alternating between \"task\" and \"notes\"")
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwDqnnRFswxjFcmckzJfNKnncQd CfP
# https://mail.google.com/mail/ca/u/0/#sent/KtbxLvHkTtxlNlkDMZzfnqbmnHgpqfGqdB my submission
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwDrlbQJcZJjVHHszjbpCRLkrpn schedule
# https://mail.google.com/mail/ca/u/0/#search/emacsconf+minutes/KtbxLvHkTtxlNlkDMZzfnqbmnHgpqfGqdB

To: [email protected]

Title:
How to record executable notes with eev - and how to play them back

Abstract:
In the old times we would take notes about a task - think on
fieldnotes - by using paper notebooks. Nothing was automatic then: we
had to decide what to write and how to write it, we had to switch
between "task" and "notes", we had to learn how to write both readably
and concisely, and we had to learn how to switch between task and
notes without losing focus. Learning these things usually took years.

In this talk I will present a package called "Eev" that lets us do a
modern version of this. Some of its lowel-level modules implement
support for many kinds of elisp hyperlinks and a variant of
`isend-mode' called `eepitch' that lets us select an interpreter and
send lines of the current buffer to it; on top of that it has tools
that let us create and modify elisp hyperlinks with very few
keystrokes. I will show 1) how to use the elisp hyperlinks and eepitch
blocks in already existing notes, 2) how to create elisp hyperlinks
and eepitch blocks with very few keystrokes, 3) how to use this to do
"task"+"notes" with just a few more keystrokes than we would use to do
just "task", 4) how I've been using this to teach Emacs to total
beginners.

The Eev homepage is at <http://angg.twu.net/#eev>.




#####
#
# SMIE (Simple Minded Indentation Engine)
# 2013feb02
#
#####

# «smie» (to ".smie")
# (find-books "__comp/__comp.el" "monnier-smie")
# http://emacsconf.herokuapp.com/proposals/27
# (find-efile "emacs-lisp/smie.el")
# (find-elnode "SMIE")
# (find-egrep "grep -nrH -e smie *")

https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00324.html pkal
https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00330.html smonnier

;; <monniersmie>
;; https://arxiv.org/abs/2006.03103
;; https://arxiv.org/pdf/2006.03103.pdf
(code-pdf-page "monniersmie" "$S/https/arxiv.org/pdf/2006.03103.pdf")
(code-pdf-text "monniersmie" "$S/https/arxiv.org/pdf/2006.03103.pdf")
;; (find-monniersmiepage)
;; (find-monniersmietext)





#####
#
# define-minor-mode (and how to redefine a minor mode)
# 2013mar01 / 2019apr14
#
#####

# «define-minor-mode» (to ".define-minor-mode")
# (find-elnode "Defining Minor Modes")
# (find-efunctiondescr 'define-minor-mode)
# (find-efunction      'define-minor-mode)
# (find-egrep "grep --color=auto -nH -e define-minor-mode *.el */*.el")
# (find-es "eev" "backtick-eev-mode")
# (find-eev "eev-mode.el" "eev-mode-define")

(find-epp (macroexpand '

(define-minor-mode foo-mode
  "Help 1"
  :init-value nil
  :global nil
  :lighter " foo")

))

find-efunction 'define-minor-mode)
(find-efunctionpp 'foo-mode)


(define-minor-mode foo-mode "Help 2"
  :init-value nil :global nil :lighter " foo")
;;
;; (foo-mode 0)
;; (foo-mode 1)
;; (find-efunctiondescr 'foo-mode)

;; (find-efunctiondescr 'eev-mode)
;;
(let ((eev-mode-help "Bleh"))
  (eev-mode-define))
;; (find-efunctiondescr 'eev-mode)
;;
(eev-mode-define)
;; (find-efunctiondescr 'eev-mode)




#####
#
# browsers
# 2018dec07
#
#####

# «browsers» (to ".browsers")
# (find-angg ".emacs" "eww")
# https://www.emacswiki.org/emacs/CategoryWebBrowser
# (find-enode "EWW")
# (find-node "(eww)Top")



#####
#
# eww
# 2013jul13
#
#####

# «eww» (to ".eww")
# (find-angg ".emacs" "eww")
# http://lars.ingebrigtsen.no/2013/06/eww.html
# http://lars.ingebrigtsen.no/2013/06/eww-improvements.html
# http://thread.gmane.org/gmane.emacs.devel/160466/focus=160669

# (find-eetcfile "NEWS" "`eww'")
# (find-gitemacsfile "")
# (find-gitemacsfile "oc" "checking for libxml-2.0")
# (find-gitemacsfile "src/xml.c")
# (find-elnode "Parsing HTML/XML")

# (eww "file:///home/edrx/TH/L/")
# (eww "file:///home/edrx/TH/L/index.html")
# (eww "file:///home/edrx/TH/L/parabens-edwin.html")
# (find-efile "net/eww.el")
# (find-efile "net/")
# (find-efunction 'eww)
# (find-efunction 'eww-render)
# (find-efunction 'eww-display-html)





#####
#
# term
# 2013sep24
#
#####

# «term» (to ".term")
# (find-efunctiondescr 'term)
# (find-efunctiondescr 'term-mode)
# (find-efile "term.el")
# (find-enode "Terminal emulator")
# (find-enode "Term Mode")
# (describe-variable 'term-prompt-regexp)
# (find-fline "~/LOGS/2019may15.emacs")




#####
#
# elscreen
# 2013nov18
#
#####

# «elscreen» (to ".elscreen")
# http://www.emacswiki.org/emacs/EmacsLispScreen
# https://github.com/knu/elscreen
# (find-zsh "dmissing elscreen")
# (find-epackages)
# (find-epackage 'elscreen)

;; (find-fline "~/.emacs.d/elpa/")
;; (find-fline "~/.emacs.d/elpa/elscreen-20120413.1107/")
(code-c-d "elscreen" "~/.emacs.d/elpa/elscreen-20120413.1107/")
;; (find-elscreenfile "")
# (find-elscreenfile "elscreen.el")

# (eek "M-h M-k C-z ?")
# (eek "C-z ?")





#####
#
# Emacs web server
# 2014jan12
#
#####

# «emacs-web-server» (to ".emacs-web-server")
# (find-es "org" "mailing-list")
# http://lists.gnu.org/archive/html/emacs-orgmode/2014-01/msg00524.html

# https://github.com/eschulte/emacs-web-server
# http://eschulte.github.io/emacs-web-server/tutorials/#sec-1
# http://eschulte.github.io/emacs-web-server/Org_002dmode-Export.html#Org_002dmode-Export
# https://github.com/eschulte/emacs-web-server/blob/master/examples/013-org-export-service.el
# https://github.com/eschulte/emacs-web-server/blob/master/examples/011-org-agenda.el
# https://github.com/eschulte/org-ehtml
# http://eschulte.github.io/emacs-web-server/benchmark/




#####
#
# cask
# 2014jul03
#
#####

# «cask» (to ".cask")
# (find-es "lua5" "lua-mode.el")
# https://github.com/cask/cask
# http://cask.readthedocs.org/en/latest/
# (find-git-links "https://github.com/cask/cask" "cask")
# (code-c-d "cask" "~/usrc/cask/")
# (find-caskfile "")

# (find-epackage 'cask)
# (find-fline      "~/.emacs.d/elpa/cask-20150327.208/cask-cli.el")
# (code-c-d "cask" "~/.emacs.d/elpa/cask-20150327.208/")
# (find-caskfile "")
# (find-fline "~/.cask/")
# (find-fline "~/.cask/bin/cask")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-sh "curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go")
curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python

cd ~/bin/
cp -s ../.cask/bin/cask .



#####
#
# yasnippet
# 2014oct10 / 2021dec17
#
#####

# «yasnippet» (to ".yasnippet")
# https://emacstil.com/til/2022/02/19/use-yasnippet-for-personal-planning/
# https://github.com/AndreaCrotti/yasnippet-snippets

<bpalmer> sav: see ,,yasnippet,,
<fsbot> yasnippet: [0/4] https://github.com/joaotavora/yasnippet/
<fsbot> [1] see also http://www.emacswiki.org/emacs/Yasnippet
<fsbot> [2] a great template system for Emacs.
<fsbot> [3] see ,AbbrevMode for an even lighter-weight solution
        that ships with Emacs
<fsbot> [4] see ,SkeletonMode for a lightweight solution that comes
        with Emacs

# (find-epackage-links 'yasnippet "yasnippet" t)
# (find-epackage       'yasnippet)
# (find-epackage-links 'yasnippet-snippets "yasnippetsnippets" t)
# (find-epackage       'yasnippet-snippets)
# (code-c-d "yasnippet"         "~/.emacs.d/elpa/yasnippet-20200604.246/")
# (code-c-d "yasnippetsnippets" "~/.emacs.d/elpa/yasnippet-snippets-20220221.1234/")
# (find-yasnippetfile "")
# (find-yasnippetgrep "grep --color=auto -nH --null -e defstruct *.el")
# (find-yasnippetfile "yasnippet.el" "(cl-defstruct (yas--table")
# (find-yasnippetfile "yasnippet.el" "(defun yas--snippet-parse-create")
# (find-yasnippetsnippetsfile "")
# (find-yasnippetsnippetsfile "snippets/")
# (find-yasnippetsnippetsfile "snippets/haskell-mode/")
# (find-yasnippetsnippetsfile "snippets/haskell-mode/functione")
# (find-yasnippetsnippetsfile "snippets/sql-mode/create")

(require 'yasnippet-snippets)
(yasnippet-snippets-initialize)
(find-efunction 'yasnippet-snippets-initialize)
(find-fline yasnippet-snippets-dir)

# (find-epackage-links 'yasnippet "yasnippet" t)
# (find-epackage       'yasnippet)
# https://github.com/joaotavora/yasnippet
# (code-c-d "yasnippet" "~/.emacs.d/elpa/yasnippet-20200604.246/")
# (find-yasnippetfile "")
# (find-yasnippetfile "yasnippet.el")
# (eek "M-h M-k  <menu-bar> <yasnippet> <Load snippets...>	;; yas-load-directory")

# (find-efunctiondescr 'yas-load-directory)
# (find-efunction      'yas-load-directory)

(require 'yasnippet)
(yas-global-mode 1)

# (find-evardescr 'yas-minor-mode-map)
# (find-evariable 'yas-minor-mode-map)
# (find-ekeymapdescr yas-minor-mode-map)




# http://lists.gnu.org/archive/html/eev/2014-10/msg00001.html
# http://www.emacswiki.org/emacs/Yasnippet
# http://github.com/capitaomorte/yasnippet
# http://manual.macromates.com/en/snippets
# (find-epackage 'yasnippet)
# (find-fline "~/.emacs.d/elpa/" "yasnippet"")
# (find-git-links "http://github.com/capitaomorte/yasnippet" "yasnippetgit")

(code-c-d "yasnippet"  "~/.emacs.d/elpa/yasnippet-20141008.2316/")
(code-c-d "yasnippets" "~/.emacs.d/elpa/yasnippet-20141008.2316/snippets/")
(code-c-d "yasnippetgit" "~/usrc/yasnippet/")
;; (find-yasnippetfile "")
;; (find-yasnippetsfile "")
;; (find-yasnippetsfile "c-mode/")
;; (find-fline "~/.emacs.d/elpa/yasnippet-readme.txt")
;; (find-yasnippetgitfile "")

# (find-yasnippetgitfile "README.mdown" "[high-res-demo]:")
# (find-youtubedl-links "/sda5/videos/" "Yasnippet_Screencast" "ZCGmZK4V7Sg" ".mp4" "yasnippetsc")
# (code-video "yasnippetscvideo" "/sda5/videos/Yasnippet_Screencast-ZCGmZK4V7Sg.mp4")
# (find-yasnippetscvideo)
# (find-yasnippetscvideo "0:00")

# (find-video "/sda5/videos/Yasnippet_Screencast-ZCGmZK4V7Sg.mp4")
# (find-video "/sda5/videos/Yasnippet_Screencast-ZCGmZK4V7Sg.mp4.part")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /sda5/videos/
youtube-dl -t --restrict-filenames 'http://www.youtube.com/watch?v=ZCGmZK4V7Sg'

https://emacstil.com/til/2021/09/28/yasnippet/

# «yasnippet-aldon»  (to ".yasnippet-aldon")
# https://emacsconf.org/2019/talks/31/ Don't wait! Write your own (yas)snippet - Tony Aldon
# https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-31-dont-wait-write-your-own-yas-snippet--tony-aldon.webm
# (code-video "aldonvideo" "$S/https/mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-31-dont-wait-write-your-own-yas-snippet--tony-aldon.webm")
# (find-aldonvideo "0:00")



#####
#
# yasnippet-snippet
# 2022may31
#
#####

# «yasnippet-snippet»  (to ".yasnippet-snippet")
# https://github.com/joaotavora/yasnippet/
# https://github.com/joaotavora/yasnippet/tree/snippet-engine




#####
#
# markdown-mode
# 2014oct10
#
#####

# «markdown-mode» (to ".markdown-mode")
# (find-epackage 'markdown-mode)
# http://jblevins.org/projects/markdown-mode/




#####
#
# dynamic binding vs lexical binding
# 2014oct14
#
#####

# «dynamic-binding» (to ".dynamic-binding")
# (find-elnode "Variable Scoping")
# (find-elnode "Dynamic Binding")
# (find-elnode "Lexical Binding")

https://lists.gnu.org/archive/html/emacs-devel/2020-03/threads.html#00173 lexical-binding is turned on in more use cases
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30078 Use lexical-binding for M-:

https://lists.gnu.org/archive/html/bug-gnu-emacs/2018-03/msg00328.html
https://lists.gnu.org/archive/html/bug-gnu-emacs/2018-03/msg00627.html
https://lists.gnu.org/archive/html/bug-gnu-emacs/2018-03/threads.html#00603

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30078#86 Drew (cites RMS)




#####
#
# lentic
# 2015jan22
#
#####

# «lentic» (to ".lentic")
# (find-epackages "\n  lentic ")
# (find-epackage 'lentic)
# https://github.com/phillord/lentic
# http://www.russet.org.uk/blog/3035 Lenticular Text: Looking at code from different angles
# https://vimeo.com/116078853 Lenticular Text for Emacs Source




#####
#
# isend
# 2016apr19
#
#####

# «isend» (to ".isend")
# (find-epackage 'isend-mode)
# (find-elpafile "isend-mode-readme.txt")
# (code-c-d "isend" "~/.emacs.d/elpa/isend-mode-20190201.832/")
# (find-isendfile "")
# See: (find-es "eev" "isend")




#####
#
# registers
# 2019mar10
#
#####

# «registers» (to ".registers")
# (find-efile "register.el")
# (find-enode "Registers")
# (find-efunction 'point-to-register)
# (find-enode "Position Registers" "C-x r <SPC> R")
# (find-enode "Position Registers" "C-x r <SPC> R" "point-to-register")

# (eek "M-h M-k  C-x r SPC  ;; point-to-register")
# (eek "M-h M-k  C-x r j    ;; jump-to-register")
# (find-efunctiondescr 'point-to-register)
# (find-efunction      'point-to-register)
# (register-read-with-preview "Point to register: ")

(point-to-register ?a)


# (eek "C-x r SPC a")
# (eek "M-x view-register RET a")
# (find-efunction 'view-register)
# (find-efunction 'get-register)
# (find-evardescr 'register-alist)



#####
#
# jump-to-register
# 2016jul22
#
#####

# «jump-to-register» (to ".jump-to-register")
# (find-elongkey-links "C-x r j  ;; jump-to-register")
# (find-efunction 'jump-to-register)
# (find-efunction 'jump-to-register "(get-register register)")
# (find-efunction 'jump-to-register "(markerp val)")

# (register-read-with-preview "Jump to register: ")
# (eek "C-x r j a")
# (jump-to-register ?a)
# (get-register ?a)




#####
#
# pastebin
# 2017abr30
#
#####

# «pastebin» (to ".pastebin")
# (find-angg ".emacs.templates" "find-pastebin-links")
# (find-pastebin-links)
# http://emacswiki.org/wiki/pastebin
# https://www.emacswiki.org/emacs/download/pastebin.el
# http://paste.lisp.org/new




#####
#
# format
# 2017jul25
#
#####

# «format» (to ".format")
# (find-elnode "Formatting Strings")
# (find-elnode "Output Functions")
# (format "%S" "«hello»")



#####
#
# unibyte/multibyte support: notes from 2017
# 2017jul29
#
#####

# «unibyte-2017» (to ".unibyte-2017")
# This was superseded by:
#   (to "unibyte-2019")
#
# (find-elnode "Converting Representations")
# (find-elnode "Converting Representations" "string-to-unibyte")
# (find-elnode "Selecting a Representation")
# (find-elnode "Selecting a Representation" "string-as-unibyte")
# (find-elnode "General Escape Syntax")
# (find-efunctiondescr 'decode-coding-string)
# (find-elnode "Index" "* decode-coding-string:")
# "Gr\374ss Gott"
# (decode-coding-string "Gr\374ss Gott" 'latin-1)
# (ee-no-properties (decode-coding-string "Gr\374ss Gott" 'latin-1))
# (find-efunction 'find-anchor)
# (find-efunction 'ee-goto-anchor)
# (find-efunction 'ee-format-as-anchor)
# (find-eevfile "eev-anchors.el" "defun ee-format-as-anchor")
# (find-einsert '((8592 9000)))

(defun touni (str) (string-to-unibyte str))
(defun tomul (str) (string-to-multibyte str))
(defun tolat (str) (ee-no-properties (decode-coding-string str 'latin-1)))
(defun toraw (str) (ee-no-properties (decode-coding-string str 'raw-text)))


"\uNNNN"
"\u8658"
"\u2200"

(touni "\253foo\273")
(tomul "\253foo\273")
(tolat (touni "\253foo\273"))
(tolat (tomul "\253foo\273"))

;; (find-eevfile "eev-anchors.el" "defun ee-format-as-anchor")
;;
(defun ee-tolatin1 (str)
  (ee-no-properties (decode-coding-string (string-to-unibyte str) 'latin-1)))
(defun ee-toanchor (tag)
  (format ee-anchor-format tag))
;;
(defun ee-format-as-anchor (tag)              (format ee-anchor-format tag))
(defun ee-format-as-anchor (tag) (ee-tolatin1 (format ee-anchor-format tag)))
(defun ee-format-as-anchor (tag) (format (ee-tolatin1 ee-anchor-format) tag))

(find-2a nil '(find-anchor "/tmp/foo.mul" "hello"))
(find-2a nil '(find-anchor "/tmp/foo.uni" "hello"))
(find-2b nil '(find-anggfile "ORG/index.org" 1 (tolat (touni "\253foo\273"))))
(find-2b nil '(find-anggfile "ORG/index.org" 1 (tolat (touni "\253foo\273"))))
(find-2b nil '(find-es "git" 1 (tolat (touni "\253foo\273"))))



(find-2b nil '(find-anggfile "ORG/index.org" 1))
(find-2b nil '(find-anggfile "ORG/index.org" 1 (tolat (touni "\253foo\273"))))
(find-2b nil '(find-anggfile "ORG/index.org" 1 (tolat (touni "\253foo\273"))))
(find-2b nil '(find-es "git" 1 (tolat (touni "\253foo\273"))))


(defun ee-format-as-anchor (tag)
  "Convert TAG into an anchor using `ee-anchor-format'."
  (if ee-anchor-format
      (format ee-anchor-format tag)
    (error "`ee-anchor-format' is nil - can't convert string to anchor")))


# (find-fline "/tmp/foo.mul")
# (find-fline "/tmp/foo.uni")

(ee-toanchor "foo" 1)
(ee-toanchor "foo" 8)
(ee-toanchor "foo" 7)
(ee-toanchor "foo")




#####
#
# Notes on unibyte/multibyte strings (2019)
# 2019feb23
#
#####

# «unibyte-2019» (to ".unibyte-2019")
# (find-elnode "Index" "string-as-multibyte")
# (find-elnode "Index" "string-as-unibyte")
# (find-elnode "Index" "string-to-multibyte")
# (find-elnode "Index" "string-to-unibyte")
# (find-elnode "Index" "string-bytes")
# (find-eev     "eev-codings.el")
# (find-eevfile "eev-codings.el" "defun ee-to-coding ")
# (find-eevfile "eev-codings.el" "defun ee-tolatin1 ")
# (find-eevfile "eepitch.el" "defun ee-no-properties ")
# (find-elnode "General Escape Syntax" "\\x41")
# (find-elnode "Non-ASCII in Strings")
# (find-elnode "Character Codes" "#x3FFF80" "4194176")

(defun ee-no-properties (str)
  (setq str (copy-sequence str))
  (set-text-properties 0 (length str) nil str)
  str)
(defun ee-to-coding (coding str)
  (ee-no-properties (decode-coding-string str coding)))

(defalias 'sam 'string-as-multibyte)
(defalias 'sau 'string-as-unibyte)
(defalias 'stm 'string-to-multibyte)
(defalias 'stu 'string-to-unibyte)
(defun to1 (str) (ee-to-coding 'latin-1 str))
(defun tor (str) (ee-to-coding 'raw-text str))
(defun tou (str) (ee-to-coding 'utf-8 str))
(defalias 'pr1 'prin1-to-string)

(setq  fs '(sam stm tou sau stu tor to1))
(defun bar (s) (list s '-> (mapcar (lambda (f) (funcall f s)) fs)))
(defun lbs (s) (list (length s) (string-bytes s) (mapcar 'identity s)))

;; When we execute the 4 setqs below with M-e
;; what we see in the echo area is:
;;    stra -> "«»"
;;    strb -> "\253\273"
;;    strc -> "«»"
;;    strd -> "\300\253\300\273"
;;
(setq stra      "\253\273" )
(setq strb (sam "\253\273"))
(setq strc (to1 stra))
(setq strd (tou strb))

;; ...but stra and strc are different!
;; I discovered this when I tried to insert the result of
;;
;;   (list stra strb strc strd)
;;
;; in the current buffer with M-1 C-x C-e. I got:
;;
;;   ("«»" "\253\273" "\x00ab\x00bb" "\300\253\300\273")
;;
;; This also shows that stra and strc are distinct:
;;
;;   (prin1-to-string (list stra strc))
;;
;; But the best way to compare them is to inspect
;; their Lenght/nBytes/characterS with lbs.
;; We get:
;;   (lbs stra) -> (2 2 (171 187))
;;   (lbs strb) -> (2 4 (4194219 4194235))
;;   (lbs strc) -> (2 4 (171 187))
;;   (lbs strd) -> (4 8 (4194240 4194219 4194240 4194235))
(lbs stra)
(lbs strb)
(lbs strc)
(lbs strd)

;; Conversions. If we try to run this
(bar stra)
(bar strb)
(bar strc)
(bar strd)
;; only `(bar strc)' fails. Let's check why:
(sam strc)
(sau strc)
(stm strc)
(stu strc)
(to1 strc)
(tor strc)
(tou strc)
;; we get:
;;   (stu strc) -> error: Can't convert the 0th character to unibyte
;;   (tor strc) -> "UE"
;;
;; Note: the conversion to "UE" is very weird. I did stumble on that
;; when I was working with latin-1/raw-text/utf-1 buffers, but I
;; didn't know where the error (?) was.




;; Old notes, very messy:

(defun foo (str &rest rest)
  (if (not rest) str
    (apply 'foo (funcall (car rest) str) (cdr rest))))

(foo stra)
(foo stra 'pr1)
(foo stra 'lbs)
(foo strc)
(foo strc 'pr1)
(foo strc 'lbs)
(foo strb 'lbs)
(foo strd 'lbs)

;; <> (foo str)
;; <> (foo str 'sau)
;; \\ (foo str 'sau 'sam)
;; <> (foo str 'sau 'sam 'sau)

;; <> (foo str)
;; \\ (foo str 'sam)
;; <> (foo str 'sam 'sau)
;; \\ (foo str 'sam 'sau 'sam)

;; <> (foo str)
;; \\ (foo str 'tou)
;; <> (foo str 'tou 'tor)
;; <> (foo str 'tou 'to1)
;; <> (foo str 'tor)
;; <> (foo str 'to1)

;; <> (foo str)
;; <> (foo str 'sau)
;; <> (foo str 'to1)
;; <> (foo str 'tor)
;; \\ (foo str 'sam)
;; \\ (foo str 'tou)
;; \\ (foo str 'tou 'sam)
;; <> (foo str 'tou 'sau)
;; <> (foo str 'tou 'to1)
;; <> (foo str 'tou 'tor)




#####
#
# Notes on regexp search in unibyte/multibyte buffers (2019)
# 2019feb24
#
#####

# «unibyte-2019-search» (to ".unibyte-2019-search")
# Based on:
#   (to "unibyte-2019")
#   (to "creating-utf8-files")
#   (to "ee-re-to")
# Uses:
#   (find-eev     "eev-codings.el")
#   (find-eevfile "eev-codings.el" "defun ee-to-coding ")

(defalias 'sam 'string-as-multibyte)
(defalias 'sau 'string-as-unibyte)
(defalias 'stm 'string-to-multibyte)
(defalias 'stu 'string-to-unibyte)
(defun to1 (str) (ee-to-coding 'latin-1 str))
(defun tor (str) (ee-to-coding 'raw-text str))
(defun tou (str) (ee-to-coding 'utf-8 str))
(defun lbs (s) (list (length s) (string-bytes s) (mapcar 'identity s)))

(setq stra      "\253\273" )
(setq stra      "\253[!-~]*\273" )
(setq strb (sam stra))
(setq strc (to1 stra))
(setq strd (tou strb))

;;   (lbs stra) -> (2 2 (171 187))
;;   (lbs strb) -> (2 4 (4194219 4194235))
;;   (lbs strc) -> (2 4 (171 187))
;;   (lbs strd) -> (4 8 (4194240 4194219 4194240 4194235))
(lbs stra)
(lbs strb)
(lbs strc)
(lbs strd)

(defun search-back (str) (re-search-backward str nil t))
(defun strg () (ee-tolatin1-re stra))

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/ec2/
mkdir  /tmp/ec2/
cd     /tmp/ec2/
{ echo    ';;; -*- coding: latin-1; -*-'
  echo -e ';; \xabfoo\xbb'
  echo    ';; (search-back stra)'
  echo    ';; (search-back strb)'
  echo    ';; (search-back strc)'
  echo    ';; (search-back strd)'
  echo    ';; Only strc works.'
  echo    ';; (search-back (strg))'
} > latin-1
{ echo    ';;; -*- coding: raw-text; -*-'
  echo -e ';; \xabfoo\xbb'
  echo    ';; (search-back stra)'
  echo    ';; (search-back strb)'
  echo    ';; (search-back strc)'
  echo    ';; (search-back strd)'
  echo    ';; Only stra works.'
  echo    ';; (search-back (strg))'
} > raw-text
{ echo    ';;; -*- coding: utf-8; -*-'
  echo -e ';; \xc2\xabfoo\xc2\xbb'
  echo    ';; (search-back stra)'
  echo    ';; (search-back strb)'
  echo    ';; (search-back strc)'
  echo    ';; (search-back strd)'
  echo    ';; Only strc works.'
  echo    ';; (search-back (strg))'
} > utf-8

(lbs strc)

(find-fline     "/tmp/ec2/latin-1")
(hexl-find-file "/tmp/ec2/latin-1")
(find-fline     "/tmp/ec2/raw-text")
(hexl-find-file "/tmp/ec2/raw-text")
(find-fline     "/tmp/ec2/utf-8")
(hexl-find-file "/tmp/ec2/utf-8")





#####
#
# ee-re-to-fwd and ee-re-to-back: regexps to find anchor-to pairs
# 2019feb23
#
#####

# «ee-re-to» (to ".ee-re-to")
# (find-elnode "General Escape Syntax" "octal")
# (find-elnode "Regexp Backslash" "\\DIGIT")

(setq re (ee-tolatin1 "\253\\([!-~]+\\)\273[ \t]+(to \"\\([!-~]+\\)\")"))
(setq re (ee-tolatin1 "\253\\([!-~]+\\)\273[ \t]+(to \"\\(.\\1\\)\")"))
(setq re (ee-tolatin1 "\253\\([!-~]+\\)\273[ \t]+(to \"\\(\\.\\1\\)\")"))

(setq ee-re-to-fwd  "\253\\.\\([!-~]+\\)\273[ \t]+(to \"\\1\")")
(setq ee-re-to-back "\253\\([!-~]+\\)\273[ \t]+(to \"\\.\\1\")")
(setq re (to1 ee-re-to-fwd))
(setq re (to1 ee-re-to-back))

(setq re      ee-re-to-back )
(setq re (to1 ee-re-to-back))
(setq re (tou ee-re-to-back))

(lbs re)
(find-epp (lbs re))

(defun foo () (interactive)
  (if (re-search-backward re nil t)
      (message "%s" (match-string 1))))

(define-key my-mode-map "\M-p" 'foo)




#####
#
# my-mode
# 2019nov09
#
#####

# «my-mode» (to ".my-mode")
# (find-angg ".emacs" "my-mode")
# (find-angggrep "grep --color -nH -e global-set-key .emacs")
# (find-angggrep "grep --color -nH -e my-mode-map .emacs")




#####
#
# merge two different versions of a file
# 2017ago04
#
#####

# «merge» (to ".merge")
# (find-enode "Emerge")
# (find-enode "Overview of Emerge")
# (find-enode "Merge Commands")
# (find-efunction 'emerge-files)
# (find-efunctiondescr 'emerge-files)
# (find-eapropos "emerge")
# (find-eapropos "emerge.*map")

# (find-ekeymapdescr emerge-basic-keymap)
# (find-ekeymapdescr emerge-fast-keymap)
# (find-hvariable   'emerge-basic-keymap)
# (find-hvariable   'emerge-fast-keymap)
# (find-hvariable   'emerge-edit-keymap)
# (find-hvariable   'emerge-old-keymap)
# (find-efunction   'emerge-setup-fixed-keymaps)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/emerge/")
rm -Rv /tmp/emerge/
mkdir  /tmp/emerge/
cd     /tmp/emerge/
creat () { rm -fv $1; touch $1; for i in $*[2,-1]; do echo $i >> $1; done }
creat aaa 1 2 3 4
creat bbb 1 2 3 4 5 6
rm -fv ccc
* (emerge-files nil "/tmp/emerge/aaa" "/tmp/emerge/bbb" "/tmp/emerge/ccc")



# (find-bgprocess "tkdiff ~/LATEX/dednat6/edrxlib.lua ~/LUA/lua50init.lua")
# (find-bgprocess "tkdiff /tmp/0.lua /tmp/1.lua")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/LUA/lua50init.lua          /tmp/0.lua
cp -v ~/LATEX/dednat6/edrxlib.lua  /tmp/1.lua
rm -v                              /tmp/2.lua

* (ee-kill-buffer "0.lua")
* (ee-kill-buffer "1.lua")
* (ee-kill-buffer "2.lua")
* (emerge-files nil "/tmp/0.lua" "/tmp/1.lua" "/tmp/2.lua")
* (find-tkdiff  "/tmp/0.lua" "/tmp/2.lua")
* (find-tkdiff  "/tmp/1.lua" "/tmp/2.lua")
* (find-tkdiff  "~/LUA/lua50init.lua" "/tmp/2.lua")
* (find-tkdiff  "~/LATEX/dednat6/edrxlib.lua" "/tmp/2.lua")

cp -v /tmp/2.lua ~/LUA/lua50init.lua
cp -v /tmp/2.lua ~/LATEX/dednat6/edrxlib.lua





#####
#
# menu-set-font
# 2019dec24
#
#####

# «menu-set-font» (to ".menu-set-font")
# (find-efunction 'menu-set-font)
# (find-efile "menu-bar.el" "(defun menu-set-font")

# (fboundp     'x-select-font)
# (setq myfont (x-select-font))
# (setq myfont (mouse-select-font))
# myfont
# (find-epp myfont)
# (find-elnode "Font Type")
# (find-elnode "Font Type" "#<font-spec>")
# (find-elnode "Low-Level Font")




#####
#
# Set default font
# 2017ago05
#
#####

# «set-default-font» (to ".set-default-font")
# (find-efile "menu-bar.el.gz" "Set Default Font")
# (find-efunction 'menu-set-font)
# (find-efunction 'set-frame-font)
# (find-efunctiondescr 'x-select-font)
# (find-efunction  'mouse-select-font)
# (find-elnode "Font Type" "#<font-spec>")
# (find-elnode "Low-Level Font")
# (find-elnode "Low-Level Font" "Function: font-spec")
# (find-efunctiondescr 'font-spec)
# (find-elnode "Font and Color Parameters")
# (find-elnode "Font and Color Parameters" "`font'")
# (find-elnode "Face Attributes")
# (find-elnode "Index" "* face-attribute:")
# (find-eface-links 'default)
# (find-efacedescr  'default)
# (face-attribute 'default :font)
# (find-elnode "Font Selection")

(setq fo (x-select-font))
fo
(font-get fo :name)

(setq font-keys '(:name :family :foundry :weight :slant :width :size
			:adstyle :registry :script :otf))
(mapcar (lambda (k) `(,k ,(font-get fo k))) font-keys)

# https://emacs.stackexchange.com/questions/tagged/fonts
# https://emacs.stackexchange.com/questions/53376/reach-to-the-extreme-of-font-size-in-one-step






#####
#
# Where is emacs24-non-dfsg?
# 2018mai30
#
#####

# «emacs24-non-dfsg» (to ".emacs24-non-dfsg")

http://packages.debian.org/emacs24
http://packages.debian.org/src:emacs24
https://askubuntu.com/questions/572026/what-is-the-purpose-of-the-package-emacs24-common-non-dfsg
http://http.debian.net/debian/pool/main/e/emacs24/
http://http.debian.net/debian/pool/non-free/e/emacs24-non-dfsg/
http://http.debian.net/debian/pool/non-free/b/

cd /tmp/
wget http://http.debian.net/debian/pool/non-free/e/emacs24-non-dfsg/emacs24-common-non-dfsg_24.5+1-1~bpo8+1_all.deb
wget http://http.debian.net/debian/pool/non-free/e/emacs24-non-dfsg/emacs24-common-non-dfsg_24.5+1-2_all.deb
# (find-fline "/tmp/")

sudo dpkg -i emacs24-common-non-dfsg_24.5+1-2_all.deb

# (find-status   "emacs24-common-non-dfsg")
# (find-vldifile "emacs24-common-non-dfsg.list")
# (find-udfile   "emacs24-common-non-dfsg/")




#####
#
# browse-url
# 2019jan06
#
#####

# «browse-url» (to ".browse-url")
# (find-enode "Browse-URL")
# (find-efunction-links 'browse-url)
# (find-efunction 'browse-url)
# (find-efile "net/browse-url.el")

;; (find-epackage 'browse-url)
;; (find-epackage 'browse-url "browse-url-generic")
;; (find-epackage 'browse-url "browse-url-default-windows-browser")
;; (find-epackage 'browse-url "browse-url-default-macosx-browser")
;; (require 'browse-url)
;; (find-efunction 'browse-url-generic)
;; (find-efunction 'browse-url-default-windows-browser)
;; (find-efunction 'browse-url-default-macosx-browser)





#####
#
# generators
# 2019jan23
#
#####

# «generators» (to ".generators")
;; (find-elnode "Generators")





#####
#
# glyph-bug-jan2019
# 2019jan27
#
#####

# «glyph-bug-jan2019» (to ".glyph-bug-jan2019")
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-01/msg00769.html
# https://mail.google.com/mail/ca/u/0/#search/bug-gnu-emacs/FMfcgxwBVMpLqxGPCpgkbwJDBWCPHGrQ

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# Bug title:
# Running (defface my-face-foo ...) just after emacs -Q creates a face whose face-id is 0

In emacs from git the faces that are created in the .emacs receive bad
face-ids - in particular, the first one gets face-id 0, which is the
same as the face-id for the "default" face.

I discovered this bug because the first face that my .emacs creates is
used to make "^O"s be displayed as red stars, and in git emacs these
red stars were not being displayed in red.

The shell script below creates an elisp file - with some code in its
comments meant be executed by hand - and loads and edits that elisp
file from both emacs24 and emacs-27.0.50 with "-Q" to show the (bad)
behaviour that I was getting from my .emacs.

The relevant part of the M-x report-emacs-bug buffer is:

In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.18.9)
 of 2019-01-22 built on libreboot-ThinkPad-T400
Repository revision: fd943124439b7644392919bca8bc2a77e6316d92
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description: Trisquel GNU/Linux Flidas (8.0)

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/#eev


--snip--snip--


cat > /tmp/face-id-bug.el <<'%%%'
;; A test file for the face id bug.
;; How to use this: run
;;   emacs24      -Q -l /tmp/face-id-bug.el /tmp/face-id-bug.el
;;   emacs27.0.50 -Q -l /tmp/face-id-bug.el /tmp/face-id-bug.el
;; and in each case execute the sexps in comments below.

(defface my-face-red
  '((t (:foreground "red")))
  "Face used for the red star glyph (char 15).")

(defface my-face-green
  '((t (:foreground "green")))
  "Face used for the green bang glyph (char 16).")

(defun my-set-glyph (pos char face)
  (aset standard-display-table pos
	(vector (make-glyph-code char face))))

(if (not standard-display-table)
    (setq standard-display-table (make-display-table)))

(my-set-glyph ?\^O ?* 'my-face-red)
(my-set-glyph ?\^P ?! 'my-face-green)

;; Here's how to see the bug. Run this with C-x C-e:
;;   (insert 10 15 16)
;; it will insert a newline, a char 15 - displayed as a red star
;; glyph - and a char 16 - displayed as a green bang glyph.
;;
;; PROBLEM: in Emacs 24 both glyphs display as expected; in Emacs from
;; git - at least on 2019jan27 - the red star glyph appears as a star
;; in the default face, that is not red.
;;
;; A GUESS: this MAY be related to how emacs attributes face-ids to
;; newly-create faces. In Emacs 24 all these face-ids are different:
;;  (face-id 'default)
;;  (face-id 'my-face-red)
;;  (face-id 'my-face-green)
;; and in git Emacs the first two are zero - which means that
;;  (make-glyph-code ?* 'my-face-red)
;;  (make-glyph-code ?* 'default)
;; are indistinguishable.
%%%


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
emacs24       -Q -l /tmp/face-id-bug.el /tmp/face-id-bug.el
emacs-27.0.50 -Q -l /tmp/face-id-bug.el /tmp/face-id-bug.el





#####
#
# Eli Zaretskii's fix for the face-id/glyph bug above
# 2019jan28
#
#####

# «glyph-bug-jan2019-fix» (to ".glyph-bug-jan2019-fix")
# (find-gitemacsfile "")
# (find-gitemacsfile "test/lisp/faces-tests.el")
# (find-gitemacsfile "test/lisp/faces-tests.el" "faces--test-face-id")
# (find-gitemacsfile "src/xfaces.c" "init_xfaces (void)")
# (find-gitemacsfile "src/emacs.c")
# (find-gitemacsfile "src/emacs.c" "init_xfaces")

# TODO: how do I create a link to the git entry below?

Author: Eli Zaretskii <[email protected]>  2019-01-28 13:24:04
Committer: Eli Zaretskii <[email protected]>  2019-01-28 13:24:04
Parent: fa7a841124578c00872d8a5aa834f6bbe57400ff (links: also link pdmp)
Child:  6c560a3b16f9015a19044395f0ef41b718d73496 (Adapt accept-process-output timeouts in Tramp)
Branches: master, remotes/origin/master
Follows: emacs-26.1.91
Precedes:

    Fix bug with face-id after restoring from pdump

    * src/xfaces.c (init_xfaces): New function.
    * src/emacs.c (main) [HAVE_PDUMPER]: If dumped with pdumper,
    call init_xfaces.  (Bug#34226)
    * src/lisp.h (init_xfaces) [HAVE_PDUMPER]: Add prototype.

    * test/lisp/faces-tests.el (faces--test-face-id): New test for
    bug#34226.




#####
#
# glyphless-chars
# 2022jan20
#
#####

# «glyphless-chars»  (to ".glyphless-chars")
# https://lists.gnu.org/archive/html/emacs-devel/2022-01/msg01187.html
# (set-face-background 'glyphless-char "red")
# I've had that configured ever since
# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=31194#40
# https://emacs.stackexchange.com/questions/65108/zero-width-space-shows-as-underscore/65109#65109
# (find-elnode "Glyphless Chars")





#####
#
# debian-startup: make emacs from git load this
# 2019feb01
#
#####

# «debian-startup» (to ".debian-startup")
# (find-angg ".emacs" "debian-startup")
# (find-fline "/usr/share/emacs/site-lisp/debian-startup.el")

# Until 2019feb01 the code in my .emacs was this:
# (find-angg ".emacs" "emacs-cvs")
# (find-angg ".emacs" "debian-startup")

;; See: http://www.emacswiki.org/cgi-bin/wiki/EmacsCvsAndDebian
;; This makes emacs-cvs aware of all the add-on -el packages in my debian box.
;; (find-progoutput "dpkg -l")
;; (find-angg ".zshrc" "emacs-cvs")

;; (find-efile "startup.el")
;; (find-zsh "dmissing debian-startup.el")
;; (find-fline "/usr/share/emacs/site-lisp/debian-startup.el")
;; (find-fline "/etc/emacs24/site-start.d")
;; (find-fline "/etc/emacs23/site-start.d")
;; (find-fline "/etc/emacs22/site-start.d")
;; (find-fline "/etc/emacs21/site-start.d")
;; (find-fline "/etc/emacs/site-start.d/")

(let ((startup-file "/usr/share/emacs/site-lisp/debian-startup.el"))
  (if (and (or (not (fboundp 'debian-startup))
	       (not (boundp  'debian-emacs-flavor)))
	   (file-readable-p startup-file))
      (progn
	(load-file startup-file)
	;; (setq debian-emacs-flavor 'emacs21)
	;; (setq debian-emacs-flavor 'emacs22)
	;; (setq debian-emacs-flavor 'emacs23)
	(setq debian-emacs-flavor
	      (cond ((file-accessible-directory-p
		      "/etc/emacs24/site-start.d/") 'emacs24)
		    ((file-accessible-directory-p
		      "/etc/emacs23/site-start.d/") 'emacs23)
		    ((file-accessible-directory-p
		      "/etc/emacs22/site-start.d/") 'emacs22)))
	(debian-startup debian-emacs-flavor)
	(mapcar '(lambda (f)
		   (and (not (string= (substring f -3) "/.."))
			(file-directory-p f)
			(add-to-list 'load-path f)))
		(directory-files "/usr/share/emacs/site-lisp" t)))))



#####
#
# The error with ispell-menu-map-needed in git emacs in Debian
# 2019feb01
#
#####

# «ispell-menu-map-needed» (to ".ispell-menu-map-needed")
# (find-anggfile ".emacs" "(setq ispell-menu-map-needed")
# (find-sh "locate ispell")

;; debian-ispell-set-startup-menu: Symbol's value as variable is void: ispell-menu-map-needed
;; (find-sitelispfile "dictionaries-common/ispell.el")
;; (find-sitelispfile "dictionaries-common/ispell.el" "(defvar ispell-menu-map-needed")
;; (find-sitelispfile "dictionaries-common/ispell.el" "(if ispell-menu-map-needed")
# (find-sitelisp24file "dictionaries-common/debian-ispell.el" "(defun debian-ispell-build-startup-menu")
# (find-sitelisp24file "dictionaries-common/debian-ispell.el" "(if ispell-menu-map-needed")

# (find-sitelispfile "dictionaries-common/")
# (find-sitelispfile "dictionaries-common/debian-ispell.el")
# (find-sitelispfile "dictionaries-common/ispell.el")
# (find-sitelisp24file "dictionaries-common/")
# (find-sitelisp24file "dictionaries-common/debian-ispell.el")




#####
#
# fsbot
# 2019feb03
#
#####

# «fsbot» (to ".fsbot")
# http://www.emacswiki.org/emacs/ErBot
# (find-angg ".emacs.templates" "find-fsbot-links")

* (eepitch-to-buffer "#[email protected]")
/query fsbot
**
**
* (eepitch-to-buffer "fsbot`@irc.libera.chat")
* (eepitch-to-buffer "[email protected]")
help erbot
**
emacs-lua
forget emacs-lua all
emacs-lua is https://github.com/edrx/emacs-lua/
emacs-lua is also https://github.com/syohex/emacs-lua

<aidalgol> ,tell edrx about aidalgol
<fsbot`> edrx: aidalgol: [0] a mashup of "Aidan," "Gauland,"
         "Algol," and "Aida"
<fsbot`> [1] <ijp> he stuck his name through a sausage grinder,
         basically

* (eepitch-to-buffer "#[email protected]")
* (eepitch-to-buffer "[email protected]")
* (eepitch-to-buffer "fsbot`@irc.libera.chat")
,help
help
help-erbot
more
more
more
more
more
help-more
help-parse
help-commands
commands

* (eepitch-to-buffer "[email protected]")



# «fsbot-eev»  (to ".fsbot-eev")
# (find-fsbot-links "eev")

eev
forget eev all

eev is a "tool to automate almost everything"; it lets us create executable logs of what we do, in a reasonably readable form, and lets us "play them back" step by step later in any order.

eev is also start by this: http://anggtwu.net/eepitch.html
eev is also then read this: http://anggtwu.net/eev-videos.html
eev is also or start by: http://anggtwu.net/eev-for-longtime-emacs-users.html
eev is also its home page: http://anggtwu.net/#eev

eev



also https://github.com/edrx/eev#introduction
eev is also its home page: http://angg.twu.net/#eev
eev is also

# «fsbot-eepitch»  (to ".fsbot-eepitch")
# (find-fsbot-links "eepitch")

eepitch is a way to send lines to REPLs.
eepitch is also tutorial: http://angg.twu.net/eev-intros/find-eev-quick-intro.html#6
eepitch is also used in test blocks: http://angg.twu.net/emacsconf2021.html
eepitch is also the fourth of the three most basic keys of eev: http://angg.twu.net/2020-list-packages-eev-nav.html#f8

# «fsbot-emacs-lua»  (to ".fsbot-emacs-lua")
# (find-fsbot-links "emacs-lua")

emacs-lua is https://github.com/edrx/emacs-lua/
emacs-lua is also https://github.com/syohex/emacs-lua





,eev
more

forget eev all
eev is a "tool to automate almost everything"; it lets us create executable logs of what we do, in a reasonably readable form, and lets us "play them back" step by step later in any order. A video about how it controls shell-like programs: https://www.youtube.com/watch?v=Lj_zKC5BR64&t=16s
eev is also a tutorial including installation instructions: http://angg.twu.net/eev-intros/find-eev-quick-intro.html
eev is also its home page: http://angg.twu.net/#eev

,eev
more

forget eev.el all
eev.el is a "tool to automate almost everything"; it lets us create executable logs of what we do, in a reasonably readable form, and lets us "play them back" step by step later in any order. A video about how it controls shell-like programs: https://www.youtube.com/watch?v=Lj_zKC5BR64&t=16s
eev.el is also a tutorial including installation instructions: http://angg.twu.net/eev-intros/find-eev-quick-intro.html
eev.el is also its home page: http://angg.twu.net/#eev

forget eev all
eev is a "tool to automate almost everything"; it lets us create executable logs of what we do, in a reasonably readable form, and lets us "play them back" step by step later in any order.
eev is also https://github.com/edrx/eev#introduction
eev is also its home page: http://angg.twu.net/#eev
,eev

forget eev.el all
eev.el is a "tool to automate almost everything"; it lets us create executable logs of what we do, in a reasonably readable form, and lets us "play them back" step by step later in any order.


<Plazma> ,chad
<fsbot> From memory, stallman-fact-list is [0/163] Richard Stallman programmed Chuck Norris.
<fsbot> [1] Richard Stallman compiled the first version of gcc with an hexadecimal editor.
<fsbot> [2] Richard Stallman's left and right hands are named "(" and ")".
<fsbot> [3] Richard Stallman can parse HTML with regex. ;;[ ,more / ,dump]







#####
#
# rudybot
# 2019aug25
#
#####

# «rudybot» (to ".rudybot")
# (find-es "irc" "SASL-circe")
# (find-es "git" "git-log")
# https://gitlab.com/offby1/rudybot/commit/69098f905185feeb66c672041c615abec90dbbb5 SASL
# https://gitlab.com/offby1/rudybot
# (find-fline "~/LOGS/2021dec07.emacs" "rudybot is written in racket")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/rudybot/
cd      ~/usrc/
git clone https://gitlab.com/offby1/rudybot
cd      ~/usrc/rudybot/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/rudybot/")
# (find-gitk  "~/usrc/rudybot/")

# (code-c-d "rudybot" "~/usrc/rudybot/")
# (find-rudybotfile "")

PAGER=cat git show   69098f905185feeb66c672041c615abec90dbbb5
PAGER=cat git log -1 69098f905185feeb66c672041c615abec90dbbb5



#####
#
# Understanding M-x grep and grep.el
# 2019feb23
#
#####

# «grep» (to ".grep")
# (find-efile "progmodes/grep.el")
# (find-efile "progmodes/grep.el" "defun grep ")




#####
#
# How to use a sequence of piped greps in M-x grep
# 2021jun05
#
#####

# «sequencing-greps»  (to ".sequencing-greps")
# (find-man "1 grep")
# (find-man "1 grep" "-a, --text")
# (find-man "1 grep" "binary" "it suppresses any further output")
# (find-man "1 grep" "binary file matches")
# (find-elgrep "grep --color -nRH --null -e transient *.el */*.el")
# (find-elgrep "grep --color -nRH --null -e transient *.el */*.el | grep defun")
# (find-elgrep "grep --color -nRH --null -e transient *.el */*.el | grep -a defun")



#####
#
# bookmarks
# 2023jan07
#
#####

# «bookmarks»  (to ".bookmarks")
# (find-enode "Bookmarks")
# (find-fline "~/.emacs.d/bookmarks")
# (eek "C-x r b boo")
# (eek "C-x r l")




#####
#
# pdf-tools
# 2019mar08
#
#####

# «pdf-tools» (to ".pdf-tools")
# (find-eev "eev-pdflike.el" "find-pdftools-page")
# (find-epackage-links 'pdf-tools)
# (find-epackage-links 'pdf-tools "pdftools" t)
# (find-epackage       'pdf-tools)
# https://github.com/politza/pdf-tools
# https://tug.org/pipermail/tex-live/2019-March/043227.html
# https://tug.org/pipermail/tex-live/2019-March/date.html#43227

# 2021dec02 (2021dec02, philip kaludercic, emacs-devel):
#  https://github.com/politza/pdf-tools
#   -> https://github.com/vedang/pdf-tools

(code-c-d "pdftools" "~/.emacs.d/elpa/pdf-tools-20221007.1404/")
;; (find-pdftoolsfile "")
;; (find-pdftoolsfile "README" "/path/to/pdf-tools")
;; (find-pdftoolsfile "README" "Some keybindings")
;; (find-pdftoolsfile "build/server/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt-get install libpng-dev zlib1g-dev
sudo apt-get install libpoppler-glib-dev
sudo apt-get install libpoppler-private-dev

# (pdf-tools-install)
# (pdf-tools-help)
# (find-efunction 'pdf-view-goto-page)

(progn
 (find-fline "~/LATEX/falta-misandria-v.pdf")
 (pdf-view-goto-page 12)
 )

# (find-pdftoolsfile "pdf-view.el" "(define-derived-mode pdf-view-mode")
# (find-pdftoolsfile "pdf-loader.el" "(defconst pdf-loader--auto-mode-alist-item")


#+end_src
  somewhere in your ~.emacs~.  Alternatively, and if you care about
  start-up time, you may want to use
#+begin_src elisp
  (pdf-loader-install)
#+end_src
  instead.  Next you probably want to take a look at the various
  features of what you've just installed.  The following two commands
  might be of help for doing so.
#+begin_src elisp
  M-x pdf-tools-help RET
  M-x pdf-tools-customize RET

# (find-pdftoolsfile "pdf-info.el" "defun pdf-info-open")
# (find-pdftoolsgrep "grep --color -nH -e pdf-view-mode *.el")
# (find-efile "simple.el" "(define-derived-mode special-mode")

;; (find-pdftoolsfile "README" "Refresh File")

# (find-customizegroup 'pdf-tools)





#####
#
# pdf-tools-bookmarks
# 2019mar10
#
#####

# «pdf-tools-bookmarks» (to ".pdf-tools-bookmarks")
# (find-pdftoolsfile "pdf-view.el" "(defun pdf-view-bookmark-jump")
# (find-pdftoolsgrep "grep --color -nH -e bookmark *.el")
# (find-pdftoolsgrep "grep --color -nH -e register *.el")
# (find-pdftoolsgrep "grep --color -nH -e registerv *.el")
# (find-pdftoolsgrep "grep --color -nH -e PDFView *.el")
# (to "registers")

# (find-pdftoolsfile "")
# (find-pdftoolsfile "pdf-view.el" "(define-derived-mode pdf-view-mode")
# (find-pdftoolsfile "pdf-view.el" "(defvar pdf-view-mode-map")

# (find-ekeymapdescr pdf-view-mode-map)
# (find-ekeymapdescr pdf-view-mode-map "m" "pdf-view-position-to-register")
# (find-ekeymapdescr pdf-view-mode-map "'" "pdf-view-jump-to-register")
# (find-efunction 'pdf-view-position-to-register)
# (find-efunction 'pdf-view-jump-to-register)

# (find-efunction 'pdf-view-with-register-alist)
# (find-evariable 'pdf-view-use-dedicated-register)


# (nmo)
# (defun d () (interactive) (find-pdftools-page "~/LATEX/2019notes-monads.pdf"))
# (progn (d) (find-epp pdf-view-register-alist))
# (progn (d) (find-epp (setq regs pdf-view-register-alist)))
# (find-epp regs)
# (find-epp (cdar regs))



# https://mail.google.com/mail/ca/u/0/#sent/QgrcJHsBmGtZKQDmMpvJKSBDwStmHksRcdv
# Is there a mailing list for PDF-Tools?


Well, I do have a beginner question, if you don't mind...

I spend a big part of my latexing time working on diagrams that
require a lot of fine-tuning, which means that I alternate between a
buffer editing myfoo.tex, a buffer with the output of compiling
myfoo.tex, and a either an external xpdf window or a pdf-tools buffer.

I've been able to write an (improvised) function that gets
the "current position" of a pdf-tools buffer as a Lisp list
containing the file name, the page number, the zoom factor, and
the window scroll position:

  (defun ee-pdftools-position ()
    (list
     (buffer-file-name)
     (pdf-view-current-page)
     (pdf-view-image-size)
     (window-hscroll)
     (window-vscroll)))

The problem is: how do I visit that PDF file again, at that page,
with that zoom factor, and at that window scroll position?... I
mean, how do I do that from the variable "p" after running this
in a buffer viewing a PDF?

  (setq p (ee-pdftools-position))

Thanks in advance!!!
  Eduardo Ochs
  http://angg.twu.net/find-pdf-page.html

----

Thanks!

I think I found what you meant, and it does 95% of what I wanted. =)

If I type `m' (`pdf-view-position-to-register') in a PDFView buffer it
saves a lot of information about the current position in a "registerv"
structure in the buffer-local variable `pdf-view-register-alist' - but
as far as I can see it doesn't save the current zoom factor. I'll try
to play with that in the next few days and see what I can get.

Thanks for the incredibly clean code!
  Eduardo




# (find-pdftoolsgrep "grep --color -nH -e pdf-view-enlarge *.el")
# (find-pdftoolsgrep "grep --color -nH -e pdf-view-display-size *.el")
# (find-pdftoolsfile "pdf-view.el" "(defun pdf-view-enlarge")
# (find-pdftoolsfile "pdf-view.el" "(defcustom pdf-view-display-size")
# (find-pdftoolsfile "pdf-view.el" "(defun pdf-view-maybe-redisplay-resized-windows")

(find-efunction 'pdf-tools-scale)
(find-efunction 'pdf-view-enlarge)
(find-efunction 'pdf-view-shrink)
(find-efunction 'pdf-view-scale-reset)
(find-efunction 'pdf-view-enlarge)
(find-efunction 'pdf-view-fit-height-to-window)
(find-efunction 'pdf-view-fit-page-to-window)
(find-efunction 'pdf-view-fit-width-to-window)
(find-efunction 'image-goto-frame)

# https://github.com/nicolaisingh/saveplace-pdf-view/blob/master/saveplace-pdf-view.el




#####
#
# How to make pdf-tools not ask in revert-buffer
# 2019mar12
#
#####

# «pdf-tools-revert» (to ".pdf-tools-revert")
# (find-pdftoolsgrep "grep --color -nH -e revert *.el")
# (find-pdftoolsfile "pdf-view.el" "revert-buffer-function #'pdf-view-revert-buffer")
# (find-pdftoolsfile "pdf-view.el" "(defun pdf-view-revert-buffer")
# (find-efile "files.el" "(defun revert-buffer")

(defun killc () (interactive)
  (if (ee-buffer-re "latex.* \\([!-~]+\\).tex")
      (ee-kill-this-buffer)))

(defun rev ()
  (interactive)
  (if (get-buffer "2019notes-monads.pdf")
      (with-current-buffer "2019notes-monads.pdf"
	(revert-buffer nil t))))

(defun ed ()
  (interactive)
  (killc) (rev) (find-2a '(e) '(d)))




#####
#
# Bypassing the "Revert buffer from file ...? (yes or no)" message in pdf-tools
# 2019jun23
#
#####

# «pdf-tools-revert-mail» (to ".pdf-tools-revert-mail")
# https://mail.google.com/mail/ca/u/0/#sent/QgrcJHsbdxJsFfXHmcFVmZdHwHZFHtVrFjL
Bypassing the "Revert buffer from file ...? (yes or no)" message

Hi Andreas,

I've been using pdf-tools a lot, but only a few features of it, and
there are some things that I don't know how to do because they are
implemented using hooks (I guess) in ways that I don't know how to
follow...

The main thing that I find clumsy is that when I recompile a file
foo.tex, switch to the window with the PDF and type `g', I get this
message:

  Revert buffer from file /home/edrx/LATEX/foo.pdf? (yes or no)

How do I bypass that? How do I implement a key `G' that behaves like
`g', but that calls `revert-buffer--default' with "noconfirm"?

Thanks in advance!
  Eduardo Ochs


# (find-efile "files.el" "Revert buffer from file %s?")
# (find-evardescr 'revert-without-query)
# (find-evariable 'revert-without-query)

See the variable revert-without-query.
Also, there are better ways of setting this up.  See for example
https://emacs.stackexchange.com/questions/19472/how-to-let-auctex-open-pdf-with-pdf-tools#19475

# (find-LATEXgrep "grep --color -nH -e revert-without-query *.tex")



#####
#
# How pdf-tools changes de default way to open PDFs
# 2021dec30
#
#####

# «pdf-tools-default»  (to ".pdf-tools-default")

# (find-epp auto-mode-alist)
# (find-epp auto-mode-alist "pdf")
# (find-fline         "~/LATEX/tmp.pdf")
# (require 'pdf-tools)
# (find-fline         "~/LATEX/tmp.pdf")
# (find-pdftools-page "~/LATEX/tmp.pdf")
# (find-epp auto-mode-alist "pdf")
# (find-efunctiondescr 'pdf-loader-install)
# (find-efunction      'pdf-loader-install)

# (find-epackage-links 'pdf-tools "pdftools" t)
# (find-pdftoolsgrep "grep --color=auto -nH --null -e pdf-view-mode *.el")
# (find-pdftoolsgrep "grep --color=auto -nH --null -e auto-mode-alist *.el")



#####
#
# How pdf-tools builds epdfinfo
# 2022oct15
#
#####

# «pdf-tools-build»  (to ".pdf-tools-build")
# (find-epackage-links 'pdf-tools "pdftools" t)
# (find-epackage       'pdf-tools)
# (code-c-d "pdftools" "~/.emacs.d/elpa/pdf-tools-20221007.1404/")
# (find-pdftoolsfile "")
# (find-pdftoolsgrep "grep --color=auto -nH --null -e build *.el")
# (find-pdftoolsgrep "grep --color=auto -nH --null -e compil *.el")
# (find-pdftoolsgrep "grep --color=auto -nH --null -e epdfinfo *.el")
# (find-pdftoolsfile "pdf-tools.el" "defun pdf-tools-build-server")
# (find-pdftoolsfile "pdf-tools.el" "defun pdf-tools-install")
# (find-pdftoolsfile "pdf-loader.el" "defun pdf-loader-install")
# (find-efunction 'find-pdftools-page)
# (find-efunction 'find-pdftools-page "(pdf-loader-install)")

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(find-epackage-links 'pdf-tools "pdftools")
(package-initialize)
(package-refresh-contents)
(package-install 'pdf-tools)
(pdf-tools-install)





#####
#
# find-pdft-page
# 2019jun24
#
#####

# «find-pdft-page» (to ".find-pdft-page")
# (find-angg ".emacs" "find-pdft-page")
# (find-eev "eev-pdflike.el" "find-pdftools-page")

% (find-angg "LATEX/2019-1-C3-P1.tex")

# (find-sh0 "touch     ~/LATEX/2019-1-C3-P1.pdf")
# (find-pdftools-page "~/LATEX/2019-1-C3-P1.pdf")
# (find-pdft-page     "~/LATEX/2019-1-C3-P1.pdf")

(let ((revert-without-query '(".*")))
  (find-pdftools-page "~/LATEX/2019-1-C3-P1.pdf")
  )





#####
#
# find-pdftools-page
# 2019mar08
#
#####

# «find-pdftools-page» (to ".find-pdftools-page")
# (find-eev "eev-pdflike.el" "find-pdftools-page")

# (find-eev "eev-pdflike.el" "aliases")
# (find-eev "eev-pdflike.el" "aliases" "\"pdf\"")
# (find-eev "eev-pdflike.el" "find-xpdf-page")

# (find-angg ".emacs.papers" "texbook")
# (find-efunctionpp 'find-texbookpage)
# (find-code-pdf-page "texbook" "~/usrc/texbook/texbook.pdf")

(find-pdftools-page "~/LATEX/falta-misandria-v.pdf" 12)

(defun find-xpdf-page (fname &optional page &rest rest)
  (find-pdftools-page fname page))
;; (find-texbookpage (+ 11 139) "17 More about Math")

(defun find-xpdf-page (fname &optional page &rest rest)
  (find-bgprocess (ee-find-xpdf-page fname page)))
;; (find-texbookpage (+ 11 139) "17 More about Math")




#####
#
# ee-pdftools-revert-all
# 2019jul15
#
#####

# «ee-pdftools-revert-all» (to ".ee-pdftools-revert-all")
# (find-angg ".emacs" "ee-pdftools-revert-all")
# (find-efunction 'find-pdftools-page)
# (find-efunction 'pdf-view-current-page)

;; (ee-pdftools-buffer fname)
;; (ee-pdftools-window fname)
;; (find-2a nil '(find-ebuffer (ee-pdftools-buffer fname)))
;; (pdf-view-current-page)
;; (find-efunctiondescr 'walk-windows)
;; (find-efunction 'walk-windows)
;; (find-elnode "Index" "* get-window-with-predicate:")

(setq fname "~/LATEX/2019elephant-poster-z.pdf")
(setq buf (get-buffer (file-name-nondirectory fname)))

(defun ee-pdftools-buffer (fname)
  (let* ((buffer-name (file-name-nondirectory fname))
	 (buffer (get-buffer buffer-name)))
    (if buffer
	(with-current-buffer buffer
	  (and (eq major-mode 'pdf-view-mode)
	       buffer)))))

(defun ee-pdftools-window (fname)
  (let* ((buffer-name (file-name-nondirectory fname))
	 (buffer (get-buffer buffer-name))
	 (predicate '(lambda (w) (eq (window-buffer w) buffer)))
	 (window (get-window-with-predicate predicate)))
    window))

(defun ee-pdftools-revert (window)
  (with-selected-window window
    (if (eq major-mode 'pdf-view-mode)
	(revert-buffer))))

(defun ee-pdftools-revert-all ()
  (interactive)
  (dolist (window (window-list-1))
    (with-selected-window window
      (if (eq major-mode 'pdf-view-mode)
	  (revert-buffer)))))




#####
#
# pdftools-lcms
# 2020dec25
#
#####

# «pdftools-lcms»  (to ".pdftools-lcms")

I've been trying to figure out why pdf-tools was slower for me than
other pdf viewers. A quick look withperf top has revealed that
epdfinfo was spending a lot of time in lcms routines called via
poppler. Once I recompiled poppler with lcms support disabled (and
killed old epdfinfo instances) pdf-tools operations became much
faster.

On Linux you can check if your epdfinfo is linked against a poppler
built this way by running (shell-command (format "ldd %s | grep
liblcms" pdf-info-epdfinfo-program))




#####
#
# which-key
# 2024sep19
#
#####

# «which-key» (to ".which-key")
# (find-epackage       'which-key)
# (find-epackage-links 'which-key)
# (code-c-d "whichkey" "~/.emacs.d/elpa/which-key-20240620.2145/")
# (find-whichkeyfile "")
# (find-whichkeyfile "which-key-autoloads.el")
# https://github.com/justbur/emacs-which-key



#####
#
# keysee
# 2020sep08
#
#####

# «keysee»  (to ".keysee")
# https://www.emacswiki.org/emacs/keysee.el
# https://lists.gnu.org/archive/html/emacs-devel/2020-09/msg00331.html



#####
#
# exwm
# 2019mar10
#
#####

# «exwm» (to ".exwm")
# Emacs X Window Manager:
#   https://github.com/ch11ng/exwm
#   http://www.howardism.org/Technical/Emacs/new-window-manager.html
# X protocol Emacs Lisp Binding:
#   https://github.com/ch11ng/xelb




#####
#
# fullscreen
# 2024may12
#
#####

# «fullscreen»  (to ".fullscreen")
# (to "toggle-frame-fullscreen")

(find-eppp (ee-sort-pairs (frame-parameters (selected-frame))))
(frame-parameter (selected-frame) 'fullscreen)
(set-frame-parameter (selected-frame) 'fullscreen 'fullboth)
(set-frame-parameter (selected-frame) 'fullscreen 'fullheight)





#####
#
# Maximizing and unmaximizing windows from Emacs
# 2019mar10 / 2022may02
#
#####

# «toggle-frame-maximized» (to ".toggle-frame-maximized")
# «toggle-frame-fullscreen» (to ".toggle-frame-fullscreen")
# (to "adjust-geometry")
# (find-angg ".emacs" "ee-set-fullscreen")
# (find-elnode "Size Parameters")
# (find-elnode "Size Parameters" "fullscreen")
# (find-efile "")
# (find-egrep "zgrep --color -nH -e fullscreen *.el*")
# (find-efunction 'toggle-frame-maximized)
# (find-efunction 'toggle-frame-fullscreen)
# (find-efile "frame.el" "[f11] 'toggle-frame-fullscreen")

(toggle-frame-fullscreen)
(toggle-frame-maximized)

<edrx> it seems that set-frame-size doesn't work when an emacs
       frame is maximized... I know how to maximize/unmaximize it
       by asking the window manager to do it, but is there a way to
       do that from emacs lisp?




#####
#
# lsp-mode - Language Server Protocol
# 2019apr02 / 2023jun24
#
#####

# «lsp-mode» (to ".lsp-mode")
# (find-es "lsp")
# https://github.com/emacs-lsp/lsp-mode
# https://microsoft.github.io/language-server-protocol/specification
# (find-epackage 'lsp-mode)
# (find-es "lean" "lean4-mode")

# (package-vc-install "https://github.com/emacs-lsp/lsp-mode")

# (find-epackage-links 'lsp-mode "lspmode" t)
# (find-epackages      'lsp-mode)
# (find-epackage       'lsp-mode)
# (code-c-d "lspmode" "~/.emacs.d/elpa/lsp-mode/")
# (find-lspmodefile "")





#####
#
# lua-mode
# 2019apr02
#
#####

# «lua-mode» (to ".lua-mode")
# (find-es "lua5" "lua-mode.el")
# (find-angg ".emacs" "lua-mode")
# http://immerrr.github.com/lua-mode
# (find-epackage 'lua-mode)
# (find-elpafile "lua-mode-readme.txt")
# (code-c-d "luamode" "~/.emacs.d/elpa/lua-mode-20190113.1050/")
# (find-luamodefile "")
# (find-luamodefile "lua-mode.el")




#####
#
# luarocks
# 2019apr02
#
#####

# «luarocks.el» (to ".luarocks.el")
# https://github.com/emacs-pe/luarocks.el
# (find-epackage 'luarocks)
# (find-elpafile "luarocks-20170430.2305/luarocks.el")





#####
#
# zero-in-prefixes
# 2005apr20 / 2019apr02
#
#####

# «zero-in-prefixes» (to ".zero-in-prefixes")

<edrx> is there a way to distinguish between a prefix like M-0 M-1 M-2 and one
       like M-1 M-2 ?
<delYsid> edrx: You can get it via `this-command-keys'
<delYsid> or `this-command-keys-vector'
<delYsid> (defun test1 () (interactive)
            (message "%S" (this-command-keys-vector)))
<delYsid> M-0 M-1 M-x test1 RET
<edrx> delYsid: excellent! thanks! :)
<delYsid> np




#####
#
# stackexchange
# 2019apr03
#
#####

# «stackexchange» (to ".stackexchange")
# https://emacs.stackexchange.com/
# https://emacs.stackexchange.com/questions/48749/how-to-mostly-get-rid-of-doc-view
# https://emacs.stackexchange.com/questions/48720/disable-left-win-key-in-emacs-for-windows
# https://emacs.stackexchange.com/questions/32692/daemon-mode-defer-interactive-prompts-on-startup/



#####
#
# go
# 2019apr09
#
#####

# «go» (to ".go")
# (find-epackage 'go)
(code-c-d "go" "~/.emacs.d/elpa/go-20161111.249/")
# (find-gofile "")
# http://eschulte.github.io/el-go/




#####
#
# macroexpand
# 2020oct06
#
#####

# «macroexpand»  (to ".macroexpand")
# (find-elnode "Expansion" "Function: macroexpand ")
# (find-efunction 'eev-mode)

(find-epp (macroexpand '
  (define-minor-mode eev-mode
                     ,eev-mode-help
                     :init-value nil
                     :global t
                     :lighter ,eev-mode-lighter)
  ))

(find-epp (macroexpand '
  (defcustom eev-mode nil
             "Non-nil if Eev mode is enabled..."
             :set #'custom-set-minor-mode
             :initialize 'custom-initialize-default
             :group 'eev
             :type 'boolean)
  ))

(find-efunction 'custom-declare-variable)



#####
#
# dolist
# 2019apr14
#
#####

# «dolist» (to ".dolist")
# (find-efile "net/rcirc.el" "defun rcirc-join-channels" "dolist")
# (find-elnode "Iteration" "Macro: dolist")

(find-epp (macroexpand '

  (dolist (str (ee-split "foo bar plic ploc"))
    (insert (format "\n<%s>" str)))

  ))



#####
#
# cl-lib: a replacement for cl.el
# 2019may23
#
#####

# «cl-lib» (to ".cl-lib")
# (find-node "(cl)Top")
# http://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00834.html
# (find-efile "emacs-lisp/" "cl-lib.el")
# (find-efile "emacs-lisp/cl-extra.el")
# (find-efile "emacs-lisp/cl-indent.el")
# (find-efile "emacs-lisp/cl-lib.el")
# (find-efile "emacs-lisp/cl-seq.el")
# (find-efile "emacs-lisp/cl.el")




#####
#
# cl-struct and cl-defstruct
# 2019apr14
#
#####

# «cl-struct»    (to ".cl-struct")
# «cl-defstruct» (to ".cl-defstruct")
# (to "ee-package-dir")
# (find-egrep "grep --color=auto -nH --null -e cl-defstruct *.el */*.el")
# (find-efunction 'cl-defstruct)
# (find-node "(cl)Structures")
# (find-node "(cl)Structures" "#s(person1 nil nil nil)")
# (find-elnode "Hash Table Type" "#s")
# (find-elnode "Records" "#s")
# (find-anggfile "elisp/cl-glyphs.el")
# (find-eloadhistory-for 'cl-defstruct)

# (find-efunction 'ee-glyph)
# (ee-glyph 64)

(cl-defstruct ee-glyph char keys glyphchar face)

(find-epp (macroexpand '
  (cl-defstruct ee-glyph char keys glyphchar face)
  ))

(setq ee-glyph-macroexpanded (macroexpand '
  (cl-defstruct ee-glyph char keys glyphchar face)
  ))

;; (find-epp ee-glyph-macroexpanded)
;; (find-epp ee-glyph-macroexpanded "type-of")
;; (find-epp ee-glyph-macroexpanded "cl-struct-define")
;; (find-efunctiondescr 'type-of)
;; (find-efunction 'type-of)
;; (find-efunction 'type-of "type name field")

;; How do I find the names of the fields of a struct?
;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-06/msg00177.html Edrx 
;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-06/msg00179.html Edrx 2
;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-06/msg00202.html Stefan

(find-epp (car oo))
(find-epp (caar oo))
(ee-struct-to-string (caar oo))
(cl-prin1-to-string (caar oo))
(find-estruct (caar oo))


(f
(setq ooo (caar oo))

;; (find-efunction 'cl-struct-slot-info)

(defun ee-struct-fieldnames (struct-type)
  (let*

(cl-struct-slot-info 'mystruct)
(mapcar 'car (cl-struct-slot-info 'mystruct))


(defun ee-struct-to-string (stru)
(let* ((type (aref 0 stru))
       (info (cl-struct-slot-info type))
       (fieldnames (mapcar 'car info))
       (n (m

(length mys)



#####
#
# cl-map
# 2021jun07
#
#####

# «cl-map»  (to ".cl-map")
# (find-clnode "Mapping over Sequences")

(cl-mapcar '+ (list 10 20 30) (list 4 5 6))
(cl-mapcar '+ (list 10 20 30) [4 5 6])
(cl-mapcar '+ (list 10 20 30) [4 5 6 7 8])
(cl-mapcar 'list (list 10 20 30) [4 5 6 7 8])
(cl-mapcar 'list (list 10 20 30) (record 'mystruct 22 nil "44"))

#s(22 33 44)



#####
#
# cl-defun
# 2022sep15
#
#####

# «cl-defun»  (to ".cl-defun")
# (find-node "(cl)Argument Lists")
# (find-node "(cl)Argument Lists" "&key ((KEYWORD VAR) INITFORM SVAR)")
# (find-egrep "grep --color=auto -nH --null -e cl-defun *.el */*.el")
# (find-efile "erc/erc.el" "(cl-defun erc (&key ")

(cl-defun foo (&key (a (buffer-file-name))) a)

(defun ee-kl-c ()
  (or ee-preferred-c (error "`ee-preferred-c' is nil here!")))


(foo)
(foo :a "poo")

(defun ee-kl-c ()
  (or ee-preferred-c (error "`ee-preferred-c' is nil here!")))

(defun ee-kl-dir (&optional c)
  (ee-expand (eval (read (format "ee-%sdir" (or c (ee-kl-c)))))))

(defun ee-kl-fname (&optional c fname)
  (ee-remove-prefix (ee-kl-dir c) (ee-expand (or fname buffer-file-name))))







#####
#
# ee-struct-to-string
# 2021jun08
#
#####

# «ee-struct-to-string»  (to ".ee-struct-to-string")
# (find-eev "eev-blinks.el" "find-estruct")





#####
#
# shelisp - execute elisp in shell
# 2019apr16
#
#####

# «shelisp» (to ".shelisp")
# (find-epackage-links 'shelisp)
# (find-epackage       'shelisp)
# (code-c-d "shelisp" "~/.emacs.d/elpa/shelisp-0.9.1/")
# (find-elpafile "" "shelisp")
# (find-elpafile "shelisp-readme.txt")
# (find-shelispfile "")
# (find-shelispfile "shelisp.el" "{ printf ")
# (find-shelispfile "shelisp.el" "shelisp-commands")
# (find-shelispfile "shelisp.el" ":else")

# (require          'shelisp "shelisp.el")
# (find-evardescr   'shelisp-commands)
# (find-efunctionpp 'shelisp-mode)
# (find-efunction   'shelisp-exec-lisp)
# (find-efunction   'shelisp-add-commands)
# (find-efunction   'shelisp-add-commands "mapconcat")

# (find-node "(zsh)Functions")
# (find-node "(zsh)Complex Commands" "function WORD ... [ () ]")
# (find-es "bash" "unset-f")

(defun shelisp-add-command-string (cmd expr &optional sep)
  (apply #'format
         (mapconcat #'identity
                    '("unset -f shelisp_%s"
                      "function shelisp_%s { printf '\\e_#EMACS# %s \\a' \"$@\"; }"
                      "alias %s=shelisp_%s" "")
                    (or sep " ; "))
         (list cmd cmd
	       (replace-regexp-in-string "\"" "\\\\\"" expr)
	       cmd cmd)))

;; (find-estring (shelisp-add-command-string "foo" "FOO" "\n"))
;; (find-estring (shelisp-add-command-string "dired" "(dired \"%s\")" "\n"))




* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
* (eepitch-eval-at-target-window '(shelisp-mode 1))
unset -f    shelisp_dired
function    shelisp_dired { printf '\e_#EMACS# (dired \"%s\") \a' "$@"; }
alias dired=shelisp_dired

dired .

unset -f      shelisp_mydired
function      shelisp_mydired { printf '\e_#EMACS# (dired \"%s\") \a' "$@"; }
alias mydired=shelisp_mydired

mydired .



* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (eepitch-eval-at-target-window '(shelisp-mode 1))
function    shelisp_dired { printf '\e_#EMACS# (dired \"%s\") \a' "$@"; }
alias dired=shelisp_dired

dired .


which d


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
bash
* (eepitch-eval-at-target-window '(shelisp-mode 1))

unset -f shelisp_e
function shelisp_e { printf '\e_#EMACS# (find-file-other-window (f \"%s\")) \a' "$@"; }
alias  e=shelisp_e
unset -f shelisp_v
function shelisp_v { printf '\e_#EMACS# (view-file-other-window (f \"%s\")) \a' "$@"; }
alias  v=shelisp_v
unset -f    shelisp_dired
function    shelisp_dired { printf '\e_#EMACS# (dired \"%s\") \a' "$@"; }
alias dired=shelisp_dired
unset    -f shelisp_ediff
function    shelisp_ediff { printf '\e_#EMACS# (ediff (f \"%s\") (f \"%s\")) \a' "$@"; }
alias ediff=shelisp_ediff


shelisp () { echo "\e_#EMACS# elisp-expr \a" }
shelisp () { echo "\\e_#EMACS# elisp-expr \\a" }
shelisp '(insert "foo")'

* (require 'shelisp)

* (load "~/shelisp/shelisp.el")
* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
* (eepitch-eval-at-target-window '(shelisp-mode 1))
dired .
declare -fp shelisp_dired
alias               dired




#####
#
# shelisp-zsh
# 2021aug18
#
#####

# «shelisp-zsh»  (to ".shelisp-zsh")
# (find-angg "shelisp/")
# (find-angg "shelisp/README.org")
# (find-angg "shelisp/shelisp.el")
# (find-angg "shelisp/shelisp.el" "Tests:")
# (find-es "bash" "set")
# (find-efunction 'shelisp-zsh-add-commands)
# (find-efunction 'shelisp-zsh-mode)

(require 'shelisp "~/shelisp/shelisp.el")
(load             "~/shelisp/shelisp.el")

* (load "~/shelisp/shelisp.el")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (eepitch-eval-at-target-window '(shelisp-zsh-mode 1))

typeset -fp shelisp_dired
alias               dired
dired .

shelisp_dired () {
	printf '\e_#EMACS# (dired \"%s\") \a\n' "$@"
}
dired .


* (eepitch-eval-at-target-window '(shelisp-zsh-add-commands))





#####
#
# shelisp-emacsit
# 2021aug19
#
#####

# «shelisp-emacsit»  (to ".shelisp-emacsit")
# (find-fline "~/shelisp/shelisp.el")

* (load "~/shelisp/shelisp.el")
* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
* (eepitch-eval-at-target-window '(shelisp-mode 1))
* (ee-kill-image-buffers)

# (find-fline "/tmp/emacsit/")
rm -Rv /tmp/emacsit/
mkdir  /tmp/emacsit/
cd     /tmp/emacsit/

# (find-fline "~/tmp/" "bortolossi_p296.jpg")
cp -v ~/tmp/bortolossi_p296.jpg a.jpg

function emacsit         { printf '\e_#EMACS# %s \a' "$@"; }
function find_fline_here { emacsit "(find-fline \"$PWD/$1\")"; }

find_fline_here a.jpg




#####
#
# make-hash-table
# 2021may20
#
#####

# «make-hash-table»  (to ".make-hash-table")
# (find-efunctiondescr   'make-hash-table)
# (find-elnode "Index" "* make-hash-table:")
# (find-elnode "Creating Hash")
# (find-elnode "Creating Hash" "equal")
# (find-angg "emacs-lua/emlua.el" "emlua-quote")
# (find-angg "emacs-lua/emlua.el" "emlua-quote" "lua-bracket-hash-table")

(setq ht (make-hash-table))
(puthash :key1 :val1 ht)
(puthash :key2 :val2 ht)
ht

(find-ehashtable ht)

(hash-table-p ht)


;; See: (find-elnode "Creating Hash" "equal")
;; Create two strings that are `equal' but not `eq',
;; and test "(make-hash-table :test 'equal)":
;;
(setq ab1 (concat "a" "b"))
(setq ab2 (concat "a" "b"))
(eq ab1 ab2)

(setq ht-eq    (make-hash-table))
(setq ht-equal (make-hash-table :test 'equal))

(puthash ab1 "foo" ht-eq)
(puthash ab2 "bar" ht-eq)
(puthash ab1 "foo" ht-equal)
(puthash ab2 "bar" ht-equal)

(find-ehashtable ht-eq)
(find-ehashtable ht-equal)







#####
#
# Emacs Image Manipulation Package - uses ImageMagick's "mogrify"
# 2019apr21
#
#####

# «eimp» (to ".eimp")
# (find-epackage 'eimp)
# (find-elpafile "eimp-20120826.2039/")
# (code-c-d "eimp" "~/.emacs.d/elpa/eimp-20120826.2039/")
# (find-eimpfile "")
# (find-eimpfile "eimp.el" "(easy-menu-define eimp-menu eimp-minor-mode-map")




#####
#
# executable-find
# 2019jun10
#
#####

# «executable-find» (to ".executable-find")
# (find-efunction 'executable-find)




#####
#
# Sacha Chua
# 2019jun26
#
#####

# «sacha-chua» (to ".sacha-chua")
# https://www.youtube.com/results?search_query=sacha+chua
# http://emacslife.com/emacs-lisp-tutorial.html
# https://www.emacswiki.org/emacs/SachaChua



#####
#
# Sachac's .emacs
# 2020jan13
#
#####

# «sachac-.emacs» (to ".sachac-.emacs")
# https://pages.sachachua.com/.emacs.d/Sacha.html



#####
#
# Understanding bury-buffer
# 2019jul04
#
#####

# «bury-buffer» (to ".bury-buffer")
# (eek "M-h M-k  M-K  ;; bury-buffer")
# (find-efunction 'bury-buffer)
# (find-efunction 'window-normalize-buffer)
# (find-efunctiondescr 'bury-buffer-internal)
# (find-efunctiondescr 'window--delete)
# (find-efunctiondescr 'set-window-dedicated-p)
# (find-efunction      'switch-to-prev-buffer)
# (find-efunctiondescr 'window-next-buffers)
# (find-node "(cl)Blocks and Exits")

(defun ee-burys ()
  (let* ((initial (current-buffer))
	 (buffers (list initial)))
    (catch 'foo
      (while t
	(bury-buffer)
	(if (eq (current-buffer) initial)
	    (throw 'foo t))
	(setq buffers (cons (current-buffer) buffers))))
    buffers))

(defun ee-burys ()
  (let* ((initial (current-buffer))
	 (buffers (list initial)))
    (while (progn (bury-buffer)
		  (not (eq (current-buffer) initial)))
      (setq buffers (cons (current-buffer) buffers)))
    buffers))

(defun ee-burys ()
  (let* ((initial (current-buffer))
	 buffers)
    (while (progn 
	     (push (current-buffer) buffers)
	     (bury-buffer)
	     (not (eq (current-buffer) initial))))
    buffers))

(find-eppp (ee-burys))





#####
#
# helpful
# 2019jul10 / 2019dec26
#
#####

# «helpful» (to ".helpful")
# https://mail.google.com/mail/ca/u/0/?q=c2+trabalho#inbox/FMfcgxwChcnDzdxRFNNVwtWndqlRfxvX
# (find-epackage-links 'helpful "helpful" t)
# (find-epackage       'helpful)
# (code-c-d "helpful" "~/.emacs.d/elpa/helpful-20231028.516/")
# (find-helpfulfile "")

# https://github.com/wilfred/helpful
# https://github.com/Wilfred/helpful
# http://melpa.org/#/helpful

(helpful-function 'next-line)
(helpful-macro    'with-current-buffer)
(helpful-key      [down])


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/helpful/
cd      ~/usrc/
git clone https://github.com/Wilfred/helpful
cd      ~/usrc/helpful/

PAGER=cat git log --oneline --graph --all

# (find-fline "~/usrc/")
# (find-fline "~/usrc/helpful/")
# (find-gitk  "~/usrc/helpful/")

# (code-c-d "helpful" "~/usrc/helpful/")
# (find-helpfulfile "")
# (find-helpfulfile "README.md")
# (find-helpfulsh "git log --oneline --graph --all")
# (find-helpfulfile "test/")
# (find-helpfulfile "test/helpful-unit-test.el")

# (helpful-function 'helpful-function)

# (find-efunction-links 'helpful-function)
# (find-efunctiondescr  'helpful-function)
# (find-efunction       'helpful-function)

* `helpful-callable`
* `helpful-function`
* `helpful-macro`
* `helpful-command`
* `helpful-key`
* `helpful-variable`
* `helpful-at-point`



#####
#
# helpful-mode-line
# 2022mar17
#
#####

# «helpful-mode-line»  (to ".helpful-mode-line")
# (find-eev "eev-helpful.el")

Hi Wilfred,

I am finally adding support for helpful to eev! I have just
implemented elisp hyperlinks to helpful buffers - for example, this

  (find-hcallable 'find-file "Edit file FILENAME")

runs (helpful-callable 'find-file) in a way that makes it use the
current window, and searches for the first occurrent of the string
"Edit file FILENAME" in the helpful buffer...

Can you help with one of the next steps? Eev has a way to create
"links to here" for many kinds of "here"s - we type `M-h M-h' and eev
detects in which kind of "here" we are and generates a temporary
buffer with the right elisp hyperlinks... but I don't have much
practice with the variables that control the mode line. When I run
this

  (helpful-callable 'find-file)

the mode line is:

  " -:%*-  *helpful command: find-file*   Top L46    (Helpful eev) []"

What variables control the "command: find-file" part? I think that if
you help with this I will be able to write the support for helpful
buffers to find-here-links...

  Thanks in advance!
    Eduardo Ochs
    http://angg.twu.net/#eev





Wilfred Hughes <[email protected]>
Wilfred Hughes <[email protected]>




#####
#
# helpful-button-at-point
# 2019dec26
#
#####

# «helpful-button-at-point» (to ".helpful-button-at-point")
# https://github.com/Wilfred/helpful/issues/231
# (find-fline "~/LOGS/2019dec26.emacs")
# (find-fline "~/LOGS/2019dec26.emacs" "how buttons work under the lid")
# (find-fline "~/LOGS/2019dec26.emacs" "<bpalmer> edrx:")
# https://emacs.stackexchange.com/questions/22465/documentation-of-the-action-of-a-button/22466#22466

# (find-epackage-links 'helpful)
# (find-epackage 'helpful)
# (find-elpafile "helpful-readme.txt")
# (find-elpafile "helpful-20200506.816/")
# (code-c-d "helpful" "~/.emacs.d/elpa/helpful-20200506.816/")
# (find-helpfulfile "")

Is there a way to inspect buttons with helpful?
I never understood well how buttons work under the lid...
I know that I can get some information about the button at point
with `M-x describe-text-properties', but the output format is
terse and hard to understand...

Thanks in advance!
Eduardo Ochs
  http://angg.twu.net/#eev

P.S.: this is a newbie-ish question! I started playing with
helpful just a few hours ago - after a private discussion that
started with this message:
  https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00728.html
and now I am starting to add helpful support to eev...




#####
#
# shorthands
# 2022nov03
#
#####

# «shorthands»  (to ".shorthands")
# (find-elnode "Shorthands")
# (find-efile "emacs-lisp/shorthands.el")
# https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg00196.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/elisp-hacking/
cd      /tmp/
git clone https://github.com/mark-naylor-1701/elisp-hacking
cd      /tmp/elisp-hacking/

export PAGER=cat
git branch --list -a
git checkout other-window-extension

# (code-c-d "elisphacking" "/tmp/elisp-hacking/")
# (find-elisphackingfile "")
# (find-elisphackingfile "other-window-extension.el")
# (find-elisphackingfile "other-window-extension.el" "read-symbol-shorthands")
# (find-elnode "Shorthands")
# (find-eetcgrep "grep --color=auto -niH --null -e shorthands NEWS*")
# (find-fline "~/LOGS/2024oct20.emacs2" "I am using shorthands")






#####
#
# shortdoc
# 2021jul16
#
#####

# «shortdoc»  (to ".shortdoc")
# (find-eshortdoc 'keymaps)
# (find-eshortdoc 'keymaps "keymap-unset")
# (find-efile "emacs-lisp/shortdoc.el")
# (find-efile "emacs-lisp/shortdoc.el" "(define-short-documentation-group buffer")
# (find-efunctiondescr 'shortdoc-display-group)
# (find-efunction      'shortdoc-display-group)
# (find-efunctiondescr 'pop-to-buffer)
# (find-efunction      'pop-to-buffer)
# (find-elnode "Index" "* pop-to-buffer:")

# (find-eetcgrep "grep --color=auto -nH --null -e shortdoc NEWS*")

# (shortdoc-display-group)
# (shortdoc-display-group 'alist)
# (shortdoc-display-group 'buffer)
# (shortdoc-display-group 'number)
# (shortdoc-display-group 'regexp)

# (find-dbsw-call '(shortdoc-display-group 'alist))
# (find-epp               shortdoc--groups)
# (find-epp (assoc 'alist shortdoc--groups))

# https://www.reddit.com/r/emacs/comments/txh85s/weekly_tips_tricks_c_thread/
# https://www.masteringemacs.org/article/emacs-builtin-elisp-cheat-sheet





#####
#
# Mekeor's trick for making describe-function display the shortdoc
# 2024mar23
#
#####

# «shortdoc-mekeor»  (to ".shortdoc-mekeor")
# (find-fline "~/LOGS/2024mar23.emacs" "'help-fns-describe-function-functions")
# (find-evardescr 'help-fns-describe-function-functions)
# (find-evariable 'help-fns-describe-function-functions)
# (find-hvariable 'help-fns-describe-function-functions)

(find-eshortdoc 'alist "(assoc ")

(add-hook 'help-fns-describe-function-functions
          #'shortdoc-help-fns-examples-function)

(progn
  (find-efunctiondescr 'assoc)
  (find-ebuffercontents (current-buffer))
  )

(remove-hook 'help-fns-describe-function-functions
             #'shortdoc-help-fns-examples-function)

(find-efunctiondescr 'assoc)








#####
#
# info-mode
# 2019jul12
#
#####

# «info-mode» (to ".info-mode")
# (find-efile "info.el")
# (find-evardescr 'Info-mode-map)
# (find-evariable 'Info-mode-map)
# (find-ekeymapdescr Info-mode-map)
# (find-node "(info)Help-Inv")
# (find-node "(info)Help-Inv" "Invisible text")
# (find-node "(info)Help-Inv" "visible-mode")
# (find-enode "Command Index" "* info:")
# (find-efile "info.el" "(define-derived-mode Info-mode")
# (find-efunctiondescr 'Info-mode)

# (find-eppp Info-directory-list)
# (find-eppp Info-default-directory-list)

# https://www.emacswiki.org/emacs/InfoPath
# (find-man "1 install-info")

# (eek "M-h M-k  M-n  ;; clone-buffer")



#####
#
# Info-directory-list
# 2022oct03
#
#####

# «Info-directory-list»  (to ".Info-directory-list")
# (find-fline "~/LOGS/2022oct01.emacs" "<bpalmer> ,infopath")
# (add-to-list 'Info-directory-list "/usr/local/lilypond/usr/share/info/")



#####
#
# Info-dir-remove-duplicates
# 2023jul08
#
#####

# «Info-dir-remove-duplicates»  (to ".Info-dir-remove-duplicates")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-07/msg00134.html
# Steve Berman revealed that the subcategory headers are removed by 
# Info-dir-remove-duplicates.






#####
#
# forward-sexp
# 2019aug05
#
#####

# «forward-sexp» (to ".forward-sexp")
# (find-efunction 'forward-sexp)
# (find-efunctiondescr 'scan-sexps)
# (find-elnode "Index" "* forward-comment:")
# (find-elnode "Index" "* ignore-errors:")
# (find-elnode "Handling Errors")
# (find-efile "emacs-lisp/lisp.el")
# (find-egrep "zgrep --color -nH -e forward-sexp-function *.el* */*.el*")
# (find-efile "progmodes/python.el" "(make-local-variable 'forward-sexp-function)")
# (find-efile "textmodes/tex-mode.el" "(setq-local forward-sexp-function 'latex-forward-sexp)")

(defun fc () (interactive) (forward-comment (buffer-size)))
(defun fs () (interactive) (forward-sexp (buffer-size)))




#####
#
# eev-explain.el
# 2019aug11
#
#####

# «eev-explain.el» (to ".eev-explain.el")
# (find-eev "eev-explain.el")
# (find-eevfile "eev-explain.el" "ee-set-string-face")

(ee-bets-eejump)
(ee-bets-text 0)
(ee-bets-flash 0)
(ee-bets-flash 0 1 -1)

# (find-efunction 'eeflash+)

;; (ee-bets-flash 1 7)
;; (ee-bets-flash 3)
;; (substring (ee-bets-text 1) 7)
;; (ee-bets-text 3)




#####
#
# gnutls
# 2019aug11
#
#####

# «gnutls» (to ".gnutls")
# (gnutls-available-p)
# (find-node "(emacs-gnutls)Top")
# (find-sh "apt-file search gnutls")
# (find-status   "gnutls-bin")
# (find-vldifile "gnutls-bin.list")
# (find-udfile   "gnutls-bin/")
# (find-status   "gnutls-doc")
# (find-vldifile "gnutls-doc.list")
# (find-udfile   "gnutls-doc/")

bug#37453: Cannot connect to elpa
Inbox
x

Noam Postavsky [email protected] via gnu.org
02:51 (11 hours ago)
to worik, 37453

forcemerge 36873 37453
quit

worik <[email protected]> writes:

> https://elpa.gnu.org/packages/spinner-1.7.3.el: Bad Request

Upgrade to 26.3, or else try

    (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")

as a workaround.




#####
#
# gnutls-errors
# 2019sep24
#
#####

# «gnutls-errors» (to ".gnutls-errors")

error in process sentinel: Error retrieving:
  https://elpa.gnu.org/packages/archive-contents (error
  connection-failed "failed with code 10060" :host "elpa.gnu.org"
  :service 443)

# (find-egrep "zgrep --color -nH -e 10060 *.el* */*.el*")
# (find-egrep "zgrep --color -nH -e 'process sentinel' *.el* */*.el*")





#####
#
# easy-menu-define
# 2004dec17 / 2019aug11
#
#####

# «easy-menu»  (to ".easy-menu")
# (find-elnode "Easy Menu")
# (find-egrep "zgrep --color -nH -e easy-menu-define *.el* */*.elz")

# (find-efile "emacs-lisp/")
# (find-efile "emacs-lisp/easymenu.el")
# (find-efile "progmodes/")
# (find-efile "progmodes/meta-mode.el" "easy-menu-define")
# (find-eevfile "eev-dev.el" "menu-bar-eev-menu")

(easy-menu-define
 'fundcomp-menu global-map
 "FundComp menu."
 '("FundComp"
   ["dired: (find-file \".\")"      (find-file ".") t]
   ["tutorial de Scheme"            fundcomp-tutorial-scheme t]
   ["Tutorial de Lisp"              fundcomp-tutorial-lisp t]
   "--"
   ["Sei lá"                        fundcomp-xxx t]
   ))

(easy-menu-define
 eev-menu global-map
 "Eev menu."
 '("(eev)"
   :visible eev-mode
   ["eek-eval-sexp-eol"          eek-eval-sexp-eol t]
   ["eek-eval-last-sexp"         eek-eval-last-sexp t]
   ["eval-last-sexp"             eval-last-sexp t]
   "--"
   ["kill-buffer"                kill-buffer t]
   "--"
   ["eev manual and tutorial"    (find-eevfile "manual.e")]
   ["main emacs keys"            (find-eevfile "keys.e")]
   ["(info \"(emacs)Top\")"      (info "(emacs)Top") t]
   ["(info \"(elisp)Top\")"      (info "(elisp)Top") t]
   ["(info \"(eintr)Top\")"      (info "(eintr)Top") t]
   ))



;;(defun ee-invade-global-menu-bar ()
;;  (interactive)
;;  (define-key global-map [menu-bar eev] (cons "(eev)" menu-bar-eev-menu)))

;;;
;;: eev-menu
;;;

;; This is horribly obsolete, it's from ages ago. I commented it out
;; with a tick. I'll choose other entries when I have the time and
;; inspiration for that.




#####
#
# ielm
# 2019aug17
#
#####

# «ielm» (to ".ielm")
# (find-enode "Lisp Interaction" "M-x ielm")
# (find-efunctiondescr 'ielm)
# (find-efunction 'ielm)
# (find-efile "ielm.el")

* (eepitch '(ielm))
* (eepitch-kill)
* (eepitch '(ielm))
(+ 1 2)

# (find-fline "~/LOGS/2019aug17.emacs" "advantages of ielm over C-x C-e")
# (find-fline "~/LOGS/2021oct19.emacs" "how do you handle history in ielm?")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00424.html

# «ielm-history-rdrg109»  (to ".ielm-history-rdrg109")

;; The following configuration makes the prompt to be read-only.
(setq comint-prompt-read-only t)

;; The following configuration makes =shell= don't print the last executed command.
(setq comint-process-echoes t)

;; The following configuration make the last executed command not to
;; be inserted twice in the history list.
(setq comint-input-ignoredups t)

(setq comint-input-ring-separator "$$$\n")

;;; History search
(with-eval-after-load 'comint
  (when (require 'helm-comint nil t)
    (setq helm-comint-max-offset t)))

(with-eval-after-load 'comint
  (when (require 'helm-comint nil t)
    (define-key comint-mode-map (kbd "C-c h") 'helm-comint-input-ring)))

;; Set location for the history
;;
(defun my/comint-set-input-ring-file-name ()
  (let ((location "~/my/shell-history")
        (shell shell--start-prog)
        (process (get-buffer-process (current-buffer)))
        filename)
    (cond
     ;; If the name of the current shell is known. As occurs with
     ;; `shell-mode' buffers, then save it in a separate file.
     (shell
      (setq filename shell))
     ;; As for Emacs 27.2, the following would work for
     ;; + inferior-python-mode
     ;; + inferior-emacs-lisp-mode
     ;; + sql-interactive-mode ("sql: <<engine>>")
     ;;
     ;; We use `downcase' because process-name for
     ;; inferior-python-mode is Python.
     (process
      (setq filename (downcase (process-name process))))
     ;; Otherwise, save history in the file where all uncovered
     ;; scenarios also save them. Ideally, the buffer name should be
     ;; used for the filename. However, as for Emacs 27.2,there is no
     ;; hook which is run after the buffer name has been set.
     (t
      (setq filename "unknown-shell")))
    (setq filename
          (concat location "/" filename))
    (setq-local comint-input-ring-file-name filename))
  ;; Finally, we read the file that contain the history.
  ;;
  ;; Those shells that are started for the first time don't have a
  ;; history and this is solved with the conditional.
  (when (file-exists-p comint-input-ring-file-name)
    (comint-read-input-ring)))

(add-hook 'comint-mode-hook 'my/comint-set-input-ring-file-name)

;;; Save history
;; The following configuration saves the configuration whenever a
;; comint buffer is killed.

(defun my/write-input-ring-when-comint-buffer ()
  (when (or (eq major-mode 'shell-mode)
            (eq major-mode 'inferior-emacs-lisp-mode)
            (eq major-mode 'inferior-python-mode)
            (eq major-mode 'sql-interactive-mode))
    (comint-write-input-ring)))

(add-hook 'kill-buffer-hook 'my/write-input-ring-when-comint-buffer)

;; The following configuration saves the history of all the comint
;; buffers when exiting Emacs.

(defun my/write-input-ring-comint-buffers ()
  (mapc (lambda (buffer)
          (with-current-buffer buffer
            (my/write-input-ring-when-comint-buffer)))
        (buffer-list)))

(add-hook 'kill-emacs-hook 'my/write-input-ring-comint-buffers)

;;; TODO Find a way to detect whether a buffer has to do with comint
;;; TODO Save all comint buffers when Emacs is killed

https://news.ycombinator.com/item?id=35497834 Making IELM (Emacs Lisp REPL) More Comfortable (n16f.net)
https://www.masteringemacs.org/article/evaluating-elisp-emacs
https://www.n16f.net/blog/making-ielm-more-comfortable/






#####
#
# echo-area
# 2019aug18
#
#####

# «echo-area» (to ".echo-area")
# (find-elnode "Echo Area Customization")



#####
#
# Lightweight, C-only implementation of Emacs
# 2019aug22
#
#####

# «C-only-emacsen» (to ".C-only-emacsen")
# https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00350.html fe
# https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00351.html ErsatzEmacs
# https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00374.html three lists
# https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00409.html mg





#####
#
# use-package
# 2019aug22 / 2024sep26
#
#####

# «use-package» (to ".use-package")
# (find-node "(use-package)Top")
# (find-angg "elisp/2022-test-use-package.el")
# (find-epackage-links 'use-package)
# (find-epackage 'use-package)
# https://github.com/jwiegley/use-package
# https://jwiegley.github.io/use-package/
# https://jwiegley.github.io/use-package/keywords/
# https://jwiegley.github.io/use-package/keywords/#defer-demand
#
# 2023:
# https://www.evalapply.org/posts/emerging-from-dotemacs-bankruptcy-packages/index.html
# https://ianyepan.github.io/posts/setting-up-use-package/

# (find-fline "~/LOGS/2022apr16.emacs-1")
# (find-fline "~/LOGS/2022apr16.emacs-1" ":magic clause")

# (find-epackage-links 'use-package "usepackage" t)
# (find-epackage       'use-package)
# (code-c-d "usepackage" "~/.emacs.d/elpa/use-package-20210207.1926/" "use-package")
# (find-usepackagefile "")
# (find-usepackagenode "")

# (find-node "(use-package)Top")
# (find-usepackagenode "Top")

(find-eppm '

(use-package foo
  :init   (setq foo-variable t)
  :config (foo-mode 1))

)




#####
#
# leaf
# 2020sep08
#
#####

# «leaf»  (to ".leaf")
# https://github.com/conao3/leaf.el
# (find-epackage-links 'leaf)
# (find-epackage 'leaf)
# (find-elpafile "leaf-readme.txt")





#####
#
# key-chord
# 2020sep08
#
#####

# «key-chord»  (to ".key-chord")
# (find-epackage-links 'key-chord)
# (find-epackage 'key-chord)
# (find-elpafile "key-chord-readme.txt")
# (code-c-d "keychord" "~/.emacs.d/elpa/key-chord-20160227.1238/")
# (find-keychordfile "")

# (defun eek-cmd (str) `(lambda () (interactive) (eek ,str)))

# (key-chord-define-global ",."     "<>\C-b")
# (key-chord-define-global ",."     '(lambda () (interactive) (eek "<< >> 2*<left>")))
# (key-chord-define-global ",."     (eek-cmd "<< >> 2*<left>"))
# (key-chord-define-global ",."     (eek-cmd "<< >> 2*<left>"))
# (key-chord-mode 1)
# (key-chord-mode 0)

<<>>

# (key-chord-describe)

# (find-epackages)
  bind-chord         20171204.2010 available  melpa      key-chord binding helper for use-package-chords
  key-chord          20160227.1238 available  melpa      map pairs of simultaneously pressed keys to commands
  quelpa             20190710.503  available  melpa      Emacs Lisp packages built directly from source
  quelpa-use-package 20190210.1838 available  melpa      quelpa handler for use-package
  req-package        20180122.500  available  melpa      A use-package wrapper for package runtime dependencies management

  use-package        20190716.1829 available  melpa      A configuration macro for simplifying your .emacs
  use-package-chords 20181024.2322 available  melpa      key-chord keyword for use-package
  use-package-el-get 20180131.505  available  melpa      el-get support for use package
  use-package-ens... 20180913.1501 available  melpa      auto install system packages
  use-package-hydra  20181228.745  available  melpa      Adds :hydra keyword to use-package macro

# (find-epackage 'use-package)
# (find-epackage 'use-package-chords)
# (find-epackage 'use-package-ensure-system-package)
# https://github.com/jwiegley/use-package
# https://www.emacswiki.org/emacs/key-chord.el




#####
#
# hydra
# 2020aug11
#
#####

# «hydra»  (to ".hydra")
# https://llazarek.com/2018/07/modal-editing-in-emacs.html
# https://sachachua.com/blog/2021/04/emacs-making-a-hydra-cheatsheet-for-lispy/
# https://github.com/abo-abo/hydra
# https://github.com/abo-abo/hydra/wiki
# (find-epackage-links 'hydra)
# (find-epackage 'hydra)
# (code-c-d "hydra" "~/.emacs.d/elpa/hydra-20201115.1055/")
# (find-elpafile "hydra-readme.txt")
# (find-hydrafile "")
# (find-hydrafile "hydra.el")
# (find-hydrafile "hydra.el" "(defcustom hydra-key-format-spec" "_a_")
# (find-hydrafile "hydra.el" "(defcustom hydra-doc-format-spec" "?a?")
# https://github.com/abo-abo/hydra#awesome-docstring
#   To insert an empty character, use ^. The only use of this is to have
#   your code aligned as nicely as the result.

# (find-hydrafile "hydra-examples.el")
# (find-hydrafile "hydra-examples.el" "Example 11: rectangle-mark-mode")
# (find-efunctiondescr 'defhydra)
# (find-efunction      'defhydra)

(defhydra hydra-toggle (:color blue)
  "toggle"
  ("a" abbrev-mode "abbrev")
  ("d" toggle-debug-on-error "debug")
  ("f" auto-fill-mode "fill")
  ("t" toggle-truncate-lines "truncate")
  ("w" whitespace-mode "whitespace")
  ("q" nil "cancel"))

(define-key my-mode-map (kbd "C-c C-v") 'hydra-toggle/body)
(define-key my-mode-map (kbd "C-c C-v") 'mcm/hydra/registers/body)

(defhydra mcm/hydra/registers (:color blue :hint nil)
    "
Register commands
_s_: Save point                 _n_: Number to register
_j_: Jump to register         _i_/_+_: Increment number in register
_y_: Copy to register           _h_: Show registers
_p_: Insert from register       _w_: Window config to register
"
    ("s" point-to-register)
    ("j" jump-to-register)
    ("y" copy-to-register)
    ("p" insert-register)
    ("h" helm-register)
    ("n" number-to-register)
    ("i" increment-register)
    ("+" increment-register)
    ("w" window-configuration-to-register)
    ("q" nil))

;; The function to activate this hydra is `mcm/hydra/registers/main'

(defun foo-a () (interactive) (insert "AAA"))
(defun foo-b () (interactive) (insert "BBB"))
(defun foo-c () (interactive) (insert "CCC"))
(defun foo-d () (interactive) (insert "DDD"))
(defun foo-r () (interactive) (insert "RRR"))

(find-epp (macroexpand '

  (defhydra hydra-rewrite-url
    () ;; (global-map "M-h u")
    "Rewrite URL"
    ("r" foo-r "redir")
    ("d" foo-d "delorig")
    ("c" foo-c "clear fbclids")
    ("a" foo-a "add archive.md")
    ("q" nil "quit"))

))



#####
#
# hydra-video
# 2021apr24
#
#####

# «hydra-video»  (to ".hydra-video")
# https://oremacs.com/download/london.pdf
# (code-pdf-page "hydraguidedtour" "$S/https/oremacs.com/download/london.pdf")
# (code-pdf-text "hydraguidedtour" "$S/https/oremacs.com/download/london.pdf")
# (find-hydraguidedtourpage)
# (find-hydraguidedtourtext)

# https://www.youtube.com/watch?v=_qZliI1BKzI

# (find-youtubedl-links "/sda5/videos/" nil "ONHEDj3kWrE" nil "hydra")
# (code-video "hydravideo" "/sda5/videos/hydra_el_@_london_el-ONHEDj3kWrE.mp4")
# (find-hydravideo "0:00")
# (find-hydravideo "1:51" "The simple example that started the project")




#####
#
# hydra-wiki
# 2021apr24
#
#####

# «hydra-wiki»  (to ".hydra-wiki")
# https://github.com/abo-abo/hydra.wiki.git
# (find-git-links "https://github.com/abo-abo/hydra.wiki.git" "hydrawiki")
# (code-c-d "hydrawiki" "/tmp/hydra.wiki/")
# (find-hydrawikifile "")
# (find-hydrawikigrep "grep --color=auto -nH --null -e '\\^\\^' *")

https://philjackson.github.io//emacs/hydra/doom/2023/05/16/hydra-for-multiple-cursors/




#####
#
# hercules
# 2021jul31
#
#####

# «hercules»  (to ".hercules")
# https://gitlab.com/jjzmajic/hercules.el
# (find-git-links "https://gitlab.com/jjzmajic/hercules.el" "hercules")
# (code-c-d "hercules" "~/usrc/hercules.el/")
# (find-herculesfile "")

# (find-efunctiondescr 'repeat-mode)
# (find-efunction      'repeat-mode)





#####
#
# help-fns+.el
# 2019aug24
#
#####

# «help-fns+.el» (to ".help-fns+.el")
# https://www.reddit.com/r/emacs/comments/8z2jd0/why_isnt_the_code_from_helpfns_in_emacs/
# https://www.emacswiki.org/emacs/download/help-fns%2b.el
# (find-fline "$S/https/www.emacswiki.org/emacs/download/")
# (find-fline "$S/https/www.emacswiki.org/emacs/download/help-fns+.el")

(load (ee-expand "$S/https/www.emacswiki.org/emacs/download/help-fns+.el"))




#####
#
# help-setup-xref
# 2019aug25
#
#####

# «help-setup-xref» (to ".help-setup-xref")
# (find-efunction 'view-lossage)
# (find-efunction 'view-lossage "help-setup-xref")




#####
#
# intangible
# 2019aug26
#
#####

# «intangible» (to ".intangible")
# (find-es "circe" "time-stamps")
# (find-elnode "Special Properties")
# (find-elnode "Special Properties" "intangible" "cannot place point")



#####
#
# el-get
# 2019aug26
#
#####

# «el-get» (to ".el-get")
# https://www.emacswiki.org/emacs/el-get
# https://github.com/dimitri/el-get
# http://tapoueh.org/emacs/el-get.html
# (find-epackages "\n  el-get " t)
# (find-epackage 'el-get)

;; (find-fline    "~/.emacs.d/elpa/el-get-20181006.225/")
(code-c-d "elget" "~/.emacs.d/elpa/el-get-20181006.225/")
;; (find-elgetfile "")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/el-get/
cd      ~/usrc/
git clone https://github.com/dimitri/el-get
cd      ~/usrc/el-get/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/el-get/")
# (find-gitk  "~/usrc/el-get/")

# (code-c-d "elget" "~/usrc/el-get/")
# (find-elgetfile "")
# (find-elgetfile "README.md")
# (find-elgetfile "el-get.info")




#####
#
# Tabs (above windows)
# 2019sep02
#
#####

# «tabs» (to ".tabs")
# https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00658.html
# https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00001.html



#####
#
# avy - Jump to things in Emacs tree-style
# 2019sep09
#
#####

# «avy» (to ".avy")
# https://github.com/abo-abo/avy




#####
#
# sokoban
# 2019sep20
#
#####

# «sokoban» (to ".sokoban")
# (find-epackages "\n  sokoban " t)
# (find-epackage 'sokoban)
# (find-elpafile "sokoban-1.4.8/")

# (code-c-d "sokoban" "~/.emacs.d/elpa/sokoban-1.4.8/")
# (find-sokobanfile "")
# (find-sokobanfile "sokoban.levels")




#####
#
# Functions of the form run-<lang>,
# 2019sep22
#
#####

# «run-lang» (to ".run-lang")
# (find-eapropos "^run-*")
# (find-es "scheme" "racket")
# (find-fline "~/LOGS/2019sep21.emacs" "M-x run-racket")
# (find-enode "Major Modes" "inferior shell")
# (find-enode "Compilation" "inferior process")
# (find-enode "Executing Lisp" "Inferior Lisp mode")
# (find-enode "Executing Lisp" "Inferior Scheme mode")
# (find-elnode "Example Major Modes" "inferior Lisp job")

# (find-efunction 'run-caml)
# (find-efunction 'run-dig)
# (find-efunction 'run-julia)
# (find-efunction 'run-lisp)
# (find-efunction 'run-lua)
# (find-efunction 'run-ocaml)
# (find-efunction 'run-octave)
# (find-efunction 'run-prolog)
# (find-efunction 'run-python)
# (find-efunction 'run-scheme)

# (find-eapropos "^run-*")
# (find-eapropos "^inferior-*")
# (find-enode "External Lisp" "run-lisp")
# (find-enode "Executing Lisp" "Inferior Lisp mode")
# (find-enode "Executing Lisp" "Inferior Scheme mode")
# (find-elnode "Example Major Modes" "inferior Lisp job")





#####
#
# eieio
# 2019sep22
#
#####

# «eieio» (to ".eieio")
# (find-angg ".emacs" "eieio")
# (to "cl-defmethod")
# (find-eieionode "Top")
# (find-eieionode "Quick Start")
# (find-eieionode "Writing Methods")

https://emacsconf.org/2021/talks/form/ Old McCarthy Had a Form

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
VID=https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm
SUB=https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt
rm -Rv /tmp/eure/
mkdir  /tmp/eure/
cd     /tmp/eure/
wget $VID
wget $SUB

# (code-video "eurevideo" "/tmp/eure/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm")
# (find-eurevideo "0:00")




#####
#
# defclass
# 2024oct12
#
#####

# «defclass»  (to ".defclass")
# (find-es "lisp" "defclass")








#####
#
# 0x0
# 2019sep27
#
#####

# «0x0» (to ".0x0")
# (find-angg ".emacs.templates" "u0")
# (find-es    "paste" "0x0-server")
# https://git.sr.ht/~zge/nullpointer-emacs
# (find-epackage-links '0x0)
# (find-epackage       '0x0)
# (code-c-d "0x0" "~/.emacs.d/elpa/0x0-20210701.839/")
# (find-0x0file "")
# (find-0x0file "0x0.el")

# https://gitlab.com/willvaughn/emacs-0x0
# (find-gitk  "~/usrc/emacs-0x0/")
# (code-c-d "emacs0x0" "~/usrc/emacs-0x0/")
# (find-emacs0x0file "")
# (find-emacs0x0file "0x0.el" "(defun 0x0-upload-kill-ring")
# (find-efunction 'ee-0x0-upload-region)
# (find-efunction 'ee-0x0-upload-region "(0x0-upload ")

# (find-fline "~/LOGS/2021oct03.systemcrafters")
# (find-fline "~/LOGS/2021oct03.systemcrafters" "so: help, please =/")

# (find-emacs0x0file "0x0.el" "(defun 0x0--send ")

(load "0x0.el")





#####
#
# imgbb
# 2020dec19
#
#####

# «imgbb»  (to ".imgbb")
# (find-es "paste" "scrot-imgbb")

# (find-epackage-links 'imgbb)
# (find-epackage       'imgbb)
# (code-c-d "imgbb" "~/.emacs.d/elpa/imgbb-20180609.1649/")
# (find-imgbbfile "")
# (find-imgbbfile "imgbb.el")
# https://github.com/ecraven/imgbb.el





#####
#
# text-scale-increase - maybe implement CTRL++ to zoom text
# 2019oct03
#
#####

# «text-scale-increase» (to ".text-scale-increase")
# (find-eapropos "text-scale")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-09/msg01346.html
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-10/msg00206.html
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-12/msg00994.html edrx 2019dec24
# https://www.reddit.com/r/emacs/comments/dwy299/how_to_set_fonts_in_daemon_mode_windows/ a. miller
# (find-gitemacsfile "lisp/mwheel.el")
# (find-gitemacsgrep "grep --color -nH -e text-scale lisp/*")
# (find-gitemacsfile "lisp/face-remap.el" "(defun text-scale-increase")
# (find-gitemacsfile "lisp/face-remap.el" "(define-minor-mode text-scale-mode")
# (find-gitemacsfile "lisp/face-remap.el" "(defun face-remap-add-relative")

# (text-scale-increase 0)
# (text-scale-increase 1)
# (text-scale-decrease 1)

# (find-elongkey-links "C-x C--  ;; text-scale-adjust")
# (find-elongkey-links "C-x C--  ;; text-scale-adjust")
# (find-elongkey-links "C-x C-+  ;; text-scale-adjust")
# (find-efunction 'text-scale-adjust)
# (find-efunction 'text-scale-increase)
# (find-efunction 'text-scale-decrease)
# (find-efunction 'text-scale-set)

# (find-efunctiondescr 'text-scale-mode)
# (find-efunction      'text-scale-mode)






#####
#
# Running several emacs version (for tests)
# 2019oct15
#
#####

# «several-emacs-versions» (to ".several-emacs-versions")
# (find-angg ".zshrc" "aeg")
# (find-es "git" "emacs-from-git-aug2019")
# (find-es "git" "emacs26-from-git")
# (find-fline "~/bigsrc/emacs/src/"   " emacs")
# (find-fline "~/bigsrc/emacs26/src/" " emacs")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
~/bigsrc/emacs/src/emacs -fn 6x13 -fg bisque -bg black
~/bigsrc/emacs/src/emacs -fn 6x13 -fg bisque -bg black &
~/bigsrc/emacs/src/emacs -Q -fn 6x13 -fg bisque -bg black
~/bigsrc/emacs26/src/emacs -Q -fn 6x13 -fg bisque -bg black
~/bigsrc/emacs26/src/emacs -fn 6x13 -fg bisque -bg black
~/bigsrc/emacs26/src/emacs -fn 6x13 -fg bisque -bg black &
emacs25 -fn 6x13 -fg bisque -bg black
emacs25 -fn 6x13 -fg bisque -bg black &





#####
#
# eepitch-shell-bug-2019
# 2019oct14
#
#####

# «eepitch-shell-bug-2019» (to ".eepitch-shell-bug-2019")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-10/index.html
# https://mail.google.com/mail/ca/u/0/#sent/KtbxLzflczkFQTQJkzGBpDDMXwPjPNBxvq what I sent
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwDrlVmwXzpMsfRzWCZTJKksrQW bug #37745
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-10/msg01272.html bug #37745
# Fixed in 96f959521996399b7d75132d9f913577ba59cfb5

In many versions of Emacs the sexp below

  (save-window-excursion (shell) (buffer-name (current-buffer)))

returns "*shell*", but in some recent versions it returns the name of
the current buffer instead.

Let me be more precise. I ran the sexp below in the versions of Emacs
that I have in my machine,

  (list emacs-version
    (save-window-excursion (shell) (buffer-name (current-buffer)))
    )

and collected the outputs, and got:

  ("24.5.1" "*shell*")
  ("25.1.1" "*shell*")
  ("26.3" "*shell*")
  ("27.0.50" "TODO")

Here's the exact version of my "27.0.50". The output of

  PAGER=cat git log -1 --format=format:"%H%n%cd%n"

was:

  01ea96b5548a80e6aabc69428439113ce0a8c17e
  Mon Oct 14 08:47:02 2019 +0200

I don't know (yet) how to bisect versions to find exactly when the
behavior changed, sorry... btw, this is a Debian box (on amd64).

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/#eev






#####
#
# substitute-command-keys
# 2019oct16
#
#####

# «substitute-command-keys» (to ".substitute-command-keys")
# (find-eev "eev-blinks.el" "find-einternals")
# (find-eev "eev-blinks.el" "find-einternals" "substitute-command-keys")
# (find-efunction 'find-esubstitutecommandkeys)
# (find-elnode "Index" "* substitute-command-keys:")
# (find-egrep "zgrep --color -nH -e substitute-command-keys *.el* */*.el*")

# (find-elnode "Accessing Documentation")
# (find-eevfile "eev-mode.el" "(defvar eev-mode-help")

# (find-esubstitutecommandkeys eev-mode-help)
# (find-efunctiondescr 'eev-mode)
# (symbol-plist        'eev-mode)
# (find-efunction 'describe-function)
# (find-efunction 'describe-function "help-setup-xref")
# (find-efunction 'describe-function-1)
# (find-efunction 'describe-function-1 "alias for")
# (find-efunction 'describe-function-1 "help-xref-button")
# (find-efunction 'describe-function-1 "Make a hyperlink to the library")
# (find-efunction 'describe-function-1 "(let* ((doc-raw")
# (find-estring (documentation 'eev-mode))
# (find-estring (documentation 'eev-mode 'raw))




#####
#
# documentation
# 2019oct16
#
#####

# «documentation» (to ".documentation")
# (find-elnode "Accessing Documentation")
# (find-elnode "Index" "* documentation:")
# (find-efunction 'find-esubstitutecommandkeys)



#####
#
# plists and alists
# 2021nov27
#
#####

# «plists-and-alists»  (to ".plists-and-alists")
# (find-elnode "Association Lists")
# (find-elnode "Property Lists")
# (find-elnode "Plists and Alists")
# (find-eev "eev-videolinks.el" "ee-1stclassvideos-field" "assoc")
# (find-eev "eev-videolinks.el" "ee-1stclassvideos-field" "plist-get")
# (find-eshortdoc 'list "Association Lists")
# (find-eshortdoc 'list "Property Lists")

(plist-get '(a 1 b 2 c 3) 'b)


(assoc "b" '(("a" . 1) ("b" . 2)))
  ;;-> ("b" . 2)
(rassoc "b" '((1 . "a") (2 . "b")))
  ;;-> (2 . "b")
(assq 'b '((a . 1) (b . 2)))
  ;;-> (b . 2)


(rassq key alist)
  Return non-nil if KEY is eq to the cdr of an element of ALIST.
  (rassq 'b '((1 . a) (2 . b)))
    Ò (2 . b)


(assoc-string key list &optional case-fold)
  Like assoc but specifically for strings (and symbols).
  (assoc-string "foo" '(("a" 1) (foo 2)))
    Ò (foo 2)


(alist-get key alist &optional default remove testfn)
  Find the first element of ALIST whose car equals KEY and return its cdr.
  (alist-get 2 '((1 . a) (2 . b)))
    Ò b


(assoc-default key alist &optional test default)
  Find object KEY in a pseudo-alist ALIST.
  (assoc-default 2 '((1 . a) (2 . b) #'=))
    Ò b


(copy-alist alist)
  Return a copy of ALIST.
  (copy-alist '((1 . a) (2 . b)))
    Ò ((1 . a) (2 . b))


(assoc-delete-all key alist &optional test)
  Delete from ALIST all elements whose car is KEY.
  (assoc-delete-all "b" (list '("a" . a) '("b" . b) '("b" . c)))
    Ò (("a" . a))


(assq-delete-all key alist)
  Delete from ALIST all elements whose car is eq to KEY.
  (assq-delete-all 2 (list '(1 . a) '(2 . b) '(2 . c)))
    Ò ((1 . a))


(rassq-delete-all value alist)
  Delete from ALIST all elements whose cdr is eq to VALUE.
  (rassq-delete-all 'b (list '(1 . a) '(2 . b) '(2 . c)))
    Ò ((1 . a) (2 . c))





#####
#
# minor-mode-map-alist
# 2019oct16
#
#####

# «minor-mode-map-alist» (to ".minor-mode-map-alist")
# (find-efunction 'ee-minor-mode-keymap)
# (find-efunction 'ee-minor-mode-keymap "minor-mode-map-alist")

# (find-elnode "Index" "* minor-mode-alist:")
# (find-elnode "Index" "* minor-mode-list:")
# (find-elnode "Index" "* minor-mode-map-alist:")
# (find-evardescr 'minor-mode-list)

# (find-evardescr       'minor-mode-map-alist)
# (find-epp              minor-mode-map-alist)
# (find-epp (mapcar 'car minor-mode-map-alist))




#####
#
# spacemacs
# 2019oct23
#
#####

# «spacemacs» (to ".spacemacs")
# http://spacemacs.org/doc/QUICK_START.html

# https://github.com/syl20bnr/spacemacs/issues/4850 Allow users of Emacs to play with Spacemacs without touching their configuration #4850
# https://www.reddit.com/r/spacemacs/comments/88poow/how_can_i_run_spacemacs_and_emacs_side_by_side/




#####
#
# blink-cursor-mode
# 2019oct24
#
#####

# «blink-cursor-mode» (to ".blink-cursor-mode")
# (find-efunctiondescr 'blink-cursor-mode)
# (find-efunction 'blink-cursor-mode)
# (find-evardescr 'blink-cursor-blinks)
# (find-evariable 'blink-cursor-blinks)
# (setq blink-cursor-blinks 10)
# (setq blink-cursor-blinks 5)
# (find-enode "Command Index" "* blink-cursor-mode:")
# (find-elnode "Cursor Parameters")
# (find-evardescr 'cursor-type)

(setq cursor-type nil)
(setq cursor-type t)




#####
#
# display-buffer-alist
# 2019oct29
#
#####

# «display-buffer-alist» (to ".display-buffer-alist")
# «same-window-prefix»  (to ".same-window-prefix")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-10/msg02063.html
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/index.html d-b-o-a
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/msg00346.html answer
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/msg00349.html answer with #'
# (find-evardescr 'display-buffer-alist)
# (find-evariable 'display-buffer-alist)
# (find-elnode "Index" "* display-buffer-alist:")

# (find-evardescr        'display-buffer-alist)
# (find-evariable        'display-buffer-alist)
# (find-elnode "Index" "* display-buffer-alist:")
# (find-evardescr        'display-buffer-overriding-action)
# (find-evariable        'display-buffer-overriding-action)
# (find-elnode "Index" "* display-buffer-overriding-action:")
# (find-elnode "Choosing Window")
# (find-elnode "Choosing Window" "Variable: display-buffer-overriding-action")
# (find-elnode "The Zen of Buffer Display")

# (find-eev "eev-plinks.el" "find-osm")
# (find-eev "eev-plinks.el" "find-osm" "(same-window-prefix)")
# (find-efunctiondescr 'same-window-prefix)
# (find-efunction      'same-window-prefix)

(let ((display-buffer-alist '((".*" . nil))))
  (find-osm -22.5014 -41.9259 15 "Casa"))

(let ((display-buffer-alist '((t . nil))))
  (find-osm -22.5014 -41.9259 15 "Casa"))

https://www.youtube.com/watch?v=rjOhJMbA-q0



Hi Emanuel,

I found a way to adapt your idea to
`display-buffer-overriding-action'. These two sexps make osm.el use
the current window:

  (let ((display-buffer-alist '((".*" display-buffer-same-window))))
    (osm-goto -22.5013 -41.9259 15))

  (let ((display-buffer-overriding-action '(display-buffer-same-window)))
    (osm-goto -22.5013 -41.9259 15))

This is not a universal solution. It doesn't work for man, for
example... See:

  (describe-variable 'Man-notify-method)
  (find-evardescr 'Man-notify-method "when manpage is ready")
  (find-evardescr 'Man-notify-method "pushy" "current window")

Try:

  (let ((display-buffer-alist '((".*" display-buffer-same-window))))
    (man "cat"))

  (let ((display-buffer-overriding-action '(display-buffer-same-window)))
    (man "cat"))

  (let ((Man-notify-method 'pushy))
    (man "cat"))

Cheers,
  Eduardo =)
  http://angg.twu.net/#eev





#####
#
# display-buffer-overriding-action
# 2022mar16
#
#####

# «display-buffer-o-a»  (to ".display-buffer-o-a")
# (find-egrep "grep --color=auto -nH -e display-buffer-overriding-action *.el */*.el")

Hi all,

how do I set `display-buffer-overriding-action' in a let to make
`pop-to-buffer' use the current window? The docs are here,

  (info "(elisp)Choosing Window")
  (info "(elisp)The Zen of Buffer Display")

but I'm probably misreading something over and over, because I've done
lots of tests and I can't get it right...

Here's a concrete example. The package "osm" is new in ELPA, and is an
OpenStreetMap viewer for Emacs. Suppose that we define this:


  (setq USETHISWINDOW nil)

  (defun find-osm (lat lon zoom &rest comments)
  "Open a map. LAT, LON and ZOOM are the latitude, longitude, and zoom factor.
  The COMMENTS are ignored. You need to have osm.el - OpenStreetMap
  viewer - installed for this to work."
    (let ((display-buffer-overriding-action USETHISWINDOW))
      (osm-goto lat lon zoom)))

  ;; Test: (find-osm -22.5 -41.9 15 "Near home")


The function `osm-goto' calls `osm--goto', that calls `pop-to-buffer',
and apparently one of the variables that controls the behavior of
`pop-to-buffer' is `display-buffer-overriding-action'. If we have two
windows open and USETHISWINDOW is nil, then - at least in my setting -
this test

  ;; Test: (find-osm -22.5 -41.9 15 "Near home")

opens the map in the other window. What is the value of USETHISWINDOW
that would mean "always open in the current window"?

  Thanks in advance!
    Eduardo Ochs
    http://angg.twu.net/#eev




#####
#
# piper
# 2019nov02
#
#####

# «piper» (to ".piper")
# https://gitlab.com/howardabrams/emacs-piper
# http://howardism.org/Technical/Emacs/piper-presentation-transcript.html
# http://howardism.org/Technical/Emacs/piper-part-deux.html
# (find-fline "~/LOGS/2019nov02.emacsconf-questions")
# (find-fline "~/LOGS/2019nov01.emacsconf")
# https://docs.racket-lang.org/rash/index.html





#####
#
# rx
# 2019nov02
#
#####

# «rx» (to ".rx")
# (find-angg ".emacs" "bsl")
# https://francismurillo.github.io/2017-03-30-Exploring-Emacs-rx-Macro/
# (find-elnode "Char Classes" ":blank:")
# (find-elnode "Rx Notation")
# (find-elnode "Rx Constructs" "Capture groups")
# (find-elnode "Rx Constructs" "(any SET...)")
# (find-elnode "Rx Constructs" "(intersection CHARSET...)")
# (find-elnode "Extending Rx" "Macro: rx-define")
# (find-elnode "Extending Rx" "Macro: rx-let")
# (find-efile "emacs-lisp/rx.el")
# (find-efile "emacs-lisp/rx.el" "(defmacro rx ")
# (find-efunctiondescr 'rx)

# (find-angg "elisp/cl-glyphs.el")

# (rx bol (opt ";; ") "*" (group (* any)) eol)

;; (find-elnode "Rx Constructs" "(literal EXPR)")
;; (rx (any "[]")          "===="  (any "[]"))
;; (rx (any "[]") (literal "====") (any "[]"))

(defun emlua-badcommentcore (core bigstr)
  (string-match (rx (any "[]") (literal core) (any "[]")) bigstr))

(let ((bigstr "foo [=[==[===["))
  (emlua-badcommentcore "==" bigstr))

(rx (intersection (any "abcdef") (not (any "aeg"))))



#####
#
# rx-group-n
# 2022apr15
#
#####

# «rx-group-n»  (to ".rx-group-n")
# (find-elnode "Rx Constructs" "group-n")
# (find-eev "eev-compose-hash.el" "ee-composes-do")
# https://corwin.bru.st/2021-01-10-overdozing-rx/

(setq ee-re (rx (or (group-n 1 "a")
                    (group-n 2 "b")
                    (group-n 3 "c")
                    (group-n 4 "d")
                    )))
(setq ee-str "cdab")
(progn (string-match ee-re ee-str)
       (list (match-string 0 ee-str)
             (match-string 1 ee-str)
             (match-string 2 ee-str)
             (match-string 3 ee-str)
             (match-string 4 ee-str)))
             
       (match-data))



    (while (string-match ee-composes-regexp4 bigstrspec bigstrspecpos)


(rx (or "a" "b"))
        
 "b"))






#####
#
# xr
# 2021aug01
#
#####

# «xr»  (to ".xr")
# (find-epackage-links 'xr "xr" t)
# (find-epackage       'xr)
# (code-c-d "xr" "~/.emacs.d/elpa/xr-1.21/")
# (find-xrfile "")
# (find-xrfile "README")
# (find-xrfile "xr-test.el")
# (find-epp (xr "\\`\\(?:[^^]\\|\\^\\(?: \\*\\|\\[\\)\\)"))





#####
#
# mpdel - Emacs user interface for Music Player Daemon
# 2019nov02
#
#####

# «mpdel» (to ".mpdel")
# (find-es "sound")
# https://gitea.petton.fr/mpdel/mpdel

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/mpdel/
cd      ~/usrc/
git clone https://gitea.petton.fr/mpdel/mpdel
cd      ~/usrc/mpdel/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/mpdel/")
# (find-gitk  "~/usrc/mpdel/")

# (code-c-d "mpdel" "~/usrc/mpdel/")
# (find-mpdelfile "")

# (find-epackage 'mpdel)
# (require 'mpdel)
# (setq mpdel-prefix-key (kbd "<f7>"))
# (find-fline "/home/torrents/PLACEBO - DISCOGRAPHY (1998-13) [CHANNEL NEO]/[1998] Without You I'm Nothing (Japanese Edition)/")


;; (find-fline    "~/.emacs.d/elpa/mpdel-20190911.632/")
(code-c-d "mpdel" "~/.emacs.d/elpa/mpdel-20190911.632/")
;; (find-mpdelfile "")

https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwDsFXsKcKKCflzjGfHFDvspqzp

mpdel doesn't show folders. Instead, it tracks songs with their ID3
tags. You should make sure your files are tagged properly (you can use
easytag if this is not the case). You can see the current playlist with
`<f7> l` (or just `l` in any mpdel buffer). The playlist always starts
empty and you can add to it with `a` or `p` when in the mpdel
navigator. I suggest you watch the screencast at
https://files.petton.fr/cassou/temp/mpdel.ogv or read the documentation
at https://gitea.petton.fr/mpdel/mpdel.




#####
#
# web-mode
# 2019nov09
#
#####

# «web-mode» (to ".web-mode")
# http://web-mode.org/



#####
#
# eldoc-mode
# 2019nov15
#
#####

# «eldoc-mode» (to ".eldoc-mode")
# https://www.emacswiki.org/emacs/ElDoc
# (find-efunction 'eldoc-mode)
# (find-enode "Lisp Doc" "M-x eldoc-mode")
# (find-enode "Programming Language Doc")
# (find-enode "Programming Language Doc" "M-x eldoc-print-current-symbol-info")
# (find-enode "Programming Language Doc" "M-x eldoc-doc-buffer")
# (find-efunctiondescr 'eldoc-print-current-symbol-info)
# (find-efunction      'eldoc-print-current-symbol-info)
# (defalias 'elpr      'eldoc-print-current-symbol-info)



#####
#
# literate-elisp
# 2019dec20
#
#####

# «literate-elisp» (to ".literate-elisp")
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00394.html original message
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00440.html here stefan points to:
#   https://github.com/jingtaozf/literate-elisp/
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00548.html patches 2019-12-20
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00565.html my message
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00556.html patches 2019-12-21:
#   https://lists.gnu.org/archive/html/emacs-devel/2019-12/txtkIKP0OSag7.txt bytecomp.patch
#   https://lists.gnu.org/archive/html/emacs-devel/2019-12/txttFA8rLAthl.txt lread.patch
#   https://lists.gnu.org/archive/html/emacs-devel/2019-12/txt6f3pEXMWNI.txt chatty.el
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00577.html tim cross: literate prog
# https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00580.html my msg with script

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

# Download the attachments of this message:
#   https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00556.html
# in /tmp/:
cd /tmp/
wget -O bytecomp.patch https://lists.gnu.org/archive/html/emacs-devel/2019-12/txtkIKP0OSag7.txt
wget -O lread.patch    https://lists.gnu.org/archive/html/emacs-devel/2019-12/txttFA8rLAthl.txt
wget -O chatty.el      https://lists.gnu.org/archive/html/emacs-devel/2019-12/txt6f3pEXMWNI.txt

# (find-fline "/tmp/bytecomp.patch")
# (find-fline "/tmp/lread.patch")
# (find-fline "/tmp/chatty.el")
# (find-gitemacssh "find * | sort")
# (find-gitemacsfile "")
# (find-gitemacsfile "src/lread.c")
# (find-gitemacsfile "lisp/emacs-lisp/bytecomp.el")

# Apply the patches in /tmp/:
cd /tmp/
cp -v ~/bigsrc/emacs/src/lread.c                 /tmp/
cp -v ~/bigsrc/emacs/lisp/emacs-lisp/bytecomp.el /tmp/
# (find-man "1 patch")
patch lread.c     lread.patch
patch bytecomp.el bytecomp.patch

# If they applied cleanly, copy the patched files back:
cp -v /tmp/lread.c     ~/bigsrc/emacs/src/lread.c
cp -v /tmp/bytecomp.el ~/bigsrc/emacs/lisp/emacs-lisp/bytecomp.el

# (find-es "git" "emacs-from-git-aug2019")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

# Rebuild Emacs.
# I usually skip some of these steps - my way of executing
# these scripts line by line from Emacs is explained here:
#   http://angg.twu.net/emacsconf2019.html
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html#6

rm -Rfv  ~/bigsrc/emacs/
mkdir -p ~/bigsrc/emacs/
cd       ~/bigsrc/
git clone git://git.sv.gnu.org/emacs

cd       ~/bigsrc/emacs/
time ./autogen.sh   2>&1 | tee oa
time ./configure    2>&1 | tee oc
time make bootstrap 2>&1 | tee omb
time make           2>&1 | tee om




#####
#
# windower
# 2019dec21
#
#####

# «windower» (to ".windower")
# (find-epackages "\n  windower ")
# (find-epackage 'windower)
# (find-elpafile "windower-readme.txt")
# (find-elpafile "windower-0.0.1/")
# https://gitlab.com/ambrevar/emacs-windower



#####
#
# How print-length and print-level control the "..."s in sexps
# 2019dec26
#
#####

# «ellipsis» (to ".ellipsis")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-12/msg01029.html
# (find-enode "Variable Index" "* eval-expression-print-level:")
# (find-enode "Variable Index" "* eval-expression-print-length:")
# (find-elnode "Index" "* print-length:")
# (find-elnode "Index" "* print-level:")
# (find-egrep "grep --color -nH --null -e print-level *.el */*.el")




#####
#
# Problem compiling Emacs24 on Debian 10 (a.k.a. Debian Buster)
# 2020jan02
#
#####

# «emacs24-on-buster» (to ".emacs24-on-buster")
# (find-es "git" "emacs24-from-git")
# (find-fline "~/LOGS/2020jan01.emacs")
# https://mail.google.com/mail/ca/u/0/#sent/KtbxLvgstsKFNNXDPWpDWKFBQNgWhfdvxV
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwGCbFkWsNQGZTLGflJxRsRtLKm
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgxwGCbFkWsNQFTVFpNTCHWcmlcpn [email protected]
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-01/msg00047.html my bug report



#####
#
# eval-progn-local-config
# 2020mar17
#
#####

# «eval-progn-local-config» (to ".eval-progn-local-config")

Of course, you can use a short

    eval: (progn (re-search-backward "^(progn ;;local-config") (eval (read (current-buffer))))

and then put an arbitrarily long Elisp chunk anywhere else in the buffer
with a leading `(progn ;;local-config`.




#####
#
# GNU Emacs Lisp Bytecode Reference Manual
# 2020mar19
#
#####

# «elisp-bytecode» (to ".elisp-bytecode")
# http://rocky.github.io/elisp-bytecode.pdf
# http://rocky.github.io/
# https://rocky.github.io/NYC-Emacs-April-2018/#/
# https://github.com/rocky
# https://github.com/rocky/elisp-bytecode
# https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00447.html

(code-pdf-page "elispbytecode" "$S/http/rocky.github.io/elisp-bytecode.pdf")
(code-pdf-text "elispbytecode" "$S/http/rocky.github.io/elisp-bytecode.pdf")
;; (find-elispbytecodepage)
;; (find-elispbytecodetext)




#####
#
# tree-sitter
# 2020mar28
#
#####

# «tree-sitter» (to ".tree-sitter")
# (find-es "treesit")
# https://tree-sitter.github.io/tree-sitter/
#  http://www.youtube.com/watch?v=Jes3bD6P0To "Tree-sitter - a new parsing system for programming tools" by Max Brunsfeld
#  http://www.youtube.com/watch?v=a1rC79DHpmY Tree-sitter: a new parsing system for programming tools - GitHub Universe 2017
# https://github.com/karlotness/tree-sitter.el (less active)
# https://github.com/ubolonton/emacs-tree-sitter (more active)

https://git.savannah.gnu.org/cgit/emacs.git/tree/admin/notes/tree-sitter/starter-guide

# (find-sh "locate treesit")
# (find-sh "locate tree-sit")
# (find-efile "treesit.el")
# (find-fline "~/bigsrc/emacs30/src/treesit.c")
# (find-fline "~/bigsrc/emacs30/admin/notes/tree-sitter/")

<aspiers[m]> https://www.youtube.com/watch?v=Jes3bD6P0To is an old
             but awesome intro to how tree-sitter works (unrelated
             to emacs)

https://archive.casouri.cat/note/2021/emacs-tree-sitter/index.html

https://github.com/pedz/ruby-ts-mode/blob/master/ruby-ts-mode.el#L32




# (find-egrep "grep --color=auto -nH --null -e treesit-parser-list *.el */*.el")
# https://lists.gnu.org/archive/html/emacs-devel/2022-12/msg00812.html
# https://mail.google.com/mail/u/0/#sent/QgrcJHsBtPbSsVksvPtqwLvzzfpQZQVNDCg

`M-q' uses tree-sitter now?
Hi list,

I am running an Emacs30 that I git-pulled and compiled a few hours ago
- its emacs-repository-version is 

  "5a344d90c53d681ed98ab03ad3e218a3c6561108"

and I noticed that if I type `M-q' (`fill-paragraph') in a buffer in
emacs-lisp-mode I get this error:

  prog-fill-reindent-defun: Symbol's function definition is void:
  treesit-parser-list

I grepped the Lisp sources and `treesit-parser-list' is only mentioned
in two files: "treesit.el" and "progmodes/prog-mode.el". I tried

  (require 'prog-mode)
  (require 'treesit)

and `M-q' to see if the error would go away... but nah, same thing.
So I thought that this would be worth reporting.

  Cheers =/,
    Eduardo Ochs
    http://angg.twu.net/eepitch.html





         (if emacs-repository-version





#####
#
# zones and narrow-indirect
# 2020apr13
#
#####

# «zones» (to ".zones")
# https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00611.html
# https://www.emacswiki.org/emacs/download/zones.el
# (find-epackage 'zones)
#
# https://www.emacswiki.org/emacs/download/narrow-indirect.el

https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00642.html

I think the reasons were discussed in
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35419 and popped up
several times in internet:

- https://github.com/alphapapa/transclusion-in-emacs/
- https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00863.html
- https://www.reddit.com/r/orgmode/comments/fimdf7/nesting_many_org_source_files_into_the_same_window/

https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation

https://www.emacswiki.org/emacs/Zones
https://www.emacswiki.org/emacs/MultipleNarrowings

https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00375.html Buffers with buffers (transclusion)
https://github.com/alphapapa/transclusion-in-emacs





#####
#
# transient-mark-mode
# 2020sep15
#
#####

# «transient-mark-mode»  (to ".transient-mark-mode")
# (find-angg ".emacs" "deact")
# (find-enode "Disabled Transient Mark")
# (find-elongkey-links "C-SPC  ;; set-mark-command")
# (find-efunction 'transient-mark-mode)
# (find-efunction 'indicate-copied-region)
# (find-elgrep "grep --color -nRH --null -e transient *.el */*.el")
# (find-elgrep "grep --color -nRH --null -e transient *.el */*.el | grep -a defun")
# (find-elgrep "grep --color -nRH --null -e deactivate *.el */*.el")
# (find-elnode "Index" "* deactivate-mark:")
# (find-efunction 'deactivate-mark)

# (find-enode "Disabled Transient Mark")

(defun deact () (interactive) (deactivate-mark 'force))
(defun dm () (interactive) (deactivate-mark 'force))

(eek "4*<up> C-SPC 4*<down>")
(eek "4*<up> C-SPC 4*<down> <<deact>>")
(eek "4*<up> C-SPC 4*<down> M-x deact")




#####
#
# transient
# 2020may01
#
#####

# «transient» (to ".transient")
# https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01829.html
# https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg01120.html C-x o
# (find-epackage-links 'transient)
# (find-epackage       'transient)
# (code-c-d "transient" "~/.emacs.d/elpa/transient-20210117.2008/")
# (find-transientfile "")
# (find-node "(transient)Top")
# (find-node "(transient)Binding Suffix and Infix Commands")
# https://github.com/magit/transient
# https://magit.vc/manual/transient
# https://magit.vc/manual/transient/Defining-Transients.html
# https://emacsair.me/2019/02/14/transient-0.1/
# https://www.youtube.com/watch?v=NDP91RNgT4A&t=180
# https://www.reddit.com/r/emacs/comments/m518xh/transient_api_example_alternative_bindings_part_1/

(require 'transient)
# (find-efunctiondescr 'set-transient-map)
# (find-efunction      'set-transient-map)
# (find-efunctiondescr 'transient-define-prefix)
# (find-efunction      'transient-define-prefix)

# (find-epackage-links 'magit t)
# (code-c-d "magit" "~/.emacs.d/elpa/magit-20210213.1131/")
# (find-magitfile "")
# (find-magitgrep "grep --color -nH --null -e transient-define-prefix *.el")
# (find-magitfile "magit-ediff.el" "(transient-define-prefix magit-ediff ")
# (find-magitfile "magit-files.el" "(transient-define-prefix magit-file-dispatch ")
# (find-magitfile "magit-margin.el" "(transient-define-prefix magit-margin-settings ")
# (find-magitfile "magit-patch.el" "(transient-define-prefix magit-patch ")
# (find-magitfile "magit-remote.el" "(transient-define-prefix magit-remote ")
# (find-magitfile "magit-reset.el" "(transient-define-prefix magit-reset ")
# (find-magitfile "magit-stash.el" "(transient-define-prefix magit-stash ")
# (find-magitfile "magit-submodule.el" "(transient-define-prefix magit-submodule ")
# (find-magitfile "magit-subtree.el" "(transient-define-prefix magit-subtree ")
# (find-magitfile "magit-worktree.el" "(transient-define-prefix magit-worktree ")
# (find-magitfile "magit.el" "(transient-define-prefix magit-run ")

(find-epp (macroexpand '
  (transient-define-prefix magit-subtree ()
    "Import or export subtrees."
    :man-page "git-subtree"
    ["Actions"
     ("i" "Import" magit-subtree-import)
     ("e" "Export" magit-subtree-export)])
  ))

(find-epp (macroexpand '

(transient-define-prefix my-foo ()
  ["Actions"
   ;; ("i" "Import" (insert "III"))
   ("i" "Import" my-foo-III)
   ("e" "Export" magit-subtree-export)])

  ))

(defun my-foo-III () (insert "III"))

(my-foo)



# «transient-mail-2021feb27»  (to ".transient-mail-2021feb27")
# https://mail.google.com/mail/ca/u/0/#sent/QgrcJHsHrSdqMTdFBhSsgtnQvhTkvVblMml

Examples of transients?

Hi Jonas,

I am trying to learn how to use transients, but I am a bit lost... I
spent the last hours trying to understand the simplest calls to
`transient-define-prefix' in the source of magit, both by
pretty-printing the result of `macroexpand'-ing them and by running
them, but I still don't have any idea of how to do what I want...

A few weeks ago I saw this post in emacs-devel,

  https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg01120.html

and at first I thought that it used the transient package - only after
some time I realized that it uses `set-transient-map', that is from
subr.el... but then I (wildly) guessed that transient could do what
`set-transient-map' does, plus a lot more.

Do you have links to pages with tutorials and examples of usage of
transient? What I am trying to do - in prototype form - is this.
Suppose that I have

  (defun foo-a () (interactive) (insert "AAA"))
  (defun foo-b () (interactive) (insert "BBB"))
  (defun foo-c () (interactive) (insert "CCC"))
  (defun foo-d () (interactive) (insert "DDD"))

How do I define a transient that would run `foo-a' when the user types
an "a", `foo-b' when the user types a "b", and the same for "c"s and
"d"s, letting the user type as many as, bs, cs, and ds as he wants -
running these functions - until the user types a `C-g' or a RET to
leave this transient? Is it possible to do that? Is it trivial? Is it
similar to something in magit that I missed?...

  Cheers and thanks in advance!
  Eduardo Ochs
    http://angg.twu.net/#eev
    http://angg.twu.net/emacsconf2020.html
    http://angg.twu.net/eev-intros/find-git-intro.html (*)


(*): I am a very basic user of Magit at this moment - the
intro/call-for-help in (*) is an attempt to write a new tutorial for
git and magit in a new form. A demo of transient would be a nice
addition to it...

P.S.: I did take a look at
<https://github.com/magit/transient/issues/51>. Should I post this
question there?





;; https://github.com/magit/transient/issues/51#issuecomment-786237054

(defun bjc/beginning-of-buffer () "bob" (interactive) (goto-char (point-min)))
(defun bjc/end-of-buffer       () "eob" (interactive) (goto-char (point-max)))

(transient-define-prefix bjc/test-transient-prefix
  "Test some weird transient behavior."
  ["Buffer movement"
   ("B" "beginning of buffer" bjc/beginning-of-buffer)
   ("E" "end of buffer" bjc/end-of-buffer)]
  ["Character movement"
   ("f" "forward char" forward-char)
   ("b" "backward char" backward-char)])

(local-set-key (kbd "C-c t") 'bjc/test-transient-prefix)



#####
#
# transient-dwim
# 2022apr10
#
#####

# «transient-dwim»  (to ".transient-dwim")
# https://github.com/conao3/transient-dwim.el
# (find-fline "~/LOGS/2022apr10.emacs" "transient-dwim.el")





#####
#
# dash
# 2020may09
#
#####

# «dash» (to ".dash")
# (find-eev-intro "4. The prefix `find-'")
# (find-epackage-links 'dash "dash" t)
# (find-epackage       'dash)
# (code-c-d "dash" "~/.emacs.d/elpa/dash-20240103.1301/" "dash")
# https://www.reddit.com/r/emacs/comments/1cncbe2/do_you_react_when_a_package_depends_on_dash_why/
# https://git.sr.ht/~tarsius/llama
# https://git.sr.ht/~fosskers/transducers.el

# (find-dashfile "")
# (find-dashnode "")
# (find-dashnode "Functions")
# (find-dashnode "Reductions")
# (find-dashnode "Info symbol lookup")
# (find-dashnode "Partitioning" "-partition-in-steps")
# (find-dashnode "Partitioning" "-partition-all-in-steps")

# https://github.com/magnars/dash.el
# https://github.com/magnars/dash.el#functions

# (find-eppp (mapcar 'car load-history))
# (find-eppp (-map 'car load-history))

(require 'dash)

(let* ((lh-eevs (--filter (string-match "eev" (car it)) load-history))
       (a (nth 7 lh-eevs))
       (b (cdr a))
       (c (--filter (and (consp it) (eq (car it) 'defun)) b))
       )
  ;; (find-epp lh-eevs)
  (setq A a)
  ;; (find-epp a)
  (find-epp c)
  )


(find-epp A)
(find-epp (cdr A))
(find-epp (cdr A))


(let* ((input '(1 2 3 4 5 6 7 8 9 10))
      )
  (--filter (< 5 it) input))


match-string
replace-regexp-in-string

# (find-elnode "Index" "* replace-regexp-in-string:")
# (find-elnode "Index" "* string-match:")


(find-epp (car load-history))





# https://github.com/magnars/s.el
# https://github.com/magnars/s.el#functions
# (find-epackage-links "s")
# (code-c-d "s" "~/.emacs.d/elpa/s-20180406.808/")
# (find-sfile "")
# (find-sfile "s.el")
# (find-elnode "Declare Form")

# (find-epackage-links "seq")
# (find-efile "emacs-lisp/seq.el")




#####
#
# dash-functional
# 2020oct12
#
#####

# «dash-functional»  (to ".dash-functional")
# (find-epackage-links 'dash-functional)
# (find-epackage       'dash-functional)
# (code-c-d "dashfunctional" "~/.emacs.d/elpa/dash-functional-20200617.702/")
# (find-dashfunctionalfile "")



#####
#
# help-at-pt
# 2020may09
#
#####

# «help-at-pt» (to ".help-at-pt")
# (find-efile "help-at-pt.el")
# (find-efunction 'display-local-help)

# (find-efunction 'tooltip-mode)
# (find-efile "tooltip.el")




#####
#
# emacsrocks
# 2021dec19
#
#####

# «emacsrocks»  (to ".emacsrocks")
# http://emacsrocks.com/



#####
#
# multiple-cursors
# 2020may13
#
#####

# «multiple-cursors» (to ".multiple-cursors")
# https://github.com/magnars/multiple-cursors.el
# http://emacsrocks.com/e13.html




#####
#
# command-log-mode
# 2020may16
#
#####

# «command-log-mode» (to ".command-log-mode")
# (find-git-links "https://github.com/lewang/command-log-mode" "commandlogmode")
# (find-epackage 'command-log-mode)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/command-log-mode/
cd      ~/usrc/
git clone https://github.com/lewang/command-log-mode
cd      ~/usrc/command-log-mode/

# (find-fline "~/usrc/")
# (find-fline "~/usrc/command-log-mode/")
# (find-gitk  "~/usrc/command-log-mode/")

# (code-c-d "commandlogmode" "~/usrc/command-log-mode/")
# (find-commandlogmodefile "")
# (find-commandlogmodefile "command-log-mode.el")




#####
#
# short-lambda-and-dollar
# 2020may16
#
#####

# «short-lambda-and-dollar» (to ".short-lambda-and-dollar")
# https://github.com/abo-abo/short-lambda
# https://github.com/cadadr/elisp/blob/devel/dollar.el



#####
#
# To quit a partially entered command, type Control-g.
# 2020may28
#
#####

# «startup-screen-C-g» (to ".startup-screen-C-g")
# (find-egrep "zgrep --color -nH -e 'To quit a partially entered command' *.el */*.el")
# (find-efunction 'normal-mouse-startup-screen)
# (find-efunction 'fancy-startup-tail)
# (find-efunction 'fancy-startup-screen)
# (fancy-startup-screen)
# (info "(emacs)Quitting")
# (find-enode "Quitting")
# https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg03262.html my message
# https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg03263.html Drew Adams
# https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg03274.html get out

Maybe we should experiment with changing the line in the startup
screen that says

  To quit a partially entered command, type Control-g.

to make it also mention <ESC> <ESC> <ESC>, and also add links to these
nodes of the Emacs Manual...

  (info "(emacs)Quitting")
  (info "(emacs)Basic Undo")

I just noticed that I don't know where the manual explains that Emacs
makes very hard for users to lose files or text with a single wrong
keystroke.  When I learned GNU/Linux it was somehow obvious that an
editor that allowed that would be considered very rude - but I checked
the definiton of "rude" in the Jargon Dictionary with "dict rude" and
it says just this:

  rude
   adj.

      1. (of a program) Badly written.

      2. Functionally poor, e.g., a program that is very difficult to
      use because of gratuitously poor (random?) design decisions.
      Oppose {cuspy}.

      3. Anything that manipulates a shared resource without regard
      for its other users in such a way as to cause a (non-fatal)
      problem. Examples: programs that change tty modes without
      resetting them on exit, or windowing programs that keep forcing
      themselves to the top of the window stack.

which means that I'm misremembering things.

Here's one easy way (untested!) to experiment with that. If you live
with someone who is learning Emacs, change the function
`fancy-startup-tail' in the file startup.el in the person's computer
and explain to her that you are trying to get a better startup screen
and would like her to test it, stick a post-it to her screen or table
or whatever that says "M-x fancy-startup-screen", and tell her to go
back to the modified startup screen whenever she's lost.

I can't test that because of the quarantine and because I live alone
with Doggy.

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/emacsconf2019.html


On Thu, 28 May 2020 at 01:13, Karl Fogel <[email protected]> wrote:
>
> Sometimes they know that, but it's still stressful for them to have
> to do it. �They don't like the sensation of getting into state
> they don't understand, and then having to type a magical quit-key to
> get out of that state. �It makes them apprehensive about even
> using the editor -- they feel like they got bitten.
>
> (...)
>
> I don't think the issue is ignorance about C-g. �It's that people
> have a relationship with software interfaces in which they're not
> accustomed to being bitten. �Even when the bite draws no blood,
> they still don't like the feeling.
>
> I can see directly that they don't like the feeling, that it's
> upsetting to them. �I conjecture that part of the reason is that
> even if they quickly ascertain that everything's all right this
> time, they still have a (rational) fear that the next time the bite
> might actually cause harm -- e.g., that maybe they'll lose a file,
> or accidentally rename something, or that edits that they don't know
> about will be accidentally made somewhere.
>
> I haven't actually asked new users if that's their worry, but on the
> now-rare occasions when Emacs bites me, I worry about such things.
> �Also, I've been using Emacs long enough to know that most likely
> nothing harmful happened, and that if I patiently unwind the state
> I'll be able to figure it all out. �A newcomer does not have that
> comfort at first, and they can only acquire it through sustained
> exposure to the editor.






#####
#
# REmacs
# 2020jun08
#
#####

# «remacs» (to ".remacs")
# https://github.com/remacs/remacs



#####
#
# e2wm
# 2020jul28
#
#####

# «e2wm»  (to ".e2wm")
# https://github.com/kiwanami/Emacs-window-manager
# https://ardiyu07.github.io/blog/2014/02/05/en-coding-with-emacs-and-e2wm-brilliant/




#####
#
# doom-emacs
# 2020sep09
#
#####

# «doom-emacs»  (to ".doom-emacs")
# (find-es "doom" "test-doom-2")
#
# https://github.com/hlissner/doom-emacs
# https://github.com/hlissner/doom-emacs/blob/develop/docs/faq.org
# https://github.com/hlissner/doom-emacs/blob/develop/modules/editor/evil/README.org
# https://github.com/hlissner/doom-emacs/blob/develop/modules/editor/evil/README.org#removing-evil-mode
#
# git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d
# ~/.emacs.d/bin/doom install

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/doom-emacs/
cd      ~/usrc/
git clone https://github.com/hlissner/doom-emacs
cd      ~/usrc/doom-emacs/

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/doom-emacs/")
# (find-gitk  "~/usrc/doom-emacs/")

# (code-c-d "doomemacs" "~/usrc/doom-emacs/")
# (find-doomemacsfile "")
# (find-doomemacsfile "docs/faq.org")
# (find-doomemacsfile "modules/lang/lua/")
# (find-doomemacsfile "bin/doom")

https://github.com/hlissner/emacs-doom-themes
https://github.com/hlissner/emacs-doom-themes/blob/d6ee47dc8ed2cf9e585f62243214af03ba5b1687/doom-themes.el#L395
https://github.com/hlissner/emacs-doom-themes/blob/master/doom-themes-base.el
https://github.com/hlissner/emacs-doom-themes/blob/master/themes/doom-one-theme.el

# (find-fline "~/.emacs-doom/")
# (code-c-d "doom" "~/.emacs-doom/")
# (find-doomfile "")




#####
#
# Doom Emacs: attempt 1
# 2020oct24
#
#####

# «doom-emacs-1»  (to ".doom-emacs-1")
# (find-es "doom" "test-doom-2")

# Generate an envvar file? (see `doom help env` for details) (y or n) n

# Download and install all-the-icon's fonts? (y or n) n
# Finished! Doom is ready to go!
# But before you doom yourself, here are some things you should know:
#
# 1. Don't forget to run 'doom sync', then restart Emacs, after modifying
#    ~/.doom.d/init.el or ~/.doom.d/packages.el.
#
#    This command ensures needed packages are installed, orphaned packages are
#    removed, and your autoloads/cache files are up to date. When in doubt, run
#    'doom sync'!
#
# 2. If something goes wrong, run `doom doctor`. It diagnoses common issues with
#    your environment and setup, and may offer clues about what is wrong.
#
# 3. Use 'doom upgrade' to update Doom. Doing it any other way will require
#    additional steps. Run 'doom help upgrade' to understand those extra steps.
#
# 4. Access Doom's documentation from within Emacs via 'SPC h d h' or 'C-h d h'
#    (or 'M-x doom/help')
#
# Have fun!
# Finished in 302.5796s

Error in Doom Emacs core: The installed version of Emacs has changed since last 'doom sync' ran, Run 'doom sync && doom build' to bring Doom up to speed


# (find-file "~/.doom.d/")
# (find-file "~/.config/" "doom")
# (find-fline "~/.doom.d/init.el" "doom-dashboard")
# (find-fline "~/.doom.d/init.el" "modeline")
# (find-fline "~/.doom.d/init.el" "(evil +everywhere)")




#####
#
# Yuan Fu's beginner-guide.el
# 2020sep10
#
#####

# «yuan-fu-beginner-guide»  (to ".yuan-fu-beginner-guide")
# https://lists.gnu.org/archive/html/emacs-devel/2020-09/msg00340.html idea
# https://lists.gnu.org/archive/html/emacs-devel/2020-09/msg00600.html code and demo

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
rm -v beginner-guide.el
wget -nc -O beginner-guide.el https://lists.gnu.org/archive/html/emacs-devel/2020-09/binFV2yiF4TcA.bin

# (find-fline "/tmp/beginner-guide.el")




#####
#
# widget
# 2020sep15
#
#####

# «widget»  (to ".widget")
# (find-node "(widget)Top")
# (find-node "(widget)Introduction")
# (find-node "(widget)Setting Up the Buffer")
# (find-node "(widget)Programming Example")
# (find-node "(widget)Programming Example" "(defun widget-example ")
# (find-node "(widget)Programming Example" 8)
# (find-node "(widget)Programming Example" 8 '(eek "C-SPC M->"))
# (find-node "(widget)Programming Example" 8 '(eek "C-SPC M-> M-x deact"))
# (find-node "(widget)Programming Example" 8 '(eek "C-SPC M-> M-x eval-region"))
# (find-2b nil '(widget-example))

# (find-elnode "Abstract Display" "Ewoc" "Widget for Object Collections")




#####
#
# cvs-mode
# 2020sep29
#
#####

# «cvs-mode»  (to ".cvs-mode")
# https://en.wikipedia.org/wiki/Comma-separated_values
# (find-epackage-links 'csv-mode)
# (find-epackage 'csv-mode)
# (find-elpafile "csv-mode-readme.txt")
# (find-elpafile "csv-mode-1.12/")
# (code-c-d "csvmode" "~/.emacs.d/elpa/csv-mode-1.12/")
# (find-csvmodefile "")




#####
#
# project.el
# 2020sep29
#
#####

# «project.el»  (to ".project.el")
# https://www.manueluberti.eu/emacs/2020/09/18/project/
# https://elpa.gnu.org/packages/project.html
# (require 'project)
# (find-efunctiondescr 'project-find-file)
# (find-efunction      'project-find-file)
# (find-efile "progmodes/project.el")




#####
#
# call-process-region
# 2022jul30
#
#####

# «call-process-region»  (to ".call-process-region")
# «shell-command-on-region»  (to ".shell-command-on-region")
# (find-efunction 'shell-command-on-region)
# (find-eapropos  "shell-command")
# (find-efunction 'call-process-shell-command)
# (find-efunctiondescr 'call-process-region)
# (find-eapropos "^with-.*buffer")
# (find-eapropos "^buffer-")

(with-temp-buffer
  (call-process-region "a\nbb\nccc\n" nil "tac" nil t)
  (buffer-string))

;; (find-books "__comp/__comp.el" "graham-common-lisp")
(find-es "lisp" "with-output-to-string")

(with-temp-buffer (call-process-region "a\nbb\nccc\n" nil "tac" nil t) (buffer-string))

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(help)



#####
#
# shell-command+
# 2020sep29
#
#####

# «shell-command+»  (to ".shell-command+")
# (find-epackage-links "shell-command+")
# (find-epackage 'shell-command+)

# (find-efunction      'describe-package)
# (find-efunction      'describe-package-1)
# (find-efunctiondescr 'package-desc-dir)
# (find-efunctiond     'package-desc-dir)
# (find-efile "emacs-lisp/package.el" "make-package-desc")





#####
#
# quelpa
# 2020oct02
#
#####

# «quelpa»  (to ".quelpa")
# https://github.com/quelpa/quelpa



#####
#
# svg
# 2020oct20 / 2022mar31
#
#####

# «svg»  (to ".svg")
# (find-epackage-links 'svg "svg" t)
# (find-epackage       'svg)
# (code-c-d "svg" "~/.emacs.d/elpa/svg-1.1/")
# (find-svgfile "")
# (find-elpafile "svg-readme.txt")
# (find-efunctiondescr 'dom-node)
# (find-efunction      'dom-node)
# (find-efile          "dom.el")
# (find-efile          "svg.el")

(setq svg (svg-create 520 520 :stroke "orange" :stroke-width 5))
(setq svg (svg-create 200 200 :stroke "orange" :stroke-width 5))
(find-svgbuffers "*svg*" svg "stroke")
(svg-rectangle svg 100 100 500 500 :gradient "gradient" :id "rec1")
(svg-circle    svg 20 30 40 :id "circle1")
(svg-circle    svg 60 50 40 :id "circle1")
(svg-ellipse   svg 100 100 50 90 :stroke "red" :id "ellipse1")


(require 'svg)
(setq svg (svg-create 201 101))
(find-svgbuffers "*svg*" svg)
(svg-gradient svg "gradient1" 'linear '((0 . "red") (25 . "green") (100 . "blue")))
(svg-circle svg 50 50 50 :gradient "gradient1")
(svg-gradient svg "gradient2" 'linear '((0 . "red") (100 . "blue")))
(svg-circle svg 100 50 50 :gradient "gradient2")


(svg-gradient svg "gradient" 'linear '(0 . "red") '(100 . "blue"))
(svg-gradient svg "gradient" 'linear '((0 . "red") (100 . "blue")))
(svg-gradient svg "gradient" 'linear '((0 "red") (100 "blue")))

(find-3a nil '(find-epp svg) '(find-svgbuffer "*svg*" svg))

(find-2a nil '(progn (find-ebuffer "svg") (svg-insert-image svg)))

(find-eev "eev-blinks.el" "find-eoutput")



 (bufname svgobject &rest pos-spec-list)

      

(svg-insert-image svg)
(setq cursor-type nil)


(svg-rectangle svg 100 100 500 500 :gradient "gradient" :id "rec1")
(svg-circle svg 500 500 100 :id "circle1")
(svg-ellipse svg 100 100 50 90 :stroke "red" :id "ellipse1")
(svg-line svg 100 190 50 100 :id "line1" :stroke "yellow")
(svg-polyline svg '((200 . 100) (500 . 450) (80 . 100)) :stroke "green" :id "poly1")
(svg-polygon  svg '((100 . 100) (200 . 150) (150 . 90)) :stroke "blue" :fill "red" :id "gon1")


# My bug report:
# https://mail.google.com/mail/u/0/#sent/QgrcJHsNqMKMrQJNnVQNVdXrfRfkMRtMQgQ

Hi Lars and Felix,

there is an error in the current version of the file svg-readme.txt in
svg-1.1... when I execute this line

  (svg-gradient svg "gradient" 'linear '(0 . "red") '(100 . "blue"))

I get this:

  Wrong number of arguments: (4 . 4), 5

Cheers,
  Eduardo Ochs
  http://angg.twu.net/#eev






#####
#
# svg-info
# 2022mar31
#
#####

# «svg-info»  (to ".svg-info")
# https://mail.google.com/mail/u/0/#inbox/QgrcJHsNqMKMrQJNnVQNVdXrfRfkMRtMQgQ
# https://elpa.gnu.org/packages/svg.html

Hi Eduardo,

thank you for the report! In the info page, you find:

     (svg-gradient svg "gradient1" 'linear
                   '((0 . "red") (25 . "green") (100 . "blue")))

This works on my end. Complete example:

     (require 'svg)
     (let* ((svg (svg-create 101 101)))
       (svg-gradient svg "gradient1" 'linear
                     '((0 . "red") (25 . "green") (100 . "blue")))
       (svg-circle svg 50 50 50 :gradient "gradient1")
       (svg-insert-image svg))

You wrote:
> there is an error in the current version of the file svg-readme.txt in
> svg-1.1...

I don't know about `svg-readme.txt'. Documentation can be found in the
Elisp info pages.

> (svg-gradient svg "gradient" 'linear '(0 . "red") '(100 . "blue"))

Correct is:

     (svg-gradient svg "gradient" 'linear '((0 . "red") (100 . "blue")))

Cheers,

Felix


Hi Felix,

where is the info manual of svg.el? I installed svg using
`M-x list-packages', and I didn't get an info file in
~/.emacs.d/elpa/svg-1.1/... I also tried to follow all the links
in https://elpa.gnu.org/packages/svg.html and couldn't find it...

I guess that you need to promote svg.el from a "simple package" to a
"multi-file package". I don't know how to do that, but Lars certainly
does.

Some useful links:

  (info "(elisp)Simple Packages")
  (info "(elisp)Multi-file Packages")

Now some not-so-useful links. I have only one package in ELPA: it's
called "eev" and it is multi-file. If you compare the links in the
lines that say "Latest" in their ELPA pages,

  http://elpa.gnu.org/packages/svg.html
  http://elpa.gnu.org/packages/eev.html

you will see that the link in your package points to a .el, and the
link in mine points to a .tar:

  https://elpa.gnu.org/packages/svg-1.1.el
  https://elpa.gnu.org/packages/eev-20220324.tar

By the way: thanks for example of how to use gradients! It worked
perfectly, now gradients make sense to me, etc, etc! =)

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/#eev




 - I have only one
package in ELPA


your package from single-file to
multi




I'll try the code in my next break! 



# (find-fline "~/.emacs.d/elpa/svg-1.1/")


# (find-sh "locate /svg | grep info")




#####
#
# screenshot-svg
# 2020oct09
#
#####

# «screenshot-svg»  (to ".screenshot-svg")
# (find-angg ".emacs" "ee-svg-screenshot")
# https://old.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/
# https://www.masteringemacs.org/article/whats-new-in-emacs-27-1
# (find-efunctiondescr 'x-export-frames)
# (find-efunction      'x-export-frames)

(defun screenshot-svg ()
  "Save a screenshot of the current frame as an SVG image.
Saves to a temp file and puts the filename in the kill ring."
  (interactive)
  (let* ((filename (make-temp-file "Emacs" nil ".svg"))
         (data (x-export-frames nil 'svg)))
    (with-temp-file filename
      (insert data))
    (kill-new filename)
    (message filename)))

;; (find-esetkey-links   (kbd "<f12>") 'ee-svg-screenshot)
(define-key eev-mode-map (kbd "<f12>") 'ee-svg-screenshot)

(defun ee-svg-screenshot (&optional fname)
  (interactive)
  (ee-write-string
   (x-export-frames nil 'svg)
   (or fname "/tmp/screenshot.svg")))




#####
#
# svg-tag
# 2022mar15
#
#####

# «svg-tag»  (to ".svg-tag")
# https://www.reddit.com/r/emacs/comments/td9t7w/enhanced_my_coding_experience_with_svgtagmode/




#####
#
# font-lock-studio
# 2020oct12
#
#####

# «font-lock-studio»  (to ".font-lock-studio")
# (find-epackage-links 'font-lock-studio)
# (find-epackage 'font-lock-studio)
# (find-elpafile "font-lock-studio-readme.txt")
# (find-elpafile "font-lock-studio-20170127.2051/")

https://www.emacswiki.org/emacs/FontLockStudio
https://github.com/Lindydancer/font-lock-studio




#####
#
# gif-screencast.el
# 2020oct13
#
#####

# «gif-screencast.el»  (to ".gif-screencast.el")
# (find-es "screencasts" "gifsicle")
# https://github.com/Ambrevar/emacs-gif-screencast
# https://josephrjohnson.georgetown.domains/posts/emacs-transcriptions/



#####
#
# pack-doc (by Boruch Baum)
# 2020oct15
#
#####

# «pack-doc»  (to ".pack-doc")
# https://lists.gnu.org/archive/html/emacs-devel/2020-10/msg00940.html
# (find-fline "/tmp/pack-doc.el")
# (find-efile "")
# (pack-doc "~/bigsrc/emacs26/lisp/ansi-color.el")



#####
#
# straight
# 2020oct22 / 2024oct13
#
#####

# «straight»  (to ".straight")
# (find-angg "elisp/straight-bootstrap.el")
# https://github.com/radian-software/straight.el
# (find-git-links "https://github.com/radian-software/straight.el" "straightel")
# (code-c-d "straightel" "~/usrc/straight.el/")
# (find-straightelfile "")
# (find-straightelfile "README.md" "## Getting started")
# (find-straightelfile "README.md" "### Interactive usage")
# (find-straightelfile "README.md" "### How do I uninstall a package?")
# (find-fline "~/LOGS/2024oct13.emacs" "everything straight knows about a package")

;; (straight-use-package 'eev)
;; (straight-use-package '(eev :type git :host github :repo "edrx/eev"))
;; (straight-pull-package 'eev)
;; (straight-rebuild-package 'eev)


# (find-angg "elisp/straight-bootstrap.el")

;; (load "/home/edrx/elisp/straight-bootstrap.el")
;; (straight-use-package 'eev)

(straight-use-package '(eev :type git :host github :repo "edrx/eev"))


;; (find-fline "~/.emacs.d/straight/build-cache.el")
;;
;; (defun ee-read-file (fname) (with-temp-buffer (insert-file-contents fname) (buffer-string)))
;; (setq o (read (format "(%s)" (ee-read-file "~/.emacs.d/straight/build-cache.el"))))
;; (find-ehashtable (nth 2 o))
;;
;; (find-eppp o)



;; ;; (add-to-list 'load-path "/home/edrx/eev-current/")
;; (require 'eev-load)    ; (find-eev "eev-load.el")
;; (require 'eev-aliases) ; (find-eev "eev-aliases.el")
;; (eev-mode 1)           ; (find-eev "eev-mode.el")


(code-c-d "eev" ee-eev-source-directory :anchor)
;; (find-eev "")
;; (find-eev "eev-code.el")








# Old, from 2020:
# (find-es "doom" "eev-from-git")
# https://github.com/raxod502/straight.el
# https://github.com/raxod502/straight.el#integration-with-use-package-1
# https://github.com/raxod502/straight.el#but-what-about-my-fork-of-obscure-el-package
# https://github.com/raxod502/straight.el#what-happens-when-i-call-straight-use-package
#
# (el-patch :type git :host github :repo "edrx/eev")
# https://github.com/edrx/eev
#
# (find-fline "~/LOGS/20201022.emacs")

(straight-use-package '(el-patch :type git :host github :repo "edrx/eev"))

M-x straight-pull-package
M-x straight-check-all
M-x straight-rebuild-all
M-x straight-fetch-package:

<edrx> any Doom Emacs users here?
<edrx> I have a student who uses Doom Emacs but I haven't been able
       to try it yet - because of 1) lack of time and 2) I am not
       confident enough yet on my script that switches ~/.emacs and
       ~/.emacs.d between vanilla and doom... question:
<edrx> I asked him to install eev with M-x list-packages and give
       it a try. he liked it and he is testing some things for me.
       we just discovered that his eev got installed in
       ~/.emacs.d/.local/straight/build/eev/ instead of in
       ~/.emacs.d/elpa/eev-<version>/
<grym> edrx: huh, i didn't know doom used straight
<edrx> grym: and this MAY mean that it would be easy to tell Doom
       to install eev from https://github.com/edrx/eev.git instead
       of from ELPA, and update it from there... ok, let me install
       straight here and se it this looks like a straight-ism
<grym> edrx: if it's using straight, that should be true already;
       have your student inspect the remote in
       ~/.emacs.d/.local/straight/build/eev/
<grym> edrx: err, ~/.emacs.d/.local/straight/repos/eev
<edrx> grym: where do I get straight from? M-x list-packages
       doesn't list it... it is in MELPA?
<grym> edrx: https://github.com/raxod502/straight.el
<edrx> thanks!
<bpalmer> ,straight
<fsbot> bpalmer: straight.el is another package manager
        https://github.com/raxod502/straight.el
<grym> edrx: it's pretty slick
<grym> and it bootstraps itself.
<grym> i _suspect_ doom uses its use-package integration; i
       certainly do
<grym> edrx: if it helps i'm a total idiot and i get on OK

Alternative package managers exist (like borg, el-get, or quelpa -- or
straight, which powers Doom's), but Doom is optimized solely for
straight. I can't think of anything its alternatives can do that
Doom+straight can't. Correct me if I'm wrong.

https://www.reddit.com/r/emacs/comments/jhb2i6/guix_the_right_way_to_manage_your_packages/
https://hristos.co/blog/updating-my-custom-emacs-setup-part-one/






#####
#
# Trying straight.el on my usual Emacs setting
# 2020dec02
#
#####

# «straight-try»  (to ".straight-try")
# https://github.com/raxod502/straight.el#getting-started
# https://github.com/radian-software/straight.el#getting-started
# https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el

(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-version 5))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

;; Bootstrapping straight.el...done
;; Rebuilding all packages due to build cache schema change
;; Looking for gnu-elpa-mirror recipe -> Cloning melpa...done
;; Looking for emacsmirror-mirror recipe -> Cloning gnu-elpa-mirror...
;; straight--get-call-raw: Failed to run "git"; see buffer *straight-process*

# (find-ebuffer "*straight-process*")
# (find-fline "/tmp/s")
# (find-fline "~/.emacs.d/straight/")
# (find-fline "~/.emacs.d/straight/build-cache.el")
# (find-fline "~/.emacs.d/straight/repos/")

# (find-efunctiondescr 'straight-use-package)
# (find-efunction      'straight-use-package)

(straight-use-package '(el-patch :type git :host github :repo "edrx/eev"))
(straight-use-package '(el-patch :type git :host github :repo "edrx/eev" :branch "UTF-8"))

# (find-ebuffer "*straight-process*")
# (find-fline "/tmp/se")
# (find-fline "~/.emacs.d/straight/repos/eev/")
# (find-fline "~/.emacs.d/straight/build/el-patch/" "eev.el")
# (find-estring (mapconcat 'identity load-path "\n"))
# (find-eppp load-path)
# (locate-library "eev")
# (locate-library "eev.el")
# (find-fline (locate-library "eev.el"))
# (find-fline (file-name-directory (locate-library "eev.el")))

(package! eev :recipe (:host github :repo "edrx/eev" :branch "UTF-8"))
(package! eev :recipe (:host github :repo "edrx/eev"))




#####
#
# straight-pull-package
# 2022dec29
#
#####

# «straight-pull-package»  (to ".straight-pull-package")
# straight-pull-package
# straight-rebuild-package



#####
#
# vterm
# 2020oct27
#
#####

# «vterm»  (to ".vterm")
# (find-epackage-links 'vterm)
# (find-epackage       'vterm)
# (code-c-d "vterm" "~/.emacs.d/elpa/vterm-20210409.1558/")
# (find-vtermfile "")
# (find-vtermfile "README.md")
# (find-vtermfile "vterm.el" "--with-modules")
# (find-elnode "Dynamic Modules")
# (find-elnode "Dynamic Modules" "--with-modules")
# (find-es "git" "emacs27-from-git")
# (find-es "git" "emacs27-from-git" "--with-modules")
# https://github.com/akermu/emacs-libvterm

# «vterm-eepitch»  (to ".vterm-eepitch")
# https://mail.google.com/mail/ca/u/0/#sent/QgrcJHsBpWmQBWXclpBKKDWrrJhphQGfGwl

Help with porting eepitch to vterm?

Hi!
I am the author of eev and of eepitch, that is a part of eev...
You can see a demo of eepitch here:

  https://www.youtube.com/watch?v=86yiRG8YJD0&t=956

At this moment eepitch does not work with vterm because it uses these
functions to send a line to the target buffer:

  (defun eepitch-eval-at-target-window (code)
    "Run CODE at the eepitch-target-window."
    (eepitch-prepare)
    (save-selected-window
      (select-window (eepitch-target-window))
      (eval code)))

  (defun eepitch-line (line)
    "Send LINE to the target window and run the key binding for RET there.
    This is a low-level function used by `eepitch-this-line'."
    (eepitch-eval-at-target-window
     '(progn (goto-char (point-max))                     ; at the end of buffer
             (insert line)                               ; "type" the line
             (call-interactively (key-binding "\r")))))  ; then do a RET



If you can help me to rewrite this prototype function in a way
that works I can do all the rest:

  (defun eepitch-line-vterm (line)
    "Send LINE to the vterm buffer and run the key binding for RET there."
    (with-current-buffer eepitch-buffer-name
      (goto-char (point-max))                    ; at the end of buffer
      (insert line)                              ; "type" the line
      (call-interactively (key-binding "\r"))))  ; then do a RET

Here's how to test it:

  (setq eepitch-buffer-name "*vterm*")
  (setq eepitch-line-vterm "echo HELLO")
  (setq eepitch-line-vterm "echo HELLO AGAIN")



Thanks in advance!!! =)
  [[]], Eduardo Ochs

For more info (but I hope that this message is self-contained
enough and you won't need any of these links...):

  http://angg.twu.net/#eev
  http://angg.twu.net/eev-intros/find-eepitch-intro.html
  http://angg.twu.net/eev-current/eepitch.el.html





#####
#
# Making vterm run other programs that are not the shell
# 2020dec23
#
#####

# «vterm-prog»  (to ".vterm-prog")
# (find-efunction 'eepitch-vterm)
# (find-eev "eepitch.el" "eepitch-langs")
# (find-es "srf" "lua-port")
# (find-efunctiondescr 'vterm)

(let ((vterm-shell "lua5.1")) (vterm))

(let ((vterm-shell "julia")) (vterm))

(defun eepitch-line-vterm (line)
    "Send LINE to the vterm buffer and run the key binding for RET there."
    (with-current-buffer eepitch-buffer-name
      (vterm-send-string line)                              ; "type" the line
      (vterm-send-return))))  ; then do a RET




#####
#
# vterm-recompile
# 2021apr17
#
#####

# «vterm-recompile»  (to ".vterm-recompile")
# (to "vterm")
# (find-epackage-links 'vterm "vterm" t)
# (find-epackage       'vterm)
# (code-c-d "vterm" "~/.emacs.d/elpa/vterm-20220831.835/")
# (find-vtermfile "")

# (package-reinstall 'vterm)
# (package-delete (ee-package-desc 'vterm-toggle))
# (package-delete (ee-package-desc 'vterm))
# (package-install 'vterm)
# (vterm)

# (find-vtermfile "")
# (find-vtermfile "vterm.el" "(defun vterm-module-compile ")
# (find-vtermfile "vterm.el" "(require 'vterm-module nil t)")
# (vterm-module-compile)
# (find-vtermsh "find * | sort")
# (find-vtermsh "find * | sort" "vterm-module.so")
# (find-vtermfile "build/")
# (find-vtermfile "build/CMakeFiles/")
# (find-vtermfile "build/CMakeFiles/libvterm.dir/")
# (find-vtermfile "build/CMakeFiles/vterm-module.dir/")
# (find-vtermfile "build/CMakeFiles/CMakeOutput.log")




#####
#
# vterm-module
# 2022mar25
#
#####

# «vterm-module»  (to ".vterm-module")
# (find-epackage-links 'vterm "vterm" t)
# (find-epackage       'vterm)
# (code-c-d "vterm" "~/.emacs.d/elpa/vterm-20211226.817/")
# (find-vtermfile "")
# (find-vtermfile "vterm-module.c" "emacs_module_init")
# (find-vtermfile "vterm-module.c" "emacs_module_init" "// Exported functions")

# (require 'vterm)
# (find-eapropos "^vterm")

<Shortstop> (add-hook 'vterm-mode-hook 'rename-uniquely)




#####
#
# vc-annotate
# 2020nov07
#
#####

# «vc-annotate»  (to ".vc-annotate")
# (find-efunctiondescr 'vc-annotate)
# (find-efunction      'vc-annotate)
# (find-efile "vc/")
# (find-efile "vc/vc-annotate.el")
# (find-enode "Version Control")




#####
#
# exec-path-from-shell
# 2020nov08
#
#####

# «exec-path-from-shell»  (to ".exec-path-from-shell")
# (find-epackage-links 'exec-path-from-shell)
# http://melpa.org/#/exec-path-from-shell
# https://github.com/purcell/exec-path-from-shell

# (find-epackage-links 'exec-path-from-shell)
# (find-epackage 'exec-path-from-shell)
# (find-elpafile "exec-path-from-shell-readme.txt")
# (code-c-d "execpathfromshell" "~/.emacs.d/elpa/exec-path-from-shell-20201105.2236/")
# (find-execpathfromshellfile "")

Contacting host: melpa.org:443
package-install-from-archive: https://melpa.org/packages/exec-path-from-shell-20200526.324.el: Not found

# (find-emacs-test-links "test")
# (package-install 'exec-path-from-shell)




#####
#
# nyan-mode
# 2020nov29
#
#####

# «nyan-mode»  (to ".nyan-mode")
# (find-epackage-links 'nyan-mode)
# (find-epackage       'nyan-mode)
# http://jacek.zlydach.pl/blog/2011-08-25-introducing-nyan-mode-el-turn-your-emacs-into-nyanmacs.html




#####
#
# lispy
# 2020nov29
#
#####

# «lispy»  (to ".lispy")
# (find-epackage-links 'lispy)
# (find-epackage       'lispy)
# https://github.com/abo-abo/lispy




#####
#
# EAF - emacs-application-framework - by matthewzmd
# 2020nov29
#
#####

# «eaf»  (to ".eaf")
# https://github.com/manateelazycat/emacs-application-framework
# https://www.gitmemory.com/MatthewZMD
# https://emacsconf.org/2020/schedule/34




#####
#
# latex-preview-pane
# 2020dec01
#
#####

# «latex-preview-pane»  (to ".latex-preview-pane")
# https://www.emacswiki.org/emacs/LaTeXPreviewPane
# https://github.com/jsinglet/latex-preview-pane
# (find-epackage-links 'latex-preview-pane)
# (find-epackage       'latex-preview-pane)




#####
#
# customize-themes
# 2020dec15
#
#####

# «customize-themes»  (to ".customize-themes")
# (find-efunctiondescr 'customize-themes)
# (find-efunction      'customize-themes)
# (find-enode "Command Index" "* customize-themes:")
# (find-enode "Custom Themes")

 Note: Your custom settings take precedence over theme settings.
       To migrate your settings into a theme, click here.





#####
#
# omg-macros-corwin-brust
# 2020dec16
#
#####

# «omg-macros-corwin-brust»  (to ".omg-macros-corwin-brust")
# https://emacsconf.org/2020/talks/20/
# https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm
# (code-video "omgmacrosvideo" "$S/https/mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm")
# (find-omgmacrosvideo "0:00")
# (find-omgmacrosvideo "3:20" "implicitly confusing")

# https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--notes--erik-elmshauser-corwin-brust.tar.gz

# (find-node "(eintr)defun")
# (find-node "(cl)Argument Lists")
# (find-node "(elisp)Intro Eval")




#####
#
# Corwin's orgvm
# 2021aug21
#
#####

# «orgvm»  (to ".orgvm")
# https://git.sr.ht/~mplscorwin/orgvm




#####
#
# Beyond vim and emacs: a scalable UI paradigm
# 2020dec26
#
#####

# «beyond-vim-epistemic»  (to ".beyond-vim-epistemic")
# https://emacsconf.org/2020/talks/07/
# https://mirror.csclub.uwaterloo.ca/emacsconf/2020/
# https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm
# https://www.reddit.com/r/emacs/comments/kjqz5o/lets_talk_about_emacs_ui/
# (code-video "beyondvimvideo" "$S/https/mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm")
# (find-beyondvimvideo)
# (find-beyondvimvideo "0:00")
# (find-beyondvimvideo "1:40" "we are at a higher level regarding the text")
# (find-beyondvimvideo "2:40" "now in vim")
# (find-beyondvimvideo "3:26" "a dedicated mode for every noun")
# (find-beyondvimvideo "4:00" "easier to learn new contexts")
# (find-beyondvimvideo "6:10" "modes should also be a mode")
# (find-beyondvimvideo "7:30" "symex mode")
# (find-beyondvimvideo "11:00" "towers also can be talked about")
# (find-beyondvimvideo "13:00" "in any case")
#
# (eev-avadj-mode 0)
# (eev-avadj-mode)

https://drym.org/
https://twitter.com/CountVajhula
https://github.com/sorgerlab/indra
http://indra.readthedocs.io/
https://github.com/countvajhula
https://github.com/countvajhula/rigpa



#####
#
# eros-mode
# 2020dec16
#
#####

# «eros-mode»  (to ".eros-mode")
# (find-epackage-links 'eros)
# (find-epackage       'eros)
# (code-c-d "eros" "~/.emacs.d/elpa/eros-20180415.618/")
# (find-erosfile "")
# (find-erosfile "eros.el")
# (find-erosfile "eros.el" "(define-minor-mode eros-mode")
# (find-efunctiondescr 'eros-mode)
# (find-efunction 'eros--make-overlay)
# (find-elnode "Key Lookup")
# (find-elnode "Remapping Commands")
# https://github.com/xiongtx/eros
# http://endlessparentheses.com/eval-result-overlays-in-emacs-lisp.html

# (eros-mode 1)
# (eros-mode -1)
# eros-mode

(+ 1 2)




#####
#
# Learn x in y minutes
# 2020dec18
#
#####

# «learnxinyminutes»  (to ".learnxinyminutes")
# https://learnxinyminutes.com/docs/elisp/
# https://learnxinyminutes.com/docs/files/learn-emacs-lisp.el
# https://github.com/adambard/learnxinyminutes-docs
# https://github.com/adambard/learnxinyminutes-docs/blob/master/smalltalk.html.markdown




#####
#
# subr-x.el
# 2020dec19
#
#####

# «subr-x.el»  (to ".subr-x.el")
# (find-efunctiondescr 'thread-last)
# (find-efunction      'thread-last)

(defun ee-lh-entry-finds (lh-entry)
  "Filter a load-history entry to keep only the `(defun . find-*)'s"
  (thread-last lh-entry
    (--filter (consp it) lh-entry)
    (--filter (eq (car it) 'defun))
    (--filter (string-match "^find-" (symbol-name (cdr it))))
    (cons (car lh-entry))))





#####
#
# Locating all the defuns in eev that define find-* functions
# 2020dec19
#
#####

# «the-find-prefix»  (to ".the-find-prefix")
# (find-eev-intro "4. The prefix `find-'")
# https://mail.google.com/mail/ca/u/0/#search/eefind/FMfcgxwKjwwKSTsNkzZtPHbhMcdDPRxG
# (find-elnode "Autoload by Prefix" "register-definition-prefixes")
# (find-efunctiondescr 'thread-last)
# (find-efunction      'thread-last)

(require 'dash)
;; See: https://github.com/magnars/dash.el#functions

;; Tests:
;; (find-epp        (assoc (symbol-file 'find-pdf-page 'defun) load-history))
;; (setq a-lh-entry (assoc (symbol-file 'find-pdf-page 'defun) load-history))
;; (find-epp                    a-lh-entry)
;; (find-epp (ee-lh-entry-finds a-lh-entry))
;;
(defun ee-lh-entry-finds (lh-entry)
  "Filter a load-history entry to keep only the `(defun . find-*)'s"
  (let* ((b (--filter (consp it) lh-entry))
	 (c (--filter (eq (car it) 'defun) b))
	 (d (--filter (string-match "^find-" (symbol-name (cdr it))) c)))
    (cons (car lh-entry) d)))

(defun ee-lh-eev-finds ()
  "Filter the load-history - returns a stripped version with only
the eev files and the `(defun . find-*)'s in them."
  (let* ((lh-eevs (--filter (string-match "eev" (car it)) load-history)))
    (-map 'ee-lh-entry-finds lh-eevs)))

;; Test:
;; (find-epp (ee-lh-eev-finds))




#####
#
# definition-prefixes
# 2021aug11
#
#####

# «definition-prefixes»  (to ".definition-prefixes")
# (find-efunctiondescr 'register-definition-prefixes)
# (find-efunction      'register-definition-prefixes)
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgzGkZkWFTnSQNTGfxrXtnHKqrZDx
# (find-efile "emacs-lisp/autoload.el" "(defun autoload--make-defs-autoload")

# (find-fline "~/bigsrc/emacs28/")
# (ee-find-grep "~/bigsrc/emacs28/" "grep --color=auto -nRH --null -e definition-prefixes *")
# (find-egrep "grep --color=auto -nRH --null -e definition-prefixes *")
# (find-efile "ldefs-boot.el" "5x5")
# (find-efile "play/5x5.el" ":prefix")
# (find-elnode "Group Definitions" ":prefix")

Hi Stefan,

> It seems my tool missed `to` and `code-`, but it found
> `octal-to-num` as well as `at-eepitch-target`, `del-echo`,
> `add-to-PATH`, and `bryl` instead ;-)

The worst offenders have just been renamed:

  2021-08-11  Eduardo Ochs  <[email protected]>

          * eev-prepared.el (octal-to-num): renamed to `ee-octal-to-num'.

          * eepitch.el (at-eepitch-target): deleted. It was a copy of
          `eepitch-eval-at-target-window', but with a bad name.
          (del-echo): renamed to `eepitch-del-echo'.

          * eev-on-windows.el (add-to-PATH): renamed to `ee-add-to-PATH'.

You mentioned "bryl" - it starts with "br", which is the prefix that I
use for all the functions that are based on, or similar to, browse-url.


> but static scoping makes loaded functions ugly, even if not compiled
> (especially with the current implementation of the interpreted version
> of `function` which just slaps the whole current environment onto the
> lambda's body to make closures, instead of filtering it to only keep
> those variables which are actually used inside the function).

Ugly in what sense? I took a look at

  (find-efunctiondescr 'function)
  (find-efunction      'function)

and it's quite brief, and I don't have - yet - the functions that show
the data structures that I guess that you are referring to, neither
in the current Emacs nor in a second Emacs being run in GDB...

There are many data structures in Emacs that I don't have tools to
inspect yet, and at this moment the elisp tutorial for beginners in

  (find-elisp-intro)
  http://angg.twu.net/eev-intros/find-elisp-intro.html

doesn't have sections on lexical binding - and that's because I don't
understand lexical binding well enough yet... and that's mainly
because I still don't know how to inspect the data structures involved
in lexically bound functions. One of the things that I hope that will
happen in the next few years is that some people who know all (?!?)
these things will start to use eev and that they will help with these
functions that are missing.

Can we move these discussion to a public place? The eev mailing list
would be the best place, I guess:

  https://lists.nongnu.org/mailman/listinfo/eev

Cheers,
  E.




#####
#
# toggle-lexical-binding
# 2021aug11
#
#####

# «toggle-lexical-binding»  (to ".toggle-lexical-binding")
# (find-egrep "grep --color=auto -nRH --null -e 'Using old dynamic' *")
# (find-egrep "grep --color=auto -nRH --null -e elisp--dynlex-modeline-map *")
# (find-evariable 'elisp--dynlex-modeline-map)
# (find-efunction 'elisp-enable-lexical-binding)
# (find-efunction 'elisp-enable-lexical-binding "setq-local lexical-binding")
# (find-efunction 'emacs-lisp-mode)

(setq-local lexical-binding t)
(setq-local lexical-binding nil)





#####
#
# closure
# 2021aug11
#
#####

# «closure»  (to ".closure")
# (find-elnode "Closures" "closure (t)")
# (find-efile "vc/pcvs.el")
# (find-efile "vc/pcvs.el" "lexical-binding:t")
# (load-library "pcvs.el")
# (find-efunction   'cvs-insert-visited-file)
# (find-efunctionpp 'cvs-insert-visited-file)
# https://mail.google.com/mail/ca/u/0/#search/pcvs.el/FMfcgzGkZkWFTnSQNTGfxrXtnHKqrZDx

# Moved to:
# (find-lexical-intro)





#####
#
# defvar
# 2021aug13
#
#####

# «defvar»  (to ".defvar")
# (find-efunctiondescr 'defvar)
# (find-efunctiondescr 'defvar "special")
# (find-efunction 'defvar)
# (find-efunction 'defvar "declared_special")
# (find-elnode "Index" "* special-variable-p:")
# (find-elnode "Using Lexical Binding" "special-variable-p")
# (find-egrep "grep --color=auto -nH --null -e declared_special *.el */*.el")
# (find-egrep "grep --color=auto -nH --null -e special.variable *.el */*.el")
# (find-elnode "Lexical Binding")
# (find-elnode "Lexical Binding" "my-ticker")

(defvar my-ticker nil)
(special-variable-p 'my-ticker)

# My e-mail to help-gnu-emacs in 2021aug14:
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/index.html
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/msg00309.html Edrx question
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/msg00312.html Stefan
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/msg00313.html Edrx thanks
# Subj: defvar and "special-variable-p"-ness

Hi list,

after "defvar"-ing a variable its "special-variable-p"-ness becomes
true. Is there a way to make its "special-variable-p"-ness nil again?
That would be useful for some tests that I am trying to write...

By the way, I thought that "unload-feature" would be able to revert
the "special-variable-p"-ness of a variable back to nil, but it seems
that it doesn't do that. Here's how I tested it. I created a file
"/tmp/myfile.el" with just these three lines,

  ;; Copy this 3-line block to /tmp/myfile.el
  (defvar myvar 99)
  (provide 'myfile)

Then I ran the uncommented sexps below one by one with my favorite
variant of `C-x C-e':

  (setq myvar 42)
  (special-variable-p 'myvar)
  ;; ^ --> nil

  (require 'myfile "/tmp/myfile.el")
  (assoc "/tmp/myfile.el" load-history)
  ;; ^ --> ("/tmp/myfile.el" myvar (provide . myfile))
  (special-variable-p 'myvar)
  ;; ^ --> t

  (unload-feature 'myfile)
  (assoc "/tmp/myfile.el" load-history)
  ;; ^ --> nil
  (special-variable-p 'myvar)
  ;; ^ --> t

Thanks in advance!
  Eduardo Ochs
  http://angg.twu.net/#eev


  ;; Stefan's answer:
  ;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-08/msg00312.html
  ;; (find-efunction 'internal-make-var-non-special)
  (internal-make-var-non-special 'myvar)
  (special-variable-p 'myvar)
  ;; ^ --> nil


# 2022mar19:
# (find-fline "~/LOGS/2022mar19.emacs-3" "(defvar blablep nil)")





#####
#
# subed - for editing video subtitles
# 2020dec23
#
#####

# «subed»  (to ".subed")
# (find-epackage-links 'subed "subed" t)
# (find-epackage       'subed)
# (code-c-d "subed" "~/.emacs.d/elpa/subed-1.0.5/")
# (find-subedfile "")

# (find-angg ".emacs" "subed")
# (find-es "subtitles" "subed")
# (find-es "mplayer" "mpv.el")
# https://github.com/rndusr/subed
# https://github.com/sachac/subed
# (find-git-links "https://github.com/rndusr/subed" "subed")
# (find-gitk        "~/usrc/subed/")
# (code-c-d "subed" "~/usrc/subed/")
# (find-subedfile "")

# https://mail.google.com/mail/u/0/#inbox/FMfcgzGllCbFGgbdSmMHXJkrZDrGCZTh
# https://sachachua.com/dotemacs/#word-level

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/subed/
cd      ~/usrc/
git clone https://github.com/rndusr/subed
cd      ~/usrc/subed/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "$S/http/angg.twu.net/eev-videos/" "emacsconf2019.mp4")
cp -v $S/http/angg.twu.net/eev-videos/emacsconf2019.mp4 /tmp/
touch /tmp/emacsconf2019.srt

# (code-c-d "subed" "~/usrc/subed/")
# (find-subedfile "")
# (find-subedfile "README.org")
# (find-subedfile "subed/")
# (find-subedfile "subed/subed.el")

(progn
  ;; Tell emacs where to find subed
  (add-to-list 'load-path "~/usrc/subed/subed/")
  (require 'subed)
  ;;
  ;; Disable automatic movement of point by default
  (add-hook 'subed-mode-hook 'subed-disable-sync-point-to-player)
  ;; Remember cursor position between sessions
  (add-hook 'subed-mode-hook 'save-place-local-mode)
  ;; Break lines automatically while typing
  (add-hook 'subed-mode-hook 'turn-on-auto-fill)
  ;; Break lines at 40 characters
  (add-hook 'subed-mode-hook (lambda () (setq-local fill-column 40))))
  )

(progn
  ;; (find-esetkey-links (kbd "M-M") 'subed-merge-with-previous)
  ;; (find-esetkey-links (kbd "M-i") 'subed-insert-subtitle)
  ;; (find-esetkey-links (kbd "M-k") 'subed-kill-subtitle)
  ;; (find-esetkey-links (kbd "M-s") 'subed-sort)

  (defalias 'sm 'subed-merge-with-previous)
  (defalias 'si 'subed-insert-subtitle)
  (defalias 'sk 'subed-kill-subtitle)
  (defalias 'ss 'subed-sort)

  (setq subed-milliseconds-adjust 1000)

  (defun e () (interactive) (find-es "emacs"))
  (defun h () (interactive) (find-efunctiondescr 'subed-mode))
  (defun s () (interactive) (find-fline "/tmp/emacsconf2019.srt"))
  )

# (find-efunctiondescr 'subed-increase-stop-time)
# (find-efunction      'subed-increase-stop-time)



#####
#
# subed-shadowed-keybindings
# 2021jun06
#
#####

# «subed-shadowed-keybindings»  (to ".subed-shadowed-keybindings")

<edrx> anyone knows a good way to find which keymaps are currently
       shadowing a certain key sequence? I was trying to learn
       subed.el - the editor of subtitles - and C-h m said that
       some of its keybindings were shadowed... and I realized that
       it would be good to add to my `find-esetkey-links' - video
       demo: http://www.youtube.com/watch?v=91-9YfRPsuk#t=14m45s -
       some code to examine the details of shadowed keybindings...
<edrx> (this `find-esetkey-links' intends to be beginner-friendly
       is hasn't been tested on real beginners yet)





#####
#
# subed-issue-40
# 2021jun04
#
#####

# «subed-issue-40»  (to ".subed-issue-40")
# https://github.com/rndusr/subed/issues/40

Describe workflow for converting a series of lines like "2:34 foo bar" to subtitles?

Hi subed people,

this is similar to Issue 15, but different enough to deserve a new thread...

So, question: I am learning subed now. I have subtitles for parts of
some videos in an improvised format - in which each line is just a
timestamp followed by text, like this: "14:01 So I took a look at the
man page for xpdf" - and I would like to use subed to convert that to
the SRT format. I can try to write a Lua script to do that conversion
for me, but is there a more subed-ish way to do that? Here is a VERY
rough idea to start with: we would use a keyboard macro that supposes
that we are in a two-window setting with .srt at the left and the
improvised subtitles at the right; each time that we run the keyboard
macro it would run `subed-insert-subtitle' in the .srt window, copy
one line from the right window to the left window, and it would
somehow use my timestamp - the "14:01" in the sample line above - to
set up the start and the stop time of the subtitle...

My problem is with the step "and it would somehow use my timestamp"
above, of course. Besides that I was mind-blown by how easy it was to
set up subed here... really, really, really good job, Random User,
Sacha, and others! =)

Btw, here is an example of these improvised subtitles:
http://angg.twu.net/emacsconf2019.html




#####
#
# subed-record
# 2021nov06
#
#####

# «subed-record»  (to ".subed-record")
# https://github.com/sachac/subed-record
# (find-fline "~/LOGS/2021nov05.emacs")
# (find-fline "~/LOGS/2021nov05.emacs" "subed-record")




#####
#
# Sachac's blog post on subed
# 2021dec14
#
#####

# «subed-sacha»  (to ".subed-sacha")
# https://sachachua.com/blog/2020/12/editing-subtitles-in-emacs-with-subed-with-synchronized-video-playback-through-mpv/
# http://composition.al/blog/2021/07/14/how-to-create-an-srt-caption-file-for-a-video/
# (find-epackage-links 'subed)
# https://elpa.nongnu.org/nongnu/subed.html




#####
#
# nov.el: a major mode for reading EPUBs in Emacs
# 2020dec24
#
#####

# «nov.el»  (to ".nov.el")
# https://github.com/wasamasa/nov.el
# -> https://depp.brause.cc/nov.el/

# (find-epackage-links 'nov "nov" t)
# (find-epackage       'nov)
# (code-c-d "nov" "~/.emacs.d/elpa/nov-20220406.1747/")
# (find-novfile "")

# (find-nov-links "~/books/Music A Subversive History by Ted Gioia (z-lib.org).epub")




#####
#
# custom-file
# 2021jan02
#
#####

# «custom-file»  (to ".custom-file")
# (find-angg ".emacs" ".emacs.custom")
# (find-angg ".emacs.custom")
# (find-evardescr 'custom-file)
# (find-evariable 'custom-file)




#####
#
# so-long
# 2021jan03
#
#####

# «so-long»  (to ".so-long")
# (find-epackage-links 'so-long)
# (find-epackage       'so-long)
# (find-epp (ee-package-desc 'so-long))
# (code-c-d "solong" "~/.emacs.d/elpa/so-long-1.0/")
# (find-solongfile "")
# (find-solongfile "so-long.el" "* Introduction")

# (find-sh "locate so-long")
# (find-efile "so-long.el")
# (find-fline "~/bigsrc/emacs27/test/lisp/so-long-tests/")




#####
#
# dungeon
# 2021jan10 / 2024sep13
#
#####

# «dungeon»  (to ".dungeon")
# (find-fline "~/LOGS/2024sep13.emacs2")
# https://emacsconf.org/2020/talks/06/ Trivial Emacs Kits - Corwin Brust
# https://emacsconf.org/2020/talks/28/ Welcome To The Dungeon - Erik Elmshauser and Corwin Brust
# https://emacsconf.org/2020/talks/29/ Pathing of Least Resistance - Erik Elmshauser and Corwin Brust
# (find-git-links "https://git.savannah.nongnu.org/git/dungeon" "dungeon")
# (find-wget-org "https://git.savannah.nongnu.org/cgit/dungeon.git/plain/t/org/maps-05_ramps_overdraw.org")
# (code-c-d "dungeon" "~/usrc/dungeon/")
# (find-dungeonfile "")

# Old:
# «dungeon-mode»  (to ".dungeon-mode")
# https://github.com/dungeon-mode/game
# (find-git-links "https://github.com/dungeon-mode/game" "dungeongame")
# (code-c-d "dungeongame" "~/usrc/game/")
# (find-dungeongamefile "")
# (find-dungeongamefile "dungeon-game.org")






#####
#
# loganlee
# 2021jan11
#
#####

# «loganlee»  (to ".loganlee")
# https://www.youtube.com/watch?v=5PC9vu2yIvY Emacs tutorial summary
# https://www.youtube.com/watch?v=YwbVQHUNtUA Erc first setup guide
# (code-pdf-page "emacstutsum" "~/books/emacs-tutorial-summary.pdf")
# (code-pdf-text "emacstutsum" "~/books/emacs-tutorial-summary.pdf")
# (code-pdf-page "ercfirstsetup" "~/books/erc-first-setup.pdf")
# (code-pdf-text "ercfirstsetup" "~/books/erc-first-setup.pdf")
# (find-emacstutsumpage)
# (find-emacstutsumtext)
# (find-ercfirstsetuppage)
# (find-ercfirstsetuptext)



#####
#
# auctex
# 2021jan12
#
#####

# «auctex»  (to ".auctex")
# (find-es "auctex")




#####
#
# tags
# 2021jan17
#
#####

# «tags»  (to ".tags")
# (find-enode "Tags Tables")
# (find-enode "Find Identifiers")
# (find-enode "Looking Up Identifiers" "M-.")

# (find-es "git" "emacs27-from-git")
# (code-c-d "e27base" "~/bigsrc/emacs27/")
# (code-c-d "e27src"  "~/bigsrc/emacs27/src/")
# (code-c-d "e27src"  "~/bigsrc/emacs27/src/" :tags)
# (find-e27basefile "")
# (find-e27basefile "Makefile")
# (find-e27basefile "Makefile" "make TAGS")
# (find-e27srcfile "")
# (find-e27srcfile "TAGS")
# (find-e27srcfile "frame.c")
;; (find-e27basefile "")





#####
#
# auto-mode-alist
# 2021jan19
#
#####

# «auto-mode-alist»  (to ".auto-mode-alist")
# (find-angg ".emacs" "auto-mode-alist")
# (find-evardescr 'auto-mode-alist)
# (find-evariable 'auto-mode-alist)
# (find-elnode "Auto Major Mode" "Variable: auto-mode-alist")
# (find-enode "Choosing Modes" "auto-mode-alist")
# (find-enode "Regexp Backslash" "\\'")
# https://www.emacswiki.org/emacs/AutoModeAlist



#####
#
# run-command
# 2021jan26
#
#####

# «run-command»  (to ".run-command")
# https://massimilianomirra.com/notes/lightweight-external-command-integration-in-emacs-via-compilation-mode/
# https://massimilianomirra.com/
# https://github.com/bard/emacs-run-command
# (find-epackage-links 'run-command)
# (find-epackage       'run-command)
# (code-c-d "runcommand" "~/.emacs.d/elpa/run-command-20210122.1746/")
# (find-runcommandfile "")




#####
#
# color-tools
# 2021jan26
#
#####

# «color-tools»  (to ".color-tools")
# https://github.com/neeasade/ct.el
# https://notes.neeasade.net/color-spaces.html
# (find-epackage-links 'ct)
# (find-epackage 'ct)
# (code-c-d "ct" "~/.emacs.d/elpa/ct-20210123.2259/")
# (find-ctfile "")




#####
#
# color-name-to-rgb
# 2021oct30
#
#####

# «color-name-to-rgb»  (to ".color-name-to-rgb")
# (find-es "htmlize" "engrave-faces")
# (find-eapropos "color")
# (find-eapropos "color-name")
# (find-eapropos "color-rgb")
# (find-ecolor-links "chocolate1")
# (color-name-to-rgb "chocolate1")
# (ee-color-name-to-rrggbb "chocolate1")
# (ee-color-name-to-rrggbb "#123456")

# (find-eev "eev-elinks.el" "find-ecolor-links")

(ee-color-values "#123456")
(ee-color-values "chocolate1")

(defun ee-color-name-to-rrggbb (colorname)
  (let ((rgb (color-name-to-rgb colorname)))
    (color-rgb-to-hex (nth 0 rgb) (nth 1 rgb) (nth 2 rgb) 2)))



#####
#
# defined-colors
# 2024sep12
#
#####

# «defined-colors»  (to ".defined-colors")
# (find-efunction    'defined-colors)
# (find-efunction 'xw-defined-colors)
# (find-eppp         (defined-colors))
# (find-efunction      'find-ecolors)
# (find-efunction '      list-colors-display)

(find-eppp
(cl-loop for name in (defined-colors)
         for (R G B) = (color-values name)
         for (r g b) = (list (ash R -8) (ash G -8) (ash B -8))
         for rgb = (format "#%02x%02x%02x" r g b)
         collect (list name rgb))
)




#####
#
# Wasamasa's my-image-map-demo
# 2021mar21
#
#####

# «my-image-map-demo»  (to ".my-image-map-demo")

(defun my-image-map-demo ()
  (interactive)
  (let ((buf (get-buffer-create "*image-map*")))
    (with-current-buffer buf
      (let* ((svg "<svg width=\"150\" height=\"150\"><g><rect x=\"25\" y=\"25\" width=\"50\" height=\"50\" fill=\"red\"></rect><rect x=\"75\" y=\"25\" width=\"50\" height=\"50\" fill=\"green\"></rect><rect x=\"25\" y=\"75\" width=\"50\" height=\"50\" fill=\"blue\"></rect><rect x=\"75\" y=\"75\" width=\"50\" height=\"50\" fill=\"yellow\"></rect></g></svg>")
             (image-map '(((rect . ((25 . 25) . (75 . 75)))
                           area-red
                           (help-echo "red" pointer hourglass))
                          ((rect . ((75 . 25) . (125 . 75)))
                           area-green
                           (help-echo "green" pointer vdrag))
                          ((rect . ((25 . 75) . (75 . 125)))
                           area-blue
                           (help-echo "blue" pointer hdrag))
                          ((rect . ((75 . 75) . (125 . 125)))
                           area-yellow
                           (help-echo "yellow" pointer hand))))
             (keymap (let ((map (make-sparse-keymap)))
                       (define-key map (kbd "<area-red> <mouse-1>")
                         (lambda (e) (interactive "e") (message "Red")))
                       (define-key map (kbd "<area-green> <mouse-1>")
                         (lambda (e) (interactive "e") (message "Green")))
                       (define-key map (kbd "<area-blue> <mouse-1>")
                         (lambda (e) (interactive "e") (message "Blue")))
                       (define-key map (kbd "<area-yellow> <mouse-1>")
                         (lambda (e) (interactive "e") (message "Yellow")))
                       map))
             (image (propertize " "
                                'display `(image :type svg
                                                 :data ,svg
                                                 :map ,image-map)
                                'keymap keymap))
             buffer-read-only)
        (erase-buffer)
        (insert image)))
    (display-buffer buf)))




#####
#
# emacs-lua
# 2021apr18
#
#####

# «emacs-lua»  (to ".emacs-lua")
# (find-angg "emacs-lua/emlua.cpp")
# (find-lua51manual "#2.1" "long bracket")
# (find-lua51manual "#2.1" "long comment")
# (to "cl-loop")
# (find-elnode "Rx Notation")
# (find-elnode "Search and Replace")
# (find-efunction 'replace-regexp-in-string)





;; Based on: (find-efunction 'replace-regexp-in-string)
;;
(defun lua-bracket-hash-table (string)
  (let* ((regexp (rx (any "[]") (one-or-more "=") (any "[]")))
         (hash-table (make-hash-table))
         (l (length string))
	 (start 0)
         mb me)
    (save-match-data
      (while (and (< start l) (string-match regexp string start))
	(setq mb (match-beginning 0)
	      me (match-end 0))
        (puthash (- me mb 2) t hash-table)
	(setq start me)))
    hash-table)

(cl-loop for i from 1
         with core = 22
         do (if (= i 5) (cl-return i)))


(setq ht (make-hash-table))

(puthash 2 t ht)





#####
#
# luamacs
# 2021apr19
#
#####

# «luamacs»  (to ".luamacs")
# https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg00913.html
# https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg00920.html
# https://github.com/mschuldt/luamacs
# (find-git-links "https://github.com/mschuldt/luamacs" "luamacs")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/luamacs/
cd      ~/usrc/
git clone https://github.com/mschuldt/luamacs
cd      ~/usrc/luamacs/

# (find-fline "~/usrc/")
# (find-fline "~/usrc/luamacs/")
# (find-gitk  "~/usrc/luamacs/")

# (code-c-d "luamacs" "~/usrc/luamacs/")
# (find-luamacsfile "")
# (find-luamacssh "find * | sort")
# (find-luamacssh "find * | sort | grep -i lua")
# (find-luamacsfile "src/luamacs.c")

Hi Michael,

this looks very interesting! What did you use it for?

Do you have plans to adapt your src/luamacs.c and make it into
something that can be loaded as a module? I am quite incompetent with
C, so I can't help you with the C side besides offering encouragement
and testing...

At this moment I have these short-term goals with the emlua module:

  1. Adapt https://github.com/edrx/edrxrepl to emlua,

  2. Use emlua to help me edit the files into which I throw
     interesting URLs compulsively when I am browsing the web in
     half-brain-dead mode,

One of my medium-term goals is to use emlua to turn Emacs into an
editor of derivation trees - see:

  http://angg.twu.net/dednat6/tug-slides.pdf

at this moment I have to edit them by hand, using rectangle commands
and picture mode, and some operations on them are hard to do... Note
that dednat6 has a mini-Forth inside, that is based on this:

  http://angg.twu.net/miniforth-article.html

And this may be somewhat related to the other stuff in your github
page...

  Cheers! =)
    Eduardo Ochs
    http://angg.twu.net/#eev




#####
#
# version-to-list
# 2021may06
#
#####

# «version-to-list»  (to ".version-to-list")
# (find-efunctiondescr 'version-to-list)
# (find-efunction      'version-to-list)
# (find-evardescr 'version-separator)
# (find-evardescr 'version-regexp-alist)
# (version-to-list "20210506")
# (version-to-list "2021-05-06")





#####
#
# curved-single-quotes
# 2021may13
#
#####

# «curved-single-quotes»  (to ".curved-single-quotes")
# (find-eev "eev-blinks.el" "curved-single-quotes")
# (find-elnode "Documentation Tips")
# (find-elnode "Documentation Tips" "curved single quotes")
# (find-enode "Quotation Marks")
# (find-enode "Quotation Marks" "U+2018")
# (find-fline "~/bigsrc/emacs28/info/elisp.info")
# (find-fline "~/bigsrc/emacs28/info/emacs.info")
# (find-fline "~/bigsrc/emacs28/info/emacs.info" "U+2018")
# (find-efunction 'eejump)
# (find-efunction 'eejump "`eejump'")
# (find-efunctiondescr 'eejump)
# (find-efunction-links 'eejump)
# (find-efunction-links 'eejump 2 "documentation")
# (find-efunction 'find-efunctiondescr)
# (find-efunction 'describe-function)
# (find-efunction 'help-do-arg-highlight)
# (find-efunction 'help-highlight-arg)
# (find-efunctiondescr 'format-message)
# (find-efunction      'format-message)
# (find-efunctiondescr 'text-quoting-style)
# (find-efunction      'text-quoting-style)
# (find-evariable-links 'text-quoting-style)
# (find-evardescr       'text-quoting-style)
# (find-elnode "Keys in Documentation" "User Option: text-quoting-style")
# (find-elnode "Text Quoting Style")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-12/msg02607.html text-quoting-style
# In docstrings:
#   (find-efunction 'macroexp-let2)
#   (find-efunction 'cl-once-only)




#####
#
# info-bullets
# 2021sep15
#
#####

# «info-bullets»  (to ".info-bullets")
# (find-eepitch-bullet-links)
# (find-efunction 'find-eepitch-bullet-links)
# (find-enode "Using Region")
# (find-fline "~/bigsrc/emacs28/info/emacs.info" "Node: Using Region")






#####
#
# char-valid-p
# 2021may16
#
#####

# «char-valid-p»  (to ".char-valid-p")
# (find-eetcfile "NEWS")
# (find-eetcfile "NEWS" "char-valid-p")
# (find-efunctiondescr 'characterp)
# (find-efunction      'characterp)
# (find-elnode "Index" "* characterp:")
# http://doc.endlessparentheses.com/Fun/char-valid-p.html
# (find-eev "eev-blinks.el" "find-einsert")

;; Tests: (find-einsert '((32 1000) 10 (8000 12000)))
;;        (find-einsert '("Greek:\n" (913 969) 10 "Bold:\n" (120276 120327)))

(defun ee-insert (&rest rest)
  "Insert characters, strings, or ranges of characters.
Example: (ee-insert '(?a ?z) 10 \"Foo!\")"
  (while rest
    (let ((o (car rest)))
      (cond ((stringp o) (insert o))
	    ((numberp o) (if (characterp o) (insert o)))
	    ((consp o) (mapc 'ee-insert (apply 'number-sequence o)))
	    (t (error "Not string/int/pair: %S" o))))
    (setq rest (cdr rest))))




#####
#
# shell-pop
# 2021may17
#
#####

# «shell-pop»  (to ".shell-pop")
# https://github.com/kyagi/shell-pop-el

<zeta_0> dale: uhh, I like pop-shell, because its brutally simple,
         just 1 keybinding needs to be pressed, but that extra
         functionality would make it even more user friendly.
<zeta_0> here's my issue on reddit:
         https://www.reddit.com/r/emacs/comments/ne39u6/popshell_emacs_configuration_issue_what_is_the/

https://github.com/kyagi/shell-pop-el
http://pragmaticemacs.com/emacs/pop-up-a-quick-shell-with-shell-pop/
http://pragmaticemacs.com/emacs/view-and-annotate-pdfs-in-emacs-with-pdf-tools/
http://pragmaticemacs.com/emacs/more-pdf-tools-tweaks/
http://pragmaticemacs.com/emacs/write-code-comments-in-org-mode-with-poporg/




#####
#
# dribble-file
# 2021may21
#
#####

# «dribble-file»  (to ".dribble-file")

(open-dribble-file "~/dribble")
(open-dribble-file "/tmp/dribble")
(open-dribble-file (format-time-string "~/dribble-%Y%m%d%H%M"))




#####
#
# embark
# 2021may24
#
#####

# «embark»  (to ".embark")
# https://github.com/oantolin/embark
# https://github.com/oantolin/embark/wiki/Additional-Actions#actions-for-textual-representations-of-keyboard-macros
# (find-epackage-links 'embark "embark" t)
# (find-epackages      'embark)
# (find-epackage       'embark)
# (code-c-d "embark" "~/.emacs.d/elpa/embark-20240419.452/" "embark")
# (find-embarkfile "")
# (find-embarknode "")
# (find-embarknode "Quick start")
# (require 'embark)
# (find-efunctiondescr 'embark-act)
# (find-fline "~/LOGS/2024may11.emacs" "how do I turn embark-mode")





#####
#
# function-documentation
# 2021jun03
#
#####

# «function-documentation»  (to ".function-documentation")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg01154.html pcase is one example
# (find-efunctiondescr 'pcase)
# (get 'pcase 'function-documentation)
# (find-estring (documentation 'pcase))
# (find-estring (documentation 'pcase "verbatim"))
# (find-elnode "Index" "* documentation:")
# (find-efunction 'pcase--make-docstring)


#####
#
# pcase
# 2022mar14
#
#####

# «pcase»  (to ".pcase")
# https://takeonrules.com/2022/03/13/further-into-emacs-with-pcase-backquotes-and-commas/
# (find-elnode "pcase Macro")
# (find-elnode "pcase Macro" "Example: Advantage Over")
# (find-elnode "Backquote Patterns")
# (find-elnode "Backquote Patterns" "defun evaluate")
# (find-elnode "Extending pcase")
# (find-elnode "Pattern-Matching Conditional")
# (find-clnode "Conditionals")
# (find-elnode "Destructuring with pcase Patterns" "pcase-let*")
# (find-efile "emacs-lisp/pcase.el")
# (find-egrep "grep --color=auto -nH --null -e pcase     *.el */*.el")
# (find-egrep "grep --color=auto -nH --null -e pcase-let *.el */*.el")
# (find-efunctiondescr 'pcase)
# (find-efunction      'pcase)

https://dl.acm.org/doi/pdf/10.1145/3386324
# (find-sh "curl -I https://dl.acm.org/doi/pdf/10.1145/3386324")
https://dl.acm.org/doi/pdf/10.1145/3386324.pdf

(pcase (split-string "foo = bar" " = ")
       (`(,a ,b) (cons a b))
       (x (format "%S is bad" x)))

(pcase (split-string "a = b = c" " = ")
       (`(,a ,b) (cons a b))
       (x (format "%S is bad" x)))

(pcase "a"      ((pred stringp)           "STR"))
(pcase "a"      ((and (pred stringp) str) (list :str str)))
(pcase "a"      (`,a                      (list :any a)))
(pcase "a"      (a                        (list :any a)))
(pcase '(20 30) (`(,a ,b)                 (list :ab a b)))
(pcase '(20 30) (`(20 ,b)                 (list :b  b)))
(pcase '(20 30) (_                        (list :any)))
(pcase '(20 30) ((and _ foo)              (list :any foo)))


;; Tests: (ee-find-lgreps-expand-re "foo")
;;        (ee-find-lgreps-expand-re '("foo" "bar" "plic"))
;;        (ee-find-lgreps-expand-re '(:stem "foo"))
;;   See: (find-elnode "Backquote Patterns" "defun evaluate")
;;
(defun ee-find-lgreps-expand-re (re)
  "Converts RE into a list of regexps.
RE can be a string, a list of strings, or a list like (:stem s)."
  (pcase re
    ((pred stringp) (list re))
    (`(:stem ,s)    (list (format "\"%s\"" s)
			  (format "[ ']%s[ )]" s)))
    (_              re)))




#####
#
# pcase-quickref
# 2024feb18
#
#####

# «pcase-quickref»  (to ".pcase-quickref")
# (find-angg "elisp/pcase-tests.el")
# (find-es "lpeg" "lpeg-quickref")
# https://www.emacswiki.org/emacs/PatternMatching

`,    (find-elnode "Backquote Patterns" "`(\"first\" ,second-elem)")
_     (find-elnode "pcase Macro" "_ (underscore)")
pred  (find-elnode "pcase Macro" "(pred FUNCTION)")
and   (find-elnode "pcase Macro" "(and PATTERN1...)")
or    (find-elnode "pcase Macro" "(or PATTERN1 PATTERN2...)")
app   (find-elnode "pcase Macro" "(app FUNCTION PATTERN)")
      (find-elnode "pcase Macro" "(app (match-string 1)")

guard (find-elnode "pcase Macro" "(guard BOOLEAN-EXPRESSION)")
let   (find-elnode "pcase Macro" "(let PATTERN EXPR)")


(pcase 

(and 

(guard (symbolp head)




#####
#
# mu4e
# 2021may25
#
#####

# «mu4e»  (to ".mu4e")
# https://www.djcbsoftware.nl/code/mu/
# (find-status   "mu4e")
# (find-vldifile "mu4e.list")
# (find-udfile   "mu4e/")
# (find-fline "/etc/emacs/site-start.d/50mu4e.el")
# (code-c-d "mu4e" "/usr/share/emacs/site-lisp/mu4e/" "mu4e")
# (find-mu4efile "")
# (find-mu4enode "")
# (find-mu4egrep "grep --color=auto -nH --null -e at-point *.el")
# (find-mu4egrep "grep --color=auto -nH --null -e message-at-point *.el")
# (require 'mu4e)




#####
#
# early-init.el
# 2021jun04
#
#####

# «early-init.el»  (to ".early-init.el")
# (find-enode "Init File" "early-init.el")

<kakuhen> it's pretty costly to disable menu bars etc after the GUI
          has been loaded, so I put it all in early-init.el





#####
#
# emacs-libpq
# 2021may30
#
#####

# «emacs-libpq»  (to ".emacs-libpq")
# https://github.com/anse1/emacs-libpq
# (find-git-links "https://github.com/anse1/emacs-libpq" "emacslibpq")
# (code-c-d "emacslibpq" "~/usrc/emacs-libpq/")
# (find-emacslibpqfile "")
# (find-emacslibpqfile "Makefile")
# (find-emacslibpqfile "om")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt-get install libpq-dev postgresql

rm -Rfv ~/usrc/emacs-libpq/
cd      ~/usrc/
git clone https://github.com/anse1/emacs-libpq
cd      ~/usrc/emacs-libpq/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

cd ~/usrc/emacs-libpq/
make clean
make \
  EMACS=$HOME/bigsrc/emacs28/src/emacs \
  EMACS_INCLUDE_DIR=$HOME/bigsrc/emacs28/src/ \
  all check \
  2>&1 | tee om


# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg01067.html Jean Louis
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg01068.html Edrx
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg01069.html Jean Louis
# https://hyperscope.link/3/7/4/9/3/RCD-Database-Basics-37493.html
# https://gnu.support/files/emacs/packages/rcd-db-basics.el



Hi Jean Louis,

I did this,

  sudo apt-get install libpq-dev postgresql

  rm -Rfv ~/usrc/emacs-libpq/
  cd      ~/usrc/
  git clone https://github.com/anse1/emacs-libpq
  cd      ~/usrc/emacs-libpq/

  cd ~/usrc/emacs-libpq/
  make clean
  make \
    EMACS=$HOME/bigsrc/emacs28/src/emacs \
    EMACS_INCLUDE_DIR=$HOME/bigsrc/emacs28/src/ \
    all check \
    2>&1 | tee om

and "make check" failed with several errors like this:

  Test pq-async-notify-test condition:
      (error "FATAL:  role \"edrx\" does not exist\12")

What should I do?
  Cheers, E.
    http://angg.twu.net/#eev




#####
#
# rcd-template
# 2022sep30
#
#####

# «rcd-template»  (to ".rcd-template")
# https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html
# https://gnu.support/files/sources/rcd-template.el




#####
#
# shadowed-keybindings
# 2021jun03
#
#####

# «shadowed-keybindings»  (to ".shadowed-keybindings")
# (find-efile "help.el" "this binding is currently shadowed")
# (find-elnode "Inheritance and Keymaps" "shadowed")





#####
#
# hi-lock
# 2021jun05
#
#####

# «hi-lock»  (to ".hi-lock")
# «highlight-regexp»  (to ".highlight-regexp")
# (find-efunctiondescr 'hi-lock-mode)
# (find-efunction      'hi-lock-mode)
# (find-efunctiondescr 'highlight-regexp)
# (find-efunction      'highlight-regexp)
# (find-enode "Command Index" "* hi-lock-mode:")
# (find-enode "Command Index" "* highlight-regexp:")
# (find-enode "Highlight Interactively" "M-s h")
# (find-efile "hi-lock.el")

(setq hi-shyp-re "(find-.*)$")
(defface hi-shyp-face '((t (:background "DarkOliveGreen"))) "")
(set-face-background 'hi-shyp-face "DarkOliveGreen")
(highlight-regexp hi-shyp-re 'hi-shyp-face)

# (find-eface-links 'hi-shyp-face)
  (find-efaces      "hi-shyp-face")

(highlight-regexp "(find-.*)$" 'hi-shyp-face)
(highlight-regexp "(find-.*)$" 'hi-shyp-face nil)
(highlight-regexp "(find-"     'hi-shyp-face nil)


(hi-lock-mode 1)
(hi-lock-mode 0)





#####
#
# deft
# 2021jul03
#
#####

# «deft»  (to ".deft")
# (find-epackage-links 'deft)
# (find-epackage       'deft)
# (code-c-d "deft" "~/.emacs.d/elpa/deft-20210101.1519/")
# (find-deftfile "")

https://yewtu.be/watch?v=azOPZGO2vso
https://yewtu.be/watch?v=rOSZOCoqOo8
https://www.eliasstorms.net/zetteldeft/

# (find-epackage-links 'zetteldeft)
# (find-epackage       'zetteldeft)
# (code-c-d "zetteldeft" "~/.emacs.d/elpa/zetteldeft-20210602.841/")
# (find-zetteldeftfile "")

https://www.eliasstorms.net/zetteldeft/
https://github.com/ymherklotz/emacs-zettelkasten
https://jblevins.org/projects/deft/







#####
#
# Filenames starting with "/:"
# 2021jul10
#
#####

# «slash-colon»  (to ".slash-colon")
# (find-enode "File Names" "/:")
# (find-enode "Quoted File Names")

Run this on scratch:

(find-file-read-args "Find file: "
                        (confirm-nonexistent-file-or-buffer))



#####
#
# Zachary Kanfer: Making Music! In Emacs?!
# 2021jul13
#
#####

# «kanfer-bangbangcon2021»  (to ".kanfer-bangbangcon2021")

https://zck.org/bangbangcon2021 !!Con 2021: Making Music! In Emacs?!
https://bangbangcon.com/
https://bangbangcon.com/speakers.html#zachary-kanfer
https://bangbangcon.com/recordings.html




#####
#
# pop-to-buffer
# 2021jul16
#
#####

# «pop-to-buffer»  (to ".pop-to-buffer")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-07/msg00372.html my question
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-07/msg00385.html stefan's answer
# (find-egrep "grep --color=auto -nH --null -e display-buffer-overriding-action *.el */*.el")
# (find-elnode "Index" "* display-buffer-overriding-action:")
# (find-evardescr 'display-buffer-overriding-action)
# (find-evariable 'display-buffer-overriding-action)

# (find-egrep "grep --color=auto -nH -e inhibit-same-window *.el */*.el")

# (find-efunctiondescr   'display-buffer)
# (find-efunction        'display-buffer)
# (find-elnode "Index" "* display-buffer:")




#####
#
# slime
# 2021jul17
#
#####

# «slime»  (to ".slime")
# http://www.youtube.com/watch?v=_B_4vhsmRRI Marco Baringer's SLIME Tutorial Video
# http://www.youtube.com/watch?v=NUpAvqa5hQw Marco Baringer's SLIME Screencast (2005)



#####
#
# elpher
# 2021jul19
#
#####

# «elpher»  (to ".elpher")
# https://alexschroeder.ch/wiki/2021-07-14_Elpher_as_the_universal_browser_for_Emacs




#####
#
# Packages that change the mode lighters in the mode line
# 2021jul25
#
#####

# «mode-line-packages»  (to ".mode-line-packages")
# (find-epackage-links 'blackout)
# (find-epackage-links 'delight)
# (find-epackage-links 'dim)
# (find-epackage-links 'diminish)




#####
#
# emacs-framebuffer
# 2021jul31
#
#####

# «emacs-framebuffer»  (to ".emacs-framebuffer")
# https://logand.com/git/emacs-framebuffer.git
# (find-git-links "https://logand.com/git/emacs-framebuffer.git" "emacsfb")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/emacs-framebuffer/
cd      ~/usrc/
git clone https://logand.com/git/emacs-framebuffer.git
cd      ~/usrc/emacs-framebuffer/

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/emacs-framebuffer/")
# (find-gitk  "~/usrc/emacs-framebuffer/")

# (code-c-d "emacsfb" "~/usrc/emacs-framebuffer/")
# (find-emacsfbfile "")




#####
#
# async
# 2021aug07
#
#####

# «async»  (to ".async")
# (find-epackage-links 'async "async" t)
# (find-epackage       'async)
# (code-c-d "async" "~/.emacs.d/elpa/async-20210501.1527/")
# (find-asyncfile "")

https://lists.gnu.org/archive/html/emacs-devel/2023-04/msg00272.html

I thought the async-emacs example was pretty cool:

(let ((a (async-emacs '(or (sleep-for 5) 5)))
      (b (async-emacs '(or (sleep-for 2) 2))))
  (+ 1 (await-emacs a) (await-emacs b)))

and I can make it not block emacs easily like this:

(make-thread
 (lambda ()
   (print
    (let ((a (async-emacs '(or (sleep-for 5) 5)))
          (b (async-emacs '(or (sleep-for 2) 2))))
      (+ 1 (await-emacs a) (await-emacs b))))))




#####
#
# moldable-emacs
# 2021aug07
#
#####

# «moldable-emacs»  (to ".moldable-emacs")
# https://github.com/ag91/moldable-emacs
# (find-git-links "https://github.com/ag91/moldable-emacs" "moldableemacs")
# (code-c-d "moldableemacs" "~/usrc/moldable-emacs/")
# (find-moldableemacsfile "")
# https://ag91.github.io/blog/2021/08/06/moldable-emacs-evaluate-arithmetic-at-point/

# (find-fline "~/usrc/moldable-emacs/")
# (add-to-list 'load-path "~/usrc/moldable-emacs/")
# (require 'moldable-emacs)
# (require 'cl)




#####
#
# debbugs
# 2021aug21
#
#####

# «debbugs»  (to ".debbugs")
# (find-epackage-links 'debbugs "debbugs" t)
# (find-epackage       'debbugs)
# (code-c-d "debbugs" "~/.emacs.d/elpa/debbugs-0.28/")
# (find-debbugsfile "")
# (find-node "(debbugs)Top")
# (find-node "(debbugs-ug)Top")
# (find-fline "~/LOGS/2021aug20.emacs" "debbugs-gnu-search")
# (find-fline "~/LOGS/2021aug20.emacs" "These frontends")




#####
#
# sketch-mode
# 2021aug30
#
#####

# «sketch-mode»  (to ".sketch-mode")
# https://github.com/dalanicolai/sketch-mode
# (find-git-links "https://github.com/dalanicolai/sketch-mode" "sketchmode")
# (code-c-d "sketchmode" "~/usrc/sketch-mode/")
# (find-sketchmodefile "")
# (find-sketchmodefile "sketch-mode.el")

# (add-to-list 'load-path "~/usrc/sketch-mode/")
# (require 'sketch-mode)

https://elpa.gnu.org/packages/sketch-mode.html





#####
#
# "A very minimal but elegant emacs (I think)" - by Nicolas P. Rougier
# 2021sep07
#
#####

# «elegant-emacs»  (to ".elegant-emacs")
# https://github.com/rougier/elegant-emacs




#####
#
# ert
# 2022mar29
#
#####

# «ert»  (to ".ert")
# (find-efunctiondescr 'ert-deftest)
# (find-efunction      'ert-deftest)




#####
#
# peg
# 2021sep09
#
#####

# «peg»  (to ".peg")
# (find-epackage-links 'peg "peg" t)
# (find-epackage       'peg)
# (code-c-d "peg" "~/.emacs.d/elpa/peg-1.0/")
# (find-pegfile "")
# (find-pegfile "peg-tests.el")
# (find-pegfile "peg.el")
# (require 'peg-tests)

# (find-efunctiondescr 'peg-run)
# (find-efunction      'peg-run)

(peg-run
 (peg "\n" (or (replace "a" "(AA)") (replace "b" "(BB)")))
 )

(setq mypeg (peg "\n" (or (replace "a" "(AA)") (replace "b" "(BB)"))))

(peg "\nab")
(peg-run (peg "\na" "b"))
abc

(peg-run (peg "\n" (replace "a" "b")))
bbc







(find-epp mypeg)



peg-test-natural "99 bottles" t))





#####
#
# deb-view
# 2021sep09
#
#####

# «deb-view»  (to ".deb-view")
# (find-epackage-links 'debian-el "debianel" t)
# (find-epackage       'debian-el)
# (code-c-d "debianel" "~/.emacs.d/elpa/debian-el-20201011.1543/")
# (find-debianelfile "")
# (find-debianelfile "deb-view.el")





#####
#
# blink-matching-paren
# 2021sep30
#
#####

# «blink-matching-paren»  (to ".blink-matching-paren")
# «show-paren-mode»  (to ".show-paren-mode")
# (find-angg ".emacs"  "show-paren-mode")
# (find-eapropos-links "show-paren")
# (find-eaproposv      "show-paren")
# (find-eaproposf      "show-paren")
# (find-eapropos       "show-paren")

# (find-enode "Matching")
# (find-enode "Variable Index" "* blink-matching-paren:")
# (find-evardescr 'blink-matching-paren)
# (find-evariable 'blink-matching-paren)
# (find-efunction 'blink-matching-open)
# (find-efunction 'self-insert-command)
# (find-evardescr 'post-self-insert-hook)
# (find-evariable 'post-self-insert-hook)
# (find-efunction 'blink-paren-post-self-insert-function)

# (find-enode "Command Index" "* show-paren-mode:")
# (find-efunctiondescr 'show-paren-mode)
# (find-efunction      'show-paren-mode)
# (find-evardescr 'show-paren-when-point-inside-paren)
# (find-evariable 'show-paren-when-point-inside-paren)
# (find-efaces      'show-paren-match)
# (find-eface-links 'show-paren-match)
# (find-esh "cd .. && git show ee856b76" "Enable show-paren-mode by default")

# https://github.com/Fanael/rainbow-delimiters
# https://www.emacswiki.org/emacs/RainbowDelimiters
# (find-epackage-links 'rainbow-delimiters "rainbowdelimiters" t)
# (find-epackage       'rainbow-delimiters)

# (find-eetcfile "NEWS.28" "show-paren-mode")
# (find-eetcfile "NEWS.28" "blink-cursor-mode")

(setq show-paren-mode nil)
(setq show-paren-mode t)
(setq blink-cursor-mode nil)
(setq blink-cursor-mode t)

# show-paren-delay:
# https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00466.html

# (find-fline "~/bigsrc/emacs28/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
export PAGER=cat
cd ~/bigsrc/emacs28/
git log -G'show-paren-mode'   --since='1 month ago' |& tee /tmp/ospm
git log -G'blink-cursor-mode' --since='1 month ago' |& tee /tmp/obcm
git show ee856b76

# (find-fline "/tmp/obcm")
# (find-fline "/tmp/ospm")

# (find-sh "cd ~/bigsrc/emacs28/ && git show ee856b76" "Enable show-paren-mode by default")





# https://sr.ht/~tsdh/highlight-parentheses.el/




#####
#
# media-2021.1
# 2021sep30
#
#####

# «media-2021.1»  (to ".media-2021.1")
# (find-fline "~/TH/2021.1-C2.blogme" "Notas:")
# (find-fline "~/TH/2021.1-C3.blogme" "Notas:")

(defun media (li0)
  (let* ((li1 (replace-regexp-in-string "[0-9.]+->" "" li0))
	 (li2 (replace-regexp-in-string ":[!-~]+"   "" li1))
	 (a (read (format "(%s)" li2)))
	 (b (-filter 'numberp a))
	 (c `(* 0.5 (+ ,@ b)))
	 (d (eval c))
	 (e (format "%S -> %S" c d))
	 ;; (e (format "%S %S -> %S" li0 c d))
	 )
    e))

(setq li0 "Emily CFN        -      -       10.0   8.5    Ap")
(setq li0 "Emily CFN        -      -  4.0->10.0   8.5    Ap :42")

(media li0)

(defun m () (interactive) (message (media (ee-this-line0))))




#####
#
# Little Man Computer in Elisp
# 2021oct02
#
#####

# «lmc»  (to ".lmc")
# (find-epackage-links 'lmc "lmc" t)
# (find-epackage       'lmc)
# (code-c-d "lmc" "~/.emacs.d/elpa/lmc-1.4/")
# (find-lmcfile "")
# https://elpa.gnu.org/packages/lmc.html
# http://en.wikipedia.org/wiki/Little_man_computer




#####
#
# ESS: Emacs Speaks Statistics
# 2021oct02
#
#####

# «ess»  (to ".ess")
# https://ess.r-project.org/
# https://github.com/emacs-ess/ESS
# https://en.wikipedia.org/wiki/Emacs_Speaks_Statistics
# https://www.emacswiki.org/emacs/EmacsSpeaksStatistics
# https://www.emacswiki.org/emacs/ESSShiftEnter

# (find-epackage-links 'ess "ess" t)
# (find-epackage       'ess)
# (code-c-d "ess" "~/.emacs.d/elpa/ess-20210924.1606/")
# (find-essfile "")
# (find-essfile "ess-toolbar.el" "Creating global Emacs toolbar")

Creating global Emacs toolbar



#####
#
# eval-in-repl
# 2021oct02
#
#####

# «eval-in-repl»  (to ".eval-in-repl")
# (find-epackage-links 'eval-in-repl "evalinrepl" t)
# (find-epackage       'eval-in-repl)
# https://github.com/kaz-yos/eval-in-repl
# (code-c-d "evalinrepl" "~/.emacs.d/elpa/eval-in-repl-20201121.1341/")
# (find-evalinreplfile "")
# (find-evalinreplfile "eval-in-repl-shell.el")
# (find-evalinreplgrep "grep --color=auto -nH --null -e comint *.el")
# (find-evalinreplgrep "grep --color=auto -nH --null -e term *.el")

# (require 'term)
# (require 'vterm)
# (find-efunctiondescr 'comint-send-input)
# (find-efunction      'comint-send-input)
# (find-efunctiondescr 'term-send-input)
# (find-efunction      'term-send-input)
# (find-efunctiondescr 'term-send-string)
# (find-efunction      'term-send-string)
# (find-efunctiondescr 'vterm-send-return)
# (find-efunction      'vterm-send-return)



#####
#
# ansi-term
# 2021oct04
#
#####

# «ansi-term»  (to ".ansi-term")
# (find-eev "eepitch.el" "eepitch-ansiterm")
# (find-es "w32" "eepitch-pwsh")
# (find-elnode "Process Information")

# (find-efunctiondescr 'ansi-term)
# (find-efunction 'ansi-term)

(defun eepitch-pwsh () (interactive) (eepitch-comint "pwsh" "pwsh"))
(defun eepitch-pwsh () (interactive) (eepitch-vterm "pwsh" "pwsh"))
(defun eepitch-pwsh () (interactive) (eepitch '(ansi-term "pwsh")))
(defun eepitch-pwsh  () (interactive) (eepitch-ansiterm "pwsh" "pwsh"))
(defun eepitch-pwsh2 () (interactive) (eepitch-ansiterm "pwsh" "pwsh 2"))

# (find-elgrep "grep --color=auto -nH --null -e term-send term.el")
# (find-efunction 'term-send-string)
# (find-efunction 'term-send-input)
# (find-efunction 'term-simple-send)
# (find-evariable 'term-raw-map)
# (find-efunction 'term-send-raw)



#####
#
# ansi-color
# 2024mar24
#
#####

# «ansi-color»  (to ".ansi-color")
# (find-efile "ansi-color.el")
# (find-efile "ansi-color.el" "ls --color=yes")
# (find-evardescr 'ansi-color-normal-colors-vector)
# (find-evariable 'ansi-color-normal-colors-vector)

* (eepitch-ansiterm)
* (eepitch-kill)
* (eepitch-ansiterm)
cd ~/luatree/
ls
'ls' -lAF --color=yes
'ls' -lAF --color=yes | tee /tmp/o

# (find-fline "/tmp/o")
# (find-man "echo")

echo ".\e[01;30m(BLACK)\e[0m."
echo ".\e[01;31m(RED)\e[0m."
echo ".\e[01;32m(GREEN)\e[0m."
echo ".\e[01;33m(YELLOW)\e[0m."
echo ".\e[01;34m(BLUE)\e[0m."
echo ".\e[01;35m(MAGENTA)\e[0m."
echo ".\e[01;36m(CYAN)\e[0m."
echo ".\e[01;37m(WHITE)\e[0m."





#####
#
# url-retrieve
# 2019jun24
#
#####

# «url-retrieve» (to ".url-retrieve")
# (find-node "(url)")
# (find-node "(url)Retrieving URLs")
# (find-node "(url)Retrieving URLs" "url-retrieve-synchronously")
# (find-node "(url)Function Index")
# (find-node "(url)Supported URL Types")
# (find-efunction 'url-retrieve)
# (find-efunction 'url-retrieve-synchronously)
# (find-elgrep "zgrep --color -nH -e url-retrieve *.el *.el.gz")
# (find-elgrep "zgrep --color -nH -e url-retrieve */*.el */*.el.gz")
# (find-elgrep "zgrep --color -nH -e encoding url/*")
# (find-elgrep "zgrep --color -niH -e download emacs-lisp/*")
# (find-efile "url/")

# (find-angggrep "grep --color -nH -e https TODO")

(setq myurl "http://angg.twu.net/LATEX/edrxaccents.tex")

(progn
  (find-ebuffer (url-retrieve-synchronously myurl))
  (ee-goto-position 1 "\n\n")
  (prog1
    (buffer-substring (point) (point-max))
    (ee-kill-this-buffer)
    )
  )

(defun ee-urlretrieve (url)
  (find-ebuffer (url-retrieve-synchronously url))
  (ee-goto-position 1 "\n\n")
  (prog1
    (buffer-substring (point) (point-max))
    (ee-kill-this-buffer)))

;; (find-efunction 'ee-write-string)
;; (find-efunction 'replace-regexp-in-string)

(ee-write-string (ee-urlretrieve myurl) "/tmp/o")
# (find-fline "/tmp/o")

(find-ebuffer (url-retrieve-synchronously "http://angg.twu.net/notfound"))

# Not working:
# (require 'url-about)
# (find-efunction 'url-about)
# (url-about "http://angg.twu.net/")
# (url-about "http://angg.twu.net/notfound")
# (find-node "(url)URI Parsing")
# (url-generic-parse-url "http://angg.twu.net/")
# (url-about (url-generic-parse-url "http://angg.twu.net/"))






#####
#
# find-urlretrieve (old version)
# 2019jun24
#
#####

# «find-urlretrieve» (to ".find-urlretrieve")
# New: (find-angg "elisp/url-retrieve-test.el")
# Old: (find-eev "eev-plinks.el" "find-urlretrieve")

;; (find-urlretrieve00 "http://angg.twu.net/notfound")
;; (find-urlretrieve00 "http://angg.twu.net/notfound" 1)
;; (find-urlretrieve0  "http://angg.twu.net/notfound")
;; (find-urlretrieve00 "http://angg.twu.net/LATEX/edrxaccents.tex")
;; (find-urlretrieve00 "http://angg.twu.net/LATEX/edrxaccents.tex" 1 "\n\n")
;; (find-urlretrieve   "http://angg.twu.net/LATEX/edrxaccents.tex")
;; (find-urlretrieve00 "http://angg.twu.net/eev-current/eev-math-glyphs.el")
;; (find-urlretrieve00 "https://tug.org/tug2018/program.html" 1 "\n\n")
;; (find-urlretrieve00 "file:///tmp/")

(setq shb (find-urlretrieve-3 "http://angg.twu.net/notfound"))
(nth 0 shb)
(nth 1 shb)
(nth 2 shb)

# https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session
# https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Server_response
# https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
# https://en.wikipedia.org/wiki/HTTP_message_body
# https://en.wikipedia.org/wiki/HTTP_response_header_field

# (find-efunctiondescr 'url-insert-file-contents)
# (find-efunction      'url-insert-file-contents)
# (find-elnode "Index" "* url-insert-file-contents:")





#####
#
# workshop-2021-wget
# 2021oct03
#
#####

# «workshop-2021-wget»  (to ".workshop-2021-wget")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00059.html

# (to "emacs-devel-mbox")
# (find-emacsdevelmboxgrep "grep --color=auto -nH --null -e wget *")
# (find-emacsdevelmboxfile "2019-06" "we need wget(or equivalent)")
#  https://lists.gnu.org/archive/html/emacs-devel/2019-06/msg00205.html

# (find-emacsdevelmboxfile "2020-05" "that call `wget` or a packages manager")
#   https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg01696.html

# (find-emacsdevelmboxfile "2020-09" "some dodgy wget")
#   https://lists.gnu.org/archive/html/emacs-devel/2020-09/msg02221.html

# (find-emacsdevelmboxfile "2021-03" "libwget from GNU Wget2")
# (find-emacsdevelmboxfile "2021-03" "gitlab.com/gnuwget/wget2/")
# (find-emacsdevelmboxfile "2021-03" "libwget from GNU Wget2")
# (find-emacsdevelmboxfile "2021-03" "wget2 is definitely a GNU program")
# (find-emacsdevelmboxfile "2021-03" "libwget the same way as cURL")
# (find-emacsdevelmboxfile "2021-06" "wget and lftp and I can")
#  https://lists.gnu.org/archive/html/emacs-devel/2021-03/threads.html#01359
#  https://lists.gnu.org/archive/html/emacs-devel/2021-02/threads.html

# https://lists.gnu.org/archive/html/help-gnu-emacs/2008-02/threads.html#00045
# https://lists.gnu.org/archive/html/help-gnu-emacs/2008-02/msg00094.html
# https://lists.gnu.org/archive/html/help-gnu-emacs/2008-02/msg00111.html

# (find-fline "/tmp/foo.tex")




#####
#
# eval-after-load
# 2021oct06
#
#####

# «eval-after-load»  (to ".eval-after-load")
# (find-angg ".emacs" "tex-insert-quote")
# (find-angggrep "grep --color=auto -nH --null -e eval-after-load .emacs")
# https://stackoverflow.com/questions/21880139/what-is-with-eval-after-load-in-emacs-lisp/21880276
# (find-efunctiondescr 'with-eval-after-load)
# (find-efunction      'with-eval-after-load)
# (find-efunction      'with-eval-after-load "(declare (indent 1)")
# (find-efunctiondescr 'eval-after-load)
# (find-efunction      'eval-after-load)
# (find-evardescr 'after-load-alist)
# (find-evariable 'after-load-alist)

2022sep05:

(with-eval-after-load 'latex
  (define-key LaTeX-mode-map (kbd "C-c a") #'my-bar)
  (define-key LaTeX-mode-map (kbd "C-c b") #'my-foo))





#####
#
# benchmark
# 2021oct09 / 2024sep30
#
#####

# «benchmark»  (to ".benchmark")
# (find-elnode "Profiling" "benchmark")
# (find-elnode "Profiling" "profiler-start")
# (find-elnode "Profiling" "profiler-report")
# (find-es "sqlite" "surprisingly-slow")

https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00430.html profiler-start
https://emacsconf.org/2021/talks/faster Dmitri Gutov - has a demo of the profiler



#####
#
# subhuman's benchmark macros
# 2024sep30
#
#####

# «benchmark-subhuman»  (to ".benchmark-subhuman")
# (find-fline "~/LOGS/2024sep29.emacs")
# (find-fline "~/LOGS/2024sep29.emacs" "https://0x0.st/Xg2S.txt")
# (find-fline "~/LOGS/2024sep29.emacs" "https://0x0.st/Xg2p.txt")
# (find-wget-elisp "https://0x0.st/Xg2S.txt")
# (find-wget-elisp "https://0x0.st/Xg2p.txt")

;; From: (find-wget-elisp "https://0x0.st/Xg2S.txt")
;; (ee-copy-rest-3m nil ";;-- end" "/tmp/subhuman-msg.el")

(defmacro benchmark-form (form)
  (declare (indent 0) (debug t))
  (let ((t1 (make-symbol "t1")))
    `(let ((,t1 (current-time)))
       (prog1 ,form
	 (message "%s: %s" ',form (float-time (time-since ,t1)))))))

(defmacro benchmark-topforms (&rest forms)
  (macroexp-progn
   (mapcar (lambda (form)
	     (list 'benchmark-form form))
	   forms)))

;; Mem

(benchmark-topforms
 (setq db (sqlite-open))
 (sqlite-execute db "CREATE  TABLE tbl1 (col1, col2);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (10, 20);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (30, 40);")
 (sqlite-select  db "SELECT * FROM tbl1;")
 (sqlite-close db))

;; Disk

(benchmark-topforms
 (delete-file "/tmp/foo.db")
 (setq db (sqlite-open "/tmp/foo.db"))
 (sqlite-execute db "CREATE  TABLE tbl1 (col1, col2);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (10, 20);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (30, 40);")
 (sqlite-select  db "SELECT * FROM tbl1;")
 (sqlite-close db))

;;-- end
;; ------------------------------------------------------------
;; From: (find-wget-elisp "https://0x0.st/Xg2p.txt")
;; (ee-copy-rest-3m nil ";;-- end" "/tmp/subhuman-cons.el")

(defmacro benchmark-form (form)
  (declare (indent 0) (debug t))
  (let ((t1 (make-symbol "t1")))
    `(let ((,t1 (current-time)))
       (progn
	 ,form
	 (cons ',form (float-time (time-since ,t1)))))))

(defmacro benchmark-topforms (&rest forms)
  `(progn
     (list ,@(mapcar
	      (lambda (form)
		`(benchmark-form
		   ,form))
	      forms))))

;; Mem

(benchmark-topforms
 (setq db (sqlite-open))
 (sqlite-execute db "CREATE  TABLE tbl1 (col1, col2);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (10, 20);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (30, 40);")
 (sqlite-select  db "SELECT * FROM tbl1;")
 (sqlite-close db))

;; Disk

(benchmark-topforms
 (delete-file "/tmp/foo.db")
 (setq db (sqlite-open "/tmp/foo.db"))
 (sqlite-execute db "CREATE  TABLE tbl1 (col1, col2);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (10, 20);")
 (sqlite-execute db "INSERT   INTO tbl1 VALUES (30, 40);")
 (sqlite-select  db "SELECT * FROM tbl1;")
 (sqlite-close db))

;;-- end








#####
#
# debug-on-entry
# 2021oct20
#
#####

# «debug-on-entry»  (to ".debug-on-entry")
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgzGlkPSlQGJZwdFsFqbkdRnVclKr
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01069.html
# (find-elnode "Function Debugging")

M-x debug-on-entry RET execute-extended-command--shorter RET
M-x find-eev-quick-intro RET

debug-on-entry RET execute-extended-command--shorter RET

(cancel-debug-on-entry 'execute-extended-command--shorter)
       (debug-on-entry 'execute-extended-command--shorter)




#####
#
# parse-colon-path (try to rewrite ee-dospath-add using it)
# 2021oct09
#
#####

# «parse-colon-path»  (to ".parse-colon-path")
# (find-elnode "System Environment" "Variable: path-separator")
# (find-elnode "System Environment" "Function: parse-colon-path path")
# (find-efunctiondescr 'parse-colon-path)
# (find-efunction      'parse-colon-path)
# (find-eppp (parse-colon-path (getenv "PATH")))
# (find-egrep "grep --color=auto -nH --null -e parse-colon-path *.el */*.el")

# «ee-dospath-add»  (to ".ee-dospath-add")
# From: (find-eev "eev-on-windows.el" "ee-add-to-PATH")

;; The last time that I used these functions to change the Windows PATH
;; was in 2019. In this message Eli Zaretskii recommended not changing
;; the PATH, and he was totally right:
;;   https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00052.html

(defun ee-dospath-to-unix (str)
  (replace-regexp-in-string "\\\\" "/" str))
(defun ee-dospath-to-dos (str)
  (replace-regexp-in-string "/" "\\\\" str))
(defun ee-dospath-split (str)
  (split-string str ";"))
(defun ee-dospath-unsplit (list)
  (mapconcat 'identity list ";"))

(defun ee-dospath-add (path dir)
  (setq dir  (ee-dospath-to-dos dir))
  (setq path (ee-dospath-to-dos path))
  (let* ((list (ee-dospath-split path))
         (newlist (cons dir (delete dir list))))
    (ee-dospath-unsplit newlist)))

(defun ee-add-to-PATH (dir)
  (setenv "PATH" (ee-dospath-add (getenv "PATH") dir)))

;; (setq mylist '(22 33 44))
;; (add-to-list 'mylist 44)
;;
;; (ee-dospath-add "A;B;C" "B")
;; (ee-dospath-add "A;B;C" "c:/B")
;;
;; (let* ((a 2) (a (* 10 a)) (a (+ 3 a))) a)
;;
;; (find-elnode "Index" "* delete:")




#####
#
# borg
# 2021oct13
#
#####

# «borg»  (to ".borg")
# https://github.com/emacscollective/borg
# (code-c-d "borg" "~/usrc/borg/")
# (find-borgfile "")
# https://emacsconf.org/2021/talks/
# https://emacsconf.org/2021/talks/borg/




#####
#
# declare-indent
# 2021oct15
#
#####

# «declare-indent»  (to ".declare-indent")
# (find-elnode "Declare Form" "(indent INDENT-SPEC)")
# (find-egrep "grep --color=auto -nH --null -e declare *.el */*.el | grep -a indent")





#####
#
# M-x-nasty-delay-bug
# 2021oct10
#
#####

# «M-x-nasty-delay-bug»  (to ".M-x-nasty-delay-bug")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00232.html Edrx
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00240.html Stefan
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00247.html Eli
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00259.html MH
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00261.html Edrx 2
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00265.html MH 2
# https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00280.html MH 3
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg00979.html Edrx 3
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01019.html LI
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01026.html Eli
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01047.html Stefan
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01068.html Edrx 4
# 
# (find-efunction 'execute-extended-command)
# (find-evardescr 'extended-command-suggest-shorter)
# (find-evariable 'extended-command-suggest-shorter)
# (find-fline "~/LOGS/2021oct10.emacs" "execute-extended-command--shorter")

Put this in: (find-fline "/tmp/foo.el")

(progn
  (add-to-list 'load-path "~/eev-current")
  ;; (require 'eev-beginner)
  (require 'eev-load)
  (eev-mode 1)
  )


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

emacs27_0    -Q -l /tmp/foo.el &
emacs28_ 128 -Q -l /tmp/foo.el &
emacs28_0    -Q -l /tmp/foo.el &
emacs28_0                      &

You can run the command `find-eev-install-intro' with `M-x f--i-i'


  (eek "M-h M-k  M-x  ;; execute-extended-command")
        (find-efunction 'execute-extended-command)
        (find-efunction 'execute-extended-command "You can run the command")
        (find-efunction 'execute-extended-command "execute-extended-command--shorter")
  Slow: (find-efunction 'execute-extended-command--shorter)
  Fast: (find-efunction 'execute-extended-command--shorter-1)

             (execute-extended-command--shorter   "find-eev-quick-intro" "find-eev-qui")
             (execute-extended-command--shorter-1 "find-eev-quick-intro" 12)
  (find-eppp (execute-extended-command--shorter-1 "find-eev-quick-intro" 12))

  (setq debug-on-quit t)
  (setq debug-on-quit nil)



Hi Michael,

I can reproduce it without M-x.

This takes 10 seconds:

  (execute-extended-command--shorter   "find-eev-quick-intro" "find-eev-qui")

This executes very quickly:

  (execute-extended-command--shorter-1 "find-eev-quick-intro" 12)

If I run `(setq debug-on-quit t)' and I hit a C-g during the execution
of the sexp that takes a long time I get a "*Backtrace*" buffer whose
top lines are these ones,

  (...)

I repeated that 10 times and in all the times the "*Backtrace*" buffer
had something like this:

  #f(compiled-function (style) #<bytecode -0xd2f4350b61385a2>)(partial-completion)
  completion--some(...)
  completion--nth-completion(...)
  completion-try-completion(...)

Cheers,
  Eduardo Ochs
  http://angg.twu.net/#eev






#####
#
# Wrong number of arguments: (2 . 2), 3
# 2021nov01
#
#####

# «wrong-number-of-arguments»  (to ".wrong-number-of-arguments")
# https://mail.google.com/mail/u/0/#inbox/KtbxLwgswSGHQDNLSDTLvFNqBQMMzNpwxB
;; (ee-download-with-eww "http://angg.twu.net/2021-oficina/wget.exe" "~/bin/")

e o *Messages* diz

Contacting host: angg.twu.net:80
#<buffer  *http angg.twu.net:80*>
error in process filter: apply: Wrong number of arguments: (2 . 2), 3
error in process filter: Wrong number of arguments: (2 . 2), 3

(let ((default-directory "~/bigsrc/emacs28/src/"))
  (grep "grep --color=auto -nH --null -e 'Wrong number' *.c *.h")
  )

(let ((default-directory "~/bigsrc/emacs28/src/"))
  (grep "grep --color=auto -nH --null -e 'Qwrong_number_of_arguments' *.c *.h")
  )

# (find-fline "~/bigsrc/emacs28/src/data.c" "Wrong number of arguments")
# (find-fline "~/bigsrc/emacs28/src/bytecode.c" "Qwrong_number_of_arguments")

      if (! (mandatory <= nargs && nargs <= maxargs))
	Fsignal (Qwrong_number_of_arguments,
		 list2 (Fcons (make_fixnum (mandatory), make_fixnum (nonrest)),
			make_fixnum (nargs)));



#####
#
# emojis
# 2021nov14
#
#####

# «emojis»  (to ".emojis")
# (find-status   "fonts-noto-color-emoji")
# (find-vldifile "fonts-noto-color-emoji.list")
# (find-udfile   "fonts-noto-color-emoji/")
# (find-efile "")
# (find-esh "find * | grep emoji")
# (find-efile "international/emoji-zwj.el")
# (find-efile "international/emoji.el")
# (find-fline "~/bigsrc/emacs28/admin/unidata/")
# (find-fline "~/bigsrc/emacs28/admin/unidata/emoji-test.txt")
# (find-efunction 'emoji-search)
# (find-eetcfile "NEWS" "new methods for inserting Emojis")
# (find-eetcfile "NEWS" "emoji-zoom-increase")
# (find-eetcfile "NEWS" "New input method 'emoji'")

https://javier.xyz/emoji-to-scale/
https://askubuntu.com/questions/1083913/what-does-ctrl-shift-e-do-while-typing-text/1083923#1083923

 ---
+*** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'.
+These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively.  They
+can be used on any character, but are mainly useful for emoji.
+
+---
 *** New input method 'emoji'.
 This allows you to enter emoji using short strings, eg ':face_palm:'
 or ':scream:'.




#####
#
# A question about emojis - like \N{HEAVY BLACK HEART}
# 2023feb04
#
#####

# «emoji-heavy-black-heart»  (to ".emoji-heavy-black-heart")
# (find-angg ".emacs" "emojis")
# (find-angg ".emacs" "emojis" "(defun emy ()")
# (find-es "eev" "find-estring-mini")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-02/msg00017.html Edrx 1
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-02/msg00020.html Eliz 2
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-02/msg00022.html Edrx 3 
# (find-fline "/usr/share/unicode/UnicodeData.txt" "FE0F;VARIATION SELECTOR-16")
# (find-elnode "General Escape Syntax" "?\\N{LATIN SMALL LETTER A WITH GRAVE}")
# (find-elnode "General Escape Syntax" "?\\N{U+X}")
# (find-efunction 'emoji-list)
# (find-efunction 'emoji--list-generate)

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
bigstr = ee_readfile "/tmp/emojis-my"
tohex2  = function (n) return format("%02X", n) end
= tohex2(62)
f = function (c)
    local b = string.byte(c)
    if b > 126 then return "("..tohex2(b)..")" end
  end
bigstr2 = bigstr:gsub(".", f)
= bigstr2





#####
#
# Info-goto-node-web
# 2021nov16
#
#####

# «Info-goto-node-web»  (to ".Info-goto-node-web")
# https://mail.google.com/mail/u/0/#sent/KtbxLzFvPknXDLqscCCKzHLbGjbzqhdzcL

# (find-efunctiondescr 'Info-goto-node-web)
# (find-efunction      'Info-goto-node-web)
# (find-efunctiondescr 'Info-url-for-node)
# (find-efunction      'Info-url-for-node)




#####
#
# tui
# 2021nov28
#
#####

# «tui»  (to ".tui")
# https://emacsconf.org/2021/talks/ui/

# https://github.com/ebpa/tui.el
# (find-git-links "https://github.com/ebpa/tui.el" "tui")
# (find-evardescr 'package-archives)
# (find-efunctiondescr 'add-to-list)
# (code-c-d "tui" "~/usrc/tui.el/")
# (find-tuifile "")
# (find-tuifile "README.org" "*** Manually")
# (find-tuifile "demo/tui-tic-tac-toe.el")

(add-to-list 'load-path "~/usrc/tui.el/")

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(package-initialize)
(package-refresh-contents)
(package-install 's)
(package-install 'dash-functional)

(require 'tui)

(add-to-list 'load-path "~/usrc/tui.el/benchmark/")
(add-to-list 'load-path "~/usrc/tui.el/components/")
(add-to-list 'load-path "~/usrc/tui.el/demo/")
(add-to-list 'load-path "~/usrc/tui.el/images/")
(add-to-list 'load-path "~/usrc/tui.el/layout/")
(add-to-list 'load-path "~/usrc/tui.el/snippets/")
(add-to-list 'load-path "~/usrc/tui.el/test/")

(require 'tui-tic-tac-toe)

;; (find-efunctiondescr 'tui-play-tic-tac-toe)
;; (find-efunction      'tui-play-tic-tac-toe)
;; (tui-play-tic-tac-toe)




#####
#
# native-compilation
# 2021nov28
#
#####

# «native-compilation»  (to ".native-compilation")
# (find-es "git" "emacs30-from-git")
# (find-es "git" "emacs30-from-git" "--with-native-compilation")
# (find-elnode "Native Compilation")
# (find-elnode "Native-Compilation Variables")
# (find-elnode "Native-Compilation Variables" "native-comp-jit-compilation")
# (native-comp-available-p)
# native-comp-jit-compilation
# (find-customizegroup 'comp-common)
# (find-eppp native-comp-eln-load-path)
# (find-fline "~/.emacs.d/eln-cache/30.0.50-9d8fccd6/")
# (find-fline "~/bigsrc/emacs30/native-lisp/30.0.50-9d8fccd6/")

# (find-zsh "availabledebs | sort | grep libgccjit")
# (find-status   "libgccjit-10-dev")
# (find-vldifile "libgccjit-10-dev:amd64.list")
# (find-udfile   "libgccjit-10-dev/")
# (find-es "git" "emacs30-from-git")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti libgccjit-10-dev

# Old:
# (code-c-d "emacs28" "~/bigsrc/emacs28/")
# (find-emacs28file "")
# (find-emacs28sh "find * | sort")
# (find-emacs28sh "find * | sort | grep -i nativ")
# (find-emacs28file "configure.ac" "native-compilation")
# (find-egrep "grep --color=auto -nH --null -e native-comp *.el */*.el")
# (find-efile "emacs-lisp/comp.el")

# https://emacsconf.org/2021/talks/native/






#####
#
# rainbow-mode
# 2024mar03
#
#####

# «rainbow-mode»  (to ".rainbow-mode")

# (find-epackage-links 'rainbow-mode "rainbowmode" t)
# (find-epackage       'rainbow-mode)
# (code-c-d "rainbowmode" "~/.emacs.d/elpa/rainbow-mode-1.0.5/")
# (find-rainbowmodefile "")

(package-install 'rainbow-mode)





#####
#
# Making find-efunction point to where an alias is defined
# 2021dec05
#
#####

# «find-ealias»  (to ".find-ealias")
# (find-angg "elisp/find-ealias.el")
# (find-efunction-links   'etr)
# (find-efunctiondescr    'etr)
# (find-efunction         'etr)
# (find-function-noselect 'etr)
# (find-efunction 'find-efunctiondescr)
# (find-efunction 'describe-function)
# (find-efunction 'describe-function-1)
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-01/threads.html#00323
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-01/msg00323.html my question
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-01/msg00342.html stefan's answer

# (help-fns--analyze-function 'myalias2)
# (find-efunction 'help-fns--analyze-function)
# (find-efunction 'find-ealias)





#####
#
# ee-cpb - a way to copy a buffer to a string to inspect its text properties
# 2021dec20
#
#####

# «ee-cpb»  (to ".ee-cpb")
# (find-angg ".emacs" "ee-cpb")

(defvar ee-cpb nil)
(defun ee-cpb0 () (setq ee-cpb (buffer-substring (point-min) (point-max))))
(defun ee-cpb () (interactive) (ee-cpb0) (find-2b nil (find-estring ee-cpb)))
(find-epp ee-cpb)

    (mouse-1 . ibuffer-do-sort-by-alphabetic))
    (mouse-1 . ibuffer-do-sort-by-filename/process))
    (mouse-1 . ibuffer-do-sort-by-major-mode))
    (mouse-1 . ibuffer-do-sort-by-size))



#####
#
# kill-buffer-problem-2021
# 2021dec20
#
#####

# «kill-buffer-problem-2021»  (to ".kill-buffer-problem-2021")
# (find-eapropos "kill-buffer")

# (eek "M-h M-k  C-x k  ;; kill-buffer")
# (find-efunctiondescr    'kill-buffer)
# (find-efunction         'kill-buffer)
# (eek "M-h M-k  M-k ;; ee-kill-this-buffer")
# (find-efunctiondescr 'ee-kill-this-buffer)
# (find-efunction      'ee-kill-this-buffer)
# (find-efunctiondescr    'kill-this-buffer)
# (find-efunction         'kill-this-buffer)

# (find-evariable-links 'kill-buffer-query-functions)
# (find-evardescr 'kill-buffer-query-functions)
# (find-evariable 'kill-buffer-query-functions)
# (find-elnode "Index" "* kill-buffer-query-functions:")




#####
#
# yank-media
# 2021dec20
#
#####

# «yank-media»  (to ".yank-media")
# (find-elnode "Yanking Media")
# (find-efunctiondescr 'yank-media-handler)
# (find-efunction      'yank-media-handler)
# (find-efile "yank-media.el")
# (yank-media)
# (yank-media-types)
# https://lars.ingebrigtsen.no/2021/11/08/copying-media-to-emacs/
# https://lists.gnu.org/archive/html/emacs-devel/2021-11/threads.html#00535





#####
#
# crdt - collaborative editing
# 2022jan29
#
#####

# «crdt»  (to ".crdt")
# https://mail.google.com/mail/ca/u/0/#inbox/FMfcgzGkZkZWjSSfBKdxCPFGqRSxwlrV
# https://code.librehq.com/qhong/crdt.el
# (find-epackage-links 'crdt "crdt" t)
# (find-epackage-links 'crdt "crdt" "~/.emacs.d/elpa/crdt-0.2.7/")
# (find-epackage 'crdt)
# https://code.librehq.com/qhong/crdt.el
# (code-c-d "crdt" "~/.emacs.d/elpa/crdt-0.2.7/")
# (find-crdtfile "")
# (find-crdtgrep "grep --color=auto -nH --null -e tuntox *")
# (find-crdtfile "README.org")
# (find-crdtfile "README.org" "tuntox")
# (find-fline "~/CRDT/o")

(setq crdt-tuntox-executable "/usr/bin/tuntox")
(setq crdt-use-tuntox t)

;; M-x crdt-share-buffer
;; M-x crdt-copy-url





#####
#
# crdt-tuntox
# 2022jan29
#
#####

# «crdt-tuntox»  (to ".crdt-tuntox")
# https://gitlab.com/gjedeer/tuntox
# (find-git-links "https://gitlab.com/gjedeer/tuntox" "tuntox")
# (code-c-d "tuntox" "~/usrc/tuntox/")
# (find-tuntoxfile "")
# (find-tuntoxfile "README.md")
# (find-tuntoxfile "BUILD.md")
# (find-tuntoxfile "BUILD.md" "Install c-toxcore")
# (find-zsh "availabledebs | sort | grep toxcore")

apti pkg-config build-essential make libtoxcore-dev dh-make git python3-jinja2 python3-requests

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/usrc/tuntox/
make               |& tee om
sudo make install  |& tee omi

# (find-tuntoxfile "omi" "/usr/bin/tuntox")




#####
#
# crdt-toxcore
# 2022jan29
#
#####

# «crdt-toxcore»  (to ".crdt-toxcore")
# (find-zsh "availabledebs | sort | grep toxcore")
# https://github.com/TokTok/c-toxcore
# https://github.com/TokTok/c-toxcore/blob/master/INSTALL.md#build-manually
# (find-git-links "https://github.com/TokTok/c-toxcore" "ctoxcore")
# (code-c-d "ctoxcore" "~/usrc/c-toxcore/")
# (find-ctoxcorefile "")
# (find-ctoxcorefile "INSTALL.md")
# (find-ctoxcorefile "README.md")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/usrc/c-toxcore/
grep  "option("      CMakeLists.txt cmake/*
grep  "set(.* CACHE" CMakeLists.txt cmake/*

cd      ~/usrc/c-toxcore/
mkdir _build
cd    _build
make clean

cmake ..          |& tee ocm
make              |& tee om
sudo make install |& tee omi

apti libsodium-dev libvpx-dev libopus-dev

# (find-zsh "availabledebs | sort | grep libopus")
# (find-zsh "availabledebs | sort | grep libvpx")
# (find-sh "apt-file search librtp")
# https://github.com/TokTok/c-toxcore/issues/870

* git clone https://github.com/gjedeer/tuntox.git
* cd tuntox
* make

apti tuntox





#####
#
# ido
# 2022feb07
#
#####

# «ido»  (to ".ido")
# (find-efile "ido.el")




#####
#
# unwind-protect
# 2022feb08
#
#####

# «unwind-protect»  (to ".unwind-protect")
# (find-es "org" "org-export-dispatch-ihor")
# (find-orggrep "grep --color=auto -nH --null -e unwind-protect *.el")
# (find-efile "org/org-macs.el" "(defun org-mks ")
# (find-efile "org/ox.el" "(defun org-export-dispatch ")
# (find-efile "org/ox.el" "(defun org-export-dispatch " "(unwind-protect")
# (find-efunction-links 'unwind-protect)
# (find-efunctiondescr  'unwind-protect)
# (find-efunction       'unwind-protect)
# (find-elnode "Cleanups")




#####
#
# redisplay
# 2022feb08
#
#####

# «redisplay»  (to ".redisplay")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-02/msg00215.html

Redisplay inside keyboard macros
Hi list,

I am trying to write a keyboard macro that does some things, pauses
for one second, and then does more things, but I discovered that the
obvious ways to do sleep-and-redisplay don't work. Try to run the code
below with your favorite variant of C-e C-x C-e after each sexp:

  (defun eek (str)
    "Execute STR as a keyboard macro. See `edmacro-mode' for the exact format.\n
  An example: (eek \"C-x 4 C-h\")"
    (interactive "sKeys: ")
    (execute-kbd-macro (read-kbd-macro str)))
  
  ;; Choose one:
  (defun s () (interactive)                    (sleep-for 1))
  (defun s () (interactive) (redisplay)        (sleep-for 1) (redisplay))
  (defun s () (interactive) (redisplay 'force) (sleep-for 1) (redisplay 'force))
  
  (eek "RET ab <<s>> cd")

I expected to see an "ab", then a pause, then the "cd", but that's not
what happens - I get a pause and then "abcd".

What am I doing wrong? I just triple-checked the docs about redisplay
and this behavior makes no sense to me...

  Thanks in advance!!!
    Eduardo Ochs
    http://angg.twu.net/#eev




Hi Eli,

> 'redisplay' exits immediately if called from a keyboard macro.  It's a
> feature.

Aha! Thanks!
This works:

  (defun eek (str)
    "Execute STR as a keyboard macro. See `edmacro-mode' for the exact format.\n
  An example: (eek \"C-x 4 C-h\")"
    (interactive "sKeys: ")
    (execute-kbd-macro (read-kbd-macro str)))

  (defun rd () (interactive) (redisplay 'force))
  (defun s () (interactive) (rd) (sleep-for 1) (rd))
  
  (defun eeks (str &rest rest)
    (eek str)
    (if rest (progn (s) (apply 'eeks rest))))
  
    (eeks "RET ab" "cd" "ef")

Cheers =),
  Eduardo Ochs
  http://angg.twu.net/#eev




#####
#
# vertico
# 2022feb13
#
#####

# «vertico»  (to ".vertico")
# https://github.com/minad/vertico
# (find-epackage-links 'vertico "vertico" t)
# (find-epackage       'vertico)
# (code-c-d "vertico" "~/.emacs.d/elpa/vertico-0.20/")
# (find-verticofile "")
# (find-verticofile "README.org")
# (vertico-mode 1)
# https://protesilaos.com/codelog/2022-01-31-learning-emacs/





#####
#
# file-aliases
# 2022feb24
#
#####

# «file-aliases»  (to ".file-aliases")
# (find-enode "File Aliases")
# (find-enode "File Aliases" "directory-abbrev-alist")

I learnt a new Emacs symlink trick today
My notes are in ~/notes, which is actually a symlink to a Google Drive folder
the Google drive folder has a very ugly path
and when I was saving, I'd see stuff like 'wrote /Volumes/GoogleDrive/.shortcut-targets-by-id/<long hash>/notes/<filename>' in the minibuffer
(setq directory-abbrev-alist '(("/Volumes/GoogleDrive/.shortcut-targets-by-id/<hash>/notes" . "~/notes")))
now I see wrote ~/notes/<filename>



#####
#
# taskpaper-mode
# 2022feb24
#
#####

# «taskpaper-mode»  (to ".taskpaper-mode")
# (find-epackage-links 'taskpaper-mode "taskpapermode" t)
# (find-epackage       'taskpaper-mode)
# (code-c-d "taskpapermode" "~/.emacs.d/elpa/taskpaper-mode-20220117.2118/")
# (find-taskpapermodefile "")
# https://github.com/saf-dmitry/taskpaper-mode

https://www.taskpaper.com/




#####
#
# emacs-everywhere
# 2022feb28
#
#####

# «emacs-everywhere»  (to ".emacs-everywhere")
# https://github.com/tecosaur/emacs-everywhere
# https://github.com/glacambre/firenvim




#####
#
# abbrevs
# 2022mar02
#
#####

# «abbrevs»  (to ".abbrevs")
# (find-enode "Abbrev Tables")




#####
#
# webp-images
# 2022mar05
#
#####

# «webp-images»  (to ".webp-images")
# https://xenodium.com/emacs-viewing-webp-images/
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-03/msg00165.html
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-03/msg00164.html
# https://www.reddit.com/r/emacs/comments/t76isx/viewing_webp_images_in_emacs/
# https://xenodium.com/emacs-viewing-webp-images/
# (setq image-use-external-converter t)
# (find-evardescr 'image-use-external-converter)
# (find-evariable 'image-use-external-converter)

# (find-fline "~/tmp/" "cavalgar_sem_freio.webp")
# (find-fline "~/tmp/cavalgar_sem_freio.webp")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-03/msg00274.html
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-03/msg00295.html
# https://mathiasbynens.be/demo/animated-webp-supported.webp

https://irreal.org/blog/?p=10975 Viewing Exotic Image Files




#####
#
# junk-file-open
# 2022mar06
#
#####

# «junk-file-open»  (to ".junk-file-open")

(defcustom junk-file-extensions '("org" "el" "js")
  "List of file extensions for junk files."
  :type 'list)

(defcustom junk-file-directory (temporary-file-directory)
  "Path where junk files are stored."
  :type 'directory)

(defun junk-file-open (ext)
  "Visit a junk file with EXT in `junk-file-directory'."
  (interactive (list (completing-read "junk file extension: " junk-file-extensions)))
  (find-file (expand-file-name
              (format "junk-%s.%s" (format-time-string "%Y-%m-%d-%H%M") ext)
              junk-file-directory)))



#####
#
# apply-partially
# 2022mar06
#
#####

# «apply-partially»  (to ".apply-partially")
# (find-efunctiondescr 'apply-partially)
# (find-efunction      'apply-partially)
# (find-elnode "Index" "* apply-partially:")
# (find-egrep "grep --color=auto -nH --null -e apply-partially *.el")

(funcall (apply-partially '+ 1000 200) 30 4)




#####
#
# describe-char
# 2022mar12
#
#####

# «describe-char»  (to ".describe-char")
# (find-efunctiondescr 'describe-char)
# (find-efunction      'describe-char)
# (find-efile "descr-text.el" "customize what to show")
# (customize-variable 'describe-char-unidata-list)
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/msg00180.html




#####
#
# logos
# 2022mar13
#
#####

# «logos»  (to ".logos")
# (find-epackage-links 'logos "logos" t)
# (find-epackage       'logos)
# (code-c-d "logos" "~/.emacs.d/elpa/logos-0.1.2/")
# (find-logosfile "")




#####
#
# flycheck / flymake / flyspell
# 2022mar13
#
#####

# «flycheck»  (to ".flycheck")
# (find-epackage-links 'flycheck "flycheck" t)
# (find-epackage       'flycheck)
# (code-c-d "flycheck" "~/.emacs.d/elpa/flycheck-20240317.606/")
# (find-flycheckfile "")
# http://www.flycheck.org

# (find-es "lsp")

# (find-efunction-links 'flycheck-error-list-mode)
# (find-efunctiondescr  'flycheck-error-list-mode)
# (find-efunction       'flycheck-error-list-mode)
# (find-hvariable 'flycheck-error-list-mode-map)

https://github.com/leotaku/flycheck-aspell
https://github.com/flycheck/flycheck
https://www.flycheck.org/

# (find-sh "locate flyspell")
# (find-sh "locate flymake")
# (find-efile "textmodes/flyspell.el")

# (find-fline "~/mvideos/" "snippet-flycheck-demo.mp4")
# (find-video "~/mvideos/snippet-flycheck-demo.mp4")
# (find-mvideo "snippet-flycheck-demo" "0:00")

# (find-epackage-links 'flymake "flymake" t)
# (find-epackage       'flymake)
# (code-c-d "flymake" "~/.emacs.d/elpa/flymake-1.2.2/")
# (find-flymakefile "")
# (find-node "(flymake)Top")
# (find-node "(flymake)Starting Flymake")

# (find-epackage-links 'flymake-lua "flymakelua" t)
# (find-epackage       'flymake-lua)
# (code-c-d "flymakelua" "~/.emacs.d/elpa/flymake-lua-20170129.154/")
# (find-flymakeluafile "")
# (require 'flymake-lua)
# (add-hook 'lua-mode-hook 'flymake-lua-load)

flymake-collection is a helper for migrating from flycheck to flymake.
https://github.com/mohkale/flymake-collection.



#####
#
# flycheck-frame
# 2024may16
#
#####

# «flycheck-frame»  (to ".flycheck-frame")
# (find-customizegroup 'flycheck)
# (find-angg "LEAN/checksyntax.lean")
# (find-flycheckgrep "grep --color=auto -nH --null -e frame *.el")
# (find-epackage-links 'flycheck "flycheck" t)
# (find-epackage       'flycheck)
# (code-c-d "flycheck" "~/.emacs.d/elpa/flycheck-20240317.606/")
# (find-flycheckfile "")
# (find-flycheckgrep "grep --color=auto -nH --null -e 'error messages' *.el")
# (find-flycheckgrep "grep --color=auto -nH --null -e '*Flycheck error messages*' *.el")
# (find-flycheckgrep "grep --color=auto -nH --null -e 'frame' *.el")
# (find-flycheckgrep "grep --color=auto -nH --null -e 'pop-to-buffer' *.el")

https://emacs.stackexchange.com/questions/81277/how-do-i-make-flycheck-not-create-a-second-frame
How do I make Flycheck not create a second frame?

Hi all,

I am learning Lean4, and lean4-mode uses Flycheck. If I only have one
frame and one window, and I edit this Lean program in that window,

import Lean.Elab.Command
elab "#check_syntax " t:term : command => do Lean.logInfo m!"{repr t.raw}"
#check_syntax 42 + "foo"

then moving the point to the line '#check_syntax 42 + "foo"' makes
Lean.logInfo output an error message that is 19 lines long, and
Flycheck displays it in the buffer "*Flycheck error messages*"...

The problem is that in this case - one frame, one window, long error
message - Flycheck always displays the buffer "*Flycheck error
messages*" in a second frame. How do I change that?

Thanks in advance...





#####
#
# flycheck-languages
# 2022mar18
#
#####

# «flycheck-languages»  (to ".flycheck-languages")
# (find-es "lua5" "luacheck")
# https://www.flycheck.org/en/latest/languages.html#flycheck-languages

# /home/edrx/e(edrx:sc)# luarocks install luacheck
# 
# Error: Your user does not have write permissions in /usr/local/lib/luarocks/rocks 
# -- you may want to run as a privileged user or use your local tree with --local.
# /home/edrx/e(edrx:sc)# luarocks install --local luacheck
# Installing https://luarocks.org/luacheck-0.25.0-1.src.rock
# Missing dependencies for luacheck 0.25.0-1:
#    argparse >= 0.6.0 (not installed)
#    luafilesystem >= 1.6.3 (not installed)
# 
# luacheck 0.25.0-1 depends on argparse >= 0.6.0 (not installed)
# Installing https://luarocks.org/argparse-0.7.1-1.src.rock
# No existing manifest. Attempting to rebuild...
# argparse 0.7.1-1 is now installed in /home/edrx/.luarocks (license: MIT)
# 
# luacheck 0.25.0-1 depends on luafilesystem >= 1.6.3 (not installed)
# Installing https://luarocks.org/luafilesystem-1.8.0-1.src.rock
# gcc -O2 -fPIC -I/usr/include/lua5.1 -c src/lfs.c -o src/lfs.o
# gcc -shared -o lfs.so -L/usr/local/lib src/lfs.o
# luafilesystem 1.8.0-1 is now installed in /home/edrx/.luarocks (license: MIT/X11)
# 
# luacheck 0.25.0-1 is now installed in /home/edrx/.luarocks (license: MIT)
# 
# /home/edrx/e(edrx:sc)# 







#####
#
# pulsar
# 2022mar15
#
#####

# «pulsar»  (to ".pulsar")
# https://protesilaos.com/codelog/2022-03-14-emacs-pulsar-demo/
# https://www.youtube.com/watch?v=TRUzy38Dr2A
# (find-epackage-links 'pulsar "pulsar" t)
# (code-c-d "pulsar" "~/.emacs.d/elpa/pulsar-1.0.1/" "pulsar")
# (find-pulsarfile "")
# (find-pulsarnode "")




#####
#
# company
# 2022mar15
#
#####

# «company»  (to ".company")
# https://www.reddit.com/r/emacs/comments/td0nth/sample_usage_of_cape_completion_at_point/
# (find-epackage-links 'company "company" t)
# (find-epackages      'company)
# (find-epackage       'company)
# (code-c-d "company" "~/.emacs.d/elpa/company-20240311.1943/" "company")
# (find-companyfile "")

# (find-companynode "")
# (find-companyfile "")
# (find-companyfile "")
# (find-companyfile "company.el")
# (find-companyfile "company.el" "company-backends")
# (require 'company)
# (find-evardescr 'company-backends)
# (find-evariable 'company-backends)

# (find-companynode "Commands" "company-active-map" "and" "company-search-map")

# (find-evariable   'company-active-map)
# (find-hvariable   'company-active-map)
# (find-ekeymapdescr company-active-map)

# (find-evariable   'company-search-map)
# (find-hvariable   'company-search-map)
# (find-ekeymapdescr company-search-map)

# (find-eaproposf  "^company")
# (find-eaproposv  "^company")






#####
#
# ivy-mode
# 2019aug21
#
#####

# «ivy-mode» (to ".ivy-mode")
# https://github.com/abo-abo/swiper
# https://oremacs.com/swiper/ Ivy User Manual
# https://github.com/abo-abo/swiper/blob/master/ivy.el#L28-L37

# (find-epackage-links 'ivy "ivy" t)
# (find-epackage       'ivy)
# (code-c-d "ivy" "~/.emacs.d/elpa/ivy-0.13.4/")
# (find-ivyfile "")
# (find-ivyfile "ivy.el" "ivy-read")

;; This package provides `ivy-read' as an alternative to
;; `completing-read' and similar functions.
;;
;; There's no intricate code to determine the best candidate.
;; Instead, the user can navigate to it with `ivy-next-line' and
;; `ivy-previous-line'.
;;
;; The matching is done by splitting the input text by spaces and
;; re-building it into a regex.
;; So "for example" is transformed into "\\(for\\).*\\(example\\)".

<bjc> but counsel/ivy/helm/etc have `M-x' overrides that make them
      fancier/more useful, and maybe that's what's getting in the
      way

# (ivy-mode 1)
# (ivy-mode 0)



#####
#
# helm
# 2019feb24
#
#####

# «helm» (to ".helm")
# (find-epackage-links 'helm "helm" t)
# (find-epackage       'helm)
# (code-c-d "helm" "~/.emacs.d/elpa/helm-20220405.605/")
# (find-helmfile "")
# (find-helmfile "helm.el")

# (find-epackage-links 'helm-core "helmcore" t)
# (find-epackage       'helm-core)
# (code-c-d "helmcore" "~/.emacs.d/elpa/helm-core-20220405.2028/")
# (find-helmcorefile "")
# (find-helmcorefile "helm-core.el")
# (find-helmcorefile "helm-core.el" "(defvar helm-help-message ")

# (helm-mode 1)
# (helm-mode 0)


# https://www.reddit.com/r/emacs/comments/9kcbub/interview_with_thierry_volpiatto_helm_author/
# http://sachachua.com/blog/2018/09/interview-with-thierry-volpiatto/




#####
#
# counsel
# 2022apr05
#
#####

# «counsel»  (to ".counsel")
# (find-epackage-links 'counsel "counsel" t)
# (find-epackage       'counsel)
# (code-c-d "counsel" "~/.emacs.d/elpa/counsel-20220402.953/")
# (find-counselfile "")



#####
#
# posframe
# 2024may10
#
#####

# «posframe»  (to ".posframe")
# https://www.youtube.com/watch?v=rwKTc4MNmt8&t=31s
# (find-epackage-links 'posframe "posframe" t)
# https://github.com/tumashu/posframe





#####
#
# swiper
# 2024jun30
#
#####

# «swiper»  (to ".swiper")
# https://www.reddit.com/r/emacs/comments/6jsz61/can_someone_explain_ivy_counsel_andor_swiper_to_me/




#####
#
# openstreetmap-viewer
# 2022mar16
#
#####

# «osm»  (to ".osm")
# https://news.ycombinator.com/item?id=30682841 Osm.el OpenStreetMap Viewer for Emacs
# https://github.com/minad
# https://github.com/minad/osm
# https://github.com/minad/osm/issues/4 osm and eev
# https://mail.google.com/mail/u/0/#inbox/FMfcgzGmvTvCvvpjfWrZXHZfGdKxhwph
# https://github.com/minad/osm/issues/7#issuecomment-1069823627
# (to "display-buffer-alist")

Hi Daniel,

I have just added support for osm to eev! Now if a
person has both osm and eev installed and she types
`M-h M-h' or `M-x find-here-links' in an osm buffer she
gets a temporary buffer with hyperlinks to "here",
where in this case "here" will be the current position
in that map... two of the hyperlinks in that temporary
buffer will be sexps like these ones:

  (find-osm 43.77310035877858 11.256190538406372 17)
  (osm-goto 43.77310035877858 11.256190538406372 17)

We can edit the first one to add a comment - that will
be ignored - and to reduce the precision, to obtain a
link like this one:

  (find-osm 43.7731 11.2562 17 "Il Duomo")

that is a nice elisp hyperlink - in this sense:
http://angg.twu.net/eev-intros/find-eev-quick-intro.html#3
- to a place in the world...

  Cheers! =)
    Eduardo

P.S.: the version of eev that has support for osm is
only in the git repository at the moment - the version
of eev in ELPA doesn't have it yet.



# (find-epackage-links 'osm "osm" t)
# (find-epackage       'osm)
# (code-c-d "osm" "~/.emacs.d/elpa/osm-0.4/")
# (code-c-d "osm" "~/.emacs.d/elpa/osm-20220326.1929/")
# (find-osmfile "")
# (find-osmfile "README.org")
# (find-osmfile "osm.el" "pop-to-buffer")


(defun r () (interactive) (find-osmfile "README.org"))

# Mess:
# https://i.ibb.co/dDQB3LF/sshot.png
# (find-efunction 'find-epackage)

<grym> edrx: when in doubt, M-x org-mode-restart






#####
#
# Protesilaos: his .emacs
# 2022mar16
#
#####

# «prot-dotemacs»  (to ".prot-dotemacs")
# https://protesilaos.com/emacs/dotemacs
# https://gitlab.com/protesilaos/dotfiles/-/commits/master/emacs/.emacs.d/prot-emacs.el
# https://gitlab.com/protesilaos/dotfiles

# (find-git-links "https://gitlab.com/protesilaos/dotfiles" "dotemacs")
# (code-c-d "dotfiles" "~/usrc/dotfiles/")
# (find-dotfilesfile "")
# (find-dotfilesfile "emacs/.emacs.d/")
# (find-dotfilesfile "emacs/.emacs.d/prot-emacs.org")
# (find-dotfilesfile "emacs/.emacs.d/prot-emacs.el" "(setq display-buffer-alist")
# http://www.youtube.com/watch?v=rjOhJMbA-q0 Emacs: window rules and parameters (`display-buffer-alist' and extras)




#####
#
# woman
# 2022mar18
#
#####

# «woman»  (to ".woman")
# (find-efunctiondescr 'woman)
# (find-efunction      'woman)
# (find-efile "woman.el")
# (find-node "(woman)Top")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/msg00359.html do you use woman





#####
#
# dark-emacs
# 2022mar27
#
#####

# «dark-emacs»  (to ".dark-emacs")
# (find-fline "~/LOGS/2022mar26.emacs" ",dark-emacs")
,dark-emacs




#####
#
# indent-tabs-mode
# 2022apr06
#
#####

# «indent-tabs-mode»  (to ".indent-tabs-mode")
# (find-fline "~/LOGS/2022apr05.emacs" "(setq-default indent-tabs-mode nil)")



#####
#
# indent-relative
# 2024sep12
#
#####

# «indent-relative»  (to ".indent-relative")
# (find-enode "Indentation Commands" "indent-relative")
# (find-efunctiondescr 'indent-relative)
# (find-efunction      'indent-relative)
# (find-fline "~/LOGS/2024sep11.emacs" "<edrx> ,indent-relative")

(defun foo () (interactive) (search-forward ";"))

;; (find-esetkey-links   (kbd "M-i") 'indent-relative)
(define-key eev-mode-map (kbd "M-i") 'indent-relative)
;; (find-esetkey-links   (kbd "M-n") 'foo)
(define-key eev-mode-map (kbd "M-n") 'foo)






#####
#
# Trampoline recursion
# 2022apr12
#
#####

# «recur»  (to ".recur")
# https://marmelab.com/blog/2018/02/12/understanding-recursion.html
# https://github.com/VincentToups/recur trampoline recursion




#####
#
# vtable
# 2022apr15
#
#####

# «vtable»  (to ".vtable")
# https://lars.ingebrigtsen.no/2022/04/13/more-vtable-fun/
# (find-efile "emacs-lisp/vtable.el")
# (find-efunctiondescr 'make-vtable)
# (find-efunction      'make-vtable)

(require 'vtable)

(make-vtable
 :columns '((:name "Name" :width 20) "Size" "File")
 :objects (buffer-list)
 :actions '("k" kill-buffer
            "RET" display-buffer)
 :getter (lambda (object column vtable)
           (pcase (vtable-column vtable column)
             ("Name" (buffer-name object))
             ("Size" (buffer-size object))
             ("File" (or (buffer-file-name object) "")))))

# (find-sh "locate vtable")




#####
#
# inspector
# 2022apr22
#
#####

# «inspector»  (to ".inspector")
# (find-angg ".emacs" "find-einspector")
# (find-angg "elisp/eev-inspect.el")
# https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg01151.html
# https://github.com/mmontone/emacs-inspector

# (find-epackage-links 'inspector "inspector" t)
# (find-epackage       'inspector)
# (code-c-d "inspector" "~/.emacs.d/elpa/inspector-0.5/")
# (find-inspectorfile "")

# (load "inspector.el")
# (inspect-expression 'ee-o)


# (find-efunctiondescr 'inspect-expression)
# (find-efunction 'inspect-expression)

(inspect-expression 'package-archive-contents)
(inspect-expression '(symbol-function 'find-fline))
(setq ee-o (overlays-at (point)))
(inspect-expression 'ee-o)

# (find-es "emacs" "dash")
# (find-dashnode "")

(let ((it '(20 30 40))) (eval '(cadr it)))

(setq aaa '(20 (((3 3.0) "3") 30 300) 40))
(inspect-expression 'aaa)
(inspector-inspect-expression 'aaa)

(setq aaah (cons inspector-inspected-object inspector-history))

(find-eppp aaah)

# https://github.com/mmontone/emacs-inspector/issues/8#issue-1275655944

Hi Mario,

can you help me to add a second format for the "history" to inspector?
I saw that one of the buffer-local variables of an "*inspector*"
buffer is `inspector-history`, and I'm imagining some changes in which
inspector would also keep a second buffer-local variable, called, say,
`inspector-history-b`... let me start by explaining its format.

If we run this with our favorite variant or C-x C-e,

  (setq aaa '(20 (((3 3.0) "3") 30 300) 40))
  (inspect-expression 'aaa)

then we can navigate to "sub-objects" of aaa, in this order:

   (20 (((3 3.0) "3") 30 300) 40)
       (((3 3.0) "3") 30 300)
        ((3 3.0) "3")
         (3 3.0)
            3.0

After reaching the 3.0 the value of `inspector-history-b` would the
`reverse` of this list:

  (aaa
   (nth 1 it)
   car
   car
   cdr)

The first element of that list is something that when eval-ed would
yield the original object on which we called inspector, and the other
items of the list are instructions to obtain each next object from the
previous one... I played a bit with a prototype of this idea, and I
used this code:

  (defun ee-sub1 (it f)
    (if (symbolp f) (funcall f it) (eval f)))
  
  (defun ee-sub (itfs)
    (let* ((it (eval (car itfs)))
           (fs (cdr itfs)))
      (while fs
        (setq it (ee-sub1 it (car fs)))
        (setq fs (cdr fs)))
      it))
  
  (setq aaa '(20 (((3 3.0) "3") 30 300) 40))
  
  (ee-sub '(aaa))
  (ee-sub '(aaa cadr))
  (ee-sub '(aaa cadr car))
  (ee-sub '(aaa cadr car (car it)))
  (ee-sub '(aaa cadr car (car it) cadr))

This feature would be very useful to me because with it I will be able
to keep series of elisp hyperlinks like this

  (find-einspectorb '(aaa))
  (find-einspectorb '(aaa cadr))
  (find-einspectorb '(aaa cadr car))
  (find-einspectorb '(aaa cadr car (car it)))
  (find-einspectorb '(aaa cadr car (car it) cadr))

in my notes - for the rationale see
<http://angg.twu.net/find-elisp-intro.html>, from 15:58 onwards, and
<http://angg.twu.net/eev-intros/find-here-links-intro.html#2> - and
this would be great for inspecting objects that contain byte-compiled
code, because then I will be able to record a path to a position that
I want to understand, then I can run some sexps like (load "foo.el") -
not (load "foo.elc")! - and then I'll be able to follow the same path
and see if the byte-compiled code became a lambda...




Hi Mario,

Hi! Sure, let's keep this idea in a separate file that can be loaded
after inspector, and that adds some functions and redefines some other
ones...

Can you take a look at this

http://angg.twu.net/elisp/eev-inspect.el.html
http://angg.twu.net/elisp/eev-inspect.el

and see if it makes sense? And then if it does, can you take a look at
the definition of `inspect-expression-b' and help me with the setqs in
comments?

Thanks in advance!!!
  Eduardo





#####
#
# inspector-inspect-region
# 2022oct29
#
#####

# «inspector-inspect-region»  (to ".inspector-inspect-region")
# (find-es "emacs" "ee-string-intervals")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00815.html Samuel Wales
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00816.html Edrx
# (find-angggrep "grep --color=auto -nH --null -e memq ~/LOGS/*")

Hi Samuel!

By "an inspector" do you mean like what this package does?

  https://github.com/mmontone/emacs-inspector

I have just tried this

  (defun inspector-inspect-region (b e)
    (interactive "r")
    (inspector-inspect-expression (buffer-substring b e)))

in a grep buffer, and it seems that the current version of inspector
doesn't have support for treating strings with text properties as
trees... and then I tried this on the same grep buffer,

  (defun inspector-inspect-region (b e)
    (interactive "r")
    (inspector-inspect-expression
     '(ee-string-intervals
       (buffer-substring b e))))

where ee-string-intervals is the function defined here,

  (find-eev "eev-blinks.el" "find-eregionpp")
  http://angg.twu.net/eev-current/eev-blinks.el.html#find-eregionpp

and it worked very well - it was even able to show that certain
#s(...) objects are structs of the kind "compilation--message", and it
showed its slots.

I have added inspector's author - Mariano Montone - to the list of
recipients of this message, let's see what happens... =)

  Cheers,
    Eduardo Ochs
    http://angg.twu.net/eepitch.html





#####
#
# eval-defun
# 2022apr25
#
#####

# «eval-defun»  (to ".eval-defun")
# (find-angg ".emacs" "ee-eval-defun-test")
# (find-enode "Lisp Eval" "eval-defun")
# (find-efunctiondescr 'eval-defun)
# (find-efunction      'eval-defun)
# (find-efunctiondescr 'elisp--eval-defun)
# (find-efunction      'elisp--eval-defun)


(defun eed ()
  "Eval the defun around point - like `eval-defun', but simpler."
  (interactive)
  (save-excursion
    (end-of-defun)
    (beginning-of-defun)
    (let* ((beg  (point))
	   (form (funcall load-read-function (current-buffer)))
	   (end  (point)))
      (eval form))))

(defun eet ()
  "Eval the defun around point and \"test\" it."
  (interactive)
  (let ((sexp `(find-2b nil '(,(eed)))))
    (eval sexp)
    (message "%S" sexp)))


;; <find-foo-links>
;; Skel: (find-find-links-links-new "foo" "" "")
;; Test: (find-foo-links)
;;
(defun find-foo-links (&rest pos-spec-list)
"Visit a temporary buffer containing hyperlinks for foo."
  (interactive)
  (apply
   'find-elinks
   `((find-foo-links ,@pos-spec-list)
     ;; Convention: the first sexp always regenerates the buffer.
     (find-efunction 'find-foo-links)
     ""
     ,(ee-template0 "\
FOO
")
     )
   pos-spec-list))




#####
#
# define-prefix-command
# 2022sep03
#
#####

# «define-prefix-command»  (to ".define-prefix-command")
# (find-fline "~/LOGS/2022sep03.emacs" "define-prefix-command")
# (find-egrep "grep --color=auto -nH --null -e define-prefix-command *.el */*.el")
# (find-egrep "grep --color=auto -nH --null -e 'Define COMMAND as a prefix' *.el */*.el")
# (find-efunction-links 'define-prefix-command)
# (find-hfunction 'define-prefix-command)
# https://github.com/emacs-mirror/emacs/search?q=define-prefix-command




#####
#
# emacs-director
# 2022sep04
#
#####

# «emacs-director»  (to ".emacs-director")
# (find-fline "~/LOGS/2022sep04.emacs" "emacs-director")

<edrx> slk500: how did you speed up your video?
<slk500> I just prepared all steps before & then play it
         https://github.com/slk500/emacs-headlines-demo
<slk500> using https://github.com/bard/emacs-director



#####
#
# demo-it
# 2022sep04
#
#####

# «demo-it»  (to ".demo-it")
# (find-fline "~/LOGS/2022sep04.emacs" "demo-it")
# https://github.com/howardabrams/demo-it
# (find-epackage-links 'demo-it "demoit" t)
# (find-epackage       'demo-it)
# (code-c-d "demoit" "~/.emacs.d/elpa/demo-it-20211221.2152/" "demo-it")
# (find-demoitfile "")
# (find-demoitnode "")




#####
#
# info+ (by Drew Adams)
# 2022sep05
#
#####

# «info+»  (to ".info+")
# https://www.emacswiki.org/emacs/InfoPlus
# https://www.emacswiki.org/emacs/InfoPlus#GlossaryEnhancements
# https://www.emacswiki.org/emacs/download/info%2b.el



#####
#
# image-dired
# 2022sep05
#
#####

# «image-dired»  (to ".image-dired")
# (find-eetcfile "NEWS" "image-dired-display-image-mode")
# (find-efile "image/image-dired.el")
# (find-enode "Image-Dired")

# (find-fline "~/.emacs.d/image-dired/")
# (find-fline "~/tmp/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/imgs/
mkdir  /tmp/imgs/
cd     /tmp/imgs/
cp ~/tmp/*.jpg .
# (find-fline "/tmp/imgs/")



#####
#
# hamburger-menus
# 2022sep05
#
#####

# «hamburger-menus»  (to ".hamburger-menus")
# https://www.reddit.com/r/emacs/comments/x15yko/simple_but_fun_hamburger_menus_on_the_modeline/
(:eval (propertize "[0]" 'local-map (make-mode-line-mouse-map 'mouse-1 'menu-bar-open)))




#####
#
# ace-window
# 2022sep06
#
#####

# «ace-window»  (to ".ace-window")
# (find-epackage-links 'ace-window "acewindow" t)
# (find-epackage       'ace-window)
# (code-c-d "acewindow" "~/.emacs.d/elpa/ace-window-20220906.1805/")
# (find-acewindowfile "")
# https://lists.gnu.org/archive/html/eev/2022-09/
# https://lists.gnu.org/archive/html/eev/2022-09/msg00000.html
# (find-youtubedl-links "/sda5/videos/" "Switching_Emacs_windows_with_hydra_and_ace-window" "_qZliI1BKzI" ".webm" "hydraandacew")
# (code-video "hydraandacewvideo" "/sda5/videos/Switching_Emacs_windows_with_hydra_and_ace-window-_qZliI1BKzI.webm")
# (find-hydraandacewvideo)
# (find-hydraandacewvideo "0:00")




#####
#
# comment-dwim
# 2022sep20
#
#####

# «comment-dwim»  (to ".comment-dwim")
# (find-efunctiondescr 'comment-dwim)
# (find-efunction      'comment-dwim)
# (find-hfunction      'comment-dwim)
# (find-enode "Command Index" "* comment-dwim:")
# (find-enode "Comments")
# (find-enode "Comment Commands")
# (find-enode "Options for Comments")
# (find-egrep "grep --color=auto -nH --null -e comment-start *.el */*.el")
# (find-egrep "grep --color=auto -nH --null -e comment-start progmodes/*.el")




#####
#
# halp
# 2022sep26
#
#####

# «halp»  (to ".halp")
# https://github.com/darius/halp
# https://news.ycombinator.com/item?id=32969253 Run programs in Emacs buffer, seeing their output inline, interactively (github.com/darius) - C-c C-c to eval one section and see output in the REPL ***
# (code-c-d "halp" "~/usrc/halp/")
# (find-halpfile "")
# (find-halpfile "README")
# (find-halpfile "halp.el")
# (load-file "~/usrc/halp/halp.el")
# (find-hvariable 'python-mode-map)
# (find-halpfile "examples/")
# (find-halpfile "examples/sample.el")




#####
#
# dwim-shell-command
# 2022oct03
#
#####

# «dwim-shell-command»  (to ".dwim-shell-command")
# (find-epackage-links 'dwim-shell-command "dwimsh" t)
# (find-epackage       'dwim-shell-command)
# (code-c-d "dwimsh" "~/.emacs.d/elpa/dwim-shell-command-20221001.2114/")
# (find-dwimshfile "")

# https://xenodium.com/dwim-shell-command-usages-pdftotext-and-scp/



#####
#
# eglot
# 2022oct03
#
#####

# «eglot»  (to ".eglot")
# (find-epackage-links 'eglot "eglot" t)
# (find-epackage       'eglot)
# (code-c-d "eglot" "~/.emacs.d/elpa/eglot-1.8/")
# (find-eglotfile "")
# (find-eglotfile "README.md")



#####
#
# polymode
# 2022oct06
#
#####

# «polymode»  (to ".polymode")
# https://github.com/polymode/polymode/
# https://polymode.github.io/
# https://polymode.github.io/installation/



#####
#
# shell-quote-argument
# 2022oct09
#
#####

# «shell-quote-argument»  (to ".shell-quote-argument")
# (find-efunctiondescr   'shell-quote-argument)
# (find-efunction        'shell-quote-argument)
# (find-hfunction        'shell-quote-argument)
# (find-elnode "Index" "* shell-quote-argument:")
# (find-elnode "Shell Arguments")
# (find-elnode "Security Considerations")



#####
#
# remember
# 2022oct09
#
#####

# «remember»  (to ".remember")
# (find-node "(remember)Top")
# (find-efunctiondescr 'remember)
# (find-efunction      'remember)
# (find-efile "textmodes/remember.el")




#####
#
# tiny-tools
# 2022oct18
#
#####

# «tiny-tools»  (to ".tiny-tools")
# https://github.com/jaalto/project--emacs-tiny-tools
# (code-c-d "tinytools" "~/usrc/project--emacs-tiny-tools/")
# (find-tinytoolsfile "")
# (find-tinytoolssh "find * | sort")



#####
#
# ee-string-intervals
# 2022oct27
#
#####

# «ee-string-intervals»  (to ".ee-string-intervals")
# (to "inspector-inspect-region")
# (find-eev "eev-blinks.el" "find-eregionpp")
# (find-eev "eev-blinks.el" "find-eregionpp" "defun ee-string-intervals")
# https://mail.google.com/mail/u/0/#inbox/KtbxLxGLhsWsFmLPMVtdFMNwQfcXxgZXnq
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00729.html edrx 1
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00737.html eliz 2
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00739.html edrx 3
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-10/msg00745.html edrx 4

Hi Eli,

...problem solved. The main function that I am using is this one,

  (defun ee-string-intervals (str)
    "This is similar to `object-intervals', but uses another output format."
    (let ((pair< (lambda (pair1 pair2)
                   (string< (symbol-name (car pair1))
                            (symbol-name (car pair2))))))
      (cl-loop for (b e props) in (object-intervals str)
               for s = (substring-no-properties str b e)
               for pairs = (cl-loop for (x y) on props by 'cddr
                                    collect (list x y))
               collect (list s (sort pairs pair<)))))

and it can be tested with:

  (setq mystr (concat (propertize "a" 'p1 'v1 'p2 'v2)
		      (propertize "b" 'p4 'v4 'p3 'v3)))
  
  (ee-string-intervals mystr)

I am experimenting with functions that extract the region with
buffer-substring, use `ee-string-intervals' to convert that
string with properties to something that I find better to work
with, and then deletes the uninteresting properties and
pretty-prints the result. I'll see if that helps me to understand
dired and org and then make a blog-ish post about that - now
without much fear that I am reinventing the whell and making it
square...

  Cheers =),
    Eduardo Ochs
    http://angg.twu.net/eepitch.html





#####
#
# dired-guess-shell-alist-user
# 2022nov17
#
#####

# «dired-guess-shell-alist-user»  (to ".dired-guess-shell-alist-user")

# (find-evardescr 'dired-guess-shell-alist-user)
# (find-evariable 'dired-guess-shell-alist-user)
# (find-hvariable 'dired-guess-shell-alist-user)
# (find-enode "Variable Index" "* dired-guess-shell-alist-user:")
# https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01140.html Jean Louis

Value:
(("\\.gif\\'" "sxiv -a")
 ("\\.mts\\'" "mpv")
 ("\\.pdf\\'" "zathura")
 ("\\.epub\\'" "mupdf")
 ("\\.djvu\\'" "evince")



#####
#
# pkal's Emacs Configuration Generator
# 2022nov22
#
#####

# «pkal-ecg»  (to ".pkal-ecg")
# https://emacs.amodernist.com/
# https://amodernist.com/texts/ecg.html An Experiment: The Emacs Configuration Generator (pkal)
# https://git.sr.ht/~pkal/ecg/blob/master/ecg.lisp
# https://git.sr.ht/~pkal/ecg
# (find-wget-elisp "https://git.sr.ht/~pkal/ecg/blob/master/ecg.lisp")
# (find-wget-elisp "https://git.sr.ht/~pkal/ecg/blob/master/ecg.lisp" "list of options")
# (find-git-links "https://git.sr.ht/~pkal/ecg" "ecg")
# (find-ecgfile "ecg.lisp" "list of options")





#####
#
# ediff
# 2023jul17
#
#####

# «ediff»  (to ".ediff")
# http://yummymelon.com/devnull/using-ediff-in-2023.html





#####
#
# diffview
# 2022nov24
#
#####

# «diffview»  (to ".diffview")
# (find-epackage-links 'diffview "diffview" t)
# (find-epackage       'diffview)
# (code-c-d "diffview" "~/.emacs.d/elpa/diffview-20220322.2334/")
# (find-diffviewfile "")

# (find-efunctiondescr 'scroll-all-mode)
# (find-efunction      'scroll-all-mode)
# (Info-goto-emacs-command-node 'scroll-all-mode)




#####
#
# tabulated-list
# 2022nov24
#
#####

# «tabulated-list»  (to ".tabulated-list")
# (find-efile "emacs-lisp/tabulated-list.el")
# (find-efunctiondescr 'tabulated-list-mode)
# (find-efunction      'tabulated-list-mode)
# (find-elnode "Tabulated List Mode")
# (find-efunctiondescr 'tablist-mode)
# (find-efunction      'tablist-mode)
# (find-efunctiondescr 'tabulated-list-get-id)
# (find-efunction      'tabulated-list-get-id)

# (find-fline "~/LOGS/2022dec15.emacs")
# (find-eev "eev-blinks.el" "find-epackages")

# https://gist.github.com/abrochard/dd610fc4673593b7cbce7a0176d897de Conquering Kubernetes with Emacs

# https://www.emacswiki.org/emacs/TabulatedListMode
# https://www.reddit.com/r/emacs/comments/50azav/tabulatedlist_example/
# https://mbork.pl/2015-07-18_TLM_vs_EWOC,_or_there_and_back_again
# https://stackoverflow.com/questions/11272632/how-to-create-a-column-view-in-emacs-lisp
# https://emacsnotes.wordpress.com/2019/04/16/how-i-shortlist-add-ons-for-my-emacs-introducing-tablist/
# https://github.com/Silex/docker.el
# https://vallyscode.github.io/posts/tabulated-list-mode/

(define-derived-mode list-demo-mode tabulated-list-mode "list-demo-mode"
  "Major mode for tabulated list example."
  (setq tabulated-list-format [("Column_1" 10 t)
                               ("Column_2" 10 nil)
                               ("Column_3"  10 t)
                               ("Column_4" 0 nil)]);; last columnt takes what left
  (setq tabulated-list-entries (list
                                (list "1" ["50" "A2" "A3" "A4"])
                                (list "2" ["10" "B2" "B3" "B4"])
                                (list "3" ["15" "C2" "C3" "C4"])))
  (setq tabulated-list-padding 4)
  (setq tabulated-list-sort-key (cons "Column_1" nil))
  (tabulated-list-init-header)
  (tabulated-list-print t))




#####
#
# vtable
# 2024oct04
#
#####

# «vtable»  (to ".vtable")
# (find-node "(vtable)Top")





#####
#
# How C-x 8 works
# 2022nov25
#
#####

# «C-x-8»  (to ".C-x-8")
# (find-enode "Unibyte Mode" "C-x 8")
# (find-enode "Key Index" "C-x 8")
# (eek "C-h k C-x 8 * *")
# (find-efunctiondescr 'describe-key)
# (find-efunction      'describe-key)
# (find-efunction      'describe-key "RAW-SEQ")
# (find-efunction-links 'this-single-command-raw-keys)
# (find-fline "~/LOGS/2022nov25.emacs" "C-x 8 * *")
# (find-efile "international/iso-transl.el")
# (find-efile "international/iso-transl.el" "**")
# (find-evardescr 'iso-transl-char-map)
# (find-evariable 'iso-transl-char-map)
# (find-eppp       iso-transl-char-map "**")
# (find-epp        iso-transl-char-map)
# (eek "C-x 8 RET bullet")
# (find-efunctiondescr 'toggle-input-method)
# (find-efunction      'toggle-input-method)
# (find-equailfile "sgml-input.el" "&bull;")
# (find-efile "leim/quail/sgml-input.el")

(find-efile "international/iso-transl.el" "**")
(find-efile "leim/quail/sgml-input.el" "&bull;")

(describe-input-method "iso-transl")
(describe-input-method 'iso-transl)
# (find-fline "~/LOGS/2022nov25.emacs" "M-x list-input-methods")




#####
#
# eat - Emulate A Terminal, in a region, in a buffer and in Eshell
# 2022nov27
#
#####

# «eat»  (to ".eat")
# (find-es "eat" "2022")
# https://codeberg.org/akib/emacs-eat/
# https://akib.codeberg.page/blog/introducing-eat.html
# https://www.reddit.com/r/planetemacs/comments/z52uwf/introducing_eat_a_new_terminal_emulator_for_emacs/
# https://codeberg.org/akib/emacs-eat/issues/17
# https://emacsconf.org/2023/talks/eat/

(defun find-eatprocess0 (name program-and-args)
  (let* ((bufname (format "*%s*" name))
         (buffer  (switch-to-buffer bufname)))
    (unless (eq major-mode #'eat-mode)
      (eat-mode))
    (unless eat--process
      (eat-exec buffer "eat" "/usr/bin/env" nil program-and-args))
    (eat-emacs-mode)))

(defun find-eatprocess (program-and-args &optional n)
  (find-eatprocess0
   (format "eat: %s%s"
	   (ee-unsplit program-and-args)
	   (if n (format " (%s)" n) ""))
   (ee-split program-and-args)))

(defun eepitch-line-eat (line)
  "Send LINE to the eat buffer and run the key binding for RET there."
  (eepitch-eval-at-target-window
    `(progn (eat-semi-char-mode)
            (process-send-string eat--process ,(concat line "\n"))))
            (eat-emacs-mode))

(defun eepitch-eat (program-and-args &optional n)
  (interactive)
  (prog1 (eepitch `(find-eatprocess ,program-and-args ,n))
    (setq eepitch-line 'eepitch-line-eat)))


* (eepitch-eat "lua5.1")
* (eepitch-kill)
* (eepitch-eat "lua5.1")
print(1+2)




#####
#
# coterm
# 2022nov28
#
#####

# «coterm»  (to ".coterm")
# (find-epackage-links 'coterm "coterm" t)
# (find-epackage       'coterm)
# (code-c-d "coterm" "{d}")
# (find-cotermfile "")



#####
#
# iedit
# 2022dec05
#
#####

# «iedit»  (to ".iedit")
# https://irreal.org/blog/?p=10986 Iedit Video




#####
#
# youtube-sub-extractor
# 2022dec05
#
#####

# «youtube-sub-extractor»  (to ".youtube-sub-extractor")
# (find-es "youtube" "youtube-sub-extractor.el")
# https://mbork.pl/2022-11-26_Extracting_Youtube_subtitles_in_Emacs
# https://github.com/agzam/youtube-sub-extractor.el

# (find-git-links "https://github.com/agzam/youtube-sub-extractor.el" "yse")
# (code-c-d "yse" "~/usrc/youtube-sub-extractor.el/")
# (find-ysefile "")
# (find-ysefile "youtube-sub-extractor.el")
# (find-ysefile "readme.org")
# (find-ysefile "test/")
# (find-efunction 'youtube-sub-extractor--create-subs-buffer)

# (find-epackage-links 'youtube-sub-extractor "yse" t)
# (find-epackage       'youtube-sub-extractor)
# (code-c-d "yse" "~/.emacs.d/elpa/youtube-sub-extractor-20221116.653/")
# (find-ysefile "")

# (find-eev "eev-tlinks.el" "find-yttranscript-links")
# (find-es "youtube" "youtube-sub-extractor.el")

(find-1stclassvideo-links "eev2022kla")
(find-yttranscript-links "eev2022kla" "KRobfwXd7Cw")

(require 'youtube-sub-extractor)
(defalias 'yse 'youtube-sub-extractor-extract-subs)
(setq youtube-sub-extractor-timestamps 'left-side-text)
(yse "http://www.youtube.com/watch?v=KRobfwXd7Cw")

sending request --list-subs --no-simulate --skip-download --no-playlist "http://www.youtube.com/watch?v=KRobfwXd7Cw"
sending request --skip-download --no-playlist --write-subs --sub-langs "en" "http://www.youtube.com/watch?v=KRobfwXd7Cw"



#####
#
# bs-show
# 2022dec05
#
#####

# «bs-show»  (to ".bs-show")
# (find-efile "bs.el")
# (call-interactively 'bs-show)




#####
#
# let-alist
# 2022dec07
#
#####

# «let-alist»  (to ".let-alist")
# (find-clfile "let-alist.el")




#####
#
# Luke Gorrie's lively.el
# 2022dec08
#
#####

# «lukego-lively»  (to ".lukego-lively")
# https://lukego.livejournal.com/23379.html
# (find-anggfile "elisp/lively.el")




#####
#
# keysee.el (by Drew Adams)
# 2022dec10
#
#####

# «keysee.el»  (to ".keysee.el")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-12/msg00323.html Drew Adams
# https://www.emacswiki.org/emacs/KeySee
# https://www.emacswiki.org/emacs/download/keysee.el
# https://www.emacswiki.org/emacs/Sortie
# https://www.emacswiki.org/emacs/download/sortie.el

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
mkdir -p $S/https/www.emacswiki.org/emacs/download/
cd       $S/https/www.emacswiki.org/emacs/download/
wget -N  'https://www.emacswiki.org/emacs/download/keysee.el'
wget -N  'https://www.emacswiki.org/emacs/download/sortie.el'
echo     'https://www.emacswiki.org/emacs/download/keysee.el' >> ~/.psne.log
echo     'https://www.emacswiki.org/emacs/download/sortie.el' >> ~/.psne.log

# (add-to-list 'load-path (ee-expand "$S/https/www.emacswiki.org/emacs/download/"))
# (require 'keysee)




#####
#
# help-quick
# 2022dec14
#
#####

# «help-quick»  (to ".help-quick")
# (find-efunctiondescr 'help-quick)
# (find-efunction      'help-quick)
# (find-eapropos "help-quick")
# (find-eapropos "help-quit")



#####
#
# elisp-bug-hunter
# 2023jan14
#
#####

# «elisp-bug-hunter»  (to ".elisp-bug-hunter")
# https://github.com/Malabarba/elisp-bug-hunter
# https://sachachua.com/blog/2023/01/using-bug-hunter-to-quickly-find-a-problem-in-my-long-emacs-configuration/
# https://lists.gnu.org/archive/html/emacs-orgmode/2023-01/msg00553.html




#####
#
# replace-multiple-strings
# 2023jan15
#
#####

# «replace-multiple-strings»  (to ".replace-multiple-strings")
# (find-fline "~/LOGS/2023jan14.emacs" "<pjb> (replace-multiple-strings ")

(defun replace-multiple-strings (replacements-alist)
  "Replaces all occurences of the keys in `replacements-alist' by their corresponding value.
The search is performed in sequentially once from (point) to (point-max)."
  (let ((re (concat "\\("
                    (mapconcat (lambda (entry) (regexp-quote (car entry)))
                               replacements-alist
                               "\\|")
                    "\\)")))
    (while (re-search-forward re (point-max) t)
      (let* ((key (buffer-substring-no-properties (match-beginning 1)
                                                  (match-end 1)))
             (val (cdr (assoc* key replacements-alist
                               :test (function string=)))))
        (if val
            (progn
              (delete-region (match-beginning 1) (match-end 1))
              (insert val)
              (goto-char (+ (match-beginning 1) (length val))))
            (goto-char (match-end 1)))))))



#####
#
# xwidgets
# 2023mar04
#
#####

# «xwidgets»  (to ".xwidgets")
# (find-fline "~/LOGS/2023mar04.emacs" "xwidget-webkit-browse-url")
# (find-fline "~/LOGS/2023mar04.emacs" "libwebkit2gtk-4.0-dev")
# (find-es "git" "emacs30-from-git" "--with-xwidgets")

https://www.youtube.com/watch?v=J2YdjpWJJHs
https://www.gnu.org/software/emacs/manual/html_node/elisp/Xwidgets.html

apti libwebkit2gtk
apti libwebkit2gtk-4.0
apti libwebkit2gtk-4.0-dev
sudo apt-get update
sudo apt-get upgrade




#####
#
# pfuture
# 2023mar11
#
#####

# «pfuture»  (to ".pfuture")
# https://lists.gnu.org/archive/html/emacs-devel/2023-03/msg00432.html pfuture
# https://github.com/Alexander-Miller/pfuture



#####
#
# --batch and --script
# 2023mar18
#
#####

# «batch-and-script»  (to ".batch-and-script")
# (find-enode "Initial Options" "--batch")
# (find-enode "Initial Options" "--script")
# (find-fline "/tmp/foo.el")


#!/usr/bin/emacs --script
(print "Hello")

;; (find-enode "Initial Options" "--batch")
;; (find-enode "Initial Options" "--script")
;; (find-sh0 "chmod 755 foo.el")
;; (find-sh0 "./foo.el")
;; (find-sh0 "./foo.el 2>/dev/null")
;;
;; Local Variables:
;; mode: emacs-lisp
;; End:




#####
#
# request
# 2023mar27
#
#####

# «request»  (to ".request")
# https://www.reddit.com/r/emacs/comments/11wv3fj/50_line_elisp_script_for_querying_chatgpt_35/

(straight-use-package 'request)
(defvar openai-response-buffer (get-buffer-create "*openai-response*"))
(defvar openai-api-key (getenv "OPENAI_API_KEY"))

(defun openai-api-request (prompt)
  "Send a request to the OpenAI API with the given prompt and return the response."
  (let* ((url "https://api.openai.com/v1/chat/completions")
         (params `(("model" . "gpt-3.5-turbo")
                   ("messages" . ,(vector (list (cons "role" "user") (cons "content" prompt))))))
         (headers `(("Content-Type" . "application/json")
                    ("Authorization" . ,(concat "Bearer " openai-api-key))))
         (response-json nil))
    (with-current-buffer openai-response-buffer
      (goto-char (point-max))
      (insert "\n\n")
      (insert (format ">>> %s -- Prompt: %s\n" (format-time-string "%Y-%m-%d %H:%M:%S") prompt)))
    (request
      url
      ;; :sync t
      :timeout 60
      :type "POST"
      :data (json-encode params)
      :headers headers
      :parser 'json-read
      :complete (cl-function (lambda (&key data &allow-other-keys)
			       (with-current-buffer openai-response-buffer
				 (when (not (get-buffer-window (buffer-name openai-response-buffer)))
				   (let ((window (split-window)))
				     (set-window-buffer window openai-response-buffer)))
				 (goto-char (point-max))
				 (insert (format ">>> %s -- Response: %s"
						 (format-time-string "%Y-%m-%d %H:%M:%S")
						 (cdr (assoc 'content
							     (cdr (assoc 'message
									 (elt
									  (cdr (assoc 'choices data)) 0))))))))))
      :success (cl-function (lambda (&key data &allow-other-keys)
                              (setq response-json data)))
      :error (cl-function (lambda (&key error-thrown data &allow-other-keys)
			    (with-current-buffer openai-response-buffer
			      (goto-char (point-max))
			      (insert "\n")
                              (insert (format "Response Error: %S \n %s \n" error-thrown data))))))))

(defun ask-gpt (prompt)
  (interactive "sEnter a prompt: ")
  (openai-api-request prompt))





#####
#
# shell-maker
# 2023apr09
#
#####

# «shell-maker»  (to ".shell-maker")
# https://xenodium.com/a-shell-maker/
# https://melpa.org/#/shell-maker

# (find-epackage-links 'shell-maker "shellmaker" t)
# (find-epackage       'shell-maker)
# (code-c-d "shellmaker" "~/.emacs.d/elpa/shell-maker-20230419.1616/")
# (find-shellmakerfile "")



#####
#
# consult
# 2023jun18
#
#####

# «consult»  (to ".consult")
# (find-epackages 'consult)
# (find-epackage-links 'consult)
# (find-epackages 'consult)
# (find-epackage 'consult)
# https://github.com/minad/consult/blob/main/consult-kmacro.el



#####
#
# ELTR:  Emacs Lisp Terminal REPL
# 2023jul16
#
#####

# «eltr»  (to ".eltr")
# https://gitlab.com/jpellegrini/eltr
# (find-git-links "https://gitlab.com/jpellegrini/eltr" "eltr")
# (find-gitk  "~/usrc/eltr/")
# (code-c-d "eltr" "~/usrc/eltr/")
# (find-eltrfile "")
# (find-eltrfile "README.md")
# (find-eltrfile "eltr.el")
# (find-eltrfile "example.el")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/eltr/
~/bigsrc/emacs30/src/emacs --batch -l eltr.el -f eltr

(setq buf (get-buffer-create "new-buffer"))
(with-current-buffer buf (insert "Hello, World!"))
(buffer-string)
(switch-to-buffer buf)
(buffer-string)
(message "Where is the minibuffer? :)")
(/ (+ (sqrt 5) 1) 2)
'a-symbol
unquoted-symbol
,,e7                ;; seventh input expression
,,v7                ;; seventh returned value
(setq x (read))     ;; IELM doesn't handle this
(concat "a " "string")
x
70
(setq eltr-show-max-binary-digits 4)
70
(setq eltr-result-color 'yellow)
(setq eltr-result-suffix-emphasis 'underline)




#####
#
# sentence-end-double-space
# 2023jul17
#
#####

# «sentence-end-double-space»  (to ".sentence-end-double-space")
# (find-evardescr 'sentence-end-double-space)
# (find-enode "Sentences" "sentence-end-double-space")
# https://www.reddit.com/r/emacs/comments/14vxrx3/what_do_you_all_think_about_setq/



#####
#
# quoted-file-names
# 2023jul19
#
#####

# «quoted-file-names»  (to ".quoted-file-names")
# (find-enode "File Names" "/:")
# (find-enode "Quoted File Names")
# (find-elnode "File Name Expansion" "file-name-quote")
# (find-elnode "File Name Expansion" "file-name-unquote")
# (find-efunctionpp 'brxpdfd)
# (find-efunction 'ee-dired-to-fname)




#####
#
# pulsar
# 2024mar03
#
#####

# «pulsar»  (to ".pulsar")



#####
#
# rdd - repl-driven-development
# 2023sep23
#
#####

# «rdd»  (to ".rdd")
# «repl-driven-development»  (to ".repl-driven-development")
# (find-TH "2024-rdd")
# https://emacsconf.org/2023/talks/eval/
# http://alhassy.com/repl-driven-development
# https://github.com/alhassy/repl-driven-development
#
# (find-epackage-links 'repl-driven-development "rdd" t)
# (find-epackages      'repl-driven-development)
# (find-epackage       'repl-driven-development)
# (code-c-d "rdd" "~/.emacs.d/elpa/repl-driven-development-20231123.1917/")
# (find-rddfile "")
# (find-rddfile "repl-driven-development.el" "(require 'eros)")
# (find-rddfile "repl-driven-development.el" "(defmacro rdd---make-repl-function")
# (find-rddfile "repl-driven-development.el" "(defmacro rdd---make-repl-function" "pulsar")

# (require 'repl-driven-development)
# (find-efunction 'repl-driven-development)

# (find-sh "apt-file search bin/jshell")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti openjdk-17-jdk-headless

apti jshell

openjdk-17-jdk - OpenJDK Development Kit (JDK)
openjdk-17-jdk-headless - OpenJDK Development Kit (JDK) (headless)


** Make sure that there is an entry for MELPA in package-archives.
** (find-epp package-archives)
** (find-melpa-links)

** Install repl-driven-development.
** (find-epackage-links 'repl-driven-development "rdd" t)
*    (package-initialize)
*    (package-refresh-contents)
**   (package-delete (ee-package-desc 'repl-driven-development))
*    (package-install 'repl-driven-development)
**   (find-epackage   'repl-driven-development)
*    (code-c-d "rdd" "~/.emacs.d/elpa/repl-driven-development-20231123.1917/")
**   (find-rddfile "")

** The default for text-quoting-style is usually nil:
*    (text-quoting-style)
** See: (find-evardescr 'text-quoting-style)
** Set it to 'grave:
*    (setq text-quoting-style 'grave)
*    (text-quoting-style)

** Based on:
** (find-efunctiondescr 'repl-driven-development)
** (find-efunctiondescr 'repl-driven-development "minimal server, and")
** (find-efunctiondescr 'repl-driven-development "npm install -g express axios")

;;-- (ee-copy-rest '(0 ";;--snip--") '(find-fline "/tmp/o.js"))
/*
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
npm install express axios

*/

let app = require('express')()
let clicked = 1
app.get('/hi', (req, res) => res.send(`Hello World × ${clicked++}`))

let server = app.listen(3000)
// Now visit   http://localhost:3000/hi   a bunch of times!

// Better yet, see the output programmatically...
let axios = require('axios')
// Press C-x C-j a bunch of times on the following expression e?e
// console.log((await axios.get('http://localhost:3000/hi')).data)
(async () => {console.log((await axios.get("URL")).data)})();

// Consider closing the server when you're done with it.
server.close()

/*
* (eepitch-nodejs)
* (eepitch-kill)
* (eepitch-nodejs)
require("./o.js")

*/
;;--snip--

** Test the script:
*  (find-fline "/tmp/o.js")







#####
#
# musa-elispcheatsheet
# 2023sep23
#
#####

# «musa-elispcheatsheet»  (to ".musa-elispcheatsheet")
# https://github.com/alhassy/ElispCheatSheet
# http://alhassy.com/ElispCheatSheet/CheatSheet.pdf
# (find-git-links "https://github.com/alhassy/ElispCheatSheet" "elispcheatsheet")
# (find-elispcheatsheetfile "")
# (find-elispcheatsheetfile "README.md")




#####
#
# emacs-animation
# 2023dec21
#
#####

# «emacs-animation»  (to ".emacs-animation")
# https://github.com/johanvts/emacs-fireplace
# http://dantorop.info/project/emacs-animation/



#####
#
# ct.el
# 2024jan28
#
#####

# «ct.el»  (to ".ct.el")
# (find-epackage-links 'ct)
# (find-epackage       'ct)
# (find-epackage-links 'hsluv)
# (find-epackage       'hsluv)
# https://github.com/neeasade/ct.el
# https://emacsnotes.wordpress.com/2024/01/28/how-i-used-ct-color-tools-apis-to-choose-background-highlighting-colors-for-use-with-hi-lock-library-or-pick-colors-in-a-quantitative-way-using-ct-color-tools-apis/
# https://web.archive.org/web/20240127045924/https://notes.neeasade.net/color-spaces.html

# (code-c-d "ct" "~/.emacs.d/elpa/ct-20230519.1319/")
# (require 'ct)
# (find-ctfile "")
# (find-ctfile "ct.el")
# (find-efunction 'ct-make-rgb)
# (ct-make-hsluv 0 0 0)
# (ct-make-hsluv 1 0 0)
# (ct-make-hsluv 100 0 0)
# (ct-make-hsluv 0 100 0)
# (ct-make-hsluv 0 100 100)
# (ct-make-hsluv 0 0 100)
# (ct-make-hsluv 10 10 50)
# (ct-make-hsluv 10 10.0 50)

;; (find-angg "elisp/find-erainbowgrid.el")
(load       "~/elisp/find-erainbowgrid.el")






;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 0 x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 50 x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv x 50 y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv x y 50)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x y 0)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x 0 y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb 0 x y)))

(find-rainbowmodefile "rainbow-mode.el")



(seq 0 10)
(ee-seq 0 10)

(defun ee-seq (a b &optional step) 


# (code-c-d "hsluv" "~/.emacs.d/elpa/hsluv-20181127.1206/")
# (find-hsluvfile "")





#####
#
# unload-feature
# 2024feb11
#
#####

# «unload-feature»  (to ".unload-feature")
# (find-eaproposf       "unload")
# (find-efunction-links 'unload-feature)
# (find-efunctiondescr  'unload-feature)
# (find-efunction       'unload-feature)
# (find-elnode "Unloading")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/unload-test/
mkdir  /tmp/unload-test/
cd     /tmp/unload-test/

cat     > ut-a.el <<'%%%'
(require 'ut-aa)
(defun    ut-a ())
(provide 'ut-a)
%%%
cat     > ut-aa.el <<'%%%'
(require 'ut-aaa)
(defun    ut-aa ())
(provide 'ut-aa)
%%%
cat     > ut-aaa.el <<'%%%'
(defun    ut-aaa ())
(provide 'ut-aaa)
%%%

# (find-fline "/tmp/unload-test/")

*  (add-to-list 'load-path "/tmp/unload-test/")
** (find-elinks-elisp (mapcar 'ee-S load-path))
** (find-eloadhistory-links)
** (find-estring-elisp (ee-eloadhistory-find-flines))
** (find-estring-elisp (ee-eloadhistory-fors))

(ut-a)
(ut-aa)

(require 'ut-a)
(unload-feature 'ut-a)

** Unloading is not recursive.




#####
#
# tempel
# 2024feb16
#
#####

# «tempel»  (to ".tempel")
# (find-epackage-links 'tempel)
# (find-epackage-links 'tempo)




#####
#
# grail
# 2024feb17
#
#####

# «grail»  (to ".grail")
# (find-fline "~/LOGS/2024feb17.emacs" "<JohnGalt> https://github.com/bitcathedrals/grail/tree/main")
# (find-git-links "https://github.com/bitcathedrals/grail" "grail")
# https://github.com/bitcathedrals/grail

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/grail/
cd      ~/usrc/
git clone https://github.com/bitcathedrals/grail
cd      ~/usrc/grail/

# (find-fline "~/usrc/")
# (find-fline "~/usrc/grail/")
# (find-gitk  "~/usrc/grail/")

# (code-c-d "grail" "~/usrc/grail/")
# (find-grailfile "")
# (find-grailsh "find * | sort")
# (find-grailsh "find * | sort | grep parser")
# (find-grailfile "README.md")
# (find-grailfile "README.md" "grail.el is symlinked to ~/.emacs")
# (find-grailfile "emacs/grail.el")
# (find-grailfile "archive/parser.el")
# (find-grailfile "archive/parser-fn.el")
# (find-grailfile "archive/parser-examples.el")
# (find-grailfile "archive/tests/parser-test.el")
# (find-grailfile "emacs/local/elisp/lex-cache.el")
# (find-grailfile "emacs/local/elisp/dwim-tab.el")

# (find-git-links "https://github.com/bitcathedrals/pythonsh" "pythonsh")
# https://github.com/bitcathedrals/pythonsh

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/pythonsh/
cd      ~/usrc/
git clone https://github.com/bitcathedrals/pythonsh
cd      ~/usrc/pythonsh/

git checkout develop

# (find-fline "~/usrc/")
# (find-fline "~/usrc/pythonsh/")
# (find-gitk  "~/usrc/pythonsh/")

# (code-c-d "pythonsh" "~/usrc/pythonsh/")
# (find-pythonshsh "find * | sort")
# (find-pythonshfile "")
# (find-fline "~/LOGS/2024feb17.emacs" "<JohnGalt> The python tools are painful, so")




#####
#
# insert at the end of the buffer
# 2024mar23
#
#####

# «insert-at-eob»  (to ".insert-at-eob")
# (find-fline "~/LOGS/2024mar23.emacs" "(set-marker (make-marker)" "(buffer-end))")
# (find-elnode "Point")
# (find-elnode "Window Point")

(progn

  (save-window-excursion

    (let ((ee-buffer-name "*out*"))
      (find-estring "one\ntwo\nthree\nfour\nfive\n" 2))

  )

  (find-3a nil
     '(find-ebuffer "*out*" 3)
     '(find-ebuffer "*out*" 4)
   )

)




#####
#
# arc-mode.el
# 2024apr14
#
#####

# «arc-mode.el»  (to ".arc-mode.el")
# «rar»          (to ".rar")
# (require    'arc-mode
# (find-efile "arc-mode.el")
# (find-efunction 'archive-rar-summarize)
# (find-efunction 'archive-rar-extract)
# (find-efunction 'archive-rar-extract "unar")
# (find-status   "unar")
# (find-vldifile "unar.list")
# (find-udfile   "unar/")




#####
#
# username
# 2024jul07
#
#####

# «username»  (to ".username")
# (find-elnode "User Identification")
# (find-elnode "Index" "* user-login-name:")
# user-login-name




#####
#
# call-tree
# 2024jul21
#
#####

# «call-tree»  (to ".call-tree")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-08/msg00485.html byte-compile-call-tree
# (find-egrep "grep --color=auto -nH --null -e call-tree *.el */*.el")
#
# > Is it possible to make a call graph of elisp code ?
# Enable `byte-compile-generate-call-tree' and compile the code.




#####
#
# The "archive-contents.sig" error in Emacs28.2 and earlier
# 2024jul29
#
#####

# «archive-contents.sig»  (to ".archive-contents.sig")
# (to "gnu-elpa-keyring-update")
# (to "elpa-problems-apr2020")
# https://stackoverflow.com/questions/78381013/failed-to-verify-signature-archive-contents-sig-problem-with-emacs
# https://mail.gnu.org/archive/html/help-gnu-emacs/2024-05/msg00248.html
# (find-lean4-intro "6. Install lean4-mode")
# (find-lean4-intro "6. Install lean4-mode" "gnu-elpa-keyring-update")
# (find-fline "/sda1/usr/share/doc/emacs/")
# (find-fline "/sda1/usr/share/doc/emacs/changelog.Debian.gz" "package-keyring.gpg")
# (find-fline "/sda1/usr/share/emacs/28.2/etc/" "package-keyring.gpg")
#
# (find-status   "emacs")
# (find-vldifile "emacs.list")
# (find-udfile   "emacs/")
# (find-fline      "/var/lib/dpkg/status")
# (find-fline "/sda1/var/lib/dpkg/status" "Package: emacs")

Failed to verify signature archive-contents.sig:
No public key for 645357D2883A0966 created at 2024-07-28T18:10:05-0300 using EDDSA
Command output:
gpg: Signature made Sun Jul 28 18:10:05 2024 -03
gpg:                using EDDSA key 0327BE68D64D9A1A66859F15645357D2883A0966
gpg: Can't check signature: No public key





#####
#
# Test (find-lean4-intro) in /tmp/fake-home-dir/
# 2024jul29
#
#####

# «find-lean4-intro-fakehome»  (to ".find-lean4-intro-fakehome")
# (find-lean4-intro)
# (find-lean4-intro "6. Install lean4-mode")
# (find-lean4-intro "6. Install lean4-mode" "gnu-elpa-keyring-update")
# (find-efunction 'gnu-elpa-keyring-update)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/fake-home-dir/
mkdir   /tmp/fake-home-dir/
cd      /tmp/fake-home-dir/
echo '
  PS1="%d(%n:tmp)# "
  setopt interactivecomments
'    > /tmp/fake-home-dir/.zshrc

export LUA_INIT=
export HOME=$PWD
export    S=$PWD/snarf
HOME=$PWD $EMACS28 $EMACSFGBGFONT -T emacs28 -Q -l /tmp/o.el &







#####
#
# maxima-font-lock-bug
# 2024jul22
#
#####

# «maxima-font-lock-bug»  (to ".maxima-font-lock-bug")
# (find-es "maxima" "emaxima-bug-2024jul20")
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-07/msg00873.html Edrx
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-07/msg00876.html SKangas
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-07/index.html#00873
# https://mail.google.com/mail/u/0/#inbox/FMfcgzQVxlKRvMxkkSFpWXDhcWGSvKdH to bug-gnu-emacs
# https://mail.google.com/mail/u/0/#sent/KtbxLvhVcwXRZqPbgHWHdGJfSFnjbQwlTg to Maxima

Hi all,

there are two Maxima modes around - one in Melpa and one in Maxima
itself. They have different bugs, and lots of people, including me,
prefer the Maxima mode that comes with Maxima. This bug report is
about a change in Emacs that broke the font-locking in the Maxima mode
that comes with Maxima - I didn't test the other Maxima mode.

Something happened between these two commits:

3f7e26e2bed 2024-04-13 10:10:19 (define-globalized-minor-mode): Fix bug#58888
17e26cf57e1 2024-04-13 10:31:28 (define-globalized-minor-mode): Require the use of `run-mode-hooks`

Until 3f7e26e2bed font-locking in .mac files worked, but from
17e26cf57e1 onwards it doesn't work anymore. In the current Emacs from
git - where "current" means 2024jul21 - it doesn't work.

Note that 3f7e26e2bed is 17e26cf57e1~1.
I'm on Debian 11 ("oldstable").

Here's how to test it.

--snip--snip--
rm -Rv /tmp/test-maxima-mode/
mkdir  /tmp/test-maxima-mode/
cd     /tmp/test-maxima-mode/

wget -O maxima.el \
  "https://sourceforge.net/p/maxima/code/ci/master/tree/interfaces/emacs/emaxima/maxima.el?format=raw"
wget -O maxima-font-lock.el \
  "https://sourceforge.net/p/maxima/code/ci/master/tree/interfaces/emacs/emaxima/maxima-font-lock.el?format=raw"

cat > test.mac <<'%%%'
max(2, 4);
min(2, 4);
q(t)   := max(0, t-2);
r(t)   := min(q(t), 2);
S(x,y) := max(r(x), r(y));
plot2d (r(t), [t, 0, 6]);
plot3d (S(x,y), [x, 0, 6], [y, 0, 6]);
%%%

cat > test.el <<'%%%'
(progn
  (load "/tmp/test-maxima-mode/maxima-font-lock.el")
  (load "/tmp/test-maxima-mode/maxima.el")
  (add-to-list 'auto-mode-alist '("\\.mac$"  . maxima-mode))
  (find-file "/tmp/test-maxima-mode/test.mac")
  )
%%%

emacs -Q test.el
--snip--snip--

  Cheers,
    Eduardo Ochs
    http://anggtwu.net/#eev





#####
#
# Lambdas for beginners broken - help, please
# 2024jul31
#
#####

# «lambdas-for-beginners»  (to ".lambdas-for-beginners")
# (find-efunction 'ee-symbol-function)
# https://mail.google.com/mail/u/0/#sent/KtbxLthpxWGnVmgblTSTrtkWFBLWFtLbxq
# https://lists.gnu.org/archive/html/help-gnu-emacs/2024-07/msg00292.html

Lambdas for beginners broken - help, please

Hi all,

I always present Emacs to beginners starting by Lisp, with this
approach:

  http://anggtwu.net/eev-intros/find-eev-quick-intro.html#2
  http://anggtwu.net/eev-intros/find-eev-quick-intro.html#3

and when I show Emacs to friends who are programmers - in some sense -
and they like it, I usually tell them to read my short tutorial on
elisp as soon as possible, and try its examples:

  http://anggtwu.net/eev-intros/find-elisp-intro.html

But one or two days ago I compiled a current Emacs from git, and I saw
that many functions in eev don't work anymore. Apparently the problem
is here:

  (info "(elisp)Function Cells")
  https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Cells

Now the htmlized version of the manual says this,

  (defun bar (n) (+ n 2))
  (symbol-function 'bar)
    ;; -> (lambda (n) (+ n 2))

the current info manual says this,

  (defun bar (n) (+ n 2))
  (symbol-function 'bar)
    ;; -> #f(lambda (n) [t] (+ n 2))

and if I run the code myself(*) I get this:

  (defun bar (n) (+ n 2))
  (symbol-function 'bar)
    ;; -> #[(n) ((+ n 2)) nil]

I have lots of code and lots of tutorials that rely on the idea that
when lexical binding is nil then after a

  (defun bar (n) (+ n 2))

the value of

  (symbol-function 'bar)

will be a lambda expression in this sense,

  (info "(elisp)Lambda Expressions")
  http://www.gnu.org/software/emacs/manual/html_node/elisp/Lambda-Expressions

_as a list_, not as a "function object that is not a list".

What do I need to read to learn how to adapt my code to the new
behavior of Emacs?

  Thanks in advance...
    Eduardo Ochs
    http://anggtwu.net/#eev


(*): I tried both the standard `C-x C-e' and my favorite way of
calling it, that uses the key `M-e' and `(eval <obj> t)'.





#####
#
# minimal-emacs.d (James Cherti)
# 2024aug03
#
#####

# «minimal-emacs.d»  (to ".minimal-emacs.d")
# https://www.jamescherti.com/minimal-emacs-d/
# https://github.com/jamescherti/minimal-emacs.d
# (find-git-links "https://github.com/jamescherti/minimal-emacs.d" "minimalemacsd")
# (code-c-d "minimalemacsd" "~/usrc/minimal-emacs.d/")
# (find-minimalemacsdfile "")




#####
#
# auth-source
# 2024sep08
#
#####

# «auth-source»  (to ".auth-source")
# (find-node "(auth)Help for users")
# (find-node "(auth)Function Index")
# (find-efile "auth-source.el")



#####
#
# lumie-dotfiles
# 2024sep24
#
#####

# «lumie-dotfiles»  (to ".lumie-dotfiles")
# (find-fline "~/LOGS/2024sep23.Lumie")
# https://luminousnine.com/blog/posts/2024-09-16-the-magic-of-gnu-emacs/
# https://codeberg.org/luminousnine/dotfiles
# (find-git-links "https://codeberg.org/luminousnine/dotfiles" "dotfiles")
# (code-c-d "dotfiles" "~/usrc/dotfiles/")
# (find-dotfilesfile "")
# (find-dotfilesfile "emacs/config.org" "(lsp-restart 'ignore)")
# (find-dotfilesfile "emacs/config.org" "(kbd \"C-2\") 'tab-next")
# (find-dotfilesfile "emacs/config.org" "* Webpaste")
# (find-dotfilesfile "emacs/config.org" "hydra-zoom")
# (find-dotfilesfile "emacs/config.org" ";; circe")
# (find-dotfilesfile "emacs/config.org" "All the icons")
# (find-dotfilesfile "emacs/config.org" "ln/unbind-bad-keybindings")
# (find-dotfilesfile "emacs/config.org" "(use-package enlight")

https://codeberg.org/luminousnine/dotfiles/raw/branch/main/emacs/config.org
(find-wget-org "https://codeberg.org/luminousnine/dotfiles/raw/branch/main/emacs/config.org")

# (find-elpafile "webpaste-20220524.1745/webpaste.el")




#####
#
# markers
# 2024oct11
#
#####

# «markers»  (to ".markers")
# (find-elnode "Markers")
# (find-elnode "Creating Markers")

(point-marker)



#####
#
# ccl
# 2024nov22
#
#####

# «ccl»  (to ".ccl")
# https://emacsninja.com/posts/code-conversion-language.html
# https://news.ycombinator.com/item?id=42207282 Code Conversion Language (2019) (emacsninja.com)







(find-2a 
 ' (find-evardescr 'my-p1)
 ' (find-evardescr 'my-p2)
)

# (find-evariable 'my-p1)




(setq si (ee-string-intervals sr))


(find-epp sti)
(find-estruct sti)

# (find-eapropos "package-desc")
# (find-evardescr 'package-archive-contents)
# (find-evariable 'package-archive-contents)

(defun my-name< (sy1 sy2) (string< (symbol-name sy1) (symbol-name sy2)))
(defun my-carname< (p1 p2) (my-name< (car p1) (car p2)))
(setq my-p0 (mapcar 'car package-archive-contents))
(setq my-p1 (sort my-p0 'my-name<))

(let* ((p0 (mapcar 'car package-archive-contents))
       (name< (lambda (sy1 sy2) (string< (symbol-name sy1) (symbol-name sy2))))
       (p1 (sort p0 name<)))
  (find-eppp p1))

                          (symbol-name (car pair2))))))


  (let ((pair< (lambda (pair1 pair2)
                 (string< (symbol-name (car pair1))
                          (symbol-name (car pair2))))))


(find-eppp (mapcar 'car package-archive-contents))


# (find-efunctiondescr 'package-menu-describe-package)
# (find-efunction      'package-menu-describe-package)

(find-epp sr)
(find-epp si)
(find-epp (car si))
(find-epp                               (cdar si))
(find-epp      (alist-get 'package-desc (cdar si)))
(find-epp (car (alist-get 'package-desc (cdar si))))

# (find-efunctiondescr 'plist-get)
# (find-efunctiondescr 'alist-get)




# (find-eev "eev-kla.el" "eekla2")
# (find-eev "eev-kla.el" "eekla2")












# (find-egrep "grep --color=auto -nH --null -e canlock *.el */*.el")
# (find-efile "gnus/canlock.el" "defcustom canlock-password")

https://github.com/alphapapa/burly.el
https://elpa.gnu.org/packages/multi-mode.html
https://elpa.gnu.org/packages/shell-command+.html

http://www.emacswiki.org/emacs/rcircDbusNotification

https://www.reddit.com/r/lisp/comments/c2xef1/why_should_i_learn_lisp_in_2019_or_future/
https://sachachua.com/blog/2019/06/2019-06-10-emacs-news/






(dolist (s (mapcar 'car (buffer-local-variables (current-buffer))))
  (when (string-match "^b" (symbol-name s))
    (insert (format "%S\n" s))))

(find-epp (sort (mapcar 'buffer-name (buffer-list)) 'string<))

# (find-efile "emacs-lisp/bytecomp.el" "temp-output")
# (find-esh "cat ChangeLog{,.{10,9,8,7,6,5,4,3,2,1}}")


(insert #XA7)
(insert (string-to-number "A7" 16))


# (find-fline "/hda6/TATI/")



https://www.emacswiki.org/emacs/ModeTutorial

https://www.reddit.com/r/emacs/comments/cudssq/is_the_emacs_logo_copyrighted_could_i_put_it_on_a/

http://ergoemacs.org/emacs/_p/KickbanXahLeeFromEmacsChannel.htm
https://archive.is/20190307220205/http://ergoemacs.org/emacs/_p/KickbanXahLeeFromEmacsChannel.htm
https://lists.archive.carbon60.com/python/python/727421

https://stackoverflow.com/questions/36522834/vim-fuzzy-finder-like-for-emacs

https://github.com/tromey/el-compilador


https://blog.osteele.com/2004/11/ides The IDE Divide
https://blog.aaronbieber.com/2016/12/29/don-t-use-terminal-emacs.html

# (find-efunctiondescr 'local-unset-key)
# (find-efunction      'local-unset-key)

(set-frame-font
  (concat "Fira Code" "-" (number-to-string 1.1)
          ":weight=regular:hintstyle=hintslight")
  t t)





"Bringing GNU Emacs to Native Code" at the European Lisp Symposium
https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01850.html

https://github.com/alphapapa/emacs-package-dev-handbook

>> FWIW, the "Auto-save file lists were found" line is barely visible on my
>> machine, and the "M-x recover-session RET" is fully concealed.
> That means we have a bug.


http://www.gigamonkeys.com/book/introduction-why-lisp.html
https://llazarek.com/2018/07/modal-editing-in-emacs.html ***

https://ag91.github.io/blog/2020/08/07/how-i-inspected-my-emacs-configuration-and-discovered-once-again-org-mode-people-are-smart/

https://irreal.org/blog/?p=9077 Steve Yegge on Emacs and Google
https://medium.com/@steve.yegge/dear-google-cloud-your-deprecation-policy-is-killing-you-ee7525dc05dc

;; <rougier>
;; Rougier: On the design of text editors
;; https://arxiv.org/abs/2008.06030
;; https://arxiv.org/pdf/2008.06030.pdf
(code-pdf-page "rougier" "$S/https/arxiv.org/pdf/2008.06030.pdf")
(code-pdf-text "rougier" "$S/https/arxiv.org/pdf/2008.06030.pdf")
;; (find-rougierpage)
;; (find-rougiertext)


https://git.sr.ht/~technomancy/better-defaults

https://www.youtube.com/watch?v=dEQsM4SApQs
https://www.youtube.com/watch?v=Ookm7PqJzXw
https://www.youtube.com/watch?v=An-AmFScw1o
https://www.youtube.com/watch?v=TsgNYUfdv9A
https://www.youtube.com/watch?v=R2mGjvrGbcE
https://www.youtube.com/watch?v=zch_bl4A5uU


https://sembr.org/ Semantic Line Breaks
https://github.com/rougier/emacs-svg-icon


# https://www.reddit.com/r/emacs/comments/kklv3k/making_task_wizards_easily_with_eieio/
# (find-efile "emacs-lisp/eieio-custom.el")
# https://github.com/sabof/magic-buffer
# https://github.com/jaspervdj/patat

https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg02004.html tool-bar-to-string

https://dataswamp.org/~incal/tty-emacs-keys.txt

https://www.fsfla.org/blogs/lxo/2021-02-28-syncing-subtitles-in-freedom

https://emacspeak.blogspot.com/2018/06/effective-suggest-and-complete-in-eyes.html
https://sachachua.com/blog/2021/04/emacs-hydra-allow-completion-when-i-can-t-remember-the-command-name/

https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html
https://hyperscope.link/3/7/1/3/6/Emacs-Lisp-interpolation-of-embedded-PostgreSQL-queries-within-plain-text.html
https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg00115.html my mention to ee-template0
https://lists.gnu.org/archive/html/help-gnu-emacs/2021-05/msg00118.html Jean Louis's answer
https://mail.google.com/mail/ca/u/0/#search/from%3Ajean+eev/FMfcgxwLtkZwrsVsFfZTcvWcmtZkWVzl

https://emacs.stackexchange.com/questions/17056/what-is-the-origin-of-the-term-yank

https://lists.gnu.org/archive/html/help-gnu-emacs/2021-11/msg00000.html closure within closure, incorrect (?) byte-compiler warnings

https://github.com/bastibe/annotate.el

https://directory.fsf.org/wiki/Emacs#tab=Details

# (find-epackage-links 'free-keys)
# (find-epackage       'free-keys)
# https://github.com/Fuco1/free-keys

# (find-efunctiondescr 'delete-selection-mode)
# (find-efunction      'delete-selection-mode)
# (find-enode "Command Index" "* delete-selection-mode:")

https://lists.gnu.org/archive/html/help-gnu-emacs/2022-01/msg00042.html Order of fonts returned by list-fonts

https://git.musimatic.xyz/dotfiles/tree/emacs/.emacs.d/configuration.org
https://git.musimatic.xyz/dotfiles/plain/emacs/.emacs.d/configuration.org

http://aleph0.info/jp/emacs-lisp.pdf tutorial em portugues

https://dancol.org/pdumperpres.pdf Emacs Portable Dumper - Daniel Colascione

# (find-efunctiondescr 'glyphless-display-mode)
# (find-efunction      'glyphless-display-mode)

http://emacs.secretsauce.net/ GNU Emacs snapshot packages
https://old.reddit.com/r/emacs/comments/a5j3lc/emacs_key_binding_conventions_and_why_you_should/
https://github.com/alphapapa/emacs-package-dev-handbook
https://emacspeak.blogspot.com/2017/08/emacs-start-up-speeding-it-up.html
# (find-es "emacs" "taskpaper-mode")
# https://weblog.evenmere.org/posts/2019-09-10-email-graphics.html

# (find-efunctiondescr   'debug-on-variable-change)
# (find-efunction        'debug-on-variable-change)
# (find-elnode "Index" "* debug-on-variable-change:")
# (find-efunctiondescr   'add-variable-watcher)
# (find-efunction        'add-variable-watcher)
# (find-elnode "Index" "* add-variable-watcher:")

https://protesilaos.com/codelog/2022-06-27-denote-0-1-0/

https://elblogdelazaro.org/posts/2022-06-27-tema-del-sistema-en-pdf-tools/

# (find-efunctiondescr 'with-silent-modifications)

https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-08/msg02699.html derived-mode-chain

https://github.com/VernonGrant/emacs-keyboard-shortcuts
https://raw.githubusercontent.com/VernonGrant/emacs-keyboard-shortcuts/main/README.md

https://www.reddit.com/r/programming/comments/5o846i/comment/dchct7h/ Buttery Smooth Emacs
Until the program does something, the world stands still...
But it works. Somehow, it all works. And as a result, Emacs is as
smooth and flicker-free as any other modern GUI program, and regular
users have no idea what horrors lie beneath.

https://github.com/emacs-dashboard/emacs-dashboard

Michael Heerdegen: Elisp Reference Manual on inserting tables - tbl.el
https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/msg00194.html
https://lists.gnu.org/archive/html/help-gnu-emacs/2022-11/binHz6u86fYPz.bin

# (find-epackage-links 'string-edit-at-point "stringeditatpoint" t)
# (find-epackage       'string-edit-at-point)
# (code-c-d "stringeditatpoint" "~/.emacs.d/elpa/string-edit-at-point-20220913.712/")
# (find-stringeditatpointfile "")

https://www.emacs.dyerdwelling.family/emacs/20230112122044-emacs--creating-album-art-thumbnails-for-emms/
https://emacs.stackexchange.com/questions/102/advantages-of-setting-variables-with-setq-instead-of-custom-el/106#106

https://news.ycombinator.com/item?id=34349484 Vim is touch-typing on steroids (trickster.dev) - When I "program", 95% of what I do is read documentation and other technical resources ***

https://lists.gnu.org/archive/html/bug-gnu-emacs/2023-02/msg01831.html file-modes-to-number
https://lists.gnu.org/archive/html/bug-gnu-emacs/2023-02/msg01808.html file-attributes, read-file-modes
https://lists.gnu.org/archive/html/bug-gnu-emacs/2023-02/msg01825.html file-modes
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html

# (find-epackage 'backup-walker)

* bug#61552: Feature request: Add variable Man-prefer-synchronous-call
# https://mail.google.com/mail/u/0/#inbox/FMfcgzGrcjKPrlJQDSKCscQVQvxWjnvW

https://www.emacswiki.org/emacs/WhyDoesElispSuck
https://www.linuxfromscratch.org/blfs/view/svn/postlfs/emacs.html
https://corwin.bru.st/2023-06-05-the-turtle-and-the-snail/ "emacs is slow but it lets me do things fast"
https://lists.gnu.org/archive/html/emacs-devel/2023-06/msg00513.html "dwimmy"
https://flandrew.srht.site/listful/democratize-can-now-import-shortdoc.html
https://lists.gnu.org/archive/html/help-gnu-emacs/2023-08/msg00466.html sigusr1
https://github.com/benma/visual-regexp.el
https://www.reddit.com/r/emacs/comments/dhv4df/does_the_fact_that_rms_basically_ripped_off/ mock lisp
https://github.com/emacs-mirror/emacs/graphs/contributors

# (find-eetcfile "NEWS" "Man-prefer-synchronous-call")

https://irreal.org/blog/?p=11896 Removing Diacritics From A String
https://coredumped.dev/2024/02/23/cycles-all-way-down/ ***

;; https://lists.gnu.org/archive/html/emacs-devel/2024-03/msg00273.html
(version-to-list "1.0")
(version-to-list "1.0pre")
(version-to-list "1.0git")

# (find-efunctiondescr 'tab-line-mode)
# (find-efunction 'tab-line-mode)
# (find-enode "Tab Stops")

https://planet.emacslife.com/

https://github.com/anonimitoraf/emacs-clippo
https://codeberg.org/fourier/loccur
https://www.reddit.com/r/emacs/comments/c6ftnf/what_is_really_a_keyboard_macro/
https://github.com/pprevos/emacs-writing-studio





#  Local Variables:
#  coding:               raw-text-unix
#  modes:                (fundamental-mode emacs-lisp-mode)
#  ee-anchor-format:     "«%s»"
#  End: