Skip to content

Latest commit

 

History

History
2680 lines (2675 loc) · 181 KB

NEWS

File metadata and controls

2680 lines (2675 loc) · 181 KB

PEL – Pragmatic Emacs Library – NEWS -*- org -*-

Changes since Version 0.4.1:

Modifications, Fixes and Improvements:

  • Add pel-etags-toggle-case-sensitivity, bound to <f11> X X, to toggle the case sensitivity of etags-based xref search. This changes the global value of the tags-case-fold-search user-option for the current Emacs session. Use a command argument to only modify the value for the local buffer.
    • The pel-xref-show-status now displays the value of the user-option and the PEL key binding that can be used to change it.
  • Add support for archive-rpm when pel-use-archive-rpm user-option is activated. With this, it becomes possible to open RPM and CPIO files and see their content the way Emacs supports tarball and zip files.
  • Add pel-cc-find-show-status, bound to the <f12> <f4> f key sequences of cc-mode derived major modes that PEL supports (C, C++, D). It prints information related to the user-options and variables used to control the specialized file finding for these modes.
  • Fix pel-open-at-point ability to print the error reason identified by called functions that detect why the file cannot be found. The error message is trying to describe what should be done to fix the problem.
  • Temporary work-around for a problem related to auto loading by some portion of PEL that may affect operations. More investigation is required on that, and the issue is probably related to changes in the auto loading introduced in Emacs 28 or 29. 🚧
  • Enhance <f12> prefixed key bindings for navigation across scopes//functions/structures in C, C++ and D.
  • On Emacs 28 and later, add a <f11> ? d d key binding to the shortdoc command.
  • Fix customization user option name: pel-use-helm_descbinds is now pel-use-helm-descbinds
  • Add <f11> ? e P binding to list-packages
  • Modified the pel-package-info command. It now checks and prints how many elpa-compliant installed packages have a newer version and could be upgraded. Interactively , the command now always prints inside a buffer, it no longer prints on the echo area (it prints too many lines). The function has the TO-STDOUT argument though: that is used by the make file to print a report when building.
  • Add support for emacs-eat terminal emulator for Emacs, a quite flexible one totally implemented in Emacs Lisp. Use the <f11> z f to launch eat-mode terminal in the current window. The mode support the <f12> <up> and <f12> <down> navigation across prompts.
  • Add pel-sh-add-sh-local , bound to <f12> t inside sh-mode buffers; it inserts a sh-shell file-local variable definition at the end of the buffer to help identify the type of shell script language syntax to use. The command prompts for the shell name, providing a default and tab-completion.
  • Add following functions to improve sh-mode editing:
    • pel-toggle-accept-hyphen, bound to <f12> -, to toggle acceptance of hyphen and period as valid characters of shell functions by the imenu commands.
    • pel-sh-next-function, bound to <f12> <down> which moves point to the beginning of the next shell function definition. Always accepts function names that use hyphen and period in their names when pel-toggle-accept-hyphen has activated them.
    • pel-sh-prev-function, bound to <f12> <up> which moves point to the beginning of the previous shell function definition. Always accepts function names that use hyphen and period in their names when pel-toggle-accept-hyphen has activated them.
  • Add support for the Windows Tab Line mode for Emacs 27.1 and later: add <f11> w L binding to global-tab-line-mode. The pel-∑wnd hydra now has the L key bound to global-tab-line-mode.
  • Add binding for frame tear-off command: tear-off-window is now bound to <f11> w i f (mnemonic being: “window in frame”). It is also bound to the F key of the pel-∑wnd hydra.
  • Add support for Emacs Tab Bar for Emacs 27.1 and later:
    • Add binding to window tear off inside tab: the tab-window-detach command is now bound to <f11> w i t (mnemonic being “window in tab”) and inside the pel-∑wnd hydra T key. Also add key bindings to navigate to next (]) and previous ([) tab.
    • Add a new ⅀ Tab-Bar PDF linked inside the ➢Index PDF.
    • add <f11> TAB prefix key for all tab-bar commands:
  • Add support for transpose-frame , activated by pel-use-transpose-frame. The key bindings are under the <f11> w t key sequence prefix. Also provide key bindings in the pel-∑wnd hydra from flip-frame, flop-frame, rotate-frame and transpose-frame.
  • Also add bindings to navigate frames (useful in terminal mode): } for next frame, and { for previous frame.
  • Add support for golden-ratio , activated by pel-use-golden-ratio. The golden-ratio-mode is bound to the <f11> g key sequence. This is also available via the pel-∑wnd hydra with the g key.
  • Add support for winum ; activated by pel-use-winum. M-<f11> M-w is globally bound to winum-mode and once active you can use the winum-mode key map and also the easier to use PEL key bindings like M-<f11> M-0, up to M-<f11> M-9 to move to the window by number. To move to a window with a larger number use the M-<f11> M-` with the prefix identifying the window number.
  • Add support for dired-sidebar; activated by pel-use-dired-sidebar. <f11> C-d is globally bound to dired-sidebar-toggle-sidebar when the pel-use-dired-sidebar is set to t. The window is also placed in auto-revert-mode to update when the content of visited directory changes. Inside the window the binding <f12> C-d is also available along with the other <f12> keys for dired.
  • Add pel-emacs-source-directory user-option to identify the Emacs repo root directory, allowing setting Emacs’s source-directory. This user-option is under 2 groups: pel-base-emacs and pel-pkg-for-help. This user-option helps permanently setting source-directory and not having to set it on each new Emacs session when trying to access Emacs C source code via some describe- commands.
  • Add the pel-show-paren-info command, bound to <f11> h ? (. It prints the value of all user-option variables that control the paren-mode behaviour inside the *pel-highlight-info* buffer. The name of each variable is also a button that leads to its help.
  • Add commands to split the root window in all 4 directions, available in all versions of Emacs supported by PEL, not only 29.1:
    • pel-split-root-window-above, bound to <f11> w r 8 and to PEL Window Hydra C-M-8
    • pel-split-root-window-below, bound to <f11> w r 2 and to PEL Window Hydra C-M-2
    • pel-split-root-window-right, bound to <f11> w r 6 and to PEL Window Hydra C-M-6
    • pel-split-root-window-left, bound to <f11> w r 4 and to PEL Window Hydra C-M-4
  • Add binding f to follow-mode in the PEL Window Hydra.
  • Add binding <f11> w s . fit-window-to-buffer matching its . binding in PEL Window Hydra.
  • Add binding <f11> w s - shrink-window-if-larger-than-buffer matching its - binding in PEL Window Hydra.
  • Add pel-toggle-size-fixed, bound to <f11> w s s and inside the PEL Window Hydra as s. By default the command imposes a soft size restriction (allowing Emacs to change a window’s height to display the min-buffer, for example). With a prefix argument the command imposes a strict size constraint (which prevents Emacs from modifying the window size under all cases).
  • Add pel-toggle-switch-to-buffer-obey-display-actions, bound to <f11> w <f4> b to toggle behaviour of switch buffer commands: either respecting or not respecting display actions. Available for Emacs 29.1 or later only. Use it to learn the impact of the new switch-to-buffer-obey-display-actions user-option.
  • Simplified bindings for pel-toggle-window-dedicated, changed from <f11> w d d to <f11> w d.
  • Removed <f11> w d ? binding to pel-show-dedicated-status.
  • Added <f11> w ? status to pel-show-window-info instead.
    • The pel-show-window-info supports optional command argument:
      • without any argument it displays the window number, buffer name, window size, whether the window is dedicated, fixed in size, is a side window, and other window attributes.
      • With the M-0 numerical argument, it opens a *pel-window-info* buffer that shows the value of several variables used by the display-buffer function to control window management. The name of the variables are links to their help, which also links to their customization.
      • The M-1 numerical argument does the same as M-0 but it appends to the buffer. You can use this to collect information over time or from several frames or windows.
    • Inside the PEL Window Hydra, the i key executes pel-show-window-info. Command arguments can also be used in the Hydra.
  • Also removed the pel-show-window-sizes; the information is part of what shows the new pel-show-window-info.
  • When Emacs is running in graphics mode, add the following bindings to control the scroll bars:
    • <f11> | B H to horizontal-scroll-bar-mode
    • <f11> | B h to toggle-horizontal-scroll-bar
    • <f11> | B V to scroll-bar-mode
    • <f11> | B v to toggle-scroll-bar
  • Improvements to window management:
    • Add pel-toggle-split-window-keep-point, mapped to <f11> w <f4> s to toggle current value of the split-value-keep-point allowing the various split commands to behave differently in the way they place the cursor inside the split windows.
    • Add pel-buffer-in-side-window function, called by four convenient commands mapped to bindings inside the <f11> w \ prefix key:
      • pel-buf-in-side-win-top, bound to <f11> w \ 8 and to PEL Window Hydra \ 8,
      • pel-buf-in-side-win-bottom, bound to <f11> w \ 2 and to PEL Window Hydra \ 2,
      • pel-buf-in-side-win-right, bound to <f11> w \ 6 and to PEL Window Hydra \ 6,
      • pel-buf-in-side-win-left, bound to <f11> w \ 4 and to PEL Window Hydra \ 4.
    • Add PEL Window Hydra keys to create root windows at the bottom and right side of the current Emacs frame (<f7> M-r and <f7> M-R) This command is available in Emacs 29.1 or later; the Hydra keys are always available but will default to splitting to normal windows in older versions of Emacs. Create IDE-like side windows on one of the 4 sides of the current Emacs frame with that command.
    • The pel-create-window-DIRECTION commands now accept an optional SIZE argument allowing these commands to be used to split windows into 2 windows of different sizes.
    • Enhanced the Window Hydra key bindings, add more keys and re-organizing the Hydra help to reduce its width.
    • Add key binding <f11> w \ \ for window-toggle-side-windows and <f11> w 0 to delete-windows-on.
    • Updated the ⅀ Windows PDF , adding some missing information and fixing some.
  • pel-shell-previous-prompt and pel-shell-next-prompt commands now accept a numeric argument. By default it’s 1. Using a different number allows repetition and direction change. These commands now also leaves point after the prompt on the first character of the command.
  • Added pel-term-use-shell-prompt-line-regexp user option: when set to t (the default), PEL sets term-prompt-regexp to the value of pel-shell-prompt-line-regexp allowing all prompt navigation search to use the same regular expression. This user-option is part of the new customization group: pel-pkg-for-term-mode.
  • Moved the GNU Make specific information from the 𝕻𝔩 - Make PDF file to the new GNU Make PDF stored in the doc/pdf/lang directory. To access it, type C-u <f12> <f1> from a buffer that edits a make file in Gnu Make mode. This is a new method to access language specific PDF files. I previously added a zsh PDF that is accessible using the same key sequence in a buffer editing a zsh file. I will be adding more language specific PDF files in time. The pel-help-pdf interactive function now calls the new pel-lang-pdf which itself calls pel-shell-scripting-language for the shell modes.
  • Overhaul of PDF help access. The infrastructure now support the ability to request a language-specific PDF in addition to the existing mode-specific PDF. The <f12> <f1> continues to provide access to the major-mode or the command topic. But now, for topics that are major-mode specific it’s possible to request access to the language-specific PDF. The language specific PDF files are stored inside the doc/pdf/lang directory. At the moment there is only one ‘language’-specific pdf, and it’s for zsh. When editing a shell script, if this happens to be a zsh script, typing C-u <f12> <f1> opens that. Typing <f12> <f1> opens the PDF describing Emacs support for shell scripting.
  • Clarified information for the shell. There is now 3 sets of PDF files related to Unix-type shells:
    • <f11> z <f1> opens the PDF that describes how to launch shells, processes and applications.
    • When editing a shells script, in sh-mode, the <f12> <f1> opens the PDF describing Emacs support for editing Unix shell scripts.
    • When editing a shells script, in sh-mode, the C-u <f12> <f1> (or M-2 <f12> <f1>) opens the PDF describing the scripting language, such as the doc/pdf/lang/zsh.pdf (which at the moment is the only language-specific PDF published).
    • Inside a buffer in shell-mode, term-mode or vterm-mode the <f12> <f1> opens the PDF that describes the shell-mode, term-mode or vterm-mode, respectively.
  • Also added some commands bound to the <f12> key of the various shell/terminal modes.
  • Add key bindings to diff a buffer with the file it’s visiting: <f11> b = is now bound to diff-buffer-with-file and <f11> b M-= is bound to ediff-current-file.
  • Improved PEL default key bindings for iedit-mode: by default PEL uses M-S-<f7>, M-S-<f8> and M-S-<f9> to move to previous iedit occurrence, toggle the iedit state of the occurrence and move to the next iedit occurrence, respectively, instead of the default backtab, M-; and backtab keys. This way, the standard behaviour of these often used keys can use used over an iedit occurrence. The description of the iedit mode in the ⅀ Search/Replace PDF shows if a key binding is available over the iedit occurrence or anywhere when the iedit-mode is active.
  • Add customization for iedit-mode: the new pel-pkg-for-iedit customization group holds the new pel-iedit-use-alternate-keys user-option that can be used to restore the default iedit key bindings. When text is highlighted by iedit-mode, the <f11><f2> and <f11><f3> open the pel-pkg-for-iedit and iedit customization group buffer respectively.
  • Improved pel-comment-show-variables (bound to <f11> ; ?) : the name of each variable shown in the buffer is a button that opens the help for the variable which itself has a link to customize the user-option variables.
  • Add <f6> \ and C-x C-\ key bindings to goto-last-change.
  • Add support for undo-redo command available in Emacs 28 and later. The new pel-use-undo-redo user option, available on can be used on Emacs 28 and later to activate its use and key bindings.
  • Add <f6> ; binding to comment_line which starts the comment at the beginning of the line, for convenience in terminal mode.
  • Add pel-kill-symbol-at-point-terminal-binding user-option which provides ability to select an alternative key binding for pel-kill-symbol-at-point when Emacs is running in terminal mode. This helps when using a terminal like Ubuntu terminal, which can access the M-<kp-subtract> key with another key sequence.
  • Add pel-show-indent command, bound to <f11> <tab> ? that opens a buffer showing the values and meaning of the user-options controlling indentation and tab rendering. The buffer shows the user option and commands names as clickable buttons that opens help and provide ability to gain access to the customization buffer used to change their values. IT shows major-mode specific customization variable uses when the major mode of the current buffer uses them.
  • Improve the description and the content shown by the pel-align-info.
  • Change PEL-specific binding to indent-tools-hydra/body from <f11> <tab> > to <f11> <tab> <f7> .
  • Fix: pel-align-info no longer shows 2 instances of the pel-new-line-does-align
  • Fix following commands that now insert markup prefix and suffix around point when nothing is marked or point is now over or after a word instead of failing: pel-rst-bold, pel-rst-italic, pel-rst-literal, and pel-rst-interpreted.
  • Add new <f6> key binding to join lines:
    • <f6> 6 and <f11> ⌫ 7 are now bound to delete-indentation which join current line with previous one, and is close to the M-^ key.
    • The <f6> 7 and <f11> ⌫ 7 are now bound to the new pel command pel-join-next-line.
  • Changed <f6> key binding of complete-symbol: instead of <f6> 6 it is now bound to <f6> ,. Also changed key binding of info-complete-symbol: instead of <f6> 7 it is now bound to <f6> .. The new bindings are more consistent with their intent.
  • Add pel-show-function command, bound to <f11> ? F, that prints the name of the current function at point in the mini-buffer. Even though you can use the which-func mode to display the current function at point in the mode line of a buffer, the buffer window is sometimes too narrow. Using the new command is therefore quite useful in those situations when you don’t want to use the mouse (like me).
    • With a prefix argument it insert the function name at point.
  • Add pel-kill-current-buffer command which is only bound to the k key inside the window hydra pel-∑wnd.
  • The kill-buffer-and-window is now bound to K in the window hydra.
  • The format of the to-do note inserted by the pel-insert-todo-note command is now controlled by two user option variables: pel-todo-note-text and pel-todo-note-date-format. It supports the automatic replacement of “(DATE)” and “(USER)” strings with the current date and user name respectively. Use the new pel-customize-todo-note command (bound to <f11> i <f4> n) to access the relevant customization buffer quickly.
  • Modified the key bound to iedit-toggle-selection in the iedit-mode: replaced M-; by M-<f6> to allow the use of comment-dwim when iedit-mode is being used. The M-<f6> is globally bound to pel-open-at-point but that’s not its only binding and the probability to use that command while using the iedit-mode is low.
  • Modified the date & time insertion commands and key sequence bindings to provide the ability to insert various date and time formats that are now all controlled by customizable format strings. There are now eight commands that insert the local date/time by default and the UTC is an argument is used:
    • pel-insert-date, bound to <f11> i d: inserts the current date at point.
    • pel-insert-date-wkd, bound to <f11> i D: inserts the current date and week-day at point.
    • pel-insert-date-time, bound to <f11> i t: inserts the current date and time at point.
    • pel-insert-date-wkd-time, bound to <f11> i T: inserts the current date, week day and time at point.
    • pel-insert-iso-date, bound to <f11> i M-d: inserts the current date at point.
    • pel-insert-iso-date-wkd, bound to <f11> i M-D: inserts the current date and week-day at point.
    • pel-insert-iso-date-time, bound to <f11> i M-t: inserts the current date and time at point.
    • pel-insert-iso-date-wkd-time, bound to <f11> i M-T: inserts the current date, week day and time at point.
    • The new pel-customize-insert-date-time command (bound to <f11> i <f4> d) opens the customize buffer that holds the relevant custom variables.
    • The <f6> d and <f6> D bindings to insert dates and <f6> t to insert date/time were removed.
    • The pel-insert-todo-note command was rebound to <f6> n (instead of the old <f6> T) for consistency and ease of access.
  • In C and C++ buffers, the pel-cc-mode-info command (bound to <f12> <f4> ?) now prints the list of customization variables controlling the code generation skeletons and their values, in the opened info buffer. The variable names are links that can be used to change their values.
  • Enhanced the code template skeleton ability to create section titles. A title string that begins with the period character ( . ) is inserted verbatim following a separator line. A title that starts with the comma character ( , ) is inserted verbatim.
    • The default value of the pel-c-skel-hfile-section-titles customized variable uses this new feature to insert the C++ support extern “C” pre-processor code in C header files templates.
  • Add ability to convert the case of one or several letters to standard key bindings which now behave as before when an area is marked but can also operate with no marked area, converting N letters from point (with N defaulting to 1):
    • The C-x C-l key sequence is not bound to the new pel-downcase-letter command.
    • The C-x C-u key sequence is not bound to the new pel-upcase-letter command.
  • The pel-next-frame (bound to <f11> F n) and pel-previous-frame (bound to <f11> F p) now honour the frame numbers: the pel-next-frame changes to the frame that has a larger number than the current frame and the pel-previous-frame changes the frame to the one that has a lower frame number. The used Emacs functions behave in the reverse direction; the PEL commands now use the more conventional order.
  • The pel-duplicate-line command (bound to <f6> d) now supports value 0 for the argument: with numeric argument value 0 the command creates a single duplicate but does not move point: it keeps the point on the original line.
  • Add key binding M-<f5> to pel-search-word-from-top, it’s easier to type with a numeric prefix than the M-<f11> s . key sequence (which is retained) and is a very useful command to be able to quickly access it.
  • Add key binding <f11> b L to emacs-lock-mode.
  • Add key bindings to deadgrep-mode: activate deadgred-edit-mode with C-c C-p and get out of it with C-x C-s
  • Add <f11> w = binding to balance-windows, while keeping the original <f11> w s =
  • Better iedit support for tcl $variable notation.
  • Add pel-bookmark-info bound to <f11> ' M-?. It prints information about bookmark control in a specialized help buffer.
  • Improved auto-completion introspection report done by <f11> , ?. Renamed the pel-completion-help to pel-completion-info for name consistency with other similar functions. The function now prints more information, it prints it inside a specialized buffer using help mode to provide the ability to access more help information and the customization buffer of the relevant user-options.
  • Improved support for Asciidoc adoc-mode: the <f12> key is now supported with access to the PDF help (<f12><f1>, PEL customization (<f12><f2>), adoc-mode customization (<f12><f3>) and over 70 tempo template commands bound to key sequences under the <f12> key prefix.)
  • Improved: Commands that insert emphasis markup for reSTructuredText: they now insert the necessary escaped space when doing the emphasis inside a word.
  • Improved: The C++ tempo templates now describe C++ files better. They can now distinguish the various types of implementation and header files from the file extension and insert a better description inside the comment at the top of the file.
  • Improved: The .ii file extensions are now recognized as C++ implementation file, not header and explicitly identified as GCC pre-processed files.
  • Fix: The pel-X-tab-width user-options for C, C++, D, Forth and Julia were not activated in their respective buffers. Now they are used to set the tab-width value for the current buffer.
  • Modified: key binding of the centi-assign, centi-summary and centi-restore-all; their key sequence now all use the meta key to make space of other key sequences.
  • Add: the pel-kmacro-ring-show-status bound to <f11> k ?. It shows information about the keyboard macro ring.
  • Fix: In emacs-lisp-mode, activating the flycheck-mode used to override the <f12> c key prefix. This is no longer the case; instead the flycheck-list-errors is bound to <f12> c l, flycheck-display-error-at-point is bound to <f12> c . and flycheck-explain-error-at-point is bound to <f12> c /.
  • Modified: zrgrep key binding from <f11> g z to <f11> g R to make space for the fast fuzzy search based on fzf: fzf-grep, bound to <f11> g z and fzf-grep-in-dir bound to <f11> g Z.
  • Improved: pel-find-file-at-point-in-window such that if a dired buffer is already opened point moves into it. This improves behaviour of pel-open-at-point in the same way.
  • Update: key bindings for file management, find and grep to make space for more key bindings using fast fuzzy file search based on the fzf utility:
    • moved all find-based command under the new pel:find prefix bound to <f11 f F,
    • remapped some commands in the pel:file prefix and added others.
  • The pel-open-at-point command is now able to search for C and C++ header files in more locations: the pel-c-file-searched-extra-dir-trees and pel-c++-file-searched-extra-dir-trees user-options can be used to identify lists of directory trees to search recursively for C and C++ in addition to the search method already identified.
  • PEL no longer uses the C-^ key binding for the pel-open-at-point command. Instead it provides the <M-f6> key binding that is even easier to type. PEL will no longer bind the C-^ key. It’s left alone to allow using that key as the control key for the useful GNU screen utility, allowing the use of Emacs inside a GNU screen session.
  • When ggtags-mode is active the C-c M-. key binding is now available to the ggtags-find-tag-regexp command, allowing quick access to this command for Emacs running in terminal mode.
  • Better key binding for activating smerge-mode manually: <f11> d s instead of <f11> s s. The other key bindings for the smerge commands are now available under the <f6> s key prefix which is only available smerge-mode is active. The documentation also describes the default Emacs C-c ^ key prefix for smerge-mode.
  • In a diff-mode buffer you can now type the <f12><f4>? key sequence to get information about the diff-mode setup.
  • I’m planning to use the same key sequence using the <f4> key to get information or dynamically modify the setup of a mode and re-map some of the key that are currently used. This should make it more regular across all major modes and under all prefixes.
  • The <f12><f1>, <f12><f2> and <f12><f3> key bindings are now available in diff-mode, ediff-mode and smerge-mode (when pel-use-smerge is active). The <f12><f3> key open the customization page specific to the diff mode currently used.
  • Work-round to tramp problem with the P4 VC back-end implemented in pel-edit-as-root to prevent that command to hang when the P4, the VC back-end for Perforce, is active.
  • Fix: The pel-open-at-point command now handles links properly when the user has forcibly changed the current directory to something other than the parent of the buffer’s visited file. By default, the command builds an absolute path from a relative file name path by using the parent directory of the visited file or the current working directory of the current buffer not visiting a file. You can change this behaviour for a given buffer by using the new pel-set-open-at-point-dir command (bound to <f11> f ; ) and impose one of these two choices or a specific selected directory. need to be implemented in the future.
  • Fix: The pel-rst-open-target function, used by pel-open-at-point in reStructuredText buffers, now properly handle target links that include characters that must be escaped. It now also works when the directory of the reStructuredText file is not the current working directory.
  • Fix: warning generated by pel-add-hook-for was invalidly referring to lispy.
  • Fix: The PEL key bindings for iedit-mode described in PEL documentation were not activated (such as M-C for upper-casing all instances). This is now fixed.
  • Fix: pel-replace-regexp and pel-query-replace-regexp commands: they now call the proper regexp replacement function when using the Emacs default regular expression syntax instead of the non-regexp string replacement function. Also clarified the PDF documentation for these commands.
  • Fix: The pel-emacs-mem-stats command no longer attempts to print the value of misc-objects-consed which is not bound in Linux.
  • Fix: On Linux and Windows the <insert> key is now mapped to yank, as it’s already done for macOS.
  • Fix: Several EDTS commands were not autoloaded by EDTS code. PEL code now autoloads them when EDTS is requested. This includes the EDTS debug, eunit and dialyzer commands.
  • Fix: pel-require can now install and load at run time, not only load-time, allowing to write code that use external packages to install them only when required. There is still one issue left: the package installed this way will be removed by pel-cleanup: will need to add a mechanism to take this type of installation into account.
  • Modified: The <M-f5> and <M-f6> key bindings to pel-scroll-up and pel-scroll-down is removed, freeing these keys for potential new key prefix. These were created to help scrolling in org-mode. Instead, the window Hydra, pel-∑wnd, now has a <M-down> and <M-up> bindings to these functions. So in org-mode: use the <f7> prefix key to access these scroll commands as the <M-down> and <M-up> keys are already used.
  • Modified: key binding for the pel-show-buffer-file-encoding from <f11> f ? to a less surprising <f11> ? d e .
  • Modified: Key binding in the pel:highlight prefix, moving several mode toggling commands to key that use the Meta key to make room for new specialized highlighting commands.
  • New: Add the new pel-highlight-line command, bound to <f11> h h. The default color is set by the pel-highlight-color-default persistent user-option. The current color can be overridden for the current editing session by using any prefix key to the command which then prompt to select a new color (and keep buffer-specific history of the selected color names). Previously this key binding was used by pel-set-highlight-color command which is now bound to <f11> h M-c.
  • New: key binding <f6> 6 to complete-symbol and <f6> 7 to info-complete-symbol to provide more flexible access to the completion commands with bindings available in all environments. These position of the keys in the sequences should make them easy to type.
  • New: key binding: <f6><f6> is now bound to pel-jump-to-mark. This helps on many Linux systems where the M-` key is used by the desktop to switch from similar windows.
  • Modified: key bindings to toggle EDTS: it was bound to <f12> M-E (or its equivalent <M-f12> M-E). It is now bound to <f12> M-E M-E (and its equivalent and easier to type <M-f12> M-E M-E).
  • Modified: key bindings for other EDTS commands, which are now in the <f12> M-E key prefix: edts-buffer-node-name, edts-api-start-server, edts-shell.
  • Improved: key binding for the pel-copy-marked-or-whole-line by adding the <f11> = = key, which is easier to type than the other <f11> keys sequences. It’s best to use <kp-separator> but this is unfortunately not available under some Linux environments.
  • Improved: 𝕻𝔩 - Erlang PDF by moving EDTS-specific commands related to Erlang shell and help inside their topic specific area of the file instead of leaving them inside the EDTS-specific area. Also added information on limitations of some of the help commands.
  • Fix: activation of flyspell-prog-mode: the old code was invoking the flyspell-prog-mode with 1 argument but the function takes none.
    • Key binding conflict between flyspell and iedit is now done by a function stored inside the pel-ispell-iedit.el as opposed to being inside the pel_keys.el file.
  • Improved: support for flyspell-mode and flyspell-prog-mode:
    • Add ability to prevent automatic activation of flyspell-mode and flyspell-prog-mode: the pel-spell-prevent-flyspell user-option can be set to prevent activation of the automatic spell checking. This is useful if someone wants to reduce CPU load and also when debugging the spell checking mechanism when you don’t want automatic activation of the modes when opening a new buffer.
    • The pel-spell-show-use now display whether flyspell-prog-mode is active. It also shows whether the flyspell-mode and flyspell-prog-mode automatic activation is prevented.
  • Improved: accessibility to correct word at point: the <f11> $ $ key sequence is now bound to flyspell-correct-word-before-point.
  • Improved: spell checking dictionary management to prevent failures in aspell: the <f11> $ D key sequence is now bound to the new command pel-spell-change-dictionary. The command changes the base dictionary but also prompts for and change the personal dictionary to ensure both use the same natural language. Emacs ispell.el identifies both dictionaries in its aspell command and they must both use the same natural language otherwise aspell fails.
  • Improved: the pel-spell-show-use command display the file name of the personal dictionary.
  • Modified: Replaced pel-spell-check-personal-dictionary by pel-spell-personal-dictionary-directory. Instead of defining the name of the personal dictionary, PEL now only identifies the directory where all personal dictionary files are stored. Each of them has a name that identifies the 2 or 3 letter language code and has the “.ispell” file extension.
  • Fix: pel-spell-show-use no longer display more than 1 line of the spell checker identification text.
  • Fix: pel-insert-filename with no prefix argument or with prefix argument of 1, identifies the current window.
  • Improved: key bindings for the navigation commands in C, C++ and D: they now all have access to the <f12> <CURSOR> key bindings to move point to beginning/end next/previous function.
  • Improved: the key bindings of the abbreviation commands: add bindings for the define-global-abbrev and define-mode-abbrev commands. Also modified the bindings for list-abbrevs and edit-abbrevs and renamed pel-define-abbrevs to pel-extract-abbrev-definitions.
  • Improved indentation control and diagnostic for CC mode buffers: C, C++ D:
    • Add the pel-cc-set-indent-width command, bound to the mode’s <f12> TAB key sequence. This command changes the indentation for the current buffer, overriding the value set by pel-c-indent-width in C, pel-c++-indent-width in C++ and pel-d-indent-width in D buffer.
  • Improved support for C/C++/D style guessing by adding key bindings for those commands. They are accessible under the <f12> <f4> g key prefix. These commands are quite useful when editing code that was originally written by someone that does not use the same style of C/C++/D code you have identified in your defaults. You can use a command to parse the code and set the style to what is used in the file and then the commands use that style.
  • Modified the key binding for the commands that change the style behaviour of for C, C++ and D. These commands are now bound under the <f12> <f4> key prefix. This frees more keys under the <f12> key prefix for future editing commands while regrouping the dynamic configuration commands under the <f12> <f4> prefix; it will be used more often in other major modes.
  • Improved pel-toggle-scroll-sync command: it now accepts the numeric arguments 2, 4, 6 and 8 which can be used to identify the window below, at the left, at the top or at the right, respectively, of the current window. This provides more flexibility on the selection of the other window.
  • Improved handling of the <kp-add> key for platform where the ‘+’ keypad key is seen as <kp-add on some terminals seen on some Linux distributions (like Ubuntu 16.04 LTS). The new pel-keypad-+-is-kp-add user-option can now be turned on (set to t) to provide access to the pel-copy-marked-or-whole-linepel-copy-marked-or-whole-line command through that single key-stroke, allowing a single key-stroke for copying the current line or currently marked area on platform where this was not already possible.
  • Improved handling of the <M-kp-add> key for platforms (such as many Linux distributions) where the Meta-keypad+ key is not recognized when Emacs runs in terminal mode. PEL normally binds the pel-copy-symbol-at-point command to that key sequence. For the environments where the standard key sequence (<M-kp-add>) is not recognized, PEL provides another key binding identified by the pel-keypad-meta+-special-sequence user-option (that PEL sets to M-O 3 k for Linux by default). If your environment requires another key sequence change the user-option value.
  • Improved pel-show-text-modes (bound to <f11> t m ?): it now displays the state of the indent-tab-mode and the tab-width variables.
  • Improved indentation control for reStructuredText files: the new pel-rst-use-tabs user-option, which defaults to nil, controls the initial value of the indent-tabs-mode for buffers in rst-mode, effectively ensuring that indentation is done with spaces by default. You can customize it to t if required (although you will probably want to use space in reStructuredText markup.)
  • Improved the multi-window sync-scrolling mechanism: added two commands that can be used to scroll only the current window while a sync-scroll group of windows is currently activated. The two commands are pel-scroll-up-only-this (bound to <f11> | <donw>) and pel-scroll-down-only-this (bound to <f11> | <up>).
  • New: better indention control with the **pel-<mode>-use-tab** and the **pel-<mode>-tab-width* user-options for several major modes: adoc, graphviz-dot, plantuml, markdown org, yaml, javascript, haskell, hy, elixir, gleam, forth, julia, nim, tuareg (OCaml), python, rexx, netrexx, ruby, rust, sh, v and yang.
  • New: in PEL, perl indentation is now controlled by the perl-indent-level user-option, while the use of hard tab is controlled by pel-perl-use-tabs.
  • New: Add pel-pkg-for-make customization group with the new pel-make-mode-alist user-option that can be used to identify more file name patterns to associate with one of the make file major modes. Previous code only associated the “.mak” with nmake-mode. It is now more flexible and is inside the scope of make file support.
    • Also added the ability to open the customization group with the <f12> <f2> key sequence.
  • Improve: behaviour of the command that opens a shell buffer: the <f11> z s key sequence is now bound to the pel-shell command instead of the Emacs built-in shell. The pel-shell command opens the buffer in the current window as opposed to the other window which is what shell does and is surprising since none of the other terminal commands do that. pel-shell will move point to an existing *shell* buffer if one is shown in the currently opened windows.
  • Modified the <f11> key binding to access the shell-specific the <f1>, <f2> and the <f3> keys to access the help and customization buffers. The shell-mode and term-mode also have their mode-specific <f11> SPC key prefixes and have their <f12> mode-specific prefix key.
    • Add ability to specify minor-modes automatically activated in the shell-mode and term-mode buffers through the new pel-shell-activates-minor-modes and pel-term-activates-minor-modes user-options.
    • Add <f12> r key binding to the shell-resync-dirs command in shell-mode buffers, to (re)-activate tab completion in the shell if it stops working.
    • Add <f12> c key binding to pel-comint-clear-buffer-and-get-prompt (also bound to C-c M-o, replacing its default binding to comint-clear-buffer) to clear the shell-mode buffer since using the clear shell command does not work in the shell-mode buffer. It also ensures the shell is ready to take user input at the shell prompt.
    • Improved description of the dual input modes in place for the term, ansi-term and vterm buffers and the keys to switch between the char and line input mode in these buffers.
    • The new code speeds Emacs startup a little.
  • New: key binding <f11> | t to auto-revert-tail-mode for convenience.
  • Modified: key sequence <f11> f F is now bound to pel-open-buffer-file-in-os-app instead of pel-open-in-os-app. The new function will prompt to save buffer if it is modified.
  • New: text insertion commands that enhance ability to insert the file name at point of the file in the current buffer or inside a window specified by a numeric argument:
    • pel-insert-filename-wtilde (bound to <f6> M-f and <f11> i M-f) which inserts the file name but replaces the beginning of the path by a Unix-style tilde if its inside the user home directory.
    • pel-insert-dirname (bound to <f6> C-f and <f11> i C-f) which inserts the directory name.
    • pelinsert-dirname-wtilde (bound to <f6> C-M-f and <f11> i C-M-f) which insets the directory name but replaces the beginning of the path by a Unix-style tilde if its inside the user home directory.
  • Add key binding to the enriched-mode command: <f11> t m e.
  • Changed the PEL key binding to the set-justification-node to <f11> t j u to mimic the M-j u key binding.
  • Add user-options that allow automatic activation of minor modes for specific major modes: pel-modes-activating-glasses-mode, pel-modes-activating-whitespace-mode, pel-modes-activating-electric-quote-local-mode.
  • Improved pel-show-text-modes: it can also show the value of delete-selection-mode and electric-quote-local-mode status.
  • Improved iedit-mode support:
    • Modified the following key bindings to make they easier to type:
      • C-c C-o is bound to iedit-show/hide-occurrence-lines.
      • C-c C-a is bound to iedit-show/hide-context-lines.
  • Improved Janet support: add pel-janet-activates-minor-modes user-option which can be used to automatically activate minor modes in janet buffer.
  • Add extra key binding for the patch commands in the <f11> d p prefix.
  • In c-mode add the <f12> ? ? key binding to man. Use to open a man page on a C topic.

New Features:

  • New: Add pel-process-tree command, bound to <f11> ? e M-p> that prints the process tree of the inferior process used in a buffer, or, if none, prints the process tree of Emacs itself. This uses the pstree OS executable. If it is not available the Emacs command issues a user-error.
  • New: Add preliminary support for Factor, a powerful concatenative (stack-based) programming language. Activate it with pel-use-factor which activates the eternal fuel package implementing the factor-mode.
  • New: For C and C++ buffers added several new commands to move the point to the beginning or end of a syntactic block when the point is inside that block. There are commands for: switch statement, class/structure, union and enum definition blocks. The new commands, along with their key bindings are:
    • pel-cc-to-enum-begin (bound to <f6> t e s): move point to the start of the current enum definition block.
    • pel-cc-to-enum-end (bound to <f6> t e e) move point to the end of the current enum definition block.
    • pel-cc-to-class-begin (bound to <f6> t c s): move point to the start of the current class definition block.
    • pel-cc-to-class-end (bound to <f6> t c e) move point to the end of the current class definition block.
    • pel-cc-to-struct-begin (bound to <f6> t s s): move point to the start of the current struct definition block.
    • pel-cc-to-struct-end (bound to <f6> t u e) move point to the end of the current struct definition block.
    • pel-cc-to-switch-begin (bound to <f6> t w s): move point to the start of the current switch statement.
    • pel-cc-to-switch-end (bound to <f6> t w e) move point to the end of the current switch statement.
    • pel-cc-to-union-begin (bound to <f6> t s s): move point to the start of the current union definition block.
    • pel-cc-to-union-end (bound to <f6> t u e) move point to the end of the current union definition block.
  • New: commands to move point to the next or previous non-whitespace character: pel-to-forward-space moves point to next whitespace, bound to <f11> M-SPC. pel-to-backward-space moves point to the previous whitespace character, bound to <f11> C-SPC.
  • New: Add preliminary support for layout-restore package that helps manage window layout, associating them with a buffer and providing 3 commands: layout-save-current (bound to <f11> w l s), layout-restore (bound to <f11> w l r) and layout-delete-current (bound to <f11> w l d). The support is preliminary because it’s implementation uses advice which clashes with several modes. However the ideas of the package are nice and I’ll look at the code once I have some time. Hopefully I can improve the code of this package to make it work properly.
  • New: Add features to ibuffer-mode: sort by path-name (s p), filter by directory name (/ d/), group buffer by directory names (/ D) and remapped decompose filter to / M-d/.
  • New: Add pel-move-down-to-class-visibility and pel-move-up-to-class-visibility, respectively bound to <f12> s v and <f12> s V in C++ buffers, to move point to the next and previous C++ class visibility member declaration statement (public, protected, private). These ignore comments.
  • New: Add support for vundo via the pel-use-vundo user option. It can activate the use of vundo package for Emacs 28 or later. When active the <f11> u v key sequence is bound to vundo to show Emacs undo tree.
  • New: add support for undo-propose; activated by setting the pel-use-undo-propose to t. When active, the C-c u key is bound to undo-propose.
  • New: add support for helm-descbinds. It’s activated by the new pel-use-helm-descbinds user-option. It can be explicitly bound to C-h b and <f1> b if needed. The helm-descbinds-mode command is bound to <f11> ? k B allowing quick activation and de-activation. When activated this way the C-h b and <f1> b can be dynamically set to use it or to use Emacs describe-bindings default.
  • New: Add pel-∑scroll Hydra to scroll a window in any cardinal direction with the any or the four C-<cursor> keys. This Hydra is invoked with C-<f7>. This helps scrolling windows in any of the four directions.
  • New: Add support for the call-graph package, installed and the call-graph command mapped to the <f12> M-g key sequence in C and C++ modes when the pel-use-call-graph user option is set to t.
  • New: On Emacs 27 and later, pel-use-beacon-mode allows installing and activating the beacon-mode to highlight the cursor area when switching windows or in other navigation events. When active the <f11> h M-b key sequence is boud to beacon-mode to allow toggling it manually.
  • New: When pel-with-cua-paste user-option is set, C-v is bound to yank instead of being used for scroll operation.
  • New: Add pel-diff-ignore-whitespace-in-hunks, mapped to <f6> w in diff-mode, to re-diff all hunks, ignoring whitespace differences.
  • New: Add support for diffview-mode when pel-use-diffview-mode is set to t. This activates the <f11> d | binding to diffview-current and <f11> d M-| binding to diffview-region, giving the ability to see diffs in side-by-side windows.
  • Enhance: Perl support: the pel-perl-mode now select the major-mode for Perl files: perl-mode, Emacs cperl-mode and HaraldJoerg/cperl-mode, which PEL defaults to since it has better Perl support.
  • Modified: Renamed pel-show-if-newline-aligns to pel-align-info. The new function prints more information about user-options that control the vertical alignment of text and it prints it inside a help-mode buffer in the same way that pel-abbrev-info does it.
  • New: Add pel-abbrev-info, bound to <f11> a ?. This command prints the values of all user-options variables that control the behaviour of abbreviation inside a buffer where each name is a button that can be used to show the help about it and access its customization buffer. The buffer is placed in help-mode to help navigation across buttons. With optional prefix key, (C-u or numerical prefix key) the command appends text to the buffer allowing creation of report on several buffers over time.
  • New: Add pel-c-preproc-conditionals-multi-occur, bound to <f6> <f8> o in C and C++ buffers to search C-preprocessor statements inside all project buffers. It uses projectile to identify the project files.
  • New: Add pel-cd-to-current, bound to <f11> M-. to re-establish the current working directory to the directory holding the file visited by the current buffer, if any.
  • New: Add pel-multi-occur-in-this-mode bound to <f11> s M-o. This was taken from Mickey Petersen’s excellent web site. See code for credits information.
  • New: add <f11> M-X binding to execute-extended-command-for-buffer command when running Emacs 28 or later.
  • New: add support for the fzf.el package that provides a quick raw terminal interface to the fzf utility to quickly search for file, recently opened files, buffers and also perform fussy search on grep operation results, all of the above can be done on the current directory, a specific directory, a projectile project tree, a set of files in a Git or Mercurial repository. There’s also commands to perform narrowed fzf searches controlling grep or Ripgrep, or even performing a fuzzy grep inside a buffer visiting a file. The fzf- commands are bound in the pel:file prefix (<f11> f) as well as in pel:recent-file (<f11> f M-r)and pel:grep (<f11> g). Other access to fzf and fzf-directory are respectively bound in the pel:file-fzf to <f11> M-z M-z and <f11> M-z M-d. This also includes the fzf-hg-grep, bound to <f11> g H.
  • New: the pel-use-fzf activates the fzf-based fast fuzzy finder. Two commands are bound to key sequences: fzf is bound to <f11> Z Z and fzf-directory to <f11> Z D.
  • New: The pel-use-m4 activates the <f12> keys for M4 source code files. Added a new PDF file for M4.
  • New: When PEL detects that Emacs is running inside an SSH session it will prevent opening a local or web-based PDF since you won’t normally be able to see the file on the computer GUI desktop. If want to still allow opening the file because you do have access to the computer desktop somehow, then set the new pel-help-under-ssh user-option to t.
  • New: pel-screen-log-fix-rendering command, bound to <f11> t s that can fix the rendering of log files created by the GNU Screen utility. Also added the pel-screen-log-delete-all-consecutive-blank-lines and pel-screen-log-fix-regexp-pairs user-options to help identify extra actions to perform when cleaning the rendering of those files.
  • New: pel-delete-all-dual-consecutive-blank-lines, bound to <f11> t w RET removes all consecutive dual empty lines in the buffer. Useful when an empty line was added between each line of text.
  • New: set the pel-select-key-is-end when using Emacs under GNU Screen makes the END key register as <select> instead of <end> to re-establish the ability to use that key to execute the pel-end command.
  • New: pel-shutdown-server command, used to shut Emacs server and all it’s clients. The command confirms first and will not shut down Emacs if not running in server/client mode. It always confirms before shutting down the server. There is no key binding for this command. Use M-x pel-shutdown-server instead.
  • New: The pel-multi-align-regexp command, bound to ~<M-f11> M-A~uses align-regexp with multiple regexp over the same marked area to align text on multiple columns, starting with the left-most alignment.
  • New: Added the <M-f11> M-a key binding to the align-regexp command.
  • New: In C and C++ modes, PEL provides a set of commands to search for problematic code statements and also provides commands that can refactor the C and C++ code replacing problematic code by corresponding safer code constructs. For more details look at the end of the 𝕻𝔩 - C and 𝕻𝔩 - C++ PDF pages.
  • New: Additional support for Subversion vc back-end: add the pel-vcs-svn-verbose-log user-option to allow using the –verbose switch on the vc-print-log and vc-print-root-log commands with Subversion back-end in order to list all files affected by a Subversion commit without affecting the switches used for the other Subversion commands. This is useful with version of Subversion where the –verbose switch is not accepted by some commands.
  • New: single key bindings for man (<M-f8>) and woman (<M-S-f8>) to quickly get access to man-based help.
  • New: key binding <f11> ' ? for bm-show-all to show all visible bookmarks
  • New: The pel-insert-filename-and-line command, bound to <f11> i F and to <f6> F insert the name of visited file followed by a line number. Useful to manually create a list of file bookmarks inside a buffer that you can later use to complete work.
  • New: The pel-open-file-in-other-dir command, bound to <f11> f M-d and to <M-f11> M-f M-d opens a file with the same name as the current one into another directory. Useful when dealing with files in multiple VCS directory trees.
  • Add: pel-close-other-window command bound to <f11> w w and to <f7> o. Use it to quickly close the other window often opened to show a temporary window such as the help window. The command does not kill the buffer, it just hides it.
  • Add: pel-desktop-show, bound to <f11 S ?, display the name of the last loaded desktop.
  • New: Added support for show-point-mode when pel-use-show-point-mode is set. Maps the show-point-mode command to the <f11> M-d p key.
  • New: In diff-node buffers the <f6> o key sequence performs an occur search for the files listed in the diff file. Also added the <f6><down> and <f6><up> key bindings to diff-file-next and diff-file-prev.
  • New: In C and C++ buffers the <f6> o key sequence performs an occur search for C preprocessor conditional statements and display them inside an occur buffer.
  • New: in Make buffers the <f6> o key sequence performs an occur search for Make conditional statements and display them inside an occur buffer.
  • New: In C and C++ buffers, the <f6> prefix followed by a cursor key are mapped to C navigation across preprocessor conditional inclusion statements. The <f6><right> maps to a command that moves point forward to the matching #endif while the <f6><right> maps to a command that moves point backward to the matching #if, #ifdef or #ifndef. The <f6><up> and <f6><down> keys map to command that move downward and backward out nested levels. This is implemented by the new pel-c-preproc.el file. The key mappings are the same as what are used in equivalent make file conditional logic. This first implementation does not yet support the C++23 #elifdef and #elifndef statements and will ignore them.
  • New: In C and C++ buffers, the <f12> s key prefix provides access to new commands that can be used to search for C and C++ poor styled code that explicitly compare pointers against NULL or boolean values against TRUE, true, FALSE and false. It also provides a command to improve the code by removing the explicit comparison against these keywords. All is implemented by the new pel-c-utils.el file.
  • New: support for kconfig-mode is activated when pel-use-kconfig-mode is turned on. This supports the Linux kernel Kconfig configuration files.
  • New: support the ivy-hydra package installation via the pel-use-ivy-hydra user-option.
  • New: when pel-use-counsel user-option is set, the <f11> f L key sequence is bound to counsel-locate instead to the plain locate command.
  • New: pel-make-forward-conditional and pel-make-backward-conditional bound to <f6> <right> and <f6> <left> respectively in make files allow navigation across if-endif statements. Also, the pel-make-outward-forward-conditional and pel-make-outward-backward-conditional bound to <f6> <down> and <f6> <up> respectively in make files allow navigation outward of if-endif statements. These commands are built on flexible syntax parsing functions in the pel-syntax.el file and regular expressions. It’s possible to build other conditional navigation for other languages using these pel-syntax functions.
  • New pel-show-filemng-status command (bound to <f11> f ? that shows the status of several file management related status: file encoding, the way pel-open-at-point resolves relative file paths.
  • Preliminary support for MscGen markup files when pel-use-mscgen-mode is set to t. File extensions supported are .msc and .msc.txt . Support provided by the mscgen-mode GitHub project. The <f12> key prefix is available in mscgen-mode buffers, providing quick access to the MscGen PEL PDF file, the PEL customization and mscgen-mode customization as well as a small set of mscgen-mode commands. PEL support for comments, generic skeleton is available, as well as the ability to specify the nature of tabs (its width and whether spaces are used) and automatic activation of specific minor modes in mscgen-mode buffers.
  • Enhanced shellcheck support for shell scripting: the new pel-use-shellcheck user-option controls whether flymake or flycheck is used in sh-mode buffers and whether it is activated automatically.
  • The superword-mode is now automatically activated in sh-mode.
  • Add key <f12> prefixed bindings for sh-mode buffers to help quoting and working with shellcheck-based flycheck:
    • <f12> " bound to pel-sh-double-quote-word
    • <f12> ' bound to pel-sh-single-quote-word
    • <f12> ` bound to pel-sh-backtick-quote-word
    • <f12 e bound to flycheck-list-errors when flycheck is active.
    • <f12 / bound to flycheck-explain-error-at-point when flycheck is active.
    • M-n bound to flycheck-next-error when flycheck is active.
    • M-p bound to flycheck-previous-error when flycheck is active.
  • Add single key accessible commands in vc-dir mode: the H key allows you to specify file status to hide and the ! key is used to ignore all marked files. These are implemented respectively as pel-vc-dir-hide-state and pel-vc-ignore-marked located in the new vc-dir.el file.
  • Add the pel-modes-preventing-delete-trailing-whitespace user-option to identify major-modes were trailing whitespaces will not be removed when the buffer is saved to a file. By default the diff-mode is in this list preventing removal of trailing spaces from patch files you may want to manually edit. The function pel-delete-trailing-whitespace-if-activated honours this list and wont delete trailing whitespace from files using the specified major modes.
  • Add pel-edit-as-root, bound to <f11> f R, which allows editing a file that is write protected for users but can be edited as root.
  • Add ability for iedit to handle $variable de-reference between 2 slash character inside sh-mode buffer. Correction code is in the new pel-sh-iedit.el file along with hook activation in pel_keys.el. Also add ability to identify a variable name that is preceded or followed by a ‘:’.
  • Add explicit support for the wgrep external package via the pel-use-wgrep user-option. Add a couple of key bindings in the mgrep key map. Also add keys to activate wgrep mode in the rg-mode and ag-mode buffers. Describe these in the Grep PDF.
  • Added support for Erlang code formatters. The new pel-erlang-code-formatter-command user-option specifies the Erlang code formatter to use. The Erlang code formatter can be specified by a command line format string or by name. Currently the only Erlang Code formatter supported by name is erlfmt. Others can be used but the command line must be written explicitly. The <f12> R key is bound to the pel-erlang-format-code command that invokes the specified Erlang code formatter.
  • The latest version of timelog supports the timelog-open-file command. It opens the file identified by the timeclock-file user-option. PEL binds this command to C-x t l f key sequence.
  • Add preliminary support for the go-translate package when pel-use-go-translate user option is turned on. No key binding or activation done yet. This is only available for Emacs 27.1 and later.
  • New command for C buffers: the pel-c-comment-dwim command, bound to the standard M-; key, extends the standard comment-dwim command: it is able to create multi-line C comments using the 1 or 2 stars continuation comment style. The behaviour is selected by the new pel-c-multiline-comments user-option, which defaults to the standard behaviour and creates one comment per line. Change that value to create multi-line comments instead.
  • Explicit support for the electric-pair-mode:
    • Add key binding <f11> M-e to electric-pair-local-mode. This allows quickly toggling the electric-pair-mode for the current buffer activating the ability to type in the pair of characters activated by the mode. In CC modes and several programming modes that’s all the parens characters.
    • Also add the pel-electric-pair-lighter user-option(which defaults to ” ℇ⒧ “) to specify a mode-line lighter for the electric-pair-mode.
  • New C and C++ support for open file at point: in C and C++ it is now possible to specify a new method to find C/C++ header file search:
    • The new pel-c-file-finder-method and pel-c++-file-finder-method user-options specify the file search method used by the command pel-open-at-point. These provide the following file search methods specialized for C and C++ projects. You can select from the following:
      • A generic project tree file search method. This is the default and corresponds to the default search mechanism where the parent root directory is first identified from the presence of a parent identified file, one of the files specified in the pel-project-root-identifies user-option. The file is searched inside that directory tree.
      • The pel.ini file method. The file named pel.ini is searched into the project directory tree. This file must be a .INI configuration file and must contain the [file-finder] section. The section must contain the project-path key that holds a list of directories. It may also define another key that has a name patterned after the TTT-CC-path pattern (where TTT is the tool chain name and CC is either c or c++, identifying if it is used in a search done from within a C or C++ file). The extra key allows the identification of extra tool-chain specific directories to search when the name of the tool chain is identified by the PEL_CC_FIND_TOOLCHAIN environment variable or specified by the pel-c-file-finder-ini-tool-name (for C files) or the pel-c++-file-finder-ini-tool-name (for C++ files) user-options. This allows you to select extra directories specific to a compiler tool chain and/or extra libraries. You can use the new pel-cc-set-file-finder-ini-tool-name command to change the value of the pel-CC-file-finder-ini-tool-name (where CC is either ‘c’ or ‘c++ depending of the major mode where you issue the command). This allows you to find the file a compiler/library setup would use and try another one, without having to set the compilation environment. However, it is also possible to set the tool chain name by using the PEL_CC_FIND_TOOLCHAIN environment variable. The user options override the value extracted from the environment variable. The directories in the pel.ini file defined lists can also refer to environment variables using the $VARNAME syntax extending the portability of the configuration.
      • With the environment variable method you identify the name of an environment variable that holds the list of directories to search. Use this method when editing from a shell which uses an environment variable like INCLUDE or INCLUDE_PATH that defines the list of directories to search. The directories in these lists can also refer to environment variables using the $VARNAME syntax.
      • The last method is an explicit list of directories stored inside the user-option.
    • The pel-cc-info command (bound to <f12> <f4> ? now displays information related to the way the pel-open-at-point searches for header files and the current project root it uses.)
  • When pel-use-ini user-option is on, the ini.el package forked from a smaller package written by Daniel Ness is installed in the utils directory. It is also installed when the pel.ini method of identifying searched C/C++ files is used.
  • Add the pel-ini file which provides the pel-ini-load and pel-ini-store functions that load a .INI file into a alist and vice versa. The functions install the required ini external package if missing. The external package used is a fork of the original ini package: the fork supports a wider .INI file syntax and support multi-line (list) values.
  • In Org-Mode markup text-emphasis electric keys via an extended electric-pair-mode is now activated when the pel-org-use-electric-markup user-option is turned on. When this is activated the *, /, _, =, ~~~ and + keys are electric and are inserted in pair and added at both end of a marked area.
    • This behaviour can be toggled with the <f11> M-e key to execute the electric-pair-local-mode command which disables the electric behaviour of the keys in the local buffer. Also note that when the electric behaviour is active the mode-line lighter specified by pel-electric-pair-lighter (defaulting to ” ℇ⒧ “) is shown.
  • New key binding in Org-mode: <f12> TAB is now bound to org-indent-mode.
  • Improve file search mechanism in reStructuredText files: the pel-open-at-point command issued while point is inside an hyperlink to a HTML file that is the rendering of another local reStructuredText file, the command opens that reStructuredText file instead of the local HTML file. If the URL has a URI fragment that identifies a title in the file the command moves the point to that section inside the file. Also, if point is over the hyperlink of a section within the same reStructuredText file, the command simply moves point to the title of that section inside the file.
  • New: pel-open-at-point command will now open the directory instead of the file when the absolute value of numeric argument specified is equal or greater than 20. In that case the function adjusts the numeric argument by removing the value 20 from it and interprets the result as the value that specifies the target window. So for example use a N or 22 to open the directory of the specified pat name in a window below the current window. Use 28 to open the directory in the window above. Use -20 to create a new window to show the directory.
  • Improve Speedbar support of reStructuredText files:
    • The ‘.rst.txt’ file extension is now recognized for Speedbar. This file extension allows Emacs to recognize reStructuredText files while other applications recognize it as a normal text file.
  • New: pel-speedbar-info command, bound to <f11> M-s ?, which prints the values of variables that control the behaviour of the Speedbar inside the *speedbar-dbg* buffer.
  • Improved search help: by consolidation: the pel-show-search-status command is now bound to <f11> ? s as well as the original <f11> s ?. It provides the information that was printed by 2 functions that have been removed: pel-show-active-search-tool (previously bound to <f11> ? s) and pel-show-active-search-engine (previously bound to <f11> ? S). This last key binding is now free and could be re-used later for desktop commands (which uses the <f11> S key prefix). The new key setting is simpler.
  • Improve access to incremental and non-incremental query replace regexp by adding key bindings to incremental query replace regexp command isearch-query-replace-regexp: the <f11> s x i is always available and the C-c Q key binding is available if the pel-bind-keys-for-regexp user-option is turned on (set to t).
  • New: pel-itemize-lines command, bound to <M-f12> M-- in rst-mode to ease itemizing all previous lines of reStructuredText buffer that are at the same indentation level. The same key binding is available in markdown-mode.
  • New: pel-insert-todo-note command (bound to <f6> T and <f11> i T) that inserts a commented-out todo note template. The template contains the date and the author’s name.
  • New: column-number-mode command is now bound to <f11> M-d c. Use it to toggle the display of the current column in the mode line.
  • New: simple full window horizontal scroll by 1 column (numeric argument allow to specify a larger count):
    • pel-scroll-left bound to <f11> | } and <f11> | <right>
    • pel-scroll-right bound to <f11> | { and <f11> | <left>
  • New: pel-shell-next-prompt and pel-shell-previous-prompt commands respectively bound to <f12> <down> and <f12> <up> key sequence to move to the next and previous prompt line in the shell. These commands use the new pel-shell-prompt-line-regexp user-option to identify the regexp used for searching for the prompt.
  • New: The Makefile runs a new test, loading all PEL files, computing the number of PEL commands, using the new pel-package-info-all command written for that purpose only.
  • New: Add 2 new navigation/search commands:
    • pel-search-two-spaces (bound to <f11> s SPC and to M-g M-SPC) which moves forward (or backward with argument) to the next/previous/ location of 2 consecutive space characters.
    • pel-search-empty-line (bound to <f11> s RET and to M-g M-RET) which moves forward (or backward with argument) to the next/previous/ empty line.

Version 0.4.1:

Modifications:

  • Fix: The File Management PDF now describes PEL’s ability to select the function used opening the recently opened files and properly describes the key bindings that are inside the <f11> f M-r key prefix.
  • Modified: modeline commands key binding:
    • changed the pel:modeline prefix from <f11> M-l to <f11> M-d to make room for outline commands. The <f11> M-l is now bound to the outline-minor-mode command. Modified the key binding s to access the PEL PDF, the customization buffers accordingly.
  • Removed global key bindings <f6> n and <f6> p to pel-beginning-of-next-defun and beginning-of-defun. Kept the other bindings for these commands including in the <f6> key prefix.
  • Modified: key binding for the bm-next command: instead of <f2> it is now <f2> <f2>. It is not difficult to remember and type and restore access to Emacs default key bindings to the 2C-two-columns, 2C-associate-buffer and 2C-split commands.
  • Renamed: pel-imenu-dbg-print-vars to pel-imenu-print-vars for consistency.
  • Modified: Removed the <f12> M-t key binding to Go-specific command pel-go-set-tab-width. It was replaced by a globally available <f11> M-t key binding to the pel-set-tab-width that has the same behaviour but can be used to modify the display rendering of hard tabs in all major modes.
  • Modified: key bindings to start Erlang EDTS: it was <f12> M-SPC and is now <f12> M-E.

New Features and Improvements:

  • Improved: pel-open-at-point is now able to search for files inside the current project, and can be specialized to have different searching capabilities for different major modes. It also supports processing a glob-style file name. When finding more than one file it prompts for the file to open. The various new capabilities are controlled by the following user-options and dynamically bound variables:
    • User-options:
      • pel-project-root-identifiers: lists the name of files used to identify the root of the project of the file in the current buffer: the default is the files .git, .hg and .pel-project.
      • pel-ffind-executable: the command line program used to search for files: either find or fd.
      • pel-prompt-read-method: the prompt mechanism used to prompt user when more than one file found. PEL currently supports a crude prompt mechanism by default, but also support the ivy-read vertical prompting function.
    • Dynamically bound local buffer variable:
      • pel-filename-at-point-finders: A list of functions used to find files using whatever criteria deemed necessary. PEL sets this globally to the function pel-generic-find-file which finds file in the current project according to the files identified by pel-project-root-identifiers.
        • PEL supports specialization of the file finding mechanism for major-mode: simply set pel-filename-at-point-finders to another file finding function, or append or add a new file function function to that list.
          • For example, PEL sets pel-filename-at-point-finders to `(pel-erlang-find-file). That function searches the file in the Erlang root directory tree as well as inside the current project.
  • The <f12> and <M-f12> key prefixes are now available in Custom-mode buffers.
  • New: The <M-f11> key is now used as the pel2: key prefix. Generic commands that have corresponding major-mode specialized commands are bound to the same key sequence into the <M-f12> key prefix making it easier to remember both set of command bindings. The generic commands are also often available under the <f11> (pel:) prefix.
  • New: explicit support for time tracking:
    • New: When the pel-use-timeclock user-option is t, the timeclock commands are bound to the C-x t key prefix.
      • New: When the pel-use-timeclock-timelog is also turned on,an updated version of timelog.el is installed.
    • New: ⅀ Time Tracking PDF
  • New: Add ability to differentiate M-b from <M-left> and m-f from <M-right> on Emacs running in terminal mode on a macOS Terminal.app application: the Terminal.app must be setup to issue the Esc Y when Option-left is typed and Esc Z when Option-right is typed. Then the pel-map-meta-left-right-to-Y-Z user-option must be set to t. That forces PEL to bind M-Y to what should be bound to <M-left> and M-Z to what should be bound to <M-right> simulating the keys.
  • New: When pel-move-window-on-esc-cursor user-option is t, the four ESC <CURSOR> keys are bound to windmove commands instead of org-meta commands inside the org buffer. Previously they were bound to the org-meta commands making navigation out of org buffer different than from the other buffers, a surprising behaviour.
  • Modified: The pel-xref-toggle-dumb-jump-mode command, bound to <f11> X B D, now toggle the activation of dumb-jump as a xref back-end inside all buffers using the same major-mode instead of only the current buffer as it was doing before. The command now accepts a prefix argument; if the command is issued with a prefix argument then only the use of dumb-jump as a xref back-end is only toggled for the current buffer.
  • New: the pel-set-tab-width command is now available through the <f11> M-t key sequence to modify the display rendering of hard tabs in text for all major modes in the editing session.
  • Improved: the pel-package-info command identifies and prints the number of Elpa-compliant and other packages PEL is able to download and install.
  • New key bindings for activating outline modes: the <f11> M-l key sequence is now bound to outline-minor-mode and <f11> M-L is bound to outline-mode.
  • New: key bindings for the outline minor mode under the <f2> key prefix. These key bindings use only an extra key that does not require modifier. Also added binding to the pel-outline-print-vars command to <f2> ? and <f11> ? e o. The info shown describes how the outline mode extracts the information for outlining purpose.
  • New: add support for outshine-mode when the pel-use-outshine user-option is turned on. Currently experimental and not fully integrated: outshine generates several byte compiler warnings that need to be resolved. Its code is relatively old (2019) and probably requires attention. It also needs integration documentation inside PEL which is not done yet.
  • New: add support for rfc-mode when the pel-use-rfc-mode user-option is turned on. Provides <f11> B r binding to rfc-mode-read and <f11> B R to rfc-mode-browse.
  • New: key binding to the pel-help-pdf-select command used to access PEL local or web-based PDF help pages: <f11> p.
  • New: key binding <f11> ? e . to pel-syntax-at-point command that also list the text properties of the character at point identified by the new pel-syntax-text-properties user-option.
  • New: The C-x g key binding for Magit is no longer replaced by PEL’s <f11> v g key binding for the magit-status command: both bindings are active when Magit is available.
  • New: pel-vcs-toggle-vc-log command, bound to <f11> v l. Toggle the logging of VC back-end commands in the `*pel-vc-log*` buffer.
  • New: ⅀ VCS-Git 𝔛Magit PDF
  • New: key prefix <f11> d e R for the ediff-registry commands.
  • New: support for the built-in smerge-mode activated by the new pel-use-smerge user-option. If its value is set to auto then smerge-mode is activated automatically in files that are annotated with diff strings. PEL maps the smerge-mode keys to <f11> d s key prefix. These keys are in addition to the native key bindings. The pel-use-smerge user-option is located inside a new group: pel-pkg-for-diff-merge.
  • New: Add pel-activates-global-minor-modes user-option to activate global minor-modes.
  • New: Add support for interaction-log external package, when the pel-use-interaction-log-mode is turned on. The key bindings use the <f11> ? k i key prefix.
  • New: PEL now generates warnings when a global minor mode is requested by one of the user-options that should only request the activation of local minor-mode globally. It also generates warnings when activation of global minor-mode for a specific major-mode.
  • New: Add support for the browse-kill-ring external package when the pel-use-browse-kill-ring user-option is set to t.
  • New: Better control over the electric behaviour of newline, colon, semicolon and greater-than key for Erlang. PEL now provides the pel-erlang-electric-keys user-option which controls the electric behaviour of these keys. The default activates the electric behaviour of the 4 keys (which includes the newline, which by erlang.el does not activate by default). PEL also provides 4 commands that can be used to dynamically toggle the electric behaviour of these keys. The commands are mapped under the <f12> ~ key prefix.
  • New: Add `M-R` global key binding to re-search-backward.
  • New: Add access to the electricity custom group to the <f12> <f3> key sequence of several programming languages as it allows selecting the block character that trigger the insertion of the matching pair controlled by the electric-pair-local-mode which can be activated automatically by adding it to the PEL language-specific mode “MMM“ in pel-MMM-activates-minor-modes. PEL does not, however yet explicitly support the mode.
  • Improve: smart-dash support: when used, the smart-dash-mode no longer prevents the <kp-subtract> key from being used for pel-kp-subtract allowing that key to insert hyphen when the keypad NumLock is on and act dash insertion when no area is marked ans as a marked-area kill otherwise.
  • New: experimental support for the YANG modelling language file using yang-mode and outline mode. Add the Ⓢ YANG PDF.
  • New: Experimental support for the Janet Programming language when “pel-use-janet“ and other PEL user-options are turned on (“pel-use-janet-mode“, “pel-use-ijanet“ and “pel-use-inf-janet“). The “pel:for-janet“ prefix is bound to <f11> SPC T which maps to <f12> inside .janet files. Includes support for iMenu and Speedbar.
  • Improve: Erlang support:
    • Improved: pel-open-at-point is now able to search for files inside the current Erlang project and inside the Erlang root directory (the Erlang library). PEL detects the location of the Erlang root directory with the provided erlang-root-dir Erlang script (see next).
    • New: bin/erlang-root-dir Erlang script detects and returns Erlang’s root directory.
    • Improved: bin/version-erl script longer prints SASL progress information when older versions of Erlang are used.
    • New: add support for ivy-erlang-complete external package when pel-use-ivy-erlang-complete user-option is turned on (t).
    • New: add support for the company-erlang external package when pel-use-company-erlang user-option is turned on (t). This also automatically activates pel-use-company user-option that activates the company completion external package.
    • New: add support for erlstack-mode when pel-use-erlstack-mode user-option is turned on.
    • New: Add smartparens support when pel-use-smartparens is turned on. Automatically activate smartparens support for Erlang by adding `smartparens-mode` to the list of pel-erlang-activates-minor-modes.
      • New: Fixed behaviour of some of the smartparens code transformation functions by using the post processing capability provided by smartparens sp-pair definition mechanism but also by creating function wrappers to overcome the current limitations of smartparens pre-handlers and post-handlers.
      • New: Add automatic pairing of `<< >>` to smartparens-mode used in erlang-mode buffers. Also add navigation across these pairs by replacing forward-sexp by pel-erlang-forward-sexp and backward-sexp by pel-erlang-backward-sexp. The PEL commands use the same bindings and handle the Erlang << >> bit syntax pairs, something the erlang-mode does not do by itself.
      • New: Improved management of display rendering of hard tab characters and control of hard tab insertion: the new pel-erlang-tab-width user-option controls the display rendering of hard tabs located inside Erlang source code, and the pel-erlang-use-tabs user-option controls whether indentation inserts hard-tabs in Erlang source code.
      • New: Improved electric key behaviour for Erlang:
        • Selection of which key gets electric behaviour is controlled by the pel-erlang-electric-keys user-option which includes comma, >, newline, period and semicolon by default. The period electric behaviour is a PEL feature.
        • Electric behaviour of the ‘>’ character is modified. The erlang-mode prevents its electric behaviour of automatic insertion of a indented newline after insertion of ‘->’ when the next line has code. PEL removes this restriction and adds the ability to insert ‘->’ without electric behaviour by simply typing ‘-.’ when the electric behaviour of the period is activated in the current erlang buffer. This allows very effective selection of non-electric or electric behaviour by either typing ‘-.’ or ‘->’ to insert just ‘->’ or ‘->’ followed by indented line. Other mechanism to disable the electric behaviour of the key are provided by PEL:
          • Type M- before the key inhibits its electric behaviour of the next typed key.
          • Toggle electric behaviour of ‘>’` or ‘.’ in the current erlang buffer or all erlang buffers for the current session of a key as described below.
        • Electric behaviour of newline, >, comma, period and semicolon can be dynamically toggled by using the <M-f12> M-` prefix followed by the specific key. That toggles the electric behaviour in the current erlang buffer for the current editing session. To toggle the electric behaviour for all erlang buffers for the current editing session type M-- <M-f12> M- followed by the key.
        • When the pel-erlang-space-after-comma-in-blocks user-option is turned on, and when the comma electric behaviour is active, a space is automatically inserted after a comma typed inside a “parens” block.
          • The automatic insertion of space after of comma can be toggled:
            • just for the current insertion by typing M-1 ,
            • for the editing session by turning off the automatic insertion of space after a comma in parens:
              • in the current erlang buffer by typing <M-f12> M-` M-,
              • for all erlang buffers by typing M-- <M-12> M-` M-,
            • for the editing session by turning the electric behaviour of the comma key for the current erlang buffer by typing <M-f12> M-` ,, or for all erlang buffers by typing M-- <M-f12> M-` ,.
      • Enhance 𝕻𝔩 - Erlang PDF:
        • Add description of the electric behaviour of keys in erlang-mode buffers.
        • Describe behaviour of the smartparens navigation and code transformation commands in erlang-mode buffers.
  • Fix: typo describing character class in the Emacs regexp syntax of the ⅀ Search/Replace PDF. Also better described pel-replace-regexp.
  • Change: The key prefix for smartparens startup commands changed from <f11> i ( to <f11> (.

Bug Fixes:

  • Fixed invalid description in the Customize PDF first page rows 3, 4 and 5 duplicating information correctly provided in later rows about dual configuration. That section now describes how to customize the customization as it should have been.
  • Fixed generic skeletons for programming languages that use end comment strings such as C, Pascal and several others. For those the generic templates creating comments, such as the header template bound to <f6> h and the command to insert a single commented separating line, bound to <f6> l were not terminating the comments. The language specific templates for C, C++ (when using the C-style comment style) were not affected.

Version 0.4.0:

New Features and Improvements:

  • New: unified cross reference commands for Erlang. The M-. M-, keys are bound to PEL commands that dispatch the cross reference command to find the definition of Erlang identifier at point and go back using the cross reference back end currently active. The **pel-erlang-xref-engine** user-option identifies the cross reference back-end to use. The user can change the cross reference engine back-end dynamically using the new **pel-erlang-select-xref** command and see which one is active with the **pel-erlang-show-xref** command. These are bound to <M-f12> M-. M-. and <M-f12> M-. M-? key sequence respectively. PEL supports etags, dumb-jump, ggtags, ivy-erlang-complete, edts and erlang-ls back-ends.
  • New: Simplified installation. PEL now provides the init.el and the early-init.el file that support PEL features. There’s also a set of canned Emacs customization files ready to use.
  • Modified: the key binding to find-file/id-find-file from <f11> C-f to <f11> f f and to <M-f11> M-f M-f. Also modified the binding to psw-navigate-file from <f11> f M-f to <f11> f M-f.
  • New: PEL supports configuring the process environment of Emacs launched from a GUI program such as Windows Explorer, macOS Finder, Linux file manager, etc… The method PEL use is fast and does not need to launch a child shell process: only configure two customization user-options variables: “pel-shell-detection-envvar“ and “pel-gui-process-environment“ and possibly setting one environment variable into your shell initialization script.
  • New: PEL now provides 2 operation modes: the normal Emacs mode of operation and the new **fast-startup** setup. In the fast-startup setup, Emacs init startup time is reduced further by bundling all single directory external packages inside a single directory. Use the **pel-setup-fast** command to activate the fast startup setup. Use the **pel-setup-normal** command to restore Emacs standard environment. Use the fast startup setup when you want to use a large number of external packages and want to reduce Emacs startup time more than what can be done otherwise.
  • New: explicit support for Emacs ≥ 27 package quickstart feature that is aware of PEL fast-startup mode and PEL’s ability to deal with 2 independent customization files (one for Emacs in terminal mode and another for Emacs running in graphics mode). The pel-setup-with-quickstart command (bound to <f11> M-S q) activates package quickstart or refresh the package-quickstart file(s) if already present. The pel-setup-no-quickstart (bound to <f11> M_S M-q) disables package quickstart.
  • New: PEL now provides customization-driven package management. It installs packages identified by the “pel-use-“ user-option when the pel-init command is issued and some of the requested packages are missing. And it deactivates packages that are not required y these user-options when you execute the “pel-cleanup“ command.
    • PEL no longer depends on the use-package external package to install other external packages. PEL now provides all the logic it requires on top of the built-in package library to install external packages. This simplifies the PEL installation procedure and allows byte-compiling all of PEL without requiring any external package. PEL will download and install new package only when you activate the related “pel-use-“ user-option variable.
    • New: PEL supports the ability to perform automatic cleanup of packages:
      • The “pel-cleanup“ command disable packages not required by the PEL user-options: it moves the packages in excess into an “attic” directory. It also updates the “package-selected-packages“ customization. That reduces the Emacs load-path which helps speeding up Emacs initialization time.
      • If the command is issued with any prefix key the command executes in dry-run mode and produces a detailed report of what would be removed.
    • New: The “pel-package-info“ command generates a report of the used packages. By default it prints a short report on the echo area. When invoked with any prefix key it produces a detailed report in a special buffer.
  • New: the new command pel-insert-line-above (bound to M-L) inserts a new line above current line and indents it. Optional numeric argument is accepted, adding that many lines. If the argument is negative, point is not moved.
  • New: integrated c-eldoc. In C buffers, the <f12> ? e key sequence toggles c-eldoc mode on/off. I am currently investigating c-eldoc various versions trying to improve its performances. For systems that do not have access to a LSP for C/C++ c-eldoc might provide some help even though it is limited.
  • Update: improved messages printed by commands that describe state of modes such as completion modes, etc…
  • Update: Application Launching:
    • New: The <f11> A key sequence is bound to counsel-linux-app on Linux systems and to counsel-osx-app on macOS system. This allows selecting an OS application by name to launch it. The first one is available when pel-use-counsel is on and the second when pel-use-counsel-osx-app is on.
  • Update: Buffer Support:
    • New: support for the iflipb external package is activated by the pel-use-iflipb user-option. When active the <f9> key flip to the next buffer and <S-f9> to the previous buffer in the stack.
    • New: support for Buffer Selection mode. The command bs-show is mapped to <f11> b s and the bs-customize command is mapped to <f11> b S.
      • Extensions to Buffer Selection mode:
        • The commands pel-bs-next (bound to <f11> b .) and the pel-bs-previous (bound to <f11> b ,) changes the buffer of the current window to the next and previous buffer identified from the Buffer Selection list.
        • A new key binding (“.”) in the Buffer Selection mode creates a mode to cycle through the buffers of the same major mode as the one selected on the current line. Allowing the pel-bs-next and pel-bs-previous commands to cycle through the buffers of the same major mode.
    • New: provide commands to cycle through the buffers of the same major mode as the current buffer without the use of the Buffer Selection mode:
      • The commands pel-smb-next (bound to <f11> b ]) and pel-smb-previous (bound to <f11> b [ ) can be used to cycles through all buffers of the same major mode in the current window without any prior setup.
    • New: a new pel-∑buffer Hydra provides quick access to these commands.
  • New: Build Tool Scripting Support:
    • New: Make file Editing support:
      • New: 𝕻𝔩 - Make PDF that describes make file editing support, along with PEL additions.
        • PEL adds support to the Microsoft’s nmake file format, something not provided by Emacs built-in make file support.
      • New: PEL provides two commands to navigate across make file macro definition statements (they can also be used to count them):
        • pel-make-previous-macro, bound to <f12> <M-up> and <M-f12> <M-up>.
        • pel-make-next-macro, bound to <f12> <M-down> and <M-f12> <M-down>`.
    • New: *Nix package Manager support:
      • Support is activated by the pel-use-nix-mode user-option. It installs the nix-mode package.
    • New: Tup file editing support:
      • Support for Tup files activated by the pel-use-tup user-option.
  • Update: Comments:
    • New: command pel-comment-show-variables (bound to <f11> ; ?) opens a special “\*comment-vars\*” buffer and prints the names and values of all Emacs variables used to control the behaviour of comment generation. If a prefix is specified it only prints the user option variables (the ones that can be customized).
  • Update: Cross Referencing support:
    • PEL’s goals is to provide easy access to multiple indexing and cross-referencing systems. Once a system is enabled via the appropriate PEL user option, it is possible to activate its mode or turn it off using one of the commands PEL provide.
      • PEL provides the pel-xref-show-status command to display the state of the indexing/cross-referencing modes. It is bound to <f11> X ?. By default it prints a message at the bottom of the screen. When invoked with any prefix argument it prints the information inside a xref-status buffer.
        • It becomes easy to try different indexing systems; these systems are often complementary and often viable alternatives to active Language Server systems. Note that PEL will also support Language Servers and will identify good set of tools for each of the programming languages it will support.
    • Modified: PEL key binding for xref-find-apropos: the new key sequence is <f11> X a instead of <f11> X . which is now reserved for major mode specific specialized cross reference operations. The ‘a’ for apropos is used in other PEL key sequences, so it’s more appropriate even though the command is also bound to C-M-. by Emacs.
    • New xref search of Customization buffer user option variables:
      • PEL provides the command pel-xref-find-custom-definition-at-line. This command finds the source of a user-option variable for the symbol listed on the current line of a Customize buffer. The user variable may have its name spread like in “Kill Ring Max” or its real variable name like “kill-ring-max”. It has several key bindings:
        • It is globally bound to the <f11> X c key sequence. However it can only be used inside a Customize buffer; if used inside another buffer it will report an error.
        • In Customize buffers (buffers in Custom-Mode) the following keys are activated:
          • <f11> X .
          • M-. when the PEL user option pel-bind-m-dot-to-xref-find-custom-definition is set to (t (which is its default).
    • Non-xref cross-reference/code indexing packages:
      • New: Added support for CScope via the external xcscope and the helm-cscope Emacs packages.
        • The xcscope package is enabled when the pel-use-xcscope user option is on (non-nil).
        • When enabled, the <f11> X C C key sequence toggles the xcscope-minor-mode. Automatic activation of xcscope-minor-mode can be specified with the pel-modes-activating-cscope. This could be done for c-mode, c++-mode and dired-mode.
        • The pel-use-helm-cscope user option enables the use of the helm-cscope external Emacs package that uses Helm to display CScope matches. It also enables the <f11> X C H key binding to toggle the use of helm-cscope-mode and the extra key bindings this mode activates.
      • New: Added support for eopengrok front end to OpenGrok, a Java-based source code indexing server.
      • New: Added support for elisp-refs package, activated by pel-use-elisp-refs as well as from pel-use-helpful user-options. The commands have key bindings under the <f12> r key prefix of Emacs Lisp Mode.
    • New xref back-end support:
      • New: Added support for dump-jump. The pel-use-dumb-jump activates it for M-.
      • New: Added support for GNU GLOBAL gtags-based ggtags. This includes support for Universal-Ctags and Pygments plugins. Several things must be done properly to get this working, a descrption of the required installation steps are in the PEL manual (see the manual additions below).
      • New: added support for gxref xref back-end using GNU GLOBAL.
      • In progress: adding support for RTags xref back-end for C/C++ code.
      • New: PEL command to dynamically modify the list of xref back-end functions (mapped to the <f11> X B prefix) and to select the xref front-end function (mapped to <f11> X F key sequence). The supported xref back-end include: etags, rtags, ggtags, gxref, xref and dumb-jump.
    • New xref front-end support and selection mechanism:
      • New: added support for ivy-xref and helm-xref front-end for xref search, allowing selection of xref, ivy-xref or helm-xref display of multi-result searches.
    • Updated help support:
      • New: add support for the debbugs external package when the pel-use-debbugs user option is turned on. This provides commands to browse the GNU Bug Tracker database within Emacs. PEL binds the debbugs commands under the <f11> ? b key prefix. It also provides access to the debbugs customization group via the <f11> ? <f3> key.
      • Update: pel-xref-show-status (key sequence <f11> X ?) displays more information: it now displays the state of ggtags, dumb-jump, gxref, rtags.
      • New: command log mode from my forked command-log-mode repo is now available when the pel-use-command-log-mode user option is set to t. The commands are bound to the keys following the pel:command-log prefix bound to the <f11> ? k c key sequence. These commands provide the ability to log all key and mouse events in a dedicated window buffer showing the key sequence and the executed command by its name.
    • Updated customization support:
      • Update: the <f11> X <f3> key sequence provides access to the customization buffer of more cross referencing packages. It provides access to dumb-jump, eopengrok, etags, eopengrok, ggtags, gxref, xref, ivy-xref, helm-xref, ivy, helm, projectile and speedbar.
      • New: shell scripts to create etags-compatible TAGS files in the bin directory:
        • etags-c creates a etags-compliant TAGS file for C source code projects: all .c, .h files.
        • etags-cpp creates a etags-compliant TAGS file for C++ source code projects: includes C files ( .c, .h files) and C++ files (.C .c++ .cc .cpp .cxx .H .h++ .hh .hpp .hxx .M .pdb) files.
        • etags-el creates a etags-compliant TAGS file for Emacs Lisp projects: all .el, .c and .h files. It supports used of compressed files when etags is used.
        • etags-erl creates a etags-compliant TAGS file for Erlang and C source code projects. It does not process compressed files.
        • etags-lisp creates a etags-compliant TAGS file for Common Lisp file directory tree. It supports used of compressed files when etags is used.
        • etags-py creates a etags-compliant TAGS file for Python source code file projects. It does not process compressed files.
      • New: shell scripts to create CScope database for directory trees of C and C++ files:
        • cscope-c creates a CScope database and a cscope-files in the current directory for directory tree(s) of C files.
        • cscope-cpp creates a CScope database and a cscope-files in the current directory for directory tree(s) of C and C++ files.
  • Update: Cursor/Multiple-Cursors:
    • Update: completed the key bindings required to use the multiple-cursors package efficiently:
      • Add <f11> m n key sequence binding to mc/mark-next-like-this
      • Add <f11> m p key sequence binding to mc/mark-previous-like-this
      • Add <f11> m a key sequence binding to mc/mark-all-like-this
      • … and several other commands: there’s a total of 35 of them, all documented in the ⅀ Cursor PDF.
  • Update: Customization:
    • New: pel-auto-mode-alist user option in the Pel Base Emacs group allows user-specified association of file name pattern to a major mode. It can be used, for example to:
      • select the shell-script-mode for extension-less files stored in a directory whose name ends with “/bin/“ by identifying the file pattern as “/bin/.+`“ and the mode as shell-script-mode.
      • select python-mode for SCons files like Sconstruct and SConscript,
      • or any other association you may wish. Invalid associations are detected and a warning is displayed when Emacs starts. Association to a mode function not bound by the time pel-init has completed all loading is considered invalid.
    • New: command pel-browse-group which prompts allowing the browsing of the customization group tree from any group. This complements the Emacs customize-browse which unfortunately does not prompt.
    • New: added several links to package home pages, user manuals and relevant Emacs manuals and sections.
    • New: The <f11> - <f3> key sequence provides access to the customization of the following groups: cua-mode, killing, popup-kill-ring.
    • Modification: new customization group pel-pkg-for-cut-and-paste which holds pel-use-popup-kill-ring that was previously under the undo group.
  • Update: Cut & Paste:
    • New: pel-duplicate-line command (bound to <f6> d) that duplicates the current line N times, with N defaulting to 1 and taken from a numerical argument. If some text on the original line is marked, the function prompts and uses a replacement for each duplicated line. If N is positive all instances of text in the original line are replaced in the duplicate lines. If N is negative, only the marked text is replaced. The command maintains a prompt history, accessible with M-n and M-p.
    • New: It’s now possible to control whether the copy, kill, delete commands that can display the copied, killed or deleted text. The new pel-show-copy-cut-text user option controls it. It is set t by default, mimicking previous behaviour. Setting it to nil will prevent the display. The new command pel-toggle-show-copy-cut-text (bound to <f11> M-=) can be used to override this setting in the current Emacs session either globally or for the current buffer. the customize buffer is a persistent setting that can be overridden
    • New: added commands that delete elements, similar to the kill commands. These are bound to the pel:delete key prefix, bound to the <f11> DEL key sequence. There is now a delete command equivalent to the kill commands.
    • New: added commands to kill and delete the beginning or end of the word at point, bound to <f11> - q (for kill) and to <f11> DEL q (for delete). Same for symbol, using , instead of q.
    • Update: the command to delete duplicated lines is now bound inside the pel:delete key prefix instead of the pel:kill key prefix.
    • New: added command pel-delete-line to delete text from point to end of line without copying it to the kill ring. It is bound to C-K (in graphics mode only) and to <f11> DEL e key sequence.
    • New: added command pel-delete-from-beginning-of-line bound to <f11> DEL a.
    • Update: the kill and delete commands are no longer allowed in read-only buffer.
  • Update: Dired:
    • New: add support for the dired-hide-dotfiles external package when the pel-use-dired-hide-dotfiles user-option is set to either t or to hide-dot-files-by-default. Add a new key binding (“/”) in dired-mode to toggle hiding of the dot-files. The “.” key binding already exists in dired, it is not used for this.
    • New: add support for the dired-git-info external package when the pel-use-dired-git-info user-option is set to t or to activate-for-git-directories. This adds a new key binding “)” in dired-mode to toggle the display of the last git log entry for each file.
  • Update: ERT - Emacs Regression Test support:
    • New: file pel-ert.el that defines a set of equality and inequality predicates that are meant to be used in ert-deftest forms. You can use these inequality functions to pass extra arguments whose values will be shown in the ERT failure report when the test fails, providing extra information. Pass test control variables to these extra arguments.
    • New: pel-run-ert command, bound to <f12> t in Emacs Lisp buffers, that byte-compile the file and runs ert to on the file visited by the current buffer.
  • Update: File Diff:
    • New: command pel-ediff-2files, bound to <f11> d 2, runs the EDiff command on the files in the current window and the other window, allowing to quickly set up an EDiff session to compare the content of the 2 edited files. With numerical argument another window can be selected from the direction of the corresponding cursor on a numeric keypad.
    • New: command pel-ediff-revision, bound to <f11> d r, runs the Ediff command to compare revisions of the file in the current window, defaulting to the current copy and the last committed revision.
  • Update: File Management:
    • New: when using IDO completion you can control whether IDO uses the file name at point with the new command pel-set-ido-use-fname-at-point. By default it sets the behaviour for the current buffer. With a command prefix it sets it globally.
    • New: command pel-open-url-at-point bound to <f11> f M-u copies the file identified by the URL at point into a temporary file and visit that file. This command is also bound to C-c C-f when the goto-address-mode minor mode is active and point is over a URL.
    • New: key binding <f11> f M-l to find-file-literally.
    • New: command pel-show-buffer-file-encoding, bound to <f11> f ? that shows the encoding of the file in current buffer by opening the Help buffer showing the value of Emacs variable buffer-file-coding-system.
    • Improved: pel-open-at-point is now able to open a file when its name is immediately followed by a colon character. Useful when trying to open the file whose name is shown in the result of a grep command.
    • New: its now possible to dynamically control whether the following actions occur when a buffer is saved into a file for each buffer independently or all buffers globally. These actions are activated by a customizable user-option. What is new is that new commands are available to dynamically activate or deactivate the action either globally or each buffer independently. The actions are:
      • Update copyright notice on save: use <f11> M-C to toggle action activation.
      • Update time stamp on save: use <f11> M-T to toggle action activation.
      • Delete trailing space and lines on save: use <f11> M-W to toggle action activation.
  • Update: Grep:
    • New: Added key bindings for ag (the silver searcher) based grep-style search.
    • Modified: key bindings in pel:grep to better organize commands for ag and for better regularity.
    • New: add support for deadgrep package, activated by the pel-use-deadgrep user-option. When it is turned on, the deadgrep command is bound to <f11> g d.
  • Update: Help:
    • New: Added a command (<f11> ? e c) to open a local copy of one of the Emacs PDF reference cards. The new pel-emacs-refcard-dirpath user option identifies a directory where Emacs PDF refcards are stored. If you set that user option PEL uses it to locate the Emacs PDF refcards, otherwise it attempts to locate it. Under macOS automatic location often works nicely because the Emacs reference cards are stored in PDF format. On Linux platforms the refcards are stored in .tex format and PEL does not attempt to build or render the .tex files, so its often best to download the PDF files, store them in a directory and identify that location in the user option.
    • New: key binding to a command to display Emacs executable path: <f11> ? e x.
    • New: key binding to display Emacs up-time (<f11> ? e u).
    • New: added several alias for various PDF tables when using the pel-help-pdf-select (which is bound to the <f11> ? p key.
    • New: Add support for the helpful package. Activated when the pel-use-helpful user-option is turned on. Its commands are bound to the <f1> <f2> key prefix.
  • Update: Hide/Show:
    • New: add support for the **origami-mode** code folding package, activated when the pel-use-origami is turned on (set to t) or indirectly when pel-use-erlang-ls is set. Provides key bindings which also include bindings for command that hide/show comments and docstrings.
    • New: add support for the hide-lines external package, activated when the pel-use-hide-lines user-option is turned on (set to t). It provides commands bound to the <f11> M-/ PEL key prefix as well as the C-c / global binding.
  • Update: Highlighting:
    • Modified: the pel:highlight prefix key sequence changed from <f11> b h to the simpler <f11> h.
    • New: add support for rainbow-mode to highlight color code strings in source code. The <f11> h c key sequence is bound to the command rainbow-mode to toggle activation of the mode.
    • New: Add support for auto-highlight-symbol, activated by the pel-use-auto-highlight-symbol user-option. The auto-highlight-symbol-mode command is bound to the <f11> h a key sequence.
    • New: Add support for the highlight-indentation package activated by pel-use-highlight-indentation user-option. This provides the highlight-indentation-mode command (bound to <f11> h M-i key sequence) and to the highlight-indentation-current-column-mode command bound to <f11> h M-c.
  • Update: Indentation:
    • Improvement: to the commands bound to <f6> <tab> (now pel-indent-lines) and <S-tab> (now pel-unindent-lines):
      • The commands now handle a marked region like a region marking all touched lines and now longer suffers from a degradation of the marked area on subsequent commands.
      • The commands now properly handle the presence of hard tabs in the indentation whitespace. They also automatically tabify or untabify the indentation whitespace, conforming to the mode identified by the indent-tabs-mode variable.
    • New: Add support for indent-tools external package. Activate by the pel-use-indent-tools user-option. Provide the <f11> <tab> > key-binding to its key Hydra. It’s also possible to activate the binding identified by indent-tool customization globally or only for Python files.
    • New: Add support for smart-shift external package. Activate by the pel-use-smart-shift user-option. Also, the pel-smart-shift-keybinding user-option can be used to add extra key bindings to the minor-mode line shifting commands.
  • Update: iMenu support:
    • New: add support for the imenu+ external package. Activate by setting pel-use-imenu+ user-option to t. This activates the execution of the imenup-add-defs-to-menubar function to enhance the content of the MenuBar imenu index entry. It is activated on file entry and has a ‘DEFS’ index menu entry with the `imenu+’ extra features activated: toggle of menu entry sorting, ability to index commented definitions, several types in various file types.
    • New: add support for the imenu-extra external package. Make it available by setting the pel-use-imenu-extra user-option to t.
    • New: add pel-imenu-rescan, bound to <f11> <f10> r.
    • New: add pel-popup-imenu, bound to <f11> <f10> <f10>. It opens a pop-up menu of items detected by imenu.
    • New: add support for the idomenu external package. Make it available by setting the pel-use-idomenu user-option to t.
    • New: add the pel-clisp-define-forms user-option that allows you to identify Common Lisp definition form keywords to include in the imenu list.
  • Update: Input Completion:
    • New: Customization and dynamic control of Ido prompt geometry.
      • The pel-initial-ido-geometry user-option allows you to select the initial Ido prompt geometry from : 1) Emacs default linear prompt, 2) grid mode that starts collapsed or 3) grid mode that starts expanded.
      • The pel-select-ido-geometry command (bound to <f11> M-c M-g) allows you to change this during an Emacs session. It does not persist across Emacs session the way the customize user-option does.
      • The pel-show-active-completion-mode displays the currently active completion mode, whether ubiquitous Ido is active and the Ido prompt geometry active.
    • New: Add support for flx and flx-ido external packages. Activate both by setting the pel-use-flx user-option to t. Set the initial state in the pel-initial-ido-flx-state. Use the new command pel-toggle-flx-ido, bound the <f11> M-c M-f key sequence, to stop or start its use during an editing session.
    • New: Add support for the smex external package. Activate it by setting the pel-use-smex user-option to t.
    • New: Add support for the ido-grid-mode external package. Activate it by setting the pel-use-ido-grid-mode user-option to t.
    • New: Add support for the ido-grid library, a different implementation of an Ido grid, done by the same author but not yet supported on Melpa. Activate it with pel-use-grid-mode user-option. Note, however that it is incompatible with the ido-grid-mode. Therefore when pel-use-grid is set it forces the pel-use-grid-mode to go off, regardless of the user selection. If you want ido-grid-mode, make sure you turn off pel-use-grid.
    • New: Add and then disabled support for the ido-vertical-mode external package. Activate it by setting the pel-use-ido-vertical-mode user-option to t.
    • New: Add support for the ido-ubiquitous-mode via the ido-completing-read+ package.
      • It is activated via the pel-use-completing-read+ user-option.
      • When active the pel-toggle-ido-ubiquitous command is mapped to <f11> M-C.
    • New: pel-cl-hyperspec-lookup command that uses Slime, SLY or PEL’s own implementation of Common Lisp Hyperspec symbol lookup. It’s bound to the Common Lisp specific <f12> ? key sequence.
    • New: During Ido input completion, the <f1> key opens the ⅀Input Completion PDF which now describes all key bindings available for the Ido prompts. the same key is available in Ivy prompts.
    • New: Add support for ivy-avy. It is activated when both pel-use-ivy and pel-use-ivy user-options are activated.
    • New: Add extra key bindings for the ivy key-map to allow ivy-restrict-to-matches and ivy-avy to be accessible when Emacs runs in terminal mode.
  • Update: Key Chords:
    • New: a new key prefix is used to access key-chord commands: pel:mode-key-chord, mapped to <f11> <f5> k. It holds the following commands:
      • Command key-chord-mode, mapped to <f11> <f5> k k.
      • Command pel-key-chord-describe (bound to <f11> <f5> k ?) displays the state of key-chord/key-seq and the key bindings if key-chord-mode is active.
      • <f11> <f5> k <f1> opens the ⅀ Key-Chords PDF.
      • <f11> <f5> k <f2> opens the PEL key-chords customization buffer.
      • <f11> <f5> k <f3> opens the key-chords package customization buffer.
  • Update: Markup Language Support
    • New: Add support for Markdown, via the markdown-mode and several other external packages: grip-mode, impatient-showdown, markdown-preview-eww, markdown-preview-mode, markdown-toc, vmd-mode and remark-mode.
    • The <f11> SPC M-m key prefix gives access to the Markdown specific PEL keys which becomes the <f12> key when the markdown-mode is active. Currently this key prefix has only 3 sub-keys:
      • <f1> opens the Ɱ Markdown PDF.
      • <f2> opens the pel-pkg-for-markdown customization group where various markdown support packages can be enabled with the PEL user-options.
      • <f3> provides access to the customization group for the markdown-mode and other markdown support packages. As for all other <f3> keys in PEL, the package does not have to be loaded for the key to be able to access the customization group. PEL will load the package first if necessary.
      • The <f12> M-t key prefix to commands that generate, refresh or delete a table of contents are available when the pel-use-markdown-toc user-option is set. And if it is set to update-toc-on-save the table of content is updated on buffer save if it is present.
      • The markdown extension packages that provide other mechanisms to generate a HTML rendering have commands mapped to the <f12> M-p key prefix.
    • New: Add support for YAML with yaml-mode. Activate it with the pel-use-yaml-mode user option.
    • New: Ass support for Common Workflow Language (CWL) with cwl-mode. Activate it with the pel-use-cwl-mode user-option.
  • Update: Navigation
    • New: New commands to navigate across URLs in the current buffer:
      • pel-goto-next-url, bound to <f6> C-n globally and to C-c C-n when the goto-address-mode minor mode is active and point is over a URL,
      • pel-goto-previous-url, bound to <f6> C-p globally and to C-c C-p when the goto-address-mode minor mode is active and point is over a URL.
    • New: M-g h and M-g M-h key sequences mapped to pel-goto-symbol, a command that uses imenu to extract all symbols from the buffer to provide an efficient way to jump to the definition of any symbol in the current buffer.
      • The command provides several user interface methods selected by the pel-initial-goto-symbol-UI which defaults to Emacs default: imenu. You can use the command pel-select-goto-symbol-UI, bound to M-g <f4> h, to change the user interface method used in the current Emacs session. The available completion methods are:
        • Ido,
        • Ivy,
        • helm
        • popup-imenu
        • popup-switcher.
    • New: Add support for imenu-anywhere, which provides the same functionality as pel-goto-symbol with the ability to target the symbols of all buffers:
      • Activated with the pel-use-imenu-anywhere that is set to identify the default user interface method, one of: emacs-default, ido, ivy or helm.
      • The pel-select-goto-symbol-any-buffer-UI command (bound to M-g <f4> y) can be used to change the completion method used in an Emacs editing session.
      • The pel-goto-symbol-any-buffer prompts using the selected completion method and move point to the buffer and location where the symbol is defined. The command is bound to M-g y and M-g M-y key sequences.
    • New: <f11 M-f> binding for pel-forward-syntaxchange-start and <f11 M-b> binding for pel-backward-syntaxchange-start.
    • New: when the new pel-windmove-on-f1-cursor user option is set to t, PEL activates several key bindings for windows management using the <f1> prefix followed by cursor keys sequences:
      • <f1> <cursor> : to move to pointed window.
      • <f1> <C-cursor> : to create window in pointed direction.
      • <f1> <C-S-cursor> : to close window in pointed direction.
      • <f1> <M-cursor> : to resize current window according to the cursor used.
      • <f1> <kp-5> : to balance the size of all windows in current frame.
    • New: when the new pel-windmove-on-esc-cursor user option is set to t, PEL activates several key bindings for windows management using the Esc prefix followed by cursor keys sequences:
      • Esc <cursor> : to move to pointed window.
      • Esc <C-cursor> : to create window in pointed direction.
      • Esc <C-S-cursor> : to close window in pointed direction.
      • Esc <M-cursor> : to resize current window according to the cursor used.
      • Esc <kp-5> : to balance the size of all windows in current frame.
    • Update: removed the <C-f11> binding to pel-previous-visible and <C-F12> to pel-next-visible. Instead use <C-left> and <C-right>, respectively bound to pel-backward-token-start and pel-forward-token-start. This frees another 2 valuable quick access keys.
  • Update: Programming Language Support:
    • Update: CC Mode Utilities
      • Refactoring: Moved cc-mode utilities from pel_keys.el to the new pel-cc.el file.
      • Updated: pel-cc-mode-info can now be used from any major mode where it will display info about non-loaded symbols and features. It also displays more information to increase awareness of the active setting:
        • the names of styles for current mode in c-default-style in order of presence in the list, the active CC mode style,
        • mode used by the return key.
      • New: command bound to the return key in c-mode, c++-mode and d-mode: pel-cc-newline. The behaviour of the return key controlled by this command can be selected by the PEL user options for each mode as well as commands that control the activation of the features dynamically in the current buffer. The features include:
      • Insertion of newline with or without indentation of the new inserted line, extension of the comment, with or without alignment of comments, assignments in the code block.
        • The selection of the underlying command used to control the line insertion defines its main behaviour: one of 3 different commands: c-context-line-break, newline or electric-indent-just-newline which identifies whether syntactic indentation, continuation of comment or plain newline insertion is done. The selection of the default behaviour is done by the PEL user options pel-c-newline-mode, pel-c++-newline-mode and pel-d-newline-mode for the respective major modes. The behaviour can also be dynamically changed in the current buffer by the new pel-cc-change-newline-mode* command (bound to <f12> M-RET).
        • pel-cc-newline command also aligns comments and assignments in the above code block is controlled by the variable pel-newline-does-align. That variable is turned on (set to t) for modes identified in the pel-modes-activating-align-on-return user option. It can also be modified dynamically by the command *pel-toggle-newline-indent-align which is bound to <f11> M-RET.
      • New: for C and C++ modes, the <f12> <f7> key sequence opens the list of C preprocessor Hydra keys that help navigate across C preprocessor directives, hide and how them, etc…
    • New: **Bison, Lex, YACC*:
      • New: PEL activates the bison-mode external package when the pel-use-bison-mode user-option is turned on (set to t) and associates the .y, .yacc fiels to bison-mode, the .l and .lex to flex-mode and the .jison files to jison-mode.
    • Update: C
      • New: PEL support for C is now activated with the pel-use-c user-option. This allows turning it off to reduce Emacs init time when you do not need to edit C files.
      • New: <f12> <f12> d insert a C pre-processor #define statement.
      • New: <f12> <f12> i insert a C pre-processor #include statement for library files.
      • New: <f12> <f12> I insert a C pre-processor #include statement for local files.
    • Update: C++
      • New: PEL support for C++ is now activated with the pel-use-c++ user-option. This allows turning it off to reduce Emacs init time when you do not need to edit C++ files.
    • Update: Lisp Languages Family:
      • Update: Modes for all Lisp Languages:
        • Update: Lispy mode:
          • The M-RET binding to lispy-meta-return is now controlled by the pel-enable-lispy-meta-return, which is off by default because it conflicts with PEL’s global binding for M-RET, useful in Lisp editing major modes.
      • Update: Common Lisp
        • New: Navigation keys:
          • <f12> <down> binding to pel-beginning-of-next-defun,
          • <f12> <M-down> binding to pel-elisp-beginning-of-next-defun,
          • <f12> f n binding to pel-elisp-beginning-of-next-defun,
          • <f12> <up> binding to beginning-of-defun
          • <f12> <M-up> binding to pel-elisp-beginning-of-previous-defun,
          • <f12> f p binding to pel-elisp-beginning-of-previous-defun,
          • <f12> <left> binding to pel-end-of-previous-defun
          • <f12> <right> binding to end-of-defun
        • New: pel-cl-add-symbol-to-imenu command, bound to M-g <f4> . in lisp-mode buffers. Use this command to add a form defining macro symbol to the imenu list of detected symbols.
        • New: user option pel-clisp-hyperspec-root to identify the location of the LispWorks Common Lisp HyperSpec HTML documentation.
        • New: The <f12> <f3> key sequence provides access to slime customization buffer.
        • New: Add the pel-clisp-define-forms user-option that allows you to identify Common Lisp definition form keywords to include in the imenu list.
        • Update: Add better control for selection of the Common Lisp/Emacs IDE selection: slime or SLY.
        • New: the pel-cl-repl opens a buffer with the Common Lisp REPL selected by the PEL user-options pel-use-sly, pel-use-slime and pel-clisp-ide. This is bound to the <f12> z key sequence.
        • New: Common Lisp code style customization group pel-clisp-code-style which holds the following user-options:
          • pel-clisp-fill-column which identifies the column beyond which automatic line-wrapping should occur in Common Lisp code. Defaults to 100. Can be changed to any integer or set to nil to use Emacs default.
      • Update: Emacs Lisp
        • New: Much more flexible navigation across definition forms. The main commands provide the ability to select, via customization user-option variable, the target: either any top-level form, a top-level defun, any defun, any defun, defmacro, defsubst, defaliast, defadvice form, or any of those with eieio class, method and generic definition forms, and with or without the variable definition forms. It is also possible to identify a set of forms by their name. All of these can take effect globally but can also be overridden on each buffer or globally. The local selection is done with a new command (pel-elisp-set-navigate-target-form bound to <f12> M-n while pel-toggle-paren-in-column-0-is-defun-start which selects how the standard Emacs form navigation commands operate, is bound to <f12> M-N).
          • New Navigation keys:
            • <f12> <down> binding to pel-elisp-beginning-of-next-form,
            • <f12> <C-down> binding to pel-elisp-to-name-of-next-form,
            • <f12> <M-down> binding to pel-elisp-beginning-of-next-defun,
            • <f12> <C-M-down> binding to pel-elisp-to-name-of-next-defun,
            • <f12> f n binding to pel-elisp-beginning-of-next-defun,
            • <f12> <up> binding to pel-elisp-beginning-of-previous-form,
            • <f12> <C-up> binding to pel-elisp-to-name-of-previous-form,
            • <f12> <M-up> binding to pel-elisp-beginning-of-previous-defun,
            • <f12> <C-M-up> binding to pel-elisp-to-name-of-previous-defun,
            • <f12> f p binding to pel-elisp-beginning-of-previous-defun,
            • <f12> <left> binding to pel-end-of-previous-defun,
            • <f12> <right> binding to end-of-defun
          • The <f12> <down and <f12> <up> keys sequences are bound to the most flexible commands: you can configure them to move to top-level form, or top-level defun, any defun, etc…
        • New: <f12> l v binding to pel-load-visited-file to load the file visited in current buffer either by source or its byte-compiled instance.
        • Modification: of the key binding of load-file: changed its key binding from <f12> e f to <f12> l f.`
        • New: <f12> D binding to new command pel-add-dir-to-loadpath which adds a directory to Emacs load-path.
        • New: key binding <f12> c a to disassemble. open-paren-in-column-0-is-defun-start. This controls the behaviour of beginning-of-defun and end-of-defun* functions: whether a paren in the first column is always interpreted as a start of defun, even inside strings.
          • **Use this first implementation with care**: it prevents checkdoc from completing its verification. I am currently trying to fix this.
        • New: added support for eros-mode from the eros external package which provides overlay display of the result of evaluations done by eval-last-sexp:
          • Set the pel-use-eros user-option to t to download and activate it.
          • From emacs-lisp-mode, the <f12> E key sequence is bound to the eros-mode command which toggles this mode.
          • From emacs-lisp-mode, the <f12> <f3> key sequence brings a menu from which you can select eros to bring the customization buffer to configure eros, even if eros is not currently loaded.
        • New: added support for suggest.el which provides Development by Example capabilities for Emacs Lisp!
          • Set the pel-use-suggest user-option to t to download and activate it.
          • Once activated, the <f12> S key sequence is bound to suggest in emacs-lisp-mode and opens a suggest buffer where you can enter input data, output data to query for functions that can provide this data transformation. The <f11> SPC l S keys sequence is also available globally.
          • Use <f12> <f3> from emacs-lisp-mode to open suggest customzation buffer and <f12> <f2> to open PEL emacs-lisp customization buffer where you can activate pel-use-suggest.
        • New: added support for relint: regular expression lint checker.
          • Set the pel-use-relint user-option to t to activate it.
          • The commands are available via the <f11> s x M-l search/regular expression prefix and from the Emacs-Lisp specific <f12> a l analyze prefix. Commands to lint the current buffer, file and directory tree are bound.
      • New: Clojure:
        • New: Add preliminary support for the Clojure programming language.
          • The user-option variable pel-use-clojure activates PEL support for Clojure with the clojure-mode package..
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f1> key opens the preliminary 𝕻𝔩 - Clojure PDF
              • It’s <f12> <f2> key opens PEL clojure customization buffer.
              • It’s <f12> <f3> key opens the clojure customization buffer.
          • The user-option variable pel-use-cider activates Cider.
          • The user-option variable pel-use-clj-refactor activates the clj-refactor package.
          • The user-option variable pel-use-clojure-snippets activates the Yasnippets for Clojure using the clojure-snippets package.
      • New: Racket:
        • New: Add preliminary support for the Racket programming language.
          • The user-option variable pel-use-racket activates it, using the racket-mode external package.
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f2> key opens PEL racket customization buffer.
              • It’s <f12> <f3> key opens the racket-mode customization buffer.
      • New: Scheme:
        • New: Add preliminary support for the Scheme programming language.
          • The user-option variable pel-use-scheme activates PEL extra support for Scheme.
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f1> key opens the preliminary 𝕻𝔩 - Scheme PDF
              • It’s <f12> <f2> key opens PEL scheme customization buffer.
              • It’s <f12> <f3> key opens the scheme customization buffer.
      • New: Gerbil Scheme:
        • New: Add preliminary support for the Gerbil Scheme programming language.
          • The user-option variable pel-use-gerbil activates PEL extra support for Gerbil.
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f1> key opens the preliminary 𝕻𝔩 - Scheme PDF. In the future it may have its own PDF since the language is quite interesting but since the Scheme PDF is currently in a very early stage it uses the same.
              • It’s <f12> <f2> key opens PEL scheme customization buffer.
              • It’s <f12> <f3> key opens the scheme customization buffer.
      • New: Arc:
        • New: Add preliminary support for the Arc programming language.
          • The user-option variable pel-use-arc activates it, using the arc.el and inferior-arc.el files from the GitHub arclanguage/anarki repository.
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f2> key opens PEL arc customization buffer.
              • It’s <f12> <f3> key opens the arc-mode customization buffer.
      • New: Hy:
        • New: Add preliminary support for the Hy programming language.
          • The user-option variable pel-use-hy activates it.
            • The PEL <f12> Lisp hot key is available in that mode, along with what is available to Emacs Lisp and Common Lisp, including lispy.
              • It’s <f12> <f1> key opens the preliminary 𝕻𝔩 - Hy PDF.
              • It’s <f12> <f2> key opens PEL hy customization buffer.
      • Update: LFE - Lisp Flavored Erlang:
        • New: Added PEL <f12> Lisp hot key with all Lisp-available features. what is available to Emacs Lisp and Common Lisp, including lispy.
          • It’s <f12> <f1> key opens PEL LFE documentation PDF (currently a very early version).
          • It’s <f12> <f2> key opens PEL arc customization buffer.
          • The M-[ key is unbound in terminal mode, as it prevent access to function keys above F4. The <f12> [ key binding is provided in terminal and graphics mode.
    • Update: Erlang:
      • New: Add Speedbar support for Erlang, showing the functions in the .erl, .hrl and .escript files.
      • Modified: logic to select the syntax checker. The new user option pel-use-erlang-syntax-checker replaces what was previously used: pel-use-erlang-flymake and pel-use-erlang-flycheck. These last two are no longer supported. The new user-option is used to select one of the 2 supported checkers.
      • The previously used <f12> F key sequence to toggle flymake is replaced by <f12> ! which is bound to pel-erlang-toggle-syntax-check.
    • New: Forth:
      • New: 𝕻𝔩 - Forth PDF that describes the commands available for the Forth programming language.
      • New: the <f11> x f key sequences opens a Forth interpreter window.
    • New: Go:
      • New: Added support for the Go programming language when the pel-use-go user option is set to t. It allows the following mode activation:
        • When the pel-use-go-mode user-option is set to t, editing a Go file activates the go-mode major mode.
          • The pel-use-goflymake user-option identifies whether flymake or flycheck is used with Go files. The <f12> ! key can be used to toggle the activated mode.
      • New: 𝕻𝔩 - Go PDF that describes the commands available for the Go programming language.
    • New: Gleam, an Erlang BEAM language
      • New: added support for the Gleam programming language, activated when the pel-use-gleam user-option is turned on (set to t). The support is very basic. It provides early gleam-mode package when the pel-use-gleam-mode user-option is turned on.
      • New: 𝕻𝔩 - Gleam PDF.
    • New: **Haskell**
      • New: add explicit support for Haskell via the pel-use-haskell user-option. Also provide the pel-haskell-activates-minor-modes user-option to automatically activate minor modes for Haskell major mode. The key prefix is <f11> SPC h which becomes <f12> in Haskell buffers.
    • New: **Nim**
      • New: add explicit support for Nim via the pel-use-nim user-option. Provides access to nim-mode when pel-use-nim-mode is turned on. Also provide the pel-nim-activates-minor-modes user-option to automatically activate minor modes for Nim major mode. The key prefix is <f11> SPC h which becomes <f12> in Nim buffers.
    • New: **OCaml**
      • New: add explicit support for OCaml via the pel-use-ocaml user-option. Supports installation of tuareg and merlin via the pel-use-tuareg and pel-use-merlin user-options. Also provide the pel-tuareg-activates-minor-modes user-option to automatically activate minor modes for OCaml major mode. The key prefix is <f11> SPC o which becomes <f12> in OCaml buffers.
    • Update: Python
      • Modified: binding to rainbow-delimiters-mode to <f12> M-r like it is for other programming languages.
    • New: REXX:
    • New: **Perl**
      • New: add explicit support for Perl via the pel-use-perl user-option. Also provide the pel-perl-activates-minor-modes user-option to automatically activate minor modes for Perl major mode. The key prefix is <f11> SPC P which becomes <f12> in Perl buffers.
    • New: **Ruby**
      • New: add explicit support for Ruby via the pel-use-ruby user-option. Also provide the pel-ruby-activates-minor-modes user-option to automatically activate minor modes for Ruby major mode. The key prefix is <f11> SPC U which becomes <f12> in Ruby buffers.
    • Update: Rust:
      • Modified: ⚠️ Customization affecting change: customization setting, pel-use-rust, no longer automatically activates cargo and racer for Emacs. These now have to be enabled by their own user-option variable. The user-option variables controlling Rust support are now the following:
        • pel-use-rust: must be turned on (set to t) to activate Rust support.
        • pel-use-rust-mode: activates the use of rust-mode.
        • pel-use-rustic: activates the use of rustic. Both rust-mode and rustic may be enabled if needed.
        • pel-use-flycheck-rust: activates flycheck for Rust code.
        • pel-use-emacs-racer: activates Emacs Racer for Rust.
        • pel-use-cargo: activates Emacs Cargo for Rust.
      • New: Added a Rust-specific key prefix (pel:for-rust) accessible globally via <f11> SPC r and inside a Rust mode via <f12>. This prefix key provides access to Rust specific commands, which include:
        • The <f12> <f1> key opens the preliminary 𝕻𝔩 - Rust PDF.
        • The <f12> <f2> key opens PEL Rust customization buffer.
        • The <f12> <f3> key opens the Rust customization buffer.
        • The <f12> c key builds the Rust file using rust-run.
        • The <f12> d key is bound to rust-dbg-wrap-or-unwrap.
        • The <f12> l key is bound to rust-run-clippy, Rust’s Lint checker.
  • Update: Process execution:
    • New: the list-processes command is now bound to <f11> z ? key sequence.
  • Update: Rectangles:
    • New: the iedit-rectangle-mode is accessible directly with the C-x r RET key binding. There is no need to use the iedit-mode first.
    • New: the ⅀ Rectangles PDFdescribes the iedit-rectangle-mode and available commands.
  • Update: Searching:
    • New: support for combined expression search with the cexp external package:
      • PEL downloads and activates the cexp package when the pel-use-cexp user-option is set to t.
      • PEL binds <f11> s c to cexp-search-forward command used to perform a combined expression search. Quite useful to search strings inside a balanced/matching pair of parentheses for example.
    • New: command pel-show-search-status bound to <f11> s ? that displays all search settings in the echo area. Use any prefix argument to display extra information after the first time it is used.
    • Improved: pel-search-word-from-top :
      • New: mapped pel-search-word-from-top to <f11> s . key sequence and to the .; key chord.
      • New: pel-search-word-from-top can now search for the title format of a user-option when searching into a buffer in Custom-mode. Use the numeric prefix in the range 30 to 38 for that. For example if you issue the command when point is over pel-use-ido, the command searches for the title “Pel Use Ido: “.
      • New: the pel-search-from-top-in-other user option controls how pel-search-word-from-top operates when there is only 2 non-dedicated windows.
        • if set to t the function the search in the other window without specifying any numeric argument when there is only 2 non-dedicated windows. To search in the current window when there is only 2 non-dedicated windows use the numeric prefix 3 or 5 (or either close all other windows or create another window before the search making the number of windows 3 and preventing the search in other window unless the numeric argument is 0).
        • if the user option is set to nil, then the function always operate the same way, regardless of the number of windows: it searches in the current buffer unless a numeric argument identifies another window.
      • New: it search for text from marked area; this enables searching for anything, not just words. It is useful in modes where super-word mode is not honoured.
      • New: it toggle text mode and search in window selected by a numbered prefix in the following ranges:
        • a numbered prefix in the range [10..18] grab the word with subword mode temporarily activated and then select the window as if the numbered prefix was 0 to 8.
        • a numbered prefix in the range [20..28] grab the word with super-word mode temporarily activated and then select the window as if the numbered prefix was 0 to 8.
      • New: on search failure it no longer moves point, not even to the different window that may be identified. It issues an error (beep/flash/message depending on the settings) which allows using the command inside a keyboard macro. A keyboard macro will stop on the search failure.
    • Improved iedit-mode support:
      • New: added key bindings for the iedit-mode commands that are not accessible in terminal mode:
        • <f1> <f1> is bound to iedit-help-for-help.
        • <f1> <f2> is bound to iedit-help-for-occurrences.
        • <f1> C-o is bound to iedit-show/hide-occurrence-lines.
        • <f1> C-a is bound to iedit-show/hide-context-lines.
      • New: modified some iedit-mode command bindings for commands that clashed with major command PEL bindings:
        • M-C is bound to iedit-upcase-occurences instead of M-U which remains bound to pel-redo.
        • <f1> M-c is bound to iedit-toggle-case-sensitive instead of M-C.
        • Use M-c to change occurrence to lower case and M-C to change occurrences to upper case. Similar to what is available under PEL.
  • Update: Sessions:
    • New: added a desktop restoration handler for edts-mode: it protects desktop restoration against failures in edts-mode and reports them by messages. It also deactivate edts-mode when the mode activation failed. This is done to prevent a failed edts-mode from showing it is activated when it is not.
  • Update: Shells:
    • Change: the key prefix changed from <f11> x to <f11> z. The letter z is normally used in Emacs for commands related to shells.
  • Update: Skeletons:
    • Modified: Improved the handling of C-like modes for file header blocks:
      • prevent insertions of empty lines when a file header is inserted in non-empty file,
      • terminate C-style comments with 1-star continuation properly.
  • Update: Speedbar:
    • New: Better handling of target selection of the SR-Speedbar controlled by:
      • A new pel-sr-speedbar-toggle-select-behaviour user-option selects the behaviour of the SR-Speedbar selection action from the following 2:
        • Move point into the window of the selected target (PEL’s default),
        • Keep point inside SR-Speedbar window after opening the selected target into a (possibly new) window. sr-speedbar only offers this behaviour.
      • The new pel-sr-speedbar-toggle-select-behaviour command, mapped to <f11> M-s M-b key sequence, allowing you to choose the SR-Speedbar selection behaviour that suits you best and change it dynamically when the need occurs.
    • Update: Changed key bindings for easier typing: All pel:speedbar keys use the Meta key.
    • New: the pel-speedbar-focus-current-file command updates the SR-Speedbar to show the list of items for the current file at the top of the speedbar.
    • New: Added support for projectile-speedbar activated by the pel-use-projectile-speedbar user-option.. Once projectile is activated and a speedbar is opened, set the speedbar to encompass all current project directories and files with it. The key binding is <f8> M-s.
  • New: Text Display Control:
    • New: add support for the easy-escape external package to simplify the display of regular expression strings:
      • Activated by pel-use-easy-escape user-option.
      • The pel-modes-activating-easy-escape user-option identifies the major modes where the easy-escape minor mode is automatically activated.
      • The new <f11> " key binding to easy-escape-minor-mode allows quick toggle of the easy-escape minor mode.
      • The command is described in the ⅀ Search/Replace PDF.
  • Update: Text Insertion:
    • New: Add ability to insert Greek letters:
      • If the pel-activate-f9-for-greek user-option is turned on (set to t), then typing <f9> followed by a letter inserts the corresponding Greek letter.
      • The same is always available with the <f6> g key prefix.
      • To see the latin to greek equivalent type the key prefix and wait for which-key to show the available bindings, or type the key prefix followed by C-h.
    • New: add more PEL insertion commands under the <f6> key prefix for convenience.
    • New: Add support for smartparens external package when the pel-use-smartparens user-option is turned on (set to t).
    • Modified: key binding to pel-toggle-update-copyright-on-save from <f11> M-C to <f11> M-@.
    • Modified: key bindings, using more lower case letters:
      • <f6> f and f11> i f are now used instead of <f6> F and <f11>> i F for **pel-insert-filename*,
      • <f11> i c is used instead of <f11> i C for copyright.
    • New: key bindings:
      • <f11> i M-t bound to time-stamp-toggle-active,
      • <f11> i M-c bound to copyright-update.
    • Improved: generic file mode/header template insertion (<f6> h) and separator line insertion (<f6> l) now get comment style from user if they are not already defined.
  • Update: Text Modes:
    • New: glasses-mode is now bound to <f11> t m g key sequence. The pel-show-text-modes command (bound to <f11 t m ?) now also display the state of glasses-mode.
    • New: overwrite-mode is also bound to the <Esc><kp-0> key sequence. This makes it very similar to the default <insert> key which is not available in macOS keyboards.
  • Update: VCS:
    • New: The pel-use-gitignore-mode user-option activates support for the gitignore-mode, gitattributes-mode and the gitconfig-mode.
    • New: The pel-use-hgignore-mode user-option activates support for hgignore-mode when turned on (set to t). This provides font locking for the Mercurial .hgignore files.
  • Update: Windows Management:
    • The Windows Hydra now provides quick access to the pel-toggle-window-dedicated command which toggles the dedicated state of a window.
    • Add support for the windresize external package:
      • Activate it by setting pel-use-windresize to t.
      • The windresize command is bound to the <f11> w r key sequence.

Other Modifications:

  • The customization group pel-pkg-for-xref is now a child of pel-pkg-for-navigation and holds tags based cross-reference build control as well as non-tags based such as dump-jump.
  • Code change: renamed pel-tags.el to pel-xref.el to better reflect its nature.
  • New: “make it“ command used for development: compiles all Emacs Lisp files, runs the tests but does not build the package.

Reference PDF updates:

  • Update: More consistency in the key binding cell background colors.
  • New: Some of the header cells are coloured to help quickly identify the nature of a group of commands inside a long table. This is mainly used in reference tables describing programming language support.
  • New: added background colours to key sequence cells to highlight the fact that some key sequences are only available for specific major or minor modes or when point is over text that has been turned into a button.
  • Update: ⅀ Align better describes handling of indentation on M-RET.
  • New: ➢Index PDF which holds links to all other PDF tables.
  • Update: ⅀ Grep PDF describes ag and ripgrep menu. Also references projectile-based search commands.
  • Update: ⅀ Help PDF better introduces reader to getting help from Emacs and PEL.
  • Update: ⅀ Input Method also includes information about encoding. The <f11> ? p key binding completion allows “encoding” to open that PDF.
  • Update: ⅀ Input Completion PDF table better describes Ido, Ivy and Helm and the commands that PEL supports to change mode dynamically.
  • New: 🚦Input Completion Availability PDF table describes the feature availability of the various input-completion methods supported by PEL.
  • New: ⅀𝔛 Treemacs PDF
  • Update: ⅀ Indentation better describes handling of indentation on M-RET.
  • Update: C, C++ and D programming language support tables.
  • Update: 𝕻𝔩 - Python programming language : listed more commands.
  • Update: ⅀ Rectangles PDF better describes how to mark rectangle areas.
  • Update: ⅀ Search/Replace PDF describes the superword-mode, subword-mode better, and includes description of the projectile commands. It also describes all iedit-mode commands.
  • Update: ⅀ Text Modes PDF describes the superword-mode, subword-mode better, and new key binding to overwrite-mode (<Esc><kp-0>).
  • Renamed ⅀ Tags to ⅀ Xref; the PDF will describe several cross-referencing mechanisms, not just the tags-based mechanisms.
  • Update: ⅀ Undo/Redo/Repeat/Arg better describes how to repeat commands.
  • Update: ⅀ Windows PDF now describes the new Esc and <f1> cursor keys to manage and navigate across windows.
  • Updates to the Buffer, CUA, Cut & Paste, Marking, Undo PDF reference tables.
  • New: 𝕻𝔩 - Make PDF that describes make file editing support.
  • New: 𝕻𝔩 - Forth PDF describing support for the Forth programming language.
  • New: 𝕻𝔩 - Netrexx PDF describing support for the NetRexx programming language.
  • New: 𝕻𝔩 - REXX PDF describing support for the REXX programming language.
  • New: Ɱ Markdown PDF, describing markdown support.
  • New:  macOS Keys PDF that lists and describes the macOS specific keys.
  • New: [[https://raw.githubusercontent.com/pierre-rouleau/pel/master/doc/pdf/-CRiSP-Emacs.pdf][➢CRiSP ➫ Emacs] PDF for Brief and CRiSP users. It lists the correspondences between Brief/CRiSP with CRiSPer and Emacs with PEL.

Use Manual Additions and Improvements:

Bug Fixes:

  • Fix: Inside Common Lisp buffers, PEL’s mechanism to access help and customization through the <f12> <f1>, <f12> <f2> and <f12> <f3> failed to open the file or buffer.
    • Root cause: a missing format specifier prevented the error detection mechanism to detect a missing entry in the look up table: support for lisp-mode was missing, just its alias, common-lisp-mode was present.
      • Lesson Learned: Emacs 26.3 and 27.1 byte compiler as well as elint do not detect this type of error, at least inside a “user-error“ form! Might need to investigate this, either contribute a fix or find a way to detect this kind of coding errors.
        • Probably a good time to schedule a try the Elsa static analyzer for Emacs Lisp and all that needs to be done to use it (you need Cask to use it).
  • Fix: The history prompt was previously failing for “pel-help-pdf-select“ and “pel-open-emacs-refcard“ (which was added after PEL 0.3.1) when input completion was set to Helm or Ido/Helm but not for the other input completions. This was fixed.
    • Root cause: the completing-read functions were given a symbol for the history and relied on the completion-read to create the variable. That failed in helm. The fix is to explicitly create list variables and used them. The docstring of completing-read does not explicitly state that the specified symbol must refer to an already existing variable and the code worked fine with Emacs default completion, ido and ivy. So I’m unsure as to whether there should be a variable or whether there’s a bug in Helm. Any, explicitly creating the variable is protecting against any issue.
      • Lessons learned:
        • This is an example of the “never ass-u-me” rule where even reading the docstring and testing with the existing completion engines but not all of them right from the a fresh Emacs session did not dissipate uncertainty and left the bug dormant.
        • I will probably need a complete testing system that tries every combination of features. At this point I’m not sure how to build it, since PEL is integrating so many Emacs libraries and packages. Perhaps I will need a system that would be able to drive the test right from Emacs user interface. But one thing for sure I need to be able to execute the various tests in a fresh Emacs session to catch these types of bugs.
  • Fix: The key binding for the centi-assign command identified by pel-centi-assign-key user option takes effect when pel-init executes as opposed to when the centimacro feature is loaded as before, allowing it to load the centimacro feature.
  • Fix: definitions of PEL key-chord or key-seq properly support the identification of a command by its name.
  • Fix: Replaced “pel-insert-c-indent“ by “pel-indent-lines“ and “pel-unindent“ by “pel-unindent-lines“. The new functions handle all file types as opposed to only the files with a major mode derived from CC mode. They also allow any type of marking which they convert into a line-type region mark to allow consecutive execution of the line indent and line un-indenting commands. The region is kept and no longer grows or shrink in some scenarios as before.
  • Fix: typos in names of goto-address-mode and goto-address-prog-mode that prevented their <f11> f key bindings from working.

Work-Around for Emacs Bugs:

  • Emacs 26.3 and 27.1 suffer from bug 44494 where etags.el xref-location-marker does not handle TAGS references to .el.gz compressed files. This prevents the xref-etags-mode to properly handle those references. I proposed a solution to this problem but until this, or another solution is implemented to solve the problem, I implemented my own solution, stored it inside the pel-etags.el file to replace the etags.el code that fails. The Makefile does not byte compile that file; it is just loaded when the xref-etags-mode starts via a hook. This file is not stand-alone, that’s why I don’t byte compile it via make. It can be byte compiled when PEL is running if you want but its not necessary. I will remove this file and the hook once the Emacs bug is fixed.

Version 0.3.1

Fixes:

  • Spell check control user options and handling now simpler and don’t have type mismatch that prevent customization buffer to edit the values.

New Features and improvements:

  • New: In Emacs Lisp mode: new key binding for eldoc-mode: <f12> e
  • New: eldoc-box now available in graphics mode when pel-use-eldoc-box is set to t. Two new keys in the <f12> for Emacs Lisp mode:
    • <f12> b : eldoc-box-hover-at-point
    • <f12> B : eldoc-box-hover-mode
  • New: user option pel-windmove-on-esc-cursor controls whether PEL binds the Esc-cursor keys to windmove commands. It is on by default. Users of Org-mode will probably want to turn it off.

Modifications:

  • Change: vlang-mode.el repo was renamed to vlang-mode. Updated download control code accordingly.

Version 0.3.0

  • This includes slots of cleanups, several new modes, new key bindings, better installation procedure, several bug fixes. I continue to consider it a project in early development but only because it’s lacking a lot of features I’d like to integrate for software development in several programming languages. I am using it continuously though on Emacs 26.3 on macOS Mojave and tested on some other platforms:
    • Linux Fedora 32 with Emacs 27.1
    • Linux Mint 20 with Emacs 26.3
    • Linux Ubuntu 20.04 with Emacs 26.3

Fixes:

  • Fixed distributed custom skeleton code for C. Updated the example description.
  • Window flipping commands: The keys to flip windows horizontally (<f11> w h) and vertically (<f11> w v) are now safer. They now take into account the minibuffer and dedicated windows and only operate on the current frame.
  • pel-find-file-at-point properly handle relative file names.
  • popup-kill-ring binding is now <f11> M-y to prevent a clash with PEL’s yasnippet key prefix (<f11> y).
  • Added missing key-seq loading.
  • Added missing key-chord installation.
  • pel-initial-completion-mode can now be edited properly. The default value is now valid.
  • User Manual fixes:
    • User manual installation now properly references the ”.emacs.d” directory. and no longer references the ”.emacs.p” directory.

New Features and improvements:

  • New/modified global keys (and commands):
    • New: the M-D key binding kill next word(s) and delete white-space after the last word killed, bringing the next word just at point.
    • New navigation key sequences: navigation across windows:
      • The <Esc> key followed by the cursor pointing in the direction of the window are now bound to the corresponding wind move command. In graphics mode, the <Esc> key followed by a Shift cursor key pointing in the direction of the other frame move point to that frame using the corresponding fm command. This works everywhere except in Org-Mode where the <f11> based key sequences can be used instead. The Esc based movements are useful in the active vterm window.
    • New: the M-RET key can be used to align text vertically in some modes.
    • New: the prefix set member key to quickly access customization buffer groups is now <f2> instead of <f1>. The prefix set member key <f1> is now used to open the local copy of the PDF that describes the topic(s) that manipulate the commands executed by the keys under the same key prefix. This feature, along with all hyperlinks allow a user to quickly navigate through the PEL documentation inside the PEL manual hosted on Github, the local PDF files and the PDF files hosted on Github.
    • New key binding to the customize browsers which allow you to navigate the customize data tree:
      • <f11> <f2> B browse the customize tree from the top.
      • <f11> <f2> P B browse the customize tree from the top of the PEL customize tree.
    • New: Added a new PEL key map tree for browsing
      • <f11> B N : for NeoTree. Removed the previous <f11> N key sequence.
      • <f11> B Z : for ZTree. Removed the previous <f11> Z key sequence.
      • <f11> B T: for early support of treemacs. Its support is not complete yet.
    • Modified: the new binding to bm-toggle (<f1> ‘ ‘) is easier to type than the old one (<f11> ‘ t)
    • Modified: re-organized the key sequences to provide access to the reference PDF, the PEL customization and the Emacs customization buffer for topics accessible via a key sequence inside a PEL key-map:
      • The key sequences start with the prefix for the PEL key map and end with <f1> for help, <f2> for PEL customization buffer, <f3> for Emacs customization buffer.
      • The <f11> <f2> provides access to the commands to access customization search: (c), to the customization buffer option (o) and to a customization group (g).
      • The <f11> <f2> E provides access to some Emacs customization groups.
      • The <f11> <f2> P provides access to some of the PEL customization groups that are not accessible from a specific PEL key map.
      • The <f11> <f2> SPACE provide access to the programming specific groups that do not have a specific key map: this includes lisp for the moment.
      • The <f11> ? p key sequence provide access to all reference PDF files (either the local copy or the GitHub-hosted web page) and support tab completion.
    • Modified: more consistent key binding for the PEL customization of key-chords: now use: <f11> <f2> P M-K
    • Modified: PEL Hydras are no longer terminated by typing ‘q’, they are terminated by typing <f7>, the same key tart starts it. The ‘q’ key is used to execute the quit-window command. Use it to change the buffer seen in the current window. The loading of PEL Hydras is no longer time delayed: it’s loaded on demand.
    • Modified: more keys in the window Hydra, pel-∑wnd: q to quit window, b and B to change buffer in current window. Also changed the key to kill current buffer: it’s k instead of K.
    • Modified: Replaced the “fg” key-chord with a “gf” key-seq. This is much less likely to cause unwanted and surprising point movements to the window at left.

New supported Modes:

  • Support for lispy, a modal editing mode for Lisp-like programming languages.
  • Support for lpy, a lispy mode for Python.
  • Support for AsciiDoc via the adoc-mode.
  • Support for external packages that extend Emacs keyboard macro support: centimacro, elmacro and emacros. Both centimacro and emacros libraries supported by PEL are forked of the original libraries with bug fixes and improvements.
  • Added support for all-the-icons.
    • In text mode it provides arrows for the NeoTree window.
    • In Graphics mode, provides icons for NeoTree, dired, ibuffer and ivy when their respective pel-use- user options are activated.
  • Experimental support for vlang-mode: support for the emerging V programming language.
  • Experimental support for js2-mode: support for Javascript.

Improved behaviour:

  • pel-kbmacro-prompts user option is now off by default to mimic Emacs.
  • Visible bookmarks no longer deferred loaded: loaded on demand: first time a bound-key is typed.
  • In graphic mode, the extra keys for windmove are loaded after 1 second instead of 5.

Improved commands:

  • The keys to flip windows horizontally (<f11> w h) and vertically (<f11> w v) are now safer. They now take into account the minibuffer and dedicated windows and only operate on the current frame.
  • The commands that provide access to the local copy of the reference PDF files can also open the Github-hosted PDF file in the system browser.
  • Temporarily set max-specpdl-size to 2000 while running benchmark-init commands to handle large set of packages.

Improved customization:

  • Regrouped the PEL customization groups.
  • Cleanup PEL customization group hierarchy. Modified key bindings to access customization groups to make it easier to remember.
  • New PEL user option for spell checker control: pel-spell-check-tool. This replaces the old one that was used to define the spell checker program for several OS. The new one is simpler to use.
  • It is now possible to identify the major modes that will automatically activate the superword-mode and subword-mode: the user options pel-modes-activating-superword-mode and pel-modes-activating-subword-mode identify the respective modes.

User Manual changes and additions:

  • Fixed typos in the manual installation instructions: “./emacs.d” is now “/.emacs.d”
  • Re-organized the installation sections trying to highlight the commands to execute.
  • Added a fast-track section to the installation section, easier to follow than the complete sections with all the descriptions.
  • Added copies of several versions of init.el. They correspond to what is needed by the installation steps and are also used in the new fast track installation instructions. The files are stored the new example/init section of the repository.
  • The installation instructions for new users now recommends the use of pel-browse-pel to open the customize tree browser buffer to customize PEL the first time it is used.
  • A new section describes the Emacs user options that new users may want to set.
  • The repository now provides example of Bash alias commands to use a quick keys to launch emacs (see the “example/bin” directory).

Reference PDF updates:

  • Added hyperlinks in all PDF files. The See also and title icons are now all links.
  • The help and customize PDFs have a lot of links to the of them PDF pages.
  • Reduced the empty white space in several tables.
  • Added the ➢PEL page that lists all PEL key maps.
  • Added a 𝕻𝔩Ɱ- Lispy PDF with links to lispy quick sheet sections.
  • Added Ɱ AsciiDoc page.
  • The ⅀ Align page describe how to use M-RET to align text vertically
  • Updated the ⅀Customize PDF and ⅀Help PDF wit hall changes in customization and access to the reference PDF files.
  • Improved the ⅀Windows PDF with several new links and complete description of ace-window.
  • Completed the ⅀Projectile PDF.
  • Updated ⅀Input-Completion PDF
  • Identified Esc C- and C-[ C- key sequence alternatives for the for C-M- bindings in several locations in the PDFs (but not all yet).
  • Fixed errors and cleaned up several PDFs
  • Code Changes:
    • pel-autoload.el now uses a pel-autoload macro to provide a more regular, cleaner syntax code easier to maintain and possibly for future automatic code generation.

Version 0.2.0

  • Lots of updates since version 0.1.0, too many to describe here. PEL is still in what I consider an early development phase. Although most base features are stable, there’s still several rough edges, lots of packages and programming languages I want to support are not properly supported.
    • I changed the instructions for installations on a new computer.
    • Added lots of cross-reference links between the PDF sheets.
    • Implemented a tempo skeleton generic file header block generation, and specialized ones for C, Erlang and reStructuredText files.
    • Support for Erlang and C is mostly complete, but there are several packages not supported yet.
    • Added support for sessions, projectile, hiding comments, hiding docstrings.
    • Added ability to automatically download and install packages from some non-Elpa compliant web sites (but path of Github) like EmacsAttic and EmacsMirror.
    • Support for generation of images using PlantUML and Graphviz Dot directly from within Emacs.
    • Support for several ways to deals with keys: Hydras, key-chord and key-seq, avy and ace-link.
    • Support for voice dictation under macOS and AppleScript.
    • Support for auto-completion using either auto-complete or company.
    • Support for input completion with Help, Ivy, Ivy/Counsel as well as Ido.
    • Support for bookmark management with bm.
    • Support for virtual-regexp
    • Key bindings to quickly access the customization buffer of several customization groups.
    • and more…

Version: 0.1.1

new features:

  • rst support: added commands for text emphasis (bold, italic, literal, interpreted).
  • modified keymap: draw is now <f11> D.
  • added support and documentation for diff/ediff (with keymaps <f11> d and <f11> e.
  • Added support for Magit and Monky and <f11> v keymap for (D)VCS.
  • Added pel-end-of-line which helps move before trailing spaces.
  • Documentation: documented autoave & backup
  • Documentation: described limitations in the dual-stage autoloading.

fixes:

  • navigation: fixed autoloading

First Version: 0.1.0

  • This is the very first version of PEL, the Pragmatic Environment Library.
    • As described in PEL manual overview PEL is a hybrid package. It is:
      • a collection of PDF files that document Emacs key bindings that covers standard Emacs key-bindings but also the key bindings provided by PEL and the external packages PEL uses.
      • an Emacs key binding documentation project (see Key Bindings Documentation),
      • a collection of PEL convenience features which:
        • are implemented in several mostly independent files,
        • have key bindings mostly using the function keys to provide key map trees that do not interfere with standard Emacs key bindings,
        • provide access to several other external Emacs packages (see Credits) but via PEL Customization to selectively configure, enable and activate these features.
          • This conforms to the Emacs easy customization system and reduces your need to write custom Emacs Lisp configuration code.
    • PEL is distributed via the PEL Github repository and provides a Makefile to automate the compilation and a large part of the installation of PEL and its dependencies.
    • PEL is not yet distributed via sites like MELPA but PEL’s installation instructions should alleviate this problem.