* pass `QEmacsState` to key grab functions * clear `grab_key_opaque` when freeing windows, buffers, mode_data * add checks on window and buffer pointers in key grab functions * this should fix a crash bug when deleting unsynched buffers from bufed * fix `reload_buffer` to update buffer `file_size` and `mtime` fields * check buffer file before invoking commands that modify the buffer * check buffer file after command that changes the current window or the current window's buffer
43 KiB
QEmacs TODO list
This is the TODO list for qemacs
- Author: Charlie Gordon
- Updated: 2026-06-05
Priority Tasks
Crash bugs
- fix warning:
int (*eb_printf_fun)(EditBuffer *b, const char *fmt, ...) = (void*)eb_printf; - fix crash bug on
C-X C-B C-X C-F xxx RET - fix cursor positioning beyond end of screen
Core - Buffers - Files
Architecture
- add custom memory handling functions.
qe_realloc: typed and clear reallocated area- use failsafe memory allocator and
longjmprecover. - try and recover from invalid memory access
- add method pointers in windows initialized from fallback chain
- allow recursive main loop, and remove input callbacks
- should
markbe a window variable instead of a buffer variable? - should
tab-widthbe a window variable instead of or in addition to a buffer variable? - in command specs, distinguish between interactive commands and non interactive functions
- use tabulation context for
text_screen_width - remove redundant bindings along fallback chains
- disable messages from commands if non-interactive (eg:
set-variable) - bfs: builtin file system for embedded extensions and files Jasspa bfs is way too complicated, make simpler system
- rename symbols: not sure this is useful?
QEmacsState->QEState,DisplayState->QEDisplay,DisplayTypeEditState->QEWindow,TextFragmentEditBuffer->QEBuffer,Page->QEPageEditBufferCallbackList->QEBufferCallbackListEditBufferDataType->QEBufferDataTypeLogBuffer->QELogBuffer,LogOperation->QELogOpModeDef->QEModeDef,ModeProbeData,QEModeProbeDataKeyDef->QEKeyDef,InputMethod->QEInputMethodCmdFunc,CmdSig,CmdArg,CmdDefArray...HistoryEntry,VarDef,EquivalentISearchState->QESearchStateCompletionDef->QECompletionDef,CompleteState->QECompleteStateUNIT_SIZE->QE_WINDOW_VIRTUAL_SIZE
Buffers
- add buffer commands and point update commands, ie: functions that take an
EditBufferinstead of anEditStateand return an offset instead of updating point in the window. - [BUG] share mmapped pages correctly
- splitting pages should fall on 32-bit boundaries (difficult)
- handle broken charset sequences across page boundaries
- optional 64-bit offsets on 64-bit systems, use typedef for buffer offsets
- synced virtual buffers with restricted range
- unsynced virtual buffers with restricted range and specific mode/charset
- add
active_markandactive_regionflags in window/buffer states - implement
narrow_start̀andnarrow_end save-some-bufferscommand onC-x s: save modified file-visiting buffers, asks user about each one.rename-bufferonC-x x rrevert-buffer: replace current buffer text with the text of the visited file on disk.
Files
- show popup window with explanation and diff in
qe_check_buffer_file() - fix corner cases in
qe_check_buffer_file() - minimize edit list in
qe_check_buffer_file()when new version is loaded - remanent annotations on files and buffers
- add hook on file change
- handle files starting with re: (???)
- check file permissions.
- fix
s->offsetreset to 0 uponC-x C-f newfile ENT C-x 2 C-x b ENT insert-file: load via separate buffer with charset conversionqe_load_fileshould split screen evenly forLF_SPLIT_SCREENflag.- [Idea] save file to non existent path -> create path.
- [Idea] find-file: gist:snippet
- Missing commands:
revert-fileonC-x C-rreload-fileonC-x C-rfind-file-existingfind-other-frameonC-x 5 f,C-x 5 C-ffind-other-windowonC-x 4 f,C-x 4 C-ffind-other-read-onlyonC-x C-rfind-file-read-only-other-frameonC-x 5 rfind-file-read-only-other-windowonC-x 4 rsave-modified-buffersonC-x sfind-file: should support scp syntax for remote loading
- avoid error in new file
- actually load file in
find-file-noselect - should update symbolic links times when saving files
- improve speed:
C-x C-f ~/x2m RET A-r 20140101 RET 20140101 RET-> 96s - improve speed:
C-x C-f ~/x2m RET C-u 1000 C-n-> 4s - use a prefix to explore file in a popup window
Miscellaneous
- notes
- use Cursors cursors in command dispatchers:
an EditState would have an embedded QECursor that contains the buffer and offset an EditBuffer could also have an embedded QECursor with no EditStatestruct QECursor { QEmacsState *qs; EditState *s; /* points to the parent window */ EditBuffer *b; int offset; // optional navigation data to accelerate buffer access: // getc(), peekc(), prevc()... etc. }; - use hash tables for command and variable names
- sort key binding tables?
- add registrable escape sequences and key names (eg:
S-f5 = ^[[15;2~) - add registrable key translations for NON ASCII input (eg:
C-x 8 3 / 4 ¾)
Frames - Windows - Rendering - Displays
Frames
- Add frames on text displays
- Add frames on x11 displays
Windows
- add configuration or other user method to control whether commands that load new contents use the current window, another window, split the current window or even use a popup to display the new buffer.
- fix stacked popup windows
- keep a list of windows in
EditBuffer - keep the last active window when detaching a buffer, just make it invisible.
- easy if deleting the last window that shows the buffer
- if changing the buffer for a window, if the new buffer has a pending window, use that
- otherwise, create a new
EditWindowwith the same screen position for the new buffer. - alternative: keep previous window if changing the buffer so swapping back restores the position and mode
- add a previous window for
predict_switch_to_buffer
- always save window buffer properties to buffer upon detaching
- add global system to select default values for some window states
- fix current position when changing buffer attached to window
- fix default wrap setting mess
- minibuffer and popup windows should be in a separate lists
toggle-full-screenshould not put modeline on popuptoggle-full-screenshould work on popupstoggle-full-screen-> unsupported ifscreen->dpy_full_screenisNULLkill-buffershould delete popup and popleft window- layout: change coordinate system to 1000 based with optional sidebars
- improve layout scheme for better scalability.
- lingering windows
- clean window deletion mess:
- avoid problems with popups (
kill_buffer,delete_window) - detach window from tree and keep attached to buffer if last
- detach window from tree and put in delayed free tree otherwise
edit_close(s) do_delete_window(s) bufed_select(s) if vertical split dired_select(s) if vertical split do_popup_exit(s) do_delete_other_windows(s) deletes other windows (!) do_minibuffer_exit(s) also deletes completion_popup insert_window_left() deletes some left-most windows do_list_buffers() do_dired() - avoid problems with popups (
Modeline - Window frames
- basic:
frame-title-formatandmode-line-format - modes:
header-lineformat - modes:
mode-lineformat - display filename relative to current directory instead of buffer name on
mode-line - vertical scroll bar
- menu / context-menu / toolbars / dialogs / menubar
- emulation mode to use line-drawing characters for window borders
- column number in status bar should account for TABs
Colors and Styles
- only use styles in
get_colorized_line(), not combined colors, to improve block navigation and indentation - handle
MODEF_NO_TRAILING_BLANKSmore generically - add line style in
QEColorizeContextand combine inflush_line() - colorize git conflict markers: make this generic using line styles or colored regions <<<<<<< HEAD } defaultCase = c;
======= } else
a450183c (Analyser: fix scope stack and init_checkers' array) if (!is_last) {
- add cat mode where colorizer is chosen based on extension of filename between ==> xxx <==
- add command line options for color support
- add script variable for color support
- from emacs:
set-background-colorSet the background color of the selected frame to COLOR-NAME.set-border-colorSet the color of the border of the selected frame to COLOR-NAME.set-cursor-colorSet the text cursor color of the selected frame to COLOR-NAME.set-foreground-colorSet the foreground color of the selected frame to COLOR-NAME. These commands provide a multi-column completion window
- evaluate colors in expressions:
rgb(r,g,b),hsl(h,s,l),hsv(h,s,v) -color_codecommand line option to display available colors on terminal- different range display styles
- pass
indenttoColorizeFunc. - [BUG] preserve static styles in
do_convert_buffer_file_coding_system() - optimize style transfer in
eb_insert_buffer_convert() - add color themes
- fix colors, default schemes...
- add style recent changes (
highlight-recent-changes) - make styles and log buffers read-only and display as binary
- make
style-buffer-modeandlog-buffer-mode
Rendering: producing window contents
set-display-sizeunit issue: use extra argument or different function for pixels and characters- display: add screen dump command and format
- display
^Las horizontal line and consider as linebreak character - colorize extra
^Mand^Zas preproc at end of line prior to calling the syntax highlighter (same as BOM) - colorizer bug on /comp/projects/fractal/fractint/ORGFORM/NOEL-2.FRM (triple
^M) - display bug on ~/comp/projects/fractal/fractint/ORGFORM/BAILOUT.FRM (double
^M) - default
display-widthof 0 is automatic, other values are shared between binary and hex modes - display: API: use style cache in
DisplayState - display: API: remove screen argument in
release_font,glyph_width - display: API: add
create-style(name, properties) - display: use true colors on capable terminals
- basic:
transient-mark-modeto highlight the current region - cursor not found bug on doc/256colors.raw if
truncate-lines=1 - tab cursor displayed size
- improve speed of text renderer / improve truncate mode
- merge some good parts with CSS renderer ?.
- Suppress CRC hack (not reliable).
- fix crash bug on fragments longer than
MAX_SCREEN_WIDTH. - wrap long lines past line numbers column
- fix column computation based on display properties: (variable pitch, tabs, ^x and \uxxxx stuff -- emacs behaviour) ?
- tag left-view with electric navigation
- expand / collapse region
- outline view: show/hide regions based on syntax
- auto pretty view: insert indentation and line breaks based on syntax
Charsets - Unicode - Bidir
UTF-8 - Unicode
- add default charset for new buffer creation, set that to utf8
- better display of invalid UTF-8 encodings
- update cp directory from more recent unicode tables
- UTF-8 variants: CESU-8, Modified UTF-8, UTF-16
- UTF-1 obsolete standard encoding for Unicode
- limit number of combining marks to 20
- use
unichar,runeand/oru8types (usingchar32_tat the moment) - detect bad encoding and use
errnoto tell caller
East-asian
- handle chinese encodings
- handle euc-kr
- add JIS missing encoding functions
- add JIS charset probing functions
- autodetect sjis, euc-jp...
- fix kana input method
Bidir
- test Hebrew keymap support.
- rewrite bidirectional algorithm and support
Other
- change character detection API to handle cross page spanning
- fix
eb_prev_charto handle non self-synchronizing charsets - auto/mixed eol mode
set-eol-typeshould take a string: auto/binary/dos/unix/mac/0/1/2...- handle zero width codepoints: cp="200B" na="ZERO WIDTH SPACE" alias="ZWSP" cp="200C" na="ZERO WIDTH NON-JOINER" alias="ZWNJ" cp="200D" na="ZERO WIDTH JOINER" alias="ZWJ" cp="200E" na="LEFT-TO-RIGHT MARK" alias="LRM" cp="200F" na="RIGHT-TO-LEFT MARK" alias="RLM"
set_input_method()andset_buffer_file_coding_system()in config file.- use Unicode file hierarchy for code page files
- handle or remove extra code page files: CP1006.TXT CP1253.TXT CP1254.TXT CP1255.TXT CP1258.TXT CP775.TXT CP855.TXT CP856.TXT CP857.TXT CP860.TXT CP861.TXT CP862.TXT CP863.TXT CP864.TXT CP865.TXT CP869.TXT CP874.TXT CP932.TXT JIS0201.TXT SHIFTJIS.TXT euc-jis-2004-std.txt iso-2022-jp-2004-std.txt jisx0213-2004-std.txt sjis-0213-2004-std.txt MAC-CYRILLIC.TXT MAC-GREEK.TXT MAC-ICELAND.TXT MAC-TURKISH.TXT koi8_ru.cp APL-ISO-IR-68.TXT GSM0338.TXT SGML.TXT
- deal with accents in filenames (macOS uses combining accents encoded as UTF-8)
- rename
eb_putcas it handles the fullchar32_trange
Terminal
- test other terminals: Terminal.app, wezTerm, Visor, Guake, or Yakuake
- check out Eternal Terminal: https://mistertea.github.io/EternalTerminal/
- DEC SET 1036 ESC or Alt keys
- handle paste bracketting in xterm:
ESC [ 2 0 0 ~ xxx ESC [ 2 0 1 ~ - Use
OSC 1337file transfert protocol for file and image download - support graphics display on capable terminals
X11 display - graphics
- handle X11 window manager close window event and exit cleanly
- clip display by popup size
- move
-nwcmd line option to tty.c and maketerm_probereturn better score - remember X11 window positions and restore layout?
- faster video handling (generalize invalidate region system)
- integrate tinySVG renderer based on the new libraster.
- implement wheel mode in CSS display.
- fix configure for missing support: x11 xv png ...
- add
configure --disable-graphics dpy_open_fontshould never returnNULL, must have a system font.
Moving - Searching - Navigation
Basic movement
- pass argval and pagewise to
do_scroll_up_down()or split command - files: fix
SPC/TABdistinct behaviors on ~/comp/project/gnachman/ - basic: update default settings to
indent_tabs_mode = 0,indent_width = 4, my-colors - basic: reset last command when executing macro
- basic: make
do_word_right,do_word_left,do_bol,do_eol... return new offset - basic: use visual movement for left, right, up, down and character based for
C-b C-f C-n C-p - basic: fix offset when exiting
s->hex_mode - new flavor for GoogleClosureCompiler
- emacs bindings:
M-g M-ggoto-line(with prefix argument)M-g TABmove-to-column(with prefix argument)
- Missing commands:
what-cursor-positionwith universal prefix: show popup with long descriptionelastic-tabsshow-matching-delimiters- blink-and-insert on
) } ] >or use different matching colors auto-fill-modeauto-revert-mode,global-auto-revert-mode,auto-revert-tail-mode
- fix scroll up/down to move point if already at end
- move by paragraph on
M-[andM-] fill-paragraphshould default indentation for the second and subsequent lines to that of the first line- scroll horizontally on
M-{andM-}: should move point if scrolling moves it past the window borders - scroll up/down with argument should scroll by screen row.
- simplify
C-zandA-zaccordingly - drag out of window should generate autorepeat scrolling requests
- prevent mouse focus to window if searching
- prevent mouse focus to window if minibuf active
scroll-at-end: down keys scrolls up when at end of buffergoto-lineshould not set mark if mark is already active- scrolling by window size should position cursor differently
Searching
- add binding to convert the list of search matches into a multi-cursor (use
C-\?) C-gin incremental search should reset the last search flags- range restricted search and replace
- store incremental search strings in search history list
- incremental search: increase max repeat count
- improve search speed finally
- add low-level search accelerator function
hex-modesearch strings should mix hex ut8 strings and ASCII control char names- isearch in hex should display search string in hex
- transfer case in
query-replace - regex replace with subexpressions
- query replace across multiple files
- query replace options: u -> undo last change
- add non selectable query-replace-mode for key bindings, cmd description and documentation
- extra:
grep,grep-buffer,grep-sources,grep-tree... - query_replace functions should be restricted to the highlighted region if any
- search:
count-words,wc,count-sloc - search: stats command for word count and mode specific stats
- isearch:
M-pandM-nshould select previous and next search pattern in history - searching failure should abort macros
Tags
TAB-> complete function name from tags etc.- automatic multifile tags in project directory (where source management or tags file is found)
- tags: remove tags for modified line
- tag multiple files and buffers
- tag project files recursively
- handle multiple tag files
- save tags to QTAGS or .qetags file
- update tag files automatically
list-tagsandlist-matching-linespopups should be clickable and go to the match use locus properties?list-definitionswith hot load functionshow-definitionin popup- handle standard libraries with tag system
Source control - Diff
- swap buffer names in
compare-files - resync from end of line without threshold if subsequent lines match
visual-diff-mode: Use color-coding to compare two buffers.- autoblame source code
diff-buffer-with-staged,diff-buffer-with-head,diff-buffer-with-master- builtin git status and commands
Input - Macros - Completion - Commands
Input
- only get tty clipboard contents on yank
- only set tty clipboard contents if kill buffer changed during focus time
- add script variable for clipboard support
- change accent input method: type accents before the character: when inserting an accent, insert a space before and do not move point when inserting a character before an accented space, replace
describe-key-briefly,local-set-key, etc should use a special input mode to read a string of keys via the minibuffer to remove theqe_key_processhack and use the same input behavior as emacs.- check abort during long operations: bufferize input and check for
^G - move
ungot_keytokey_context
Macros
- do not abort macro on incremental search failure, just on final failure upon RET
- implement a maximum macro length and abort macro learning mode if reached
- allow redefining the keyboard macro embedding itself
show-macro,dump-macroto ease macro debugging and timing- fix macro slowliness in 6000 line buffer junk/dirs/x
- do not use visual movement inside macros (definition and execution)
- do not redisplay during macro execution, esp with prefix
- check for abort/failure during repeated command execution and macros
- improve
dump-macroto convert macro to string - fix
dump-macroto save/restorelast-kbd-macroto/from session - do not store messages during repeated macro execution or limit buffer size
- fix source syntax issues
(define-macro "last-kbd-macro" "A-fA-fC-FC-FC-@C-EA-wC-AC-NC-XnC-YC-MC-Xp")
(define-macro "last-kbd-macro" "A\-f")
--- - - -
(define-macro "last-kbd-macro" "--- - - -C-M
<Down><Up><Right><Left>")
<><>(define-macro "last-kbd-macro" "\<>\<>")
Minibuffer - Completion
- minibuf: spurious recursive edit cases.
- completion: fix electric behavior
- completion: add completion function to get the default value
- basic: fix fuzzy completion when single unanchored match
- minibuffer completion: bad return on
C-x C-f . SPC qe SPC RET - minibuf: use more mode specific bindings
- basic: completion in
load-resource-file - completion: abbreviate lines in file completion list popup
- open file with fuzzy completion
- execute command with fuzzy completion
- completion with fuzzy matching
- handle filenames with embedded spaces
- use trick for entering spaces in filename prompts without completion
Commands
- support multiple modes in window using array of mode pointers
- auto-complete previously used commands when no other context is available
- pass has_arg and arg_val as separate arguments or combined 64-bit value
- pass argval and argflags for most commands
Miscellaneous
show-date-and-timeshould distinguish betweenC-uand explicit number prefix- command aliases:
flush-lines->delete-matching-lines.keep-lines->keep-matching-lines,delete-non-matching-lines.how-many(akacount-matches)
- Many commands change their behavior when Transient Mark mode is
in effect and the mark is active, by acting on the region instead
of their usual default part of the buffer's text. Examples of
such commands include
M-;,flush-lines,keep-lines,delete-blank-linesquery-replace,query-replace-regexp,replace-string,replace-regexp,ispell,ispell-word->ispell-region.undo-> undo changes restricted to the current regioneval-region-or-bufferisearch-forward.;or#or/: comment the block\add and or align\line continuation characters (c like modes)fill-paragraphmark-paragraphextends the selection if already active
Editing - Replacing - Undo
Editing
-
basic: backspace delete hacking tabs
-
basic: enter should optionally remove whitespace at end of line
-
do_transposeshould take argval and swap distant fragments -
do_transposehas invalid behavior if left or right chunk is empty -
rectangular regions, cut/paste
-
remote editing
-
delete-selection-modeto delete the highlighted region on DEL and typing text -
whitespace-cleanupCommand: Cleanup some blank problems in all buffer or at region. It usually applies to the whole buffer, but in transient mark mode when the mark is active, it applies to the region. It also applies to the region when it is not in transient mark mode, the mark is active and C-u was pressed just before callingwhitespace-cleanupinteractively. -
comment-dwimCommand: Call the comment command you want (Do What I Mean). If the region is active andtransient-mark-modeis on, callcomment-region(unless it only consists of comments, in which case it callsuncomment-region); in this case, prefix numeric argument ARG specifies how many characters to remove from each comment delimiter (so don't specify a prefix argument whose value is greater than the total length of the comment delimiters). Else, if the current line is empty, callcomment-insert-comment-functionif it is defined, otherwise insert a comment and indent it. Else, if a prefix ARG is specified, callcomment-kill; in this case, prefix numeric argument ARG specifies on how many lines to kill the comments. Else, callcomment-indent. You can configurecomment-styleto change the way regions are commented. -
indent-for-tab-command(int ARG)Indent the current line or region, or insert a tab, as appropriate. This function either inserts a tab, or indents the current line, or performs symbol completion, depending ontab-always-indent. The function called to actually indent the line or insert a tab is given by the variableindent-line-function.If a prefix argument is given (ARG), after this function indents the current line or inserts a tab, it also rigidly indents the entire balanced expression which starts at the beginning of the current line, to reflect the current line's indentation.
In most major modes, if point was in the current line's indentation, it is moved to the first non-whitespace character after indenting; otherwise it stays at the same position relative to the text.
If
transient-mark-modeis turned on and the region is active, this function instead callsindent-region. In this case, any prefix argument is ignored.
Multi-cursor
- fix multicursor kill/yank by restricting the number of kill buffers:
increase the number of kill buffers to
multi_cursor_curkill uses the nth-buffer corresponding to themulti_cursor_curvariableyank-popis disabled in this mode if no kill command occurred on a line, use the first buffer for yank else it uses the one selected by the kill command
Undo
- keep modified status when undoing past a buffer save command
- allow file save when undo clears file modified flag
- undo some cursor movements
- group undo entries to match command and or macro boundaries
- saving the file kills the redo stack!
- when undo resets the modified buffer flag, this prevents file save
- store cursor movements in undo records
- kill redo list when forking after undo
- undo should handle sequence of undo records upto tagged start.
- add disable-undo for tests and benchmarking
- limit size of undo buffers (
undo-outer-limit, default 3000000) - add undo records for styles, modes...
- disable undo for archive parse and uncompress phases
- compress logs and limit size
- mode for undo buffers
Modes
Generic mode stuff
- basic: register modes recursively along fallback chain
- modes:
next-modeshould include bufferdefault_modein list - mode inheritance
- basic: stop copying
ModeDefstructures to implement inheritance - basic: fix mode setting mess
- modes: split modes into colorizers, interaction, io, charset, eoltype
- modes: major and minor modes
- rethink mode specific commands -> add inheritance for all commands ?
- add
mode_commandsandglobal_commandstables inModeDefstructure
C mode
- Allman and other styles
- Epita style
- auto remove trailing spaces and add final newline
- colorizing bug:
static int (*qe__initcall_first)(void) qe__init_call = NULL; - align multi line comments leading * one space to the right
- fix C indentation inside comments
- fix C indentation inside struct, array and enum initializers
- automatic indentation detection
c-indentindent-with-tabs- stats command for
slcc - missed tag:
static int (*qe__initcall_first)(void) qe__init_call = NULL; - generate
#includelines automatically - autocomplete keyword, function, variable, member names
- TAB in whitespace should remove forward white space and indent under
- TAB at end of line or in space before \ should align on \ from previous line
- preserve macro \ alignment when editing (auto overwrite)
c-modedescendants:- see if java/javascript/c++ is OK.
as-mode: ActionStript filesawk-modecpp-mode: C++objc-mode: Objective Ccsharp-mode: C#d-mode: Djava-modejavascript-mode,js-mode-> javascript files- support for v8 natives syntax %ddd()
- handle missing semicolons
json-modescala-modeyacc-modego-modeidl-modetypescript-modejspp-mode: JS++vala-modecuda-modeodin-mode: c-mode indentation does not work because of lack of semicolons
electric-c-mode- parenthesis matching problems in comments and markdown and other modes
Preview mode
- use minor mode keymap to exit preview mode with
KEY_RET - add auto skip feature at top and bottom of file to skip to the previous and/or next file in the preview mode
- typing text should
auto-search - typing text could ask for exiting preview-mode
- prevent edit in browse mode (currently called
preview-mode)
Hex mode
- merge
hex-modeandbinary-mode hex-modeandbinary-modeshould have an initial skip value to align the display on any boundary- extend
hex-modeto support 16,32,64 bit words as little and big endian - optimize display for very large
display-widthin binary and hex modes - save
display-widthin binary and hex modes upon window change - display alternate cursor in non active column in hex mode.
Bufed
- delete bufed buffer when exiting bufed or clear flags on
bufedinvocation - show current directory for shell buffers in buffer list view
- bufed: use window/buffer caption for headings and sizes description
Dired
- toggle long listing and column listing in dired buffers
- dired view with generalized file matcher
- dired: use window/buffer caption for directory and sizes description
- dired: fork process and use asynchronous function to:
- list directory contents
- track directory contents file stats
- compute subdirectory sizes
- keep dired current file upon:
RET C-x C-k RET - use buffer specific load functions
- separate buffer for each directory
- snap dired left window horiz scroll
- make dired left window temporary popleft window
- improve dired (file commands, nicer display)
- t ->
dired-touch - | ->
dired-shell-command -
- ->
dired-mkdir
- ->
- t ->
- look into missing commands (emacs)
dired-find-fileone .. fdired-do-shell-commandon!dired-hide-subdiron$dired-create-directoryon+negative-argumenton-digit-argumenton0 .. 9dired-prev-dirlineon<dired-diffon=dired-next-dirlineon>dired-summaryon?dired-do-searchonAdired-do-byte-compileonBdired-do-copyonCdired-do-deleteonDdired-do-chgrponGdired-do-hardlinkonHdired-do-loadonLdired-do-chmodonMdired-do-chownonOdired-do-printonPdired-do-query-replace-regexponQdired-do-renameonRrename a file or move selection to another directorydired-do-symlinkonSdired-do-touchonTdired-unmark-all-marksonUdired-do-shell-commandonXdired-do-compressonZdired-up-directoryon^dired-find-alternate-fileonadescribe-modeonhdired-maybe-insert-subdironi, +dired-goto-fileonjrevert-bufferongread all currently expanded directories aGain.dired-do-kill-linesonkdired-do-redisplayonlrelist single directory or marked files?dired-find-file-other-windowonoquit-windowonqdired-sort-toggle-or-editonstoggle sorting by name and by date with prefix: set the ls command line optionsdired-toggle-marksontdired-view-fileonvdired-copy-filename-as-killonwdired-do-flagged-deleteonxdired-show-file-typeonydired-flag-backup-fileson~dired-tree-downonM-C-ddired-next-subdironM-C-ndired-prev-subdironM-C-pdired-tree-uponM-C-udired-hide-allonM-$dired-prev-marked-fileonM-{dired-next-marked-fileonM-}dired-unmark-all-filesonM-DELdired-next-marked-fileon* C-ndired-prev-marked-fileon* C-pdired-unmark-all-markson* !dired-mark-files-regexpon* %dired-mark-executableson* *dired-mark-directorieson* /dired-unmark-all-fileson* ?dired-mark-symlinkson* @dired-change-markson* cdired-markon* mdired-mark-subdir-fileson* sdired-toggle-markson* tdired-unmarkon* uneed commands for splitting, unsplitting, zooming, marking files globally.
Markdown modes
Markdown
- for code blocks without a language tag, try and determine the language from contents
- fix markdown command bindings
- recognise
~~~ {.c}language tags - cooked markdown mode for documentation
- use cooked markdown mode for help system
a_bb_cshould not detectbbas underlinedmarkdown-mode: syntax modes for toml, bash (bash output), sh, text, txt
Outline - Org mode
- outline styles
- implement hide / show regions
Shell mode
- shell integration: easily navigate to previous shell prompts with
M-S-upandM-S-down. use buffer properties for this - timestamp shell commands
- shell buffer remote filesystem using commands
getandput(for ssh sessions) - parse the list of errors and register line/column positions so buffer can be modified
using this array, implement skip to the errors in the next file with
C-u C-x C-n - [BUG] ^C does not work on OpenBSD
C-x RET RETshould switch to last process buffer selected and move to the end of bufferC-x RET RETshould find another shell buffer if*shell*has been killed. Should enumerate all buffers.- terminal emulation: when move inserts spaces, they should have default attributes: add test cases
- terminal emulation: improve behavior based on Wikipedia page ANSI_escape_code
C-c C-cshould abort make process and other shell buffers- support
:as alternate escape sequence argument separator start-shellshould kill popup windowA-x kill-buffer RET-> hang- turn on interactive mode on commands that move the cursor to EOB
- use auxiliary buffer to make process input asynchronous
- give commands a chance to execute for macros to behave correctly
A-yat process prompt- fix very long lines in shell buffer (not finished)
- fix screen size notifications,
SIGWINCHsignals and ioctl - fix terminal size inside shell window ?
- other buffer modification functions in shell input region
tty_put_charshould convert charsets- set current directory of new shell buffer to that of current window
- current path in compile set to current buffer path
- current path retrieved from shell prompt backwards from point
- fix bof/eof shell mode
- allow quoting of special keys: let
do_charinsert xterm/vt100 key sequence to allow typing special keys into shell process - cmdline arg to force lines and columns to test shell.
- toggling interactive shell mode is not automatic enough
- accented letter input in shell mode
- transcode between tty charset and shell buffer charset
- track unsupported escapes in shell buffer
- use colorized buffer for trace buffer to flag tty input, shell output, supported and unsupported escapes.
telnet-mode: Connect to a remote computer using telnet- ssh: should use the host name and get files via scp syntax
- fix tty emulation to run kilo inside the process window
shell-command-on-regiononM-|mg: Pipe text from current region to external command. emacs: Execute string COMMAND in inferior shell with region as input. Normally display output (if any) in temp buffer*Shell Command Output*; Prefix arg means replace the region with it. Return the exit code of COMMAND.- start directory of make command should be the default directory of current buffer
- window scrolling not emulated in tty (check
^Zin recursive eps)
Man command and mode
- control where
manwindow is opened with prefix and setting - use target window for man and similar commands
- man pager -> more bindings, such as
RET->push-button(jump to map page) - cross link man pages
XML - HTML
- [Idea] http request with headings
- auto hierarchical view
- merge xml and htmlsrc modes, add submodes for plist and other config files
- xml/htmlsrc: scan for
</script>beyond end of very long line ‌-> zero width causes missing chars at end of line- html
mode_probefails on junk/Books/881256329.epub/OEBPS/Attributes.xhtml when cycling - html: preview mode does not work
- html: checksum stuff does not work
- html/xml: fix colorizer for multi-line tags and attributes
- [BUG] xml: crash bug on johnmacfarlane.net/texmath.xhtml
html-mode: support hex entities- add syntax based wrapping mode for very long lines
- distribute libqhtml as a separate project
- OPTIMIZE
eb_nextcet al or always duplicate box content (big speed improvement). - polish end of line offset/cursor displacement support.
- handle implicit TR
- add file referencing (, , etc...)
- fix LI numbering with VALUE attribute (cannot use CSS). Verify counter-reset semantics.
- (z-index) floats must be displayed after all other stuff.
- is sometimes incorrect.
- more font style synthesis in html2ppm.
- add xml CDATA parsing
- add auto-indent visual display for minified XML files
TeX - latex
info-mode: unix info mode- improve
latex-mode- mode for tek style sheets
- mode for texi intermediary files
- latex-mode: LaTeX documents.
- bibtex-mode
- tex-mode: TeX or LaTeX documents.
- create tags
Archive modes
- archive: issue with current directory
- archive: add API to register new file formats
- archive: use window/buffer caption for output description
- make archive mode use dired commands
- compress mode file save to compressed format
Images - Video - Bitmaps
- stb: add magic number detection
- display images using iTerm's image transfert protocol
- fix ffmpeg support
- filtered scaling
- zoom, pan, rotate, describe, peek-color, histogram...
- multiview, wallpaper...
- use screen aspect-ratio...
- display info on modeline
- prevent display if not invalid
- improve image viewer on X11.
Syntax modes
- add parametric syntax definitions (nanorc files).
- modes: add language word lists: literals and builtins
- text based language modes: token patterns, word lists, indentation spec
- create tags in other languages: fds
_STYLE_FUNCTION - improve existing language modes:
ada-mode: create tagsagena-mode: create tagsats-mode: create tagsasm-mode: handle various assembly stylescalc-mode: fix syntax, disable C++ commentscmake-modecobol-modecoffee-mode: create tagscss-modeelm-mode: create tagselixir-mode: create tagserlang-mode: create tagsfcl-modeforth-modefortran-mode: create tagsgroovy-mode: create tagshaskell-mode: create tagsicon-mode: create tagsini-mode: Windows .ini files.jai-mode: create tagsjulia-mode: create tagslisp-modelua-mode: create tagsmakefile-mode: Gnu and other makefiles.nim-mode: create tagsocaml-mode: create tagspascal-mode: create tagsperl-modephp-mode: improve coloringpostscript-mode: more restrictive matchpython-mode: create tagsr-mode: create tagsruby-mode: create tagsrust-mode: create tagsscad-mode: create tagsscheme-modescilab-modesh-mode: Handle here documentssh-mode: Handle multiline stringssh-mode: handle heredoc stringscat << EOF\n ... \nEOF\nsh-mode: shell script filessql-modeswift-mode: create tagsvbasic-mode: more restrictive matcher because .cls files may be latexvirgil-mode: create tagsvim-mode: create tags
- missing languages:
asp-mode:automake-mode:bat-mode: DOS command.com batch files.bazel-modefor build system (*.bzl, BUILD...)bennugd-modebluespec-modeboo-modecg-modechangelog-modechdr-modecmake-modecmd-mode: Windows cmd.exe command files.conf-mode: configuration files.DCL-modedef-modedesktop-modediff-modedoc-modedocbook-modedosbatch-modedot-modedpatch-modedtd-modeeiffel-modeexelis-modefsharp-modegams-mode: GAMS files.gap-modeglsl-modegtkrc-modehaddock-modeimagej-modej-modelanguage-modelibtool-modeliterate-modelog-modem4-mode: M4 macro processor filesmaildrop-mode: for .mailfiltermallard-modematlab-modemediawiki-modemodelica-modemxml-modenemerle-modenetrexx-modenroff-modensis-modeobjj-modeocl-modeoctave-modeooc-modeopal-modeopencl-modepatch-modepkgconfig-modepo-mode: translation filesprolog-modeprotobuf-modepuppet-moderpmspec-modesml-modesparql-modesystemverilog-modet2t-modetexinfo-modevbnet-modeverilog-modevhdl-mode: VHDL files.xslt-modeyaml-mode- qmake, scons, ant, maven, bitC
- from drujensen/fib repo:
es(escript),janet, k(K), p6, pony, ps1, pyx(cython), raku(rakudo), vb, zig detect flavors: ldc2?, bash, powershell, pypy, qb64, guile, sbcl
New modes
csv-mode
- CSV database functions
csv_find(string where)csv_select(string field_list, string where, string destination)csv_filter(string where)csv_update(string what_list, string where)csv_append_columns(string field_list)csv_insert_columns(string field_list)csv_delete_columns(string field_list)csv_delete_lines(string where)csv_append_lines(string field_list)csv_insert_lines(string field_list)csv_sort(string field_list)
json-mode
- auto-wrap and indent
- JSON database functions
- pretty view with auto indent hierarchival view
xml-mode
- auto-wrap and indent
- XML database functions
Other modes
rst-mode: support ReStructuredText (RST)auto-compression-mode- minor modes with key override such as
previewmode - calculator / spreadsheet mode (based on SC)
- calendar mode
- email reader mode: mail / rmail
- news reader mode
- irc client mode
- rss
- wikipedia mode
- abbreviation mode
- ispell / spell checker
- printing support
- calc mode
Documentation - Support
- improve README.md
- rework documentation:
- document existing features
- make documentation available inside qemacs
- move documentation to markdown
- rewrite TODO.md file with more sections and explanations
- migrate coding-rules.html to markdown
- use cooked markdown mode for help
- add command
qemacs-helloonC-h h: load hello file for charset tests - add command
qemacs-faqonC-h C-f - add command
qemacs-manualonC-h m - help:
data-directory,data-path? - add command documentation in
describe-function - add command documentation in
describe-variable - cross link help pages
- show memory stats in
describe-bufferandabout-qemacs - add function to add entry in TODO.md
- move mailing list to github or private server
Invokation
Emulation
- automatic remote config fetch based on email at qemacs.org:
- .qemacs, .bashrc...
- add bindings for other editors:
nano,vscode,emacs,qe, (vim???) - load bindings corresponding to invokation command or cmdline option
- fix scroll window behavior (for Mg)
- tiny: remove extra features
- tiny: make a really small version
set-gosmacs-bindings->set_emulation("gosmacs")
Config - Sessions - Scripting
- add command line options for terminal features: backspace
- add script variable for terminal features: backspace
- config: reparse .qerc upon change
- session: register session store functions
- session: save previous answers, ...
- session: save preview mode, buffer modes and properties
- session: save process buffers? non file-based buffers? dired buffers?
qe_get_variableshould populate a QEValueqe_set_variableshould take a QEValue pointer- variables: add minimal version in tqe
- variables: set variable values via function pointer
- variables: add boolean and char types
- tack library of ancillary files at the end of the binary:
- add protocol to read from library (lib:xxx)
- add html.min.css and docbook.min.css to library
- append lib: to default QE_PATH
- clean up ancillary files
- [Idea] dynamic project based settings, include, exclude patterns...
- commands:
parse_arg()should handle default argument values - commands: pass raw prefix argument
Pas combination of has_arg (flags) and argval (number) eval-expressionshould evaluate region if highlighted?- kill eval result so it can be yanked where appropriate
- integrate qscript or MicroQuickJS
Debugging
- add command line options for tracing
- add script variable for tracing
- track line changes in next-error matches using array of locations