7 All of these, except Triage, are references to todo items elsewhere in
12 - [X] w3m hangs for CAAmjac0r78WpiYW9FsJK=+E8-FG4MoxD2zkUJS_oCRyNW+=rug@mail.gmail.com
13 It is writing to stdout which is reading very slowly.
14 - [ ] in filename completion, TAB might add a '/' to a partial name and
16 - [X] when search succeeds on final line then trying again loops back to
17 there, redraw is strange
18 - [ ] There is a "window:close" and a "Window:close" and they are
20 - [X] unknown keysequence should be reported so e.g. if keyboard
21 is is Greek mode, then I will be told that Cx-b doesn't work
22 - [X] menubar doesn't redraw background when resized wider.
23 - [X] open second x11 window, use selections. Close it. command
24 in x11selection_Xcb gets freed???
25 - [X] adding new lines at end of doc in x11 leaves phantom underline
27 - [X] 20230908090027.6AA0DC05B9@prodcs.lwn.net has a wrapped
28 <a> tag which isn't parsed well.
29 - [X] find-document - if default doc has <>, displays wrongly.
30 - [X] From start-of-file move to end, then up, then down.
32 - [X] Add menubar menu with recent documents?
33 - [X] why does clicking on status line go to top-of-file?
34 - [X] search hangs when seeking "^( *)"
35 - [X] selection-menu item to show git-commit from list of known git
37 - [ ] selection-menu item for word-count
38 - [X] selection-menu item for QR-code
39 - [ ] selection-menu sub-menu for UPPER lower Caps ??
40 - [ ] selection-menu item for text-fill
41 - [ ] selection-menu item for spell-check ??
42 - [ ] selection-menu item to view a named file - in Popup:Tile
43 - [ ] notmuch - capture errors about multiple Subject lines and
45 - [ ] switch display-pygtk to use Draw:scale-image
49 - [X] notmuch addresses in From: list to have menu to add address to any
51 - [X] Disable <hide> if cursor is in the hidden region.
52 - [X] fill mode to handle all punctuation at start of this line
53 - [X] Enable lib-menu to show short-cut keys
54 - [X] Add menu-bar to lib-menu. Pop it up on F10 with simple commands
55 - [X] attach an extensible menu to the selection
56 cut, copy, paste-in, QR, git-view
60 - [X] split range management out of autospell so it can be used by other
62 - [ ] make it easy for a make-search command to search backwards
63 - [X] Make a start on CUA mode with mouse/menu/selection support.
64 Also Function keys: help, close, refresh
68 - [X] image-display pane
70 - [ ] render-markdown.py
74 Requirements for a v1.0 release
75 -------------------------------
77 - [X] logo!!! to use as icon in X11 for example. Building blocks?
79 Maybe a pencil in a window pane
84 - [ ] multiple front ends: elvi, elma, elnm, eled, elpnt?
86 - [ ] markdown editor (with PDF output)
87 - [ ] non-line-based render, such as a tabular render for spreadsheet,
88 or side-scrolling horiz row of thumbnails for presentation, or
89 even a menu-bar with row of menus.
90 - [ ] documentation reader
91 - [ ] block-dev (mmap) doc type, and some hex-mode support
92 - [ ] user documentation
93 - [ ] developer documentation
94 - [ ] some git support
99 - [ ] universal times_up tests might cause Close_mark or similar
100 not to be called. How can we avoid that?
101 - [ ] If a pane wants to block mouse events from parents, as lib-view
102 does, it shouldn't need to catch all the combinations, or it
103 should be much easier
104 - [ ] gather memory usage stats per-pane, ensure 0 on close, and allow a dump
105 - [ ] show doc size in doc list - include undo size?
106 - [X] Ensure all panes that should use "Free" properly, and find some
107 way to encourage its use.
108 - [ ] Add optional unit-test interface for modules. This should be
109 implemented at least by lib-search, doc-text and probably many
110 others. It is particularly for things that are awkward to test
111 with the ncurses/replay test approach.
112 - [X] Send global notify before/after refresh. LOG must suspend logging
113 (or notifications at least) during refresh if is visible anywhere
114 - [X] Do I want "Display" as in "window:close", or "window" as in
115 "window:notify". Decide, and make everything consistent.
116 - [ ] Do I really need global-multicall- or can I just use
118 It would mean more modules would need a private pane, but might
119 I want that to support module unload anyway?
120 multicall- is currently used for:
121 - open-doc- to find something to open a given file type
122 doc-dir doc-email doc-text
123 - doc:appeared- to configure doc based on name
124 doc-docs hex c-mode viewer autosave calc mergeview config presenter
125 - startup- for initialising editor
128 - [ ] if a view creation fails - like render_master_view_attach
129 hitting a python error - there will be no active view so the
130 screen will be meaningless. I need to properly abort and
131 auto-choose a new pane.
132 - [X] LOG_BT() doesn't see TYPE_pane and TYPE_comm calls.
133 - [ ] LOG should take a pane arg, and not use any static vars.
134 - [ ] reduce size of $(nm O/*.o | grep ' b ' | grep -v '_map$')
135 - [X] give every pane a link to root/editor main and use that
136 instead of statics. Then maybe times_up() can use pane_too_long()
137 - [ ] teach input to allow a repeat command to be registered so that e.g.
138 search/replace and do a bit of work, then ask to be called again.
139 input can cancel this on suitable input.
140 - [ ] should input leave mode unchanged for key that isn't handled at
142 - [X] marks can be used after they go invalid too easily. How to fix??
143 - [ ] catching doc:replace in a pane doesn't catch doc:insert-file.
144 I need a simple way to intercept any change.
145 - [X] switch-buffer in pop-up window - shouldn't kill the popup (does it?)
146 - [X] explicitly guard against infinite loops in consistency checks
147 - [X] skip consistency checks after several with no stop for input.
148 - [ ] unwanted docs too easily appear high in recent-list - *Output*
149 - [ ] design a way for a keystroke to interrupt a long-running function.
150 - [ ] extend Draw:measure protocol to allow constant-width-fonts to
151 cannot-scale displays can be detected and measurement optimised for.
152 - [X] improve timeout. Set timer once, then set a flag so that all commands fail
153 until some top-level clears the flag.
154 - [ ] reconsider all 'return comm_call()' calls. Do we every really
155 care if the callback succeeded?
156 - [ ] Change Efallthough to -1 so I can return '0' meaningfully.
157 Efalse probably becomes 0.
158 - [X] send warning message when recursive notification is prohibited.
159 editor:notify:Message:broadcast
160 - [ ] Make DEF_CB really different from DEF_CMD and ensure it is used properly.
161 - [X] is DocLeaf really a good idea? Maybe panes should have 'leafward'
162 pointer separate to 'focus'? Maybe panes could have optional
163 'child' method which returns main child - pane_focus() calls that.
164 Maybe pane_focus() find a pane with z=0 and matching w,h ??
165 - [ ] support text-replace as easy as text-insert (doc:char...)
166 - [ ] for doc:cmd transformation, what about :Enter and BS TAB ESC ???
167 - [ ] For a notify handler, returning non-zero doesn't stop other handlers
168 running. For a call handler it does. This inconsistency is awkward for
169 messageline_msg which wants to allow fallthrough, but needs to acknowledge.
170 How can I resolve this? Use Efallthrough as -1.
171 - [ ] make a doc read-only if dir doesn't exist or isn't writable
172 - [ ] change some pane_focus() to pane_leaf() where appropriate.
173 - [ ] account all mem allocation types separately, and (optionally) report
175 - [ ] document the use of doc:replaced. What are the two
176 marks exactly? start and end of range. Verify all clients and providers
177 The 'num' is for when mark2 is absent and it suggests a number of bytes
178 that might have changed.
179 - [ ] revise and document behaviour of doc:open etc, particularly for
180 reloading and filenames etc.
181 - [ ] review all aspects of mark lifetime. ->owner must be set for
182 points and vmarks. A non-owner may never hold onto a mark beyond
183 the call which gave access to it, unless it registers for
184 notifications from the owner, and that probably only applies to
186 - [ ] do something useful on SIGINT - maybe expedite times_up().
190 - [ ] Make it possible to unload C modules when refcount on all commands
192 - [ ] Make it possible to unload Python modules
193 - [ ] Malloc anti-fail policy. Small allocations don't fail but use pre-allocated.
194 large allocations use different API and can fail.
195 - [ ] support $SUBST in file-open path names ??
196 - [ ] Need a debug mode where every mark usage is checked for validity.
197 also check the setref sets up all linkages.
198 - [ ] remove all FIXMEs (there are 77) ... and any HACKs (5).
199 - [ ] Replace asserts with warnings where possible.
200 - [ ] hide view-num inside pane so number cannot be misused.
201 i.e. each view is owned by a pane and can only be used by that pane.
208 - [ ] use a document, not a magic command. This requires multipart
209 to be able to hand over a document
210 - [ ] activate from file browser somehow
211 - [ ] cache the decompressed image somewhere.
215 - [ ] enable activation via F10. Cancel makes it disappear if
216 configured not too. How to keep??
217 - [ ] allow left/right arrows to move between menus
218 - [ ] emacs to disable 'save' when cannot be saved.
222 - [X] pop up window to show selection as QR code
223 - [ ] text qrcode (qr --ascii foo) don't look right in xcb display
227 - [ ] I think I want a "Workspaces" concept, maybe tabbed set of tile
228 collections. I would have one of mail and one for each project
229 that I might be looking in. I have lots of documents, but few
230 projects so this would be easier to move between.
231 "grep" and "make" etc don't care which document in a project they
233 "nm" already gets me to the email project quickly. Getting back
235 Maybe some docs could be marked "project" and so be easy to find?
236 Maybe docs could be associated with a session, and are preferred
237 for select-new-document operations.
241 My idea is to have a generic rendering pane which draws row or column
242 of other panes. Maybe a doc-list describes those panes with attrs
243 identifying the doc, the pos in the doc, the view.
244 Marks only identify the panes, not anything in the pane. (maybe).
245 I want to use this for:
246 - menu bar - as stack of menu triggers
247 - presenter thumbnails
250 However this *could* be render-lines which stacks lib-renderline
251 panes all on the same document. This wouldn't use an attribute to
252 identify the location in the doc, so I'm not 100% sure of this
256 - [ ] have askpass tell shellmode (and others) about the SSH_ASKPASS*
257 environment, so they don't need to know it themselves
258 - [ ] start-agent command which runs ssh-agent can records the
259 environment reported for later shells.
263 - [ ] handle view:changed properly, and make sure total count changes
264 appropriately in notmuch-query-view. Maybe view:changed should
265 report if content changed, or just attributes.
269 - [ ] catch broken-pipe errors when sending to sock
270 - [ ] ctrl-z in elc doesn't ask edlib to release the terminal
271 - [ ] do we need both .term and .disp? When are they different?
273 ### lib-x11selection-xcb
275 - [ ] will need to listen for property-change-event on requestor to know
276 when result has been deleted to handle INCR.
277 - [ ] if too big, or alloc error, switch to INCR more for sending
278 - [ ] support INCR mode for receiving
279 - [ ] use iso-8859-15 for some of the text formats.
280 - [ ] test very large copy/paste
281 - [ ] need a queue of pending selection requests
285 - [X] auto-wrap on a line like this one doesn't recognize all the
286 punctuation a the start of the line ... should it?
287 - [X] fill mode to handle all punctuation at start of this line
291 - [ ] improve caching of attributes
292 - [ ] profile performance to find opportunities for optimisation.
296 - [ ] make it easy for a make-search command to search backwards
300 - [ ] if multiple files are opened quickly (e.g. by grep), we might get cascading
301 autosave prompts. Introduce a mechanism to queue them and only have one per
309 - [ ] move to separate git repo and document well.
310 - [ ] review return code of rxl_advance(). What should be
311 returned if a flag allowed a match, but the char didn't.
312 - [ ] add self-tests which ensure that the return value is correct.
313 - [ ] support backward search by compiling expression backwards
314 - [ ] make prefix-fast-search work for case-insensitive matches??
315 - [ ] rexel term for "expression" with balanced brackets.
316 Also quotes and maybe <>. Possibly a list of pairs?
322 - [ ] maybe find matches considering only alphanum first, then
323 refine the gaps considering punctuation.
327 - [ ] highlight white-space errors.
328 - [ ] command to apply a hunk to a given document - or to reverse it.
329 How much of a hunk? Selection? How to record which hunks are done?
330 How to identify document? Maybe I want a generic "Other" document where
331 patches are applied, diffs are calculated, etc
332 If only two panes, then "other" is clear, else it must be marked with C-x-7??
333 'a' to apply current hunk
334 - [ ] Link wiggle code to find best-match if direct match fails
335 - [ ] command to find best 'wiggle' match, and another to apply it if no conflicts.
336 - [ ] command to move to matching place in other branch Cx-Cx if mark not active??
340 - [ ] Menu of options somewhere to remind me.
341 - [ ] mergeview command to show diff between "found" and "replacement".
342 - [ ] mergeview command to include both found and replacement, discard
343 - [ ] Consider what else can be done with < and > on other markers.
344 - [ ] Capture a new doc-reappeared for when reloaded, and search again
349 - [ ] multi-file search-replace. Find files with 'git-grep'
350 - [ ] there is no way to count characters in a range, or find how many
351 characters into the document I am. Maybe bytes would be good too.
352 - [ ] :CX-= to look-up unicode name of character if not ASCII
353 - [ ] ":C-q ?" or "- :C-q" to open a find dialog with list of unicode
355 - [ ] split some generic functionality like arrows and mouse clicks
356 into a separate module to be shared with other edit modes.
357 - [ ] Do I want a 'truncated' marker at start/end of line when not
358 wrapping, and does the '\' go away properly when I start shifting.
359 - [ ] change shift left/right to work in characters rather than pixels
360 - [ ] filename completion should ignore uninteresting files like ".o"
361 Maybe use .gitignore, or have config module understand that.
362 - [ ] maybe alt-, does c-x` if that is the recent search?
363 - [ ] C-uC-xC-v prompts for file name, like C-xC-v in emacs
364 - [ ] compare two panes somehow - new lib-compare function??
365 - [ ] file in pop-up window in 'view' mode by default
366 From 'grep' this is probably OK. For Cx-44, it isn't.
368 ##### needs design work
370 - [ ] search/replace should support undo somehow
371 I can already step out, undo, step back. What more? Maybe Alt-U (uppercase)?
372 - [ ] What should be passed to M-x commands? prefix arg? selection string? point?
373 Surely everything. Prefix if present, string if active, point always.
377 - [ ] history doesn't restore initial default (or empty) string when
378 returning after excursion into history or favourites.
379 - [ ] how can we save history-favourites back to a config file?
383 - [ ] What to do with Focus-in/out keys?
384 - [ ] add full list of colour names (to lib-colourmap)
385 - [ ] allow a pane to require 'true-colour' and discover number of colours available
386 Colour map gets changed when it becomes the focus.
387 - [ ] When only 16 colours, maybe add underline when insufficient contrast available.
388 - [ ] automatically ensure the fg colour contrasts with bg, unless explicitly disabled.
389 If bg is bright, reduce fg brightness. If bg is dark, reduce saturation.
393 - [ ] can we capture the substates of character composition, and give
398 - [ ] Add test option, fetching image back from server after 'post'
399 - [ ] would GraphicsMagick be better than ImageMagick?
400 - [ ] share connections among multiple windows
404 - [ ] improve Move-line in multi-line renders (images). prev
405 must only move up one line, and moving down should start
407 - [ ] the background "call:" option should report if background was changed.
408 An attribute could store chosen information for comparison.
409 Would need a 'force' flag.
410 - [ ] I regularly hit problems because ->mdata is not up to date and we render
411 to find a cursor and compare with ->mdata and get confusion. How can I avoid this?
412 - [ ] view:changed shouldn't destroy the view, else Move-CursorXY
414 - [ ] make renderlines "refresh everything when point moves" optional.
415 - [ ] if flush_line from render_line() keeps returning zero, abort
416 - [ ] render-lines should always re-render the line containing point, so
417 the location of “point” can affect the rendering.
421 - [ ] Teach render-lines to pad spaces to left/right align text
422 - [ ] Maybe "word-wrap" should be a list of characters to wrap on??
423 But I might want "comma and following spaces". How do I say that?
424 Possibly declare some chars that cause a map-attr callback??
425 - [ ] renderline *knows* about scaling and when it places the cursor
426 in an image, it gets it wrong for ncurses. It should ask about
428 - [ ] if the first char if a line is marked for <wrap> it disappears
429 without cursor. This is bad.
433 - [X] Move <hide> handling to lib-renderline so we can disable <hide>
434 if cursor is in the hidden region.
438 - [X] don't allow starting macro inside a macro
439 - [ ] detect errors including Abort and search failure etc. Abort capture or
441 - [ ] Possibly wait for a shell-command etc to complete before continuing.
445 - [ ] if fstatat() fails for an entry, zero out the stat buf, and possibly
446 schedule a reload of the directory (but not too often).
447 - [ ] allow setting a pattern, as alternate to substr, for 'complete'
449 I think this would be more efficient than the current linefilter.
450 We could have a doc-filter which adds the pattern to doc:char
451 commands so forward/backward stepping is v.fast. The pattern
452 could even be a pre-compiled rexel command.
453 - [ ] support directory views for sorting. I think this requires
454 a separate dir document, which borrows state from the main one.
455 It definitely needs an independent set of marks, so that means
456 a separate document. Using the same dir_ent content might help
457 save space, but then we need an index separate from the dir_ents.
458 Maybe that is OK. We could have linked lists of small arrays.
459 Marks would point to entries in the array and we walk back to find
460 find start: low-bit-set. So each array is fore, back, 14 dir_ent
461 pointers. Or use aligned_alloc() and mask out unwanted bits.
465 - [ ] things slow down after lots of edits. Maybe track
466 number of chunk, marks, undos etc and display them somewhere
467 - [ ] stop consistency checking a doc when it gets "big" ??
468 - [X] avoid infinite loops in consistency checks
469 - [ ] doc-text: opening file with e.g. 200,000 lines is very slow
471 - [ ] moving in a big file is slow - check this
472 - [ ] support disable of undo in text, e.g. for copybuf document.
473 I think this is a completely different doc type
474 - [ ] Possibly move read-only handling to core-doc, once docs/dir
475 respond to something other than 'replace' to open files.
476 - [ ] how to prune old undo history?
477 - [ ] allow undo across re-read file. Keeping marks in the right place
478 will be tricky, but might not be critical.
479 - [ ] report stats on:
480 undo usage, chunk usage
481 - [ ] if 'find-file' finds same inode/inum, check the name is still valid.
482 file might have changed (stg pop/push) underneath us.
483 - [ ] handle large files better - loading a 42M file took too long.
484 Maybe it was the linecount?
488 - [ ] The “complete” popup should be positioned above/below the file name,
489 not over the top of it.
493 - [ ] review use of line-drawing chars for window boarders
494 - [ ] improve scroll bars
495 - [ ] review decision about that to do when high < 3*border-height.
496 Current (disabled) code makes a mess when differing scales causes
497 borders to be shorter than content.
498 - [ ] Place docs menu on the doc name in status line
502 - [ ] make uses too much CPU on large output
503 - [ ] Need keystroke to step through different grep/make windows
504 - [ ] if file isn't already loaded, wait until it is wanted, or something
506 - [ ] if file is reloaded, re-place all the marks, don't just ignore them.
507 - [ ] clarify and document the role of numeric args to git-grep
511 - [ ] reset timer each time so that message stay an exact period, and
512 timestamp updates on the minute.
513 - [ ] allow marked-up messages to be given.
514 - [ ] Differentiate warnings from info, and blink-screen for warnings.
518 - [ ] accessing document list can be slow. Same for large directories
522 - [ ] improve doc:replaced handing, by tracking the visible region and
523 checking if a replacement changes the number of chars.
527 - [ ] allow input. Can I use SIGTTIN? Need to ignore SIGTTOU, attach
528 task to pty and catch when SIGTTIN is received. Then switch back
529 pgrp, restart, and feed content.
530 Any chars from ' ' to '~' are queued in a separate buffer shown at
531 bottom. It can be edited and :Enter will submit it.
532 Could just use pipes and FIONREAD to detect when content is slurped.
533 - [ ] non-utf8 in output makes python spit the dummy
534 - [ ] Use pattern-match on command to optionally choose an overlay
535 which can highlight output and allow actions.
536 e.g. (git )?grep - highlight file names and jump to match
537 git log - highlight hash and jump to "git show"
538 diff -u - some diffmode handling
539 - [ ] If no output, don't create a pane?? Or just one online.
540 - [ ] Detect ^M in output and handle it... delete from start of line?
541 - [ ] always track time for a run and report it - or at least make it available
544 - [ ] Catch broken-pipe in all sock.send calls
545 - [ ] run edlib directly if no socket
546 - [ ] option to create a new frame
547 - [ ] more work on server mode:
548 - [ ] improve protocol
552 - [ ] Find a way to locate mark faster than walking the whole list
553 adding up the interval counts. Add a second mark list as a
554 'skiplist' with 1 mark for every 100 of the main sequence.
558 - [ ] lib-utf8 takes chars, not bytes, so it doesn't work over
563 - [ ] if charset module doesn't load, things go very bad. (utf-8 failure)
564 - [ ] use mimetypes.guess_type() to interpret filenames in email attachments??
565 - [ ] don't allow non-text email parts to appear as text. Maybe hex??
567 ### Notmuch - overview
569 - [ ] When moving among messages, always move cursor to search pane
570 - [ ] 'other' notmuch search doesn't show older messages sometimes
571 - [ ] split notmuch into two databases, last 6 months and the rest.
572 - [ ] script to move messages every week - but not deleted messages
573 Maybe not spam either
574 - [ ] edlib to offer to search older messages
576 - [ ] Email summary line for single-message threads should show size??
577 - [ ] Only clear "new" tag on explicit quit, not when going to
578 other search or simply closing the window
579 - [ ] 'm' in 'move marks on tid to before self.pos' was reportedly NULL once.
580 - [ ] Two threads with same timestamp swap order on reload
581 - [ ] When main_doc notices counts increase, it should ensure the next
582 visit of the search triggers a refresh.
583 - [ ] all shares-ref docs must be careful about comparing marks ... or else
584 we need to compare ignoring offset? Best to compare <, not <=??
585 - [ ] If I open a search but there are no messages (yet) I get a python
586 error that select-message failed
587 - [ ] saved queries that are not mentioned in any other query should get
588 presented in the search list. ... except maybe current/unread/new ???
589 - [ ] if a thread matched query and so is still cached, but no
590 individual messages match any more, then whole thread is shown.
591 This is confusing. Maybe we report an error when open is attempted,
592 but somehow allow 'Z' to still work.
593 - [ ] purge old entries from query when updates but not being viewed
594 ... don't we already do this?
595 - [ ] updating tags can take long when 100s. Enable background queuing of these.
596 - [ ] Don't display query entries that have a 0 match count.??
597 - [ ] update counts more often when a query is being changed. e.g. when any change happens
598 while a query is open, schedule an update in 2 minutes.
599 - [ ] handle errors better. e.g. file reported by notmuch might not
600 exist, or not be readable
601 - [ ] allow opening drafts in composer on restart.
602 - [ ] allow deleting of drafts without posting. Maybe just 'delete'..
603 - [ ] When active query changes, highlight on list view doesn't immediately
606 - [ ] make sure Clone actually works for all panes - or remove it
607 - [ ] add counter and colour for 'flagged'
608 - [ ] if no 'query.current' use "not exclude_tags"
609 - [ ] support selection messages and applying tags
610 - [ ] When changing any tag in a thread, or when opening the thread,
611 assess thread tags by looking at all matched messages.
612 - [ ] make min top/bottom margin configurable, set for message list
613 - [ ] display counts of current thread somewhere, so I know where I'm up to. - new/unread/matched in status line
614 - [ ] review highlight on query when the message selected isn't the message displayed
615 - [ ] fix bugs in stored-query!! query: is slow and (I think) buggy
616 - [ ] rel_date could report how long until display would change, and
617 we could set a timer for the minimum.
618 - [ ] allow re-ordering of saved-search list click-drag? +/-?
619 - [ ] allow editing of saved searches, including deletion
620 must support undo. % for replace?
621 - [ ] make sure doc cleans up when closed. processes must be killed
622 and query docs must be closed
623 - [ ] Can I implement "undo" for large-scale tag changes?
624 Maybe don't write them to the DB immediately??
625 - [ ] Can I fix notmuch to extract resent-foo headers for searching?
627 ### Notmuch message display
629 - [X] notmuch addresses in From: list to have menu to add address to
631 - [ ] "%d quoted lines" still not quite right. Moving 'down' past it
632 jumps to end of line.
633 - [ ] Don't wrap email header lines when cursor isn't on the line - too noisy
634 - [ ] word-wrap subject (only) in email summary line
635 - [ ] check for Efail errors from doc:open
636 - [ ] make it practical for 'text' documents to contain non-utf8 so that
637 "Save" can copy to a buffer. There is some support for a charset
638 to be "8bit" (hex-mode only). Maybe that is part of the answer.
639 - [ ] error check 'external viewer' code
640 - [ ] add module for external-view which creates a unique temp file and
641 removes it when the viewer is done.
642 - [ ] check for "Command Line Error: Incorrect password" from pdf, and
644 - [ ] delay conversion until unhide
645 - [ ] detect Content-disposition, use for filename, and hide anything
646 that is an attachment
647 - [ ] detect char-width and suppress images if 1 or 2
648 - [ ] create general choose-file pane which can seek an existing, or
649 non-existing file. Allow a default dir which can be remembered.
650 Use this for Emacs, and for saving attachments
651 - [ ] when unhiding for a alternate part, hide any others.
652 - [ ] next part/prev part button on spacer
653 - [ ] closing a large section pushed cursor to top of display, which
654 isn't really what I want. I'd rather the cursor stayed still.
655 - [ ] in notmuch I searched in a message (mimepart), then enter to choose,
657 - [ ] A multipart still had an active view.
658 - [ ] when I unhide an email part which is a single v.long line,
659 redraw gets confused and point goes off-screen, which seems
660 to leave it confused.
661 - [ ] maybe hide signature, unless small
662 - [ ] When click on first char in tagged range, I don't see the tag and
663 don't get a Activate event.
664 - [ ] line wrap in header should not appear as space??
665 - [ ] handle all Unicode newline chars.
666 - [ ] Auto-hide depending on type - with extensible table
667 - [ ] Open-with always, Open only if a handler is known
668 - [ ] "save" to copy to buffer
669 - [ ] save function - doc:save-file given file name or fd
670 - [ ] wiggle-highlight patches found in email
671 - [ ] detect and hide cited text
672 - [ ] maybe detect "-----Original Message-----" as indicating cited text
673 - [ ] Make long to/cc headers truncate unless selected.
674 - [ ] Make addresses active (menu?) to allow adding to a saved search
675 with options and/or/andnot. Also "mail to" or "save"..
676 - [ ] Allow any selection to be added to a saved search.
677 - [ ] verify signature if present
678 - [ ] decrypt if needed
679 - [ ] treat message/RFC822 much like multipart
681 ### Notmuch composition
683 - [ ] when aborting email composition, unlink the file if it is
684 empty. Probably dispose of autosave too.
685 - [ ] should I look for Delivered-to headers. Even;
686 1. To, Cc, Bcc, Reply-To, From
692 7. configured primary address
694 - [ ] sanity check message:
695 - body/subject/to not empty
696 - only 1 'to' or 'cc'
697 - provide 'sender' if multiple 'from'
698 - word 'attach' without attachments
699 - message has already been sent
700 - [ ] catch exceptions from email.message creation.
701 particularly adding headers can complain
702 - [ ] be smart about quoting displayname before <addr>
703 - [ ] capture editing of to/cc and mark ',' as a wrap point.
704 - [ ] If attachments are requested, set mime-version etc
705 - [ ] inline images get displayed
706 - [ ] auto-insert signature... like an attachment?
707 - [ ] address-completion should be referred to module, not assumed to be notmuch
708 - [ ] support address book and allow completion from there
709 - [ ] markdown mode that creates HTML?
710 - [ ] encryption and signing
711 gpg --no-tty --pinentry-mode=loopback .....
712 will cause an error "gpg: Sorry, no terminal at all requested - can't get input"
713 if it needs to prompt for a passphrase.
715 DISPLAY= GPG_TTY=/dev/whatever gpg .....
716 will use the tty to ask for a password.
717 But need to specifiy a suitable pinentry program via
718 ~/.config/systemd/user.control.gpg-agent.server.d/pinentry.conf
719 [Service] \ ExecStart= \ ExecStart=/usr/bin/gpg-agent --supervised --pinenty-program ...
723 - [ ] split into lower pane which parse markdown and upper which handles presentation.
724 - [ ] translucent bg colour for paragraphs
725 - [ ] partial-view-points. Only render beyond here if mark here or beyond.
726 page-down goes to next such point
727 - [ ] temp attribute. :bold: etc only apply to para, :: is appended to para format
728 - [ ] should doc attributes append to defaults, or replace?
729 - [ ] word-wrap. Interesting task for centring
730 - [ ] force x:scale to be maximum width of any line - to avoid surprises
731 - [ ] proportional vertical space ??
732 - [ ] thumbnails for easy select?
733 - [ ] \_ etc to escape special chars
734 - [ ] boiler-plate, like page numbers
736 - Maybe stuff before "# " is copied everywhere.
737 - Need magic syntax for fields ##page#
739 ### render-markdown.py
741 - [ ] parse markdown adding attributes for improved display
742 - alignment? Hide newlines and get render-line to wrap?
744 - Large text for headings
747 - bold, italic, colour?
748 - code, quoted, images
749 - urls and other references?
750 - [ ] Make sure editing causes quick re-rendering
751 - [ ] inline images - so welcome can have a logo
752 - [ ] consider following MyST
753 https://jupyterbook.org/en/stable/content/myst.html
757 - [ ] in parse_code 'c' might be None - need to check
758 - [ ] if .. else switch adds into to the switch. Should it?
759 - [ ] auto-indent enhancements: '/' should see if at start of comment line
760 following '* ', and discard space?
761 - [ ] A line after one ending ; or } or : or unindented is assumed to be
762 correctly indented.??
764 - [ ] configuration: use tabs or spaces for indent
765 - [ ] configuration: use only spaces for bracket-alignment indents - or tabs as well.
766 - [ ] python command to shift indent of range.
767 - [ ] python-mode: when changing indent, make same change to the whole block.
768 Not sure how to handle 'else:' which looks like the next block.
769 - [ ] in python mode, a comment at the end of an 'if' block confuses indenting.
770 next line cannot go back one level
774 - [ ] configure list of known git repos
775 - [ ] log view (:C-c l?) which uses --max-count and --skip to only
776 collect enough log entries to fill the display. Or better: have a
777 shell mode which only reads from pipe if insertion position is
779 - [ ] from log-view, view a commit. From a commit, view the file
780 at that time. Maybe 'save' creates a fixup commit which is
782 - [ ] Have a list of paths are top of log and any commit which doesn't
783 touch the paths is greyed out. "git log --oneline --stat"
784 provides the info, some of which we hide.
785 - [ ] when a git-managed file is saved, if there is a "diff" view, it is
786 updated. Maybe show both cached and uncached in different colours.
787 - [ ] action from log-view to reword and commit - with auto rebase and
789 - [ ] actions to re-arrange and deleted the commits. Integrate with
790 git-rebase... or simulate git-rebase with "git worktree add
791 --no-checkout" on the most recent unchanged commit, then adding
792 each required commit with git-apply--cached and git-commit
793 - [ ] diff-mode editing enhancements:
794 - kill the file marker (+++) kills all chunks in the file
795 - kill the chunk marker (@@) kills the whole chunk
796 - insert line in chunk gets '+' prefix and updates line counts
797 - delete line in chunk updates line counts
798 - editing in chunk re-runs word-diff
799 - [ ] git-commit command (:Commit) which presents the patch and allows
800 it to be edited (with consistency checks and number updates). On
801 :Commit the patch is applied with "git apply --cached" an if
802 successful the message is added with "| git commit -F"
806 - [ ] review python doc:char implementations for simplification.
807 - [X] repeated alarm(10)/alarm(0) calls slow things down
808 - [ ] array index should allow two args, second being a mark for
810 - [ ] should be able to test if a mark is NULL or Freed
811 - [ ] should Efallthrough be an exception?
812 - [ ] Log loading of modules - Can I provide version info?
813 - [ ] we aren't catching errors from functions called from .connect()
814 Maybe use sys.excepthook(typ,val,tb)
815 - [ ] Add version info to python modules
819 - [ ] don't show errors unless doc has been changed.???
820 - [ ] highlight of adjacent blank lines isn't removed if first has text added
821 - [ ] support highlight suitable for diff: a space is first character is allowed,
822 even if EOL or followed by space.
823 - [ ] make set of highlights, and colors, configurable
827 - [ ] always run with timezone of Australia/Sydney
828 - [ ] add test infrastructure to display-x11
829 - [ ] tests for double-click and drag.
830 - [ ] test for recent search improvements
831 - [ ] Add mechanism to easily run a command with pre-canned output.
832 - [ ] Add one test case, and arrange for auto-testing on commit.
833 - [ ] allow single-step testing?
834 - [ ] Allow testing gtk as well an ncurses
835 - [ ] Allow testing of server/client accesses
836 - [ ] create a pane which exercises lots of code and measure coverage.
837 particularly cover all the doc-text undo/redo code.
838 - [ ] Track 'coverage' of all commands in keymaps.
840 ### dynamic completion
842 - [ ] unify UI with spell
845 - [ ] mode-specific so latex can ignore \foo
846 - [ ] Some way for 'c-mode' to report where comments are so they can be spell-checked
847 - [ ] drop-down with options
848 - [ ] unify UI with dynamic-completion
849 - [X] split range management out of autospell so it can be used by other
853 - [ ] regression test
854 - [ ] calc-replace should leave result in selection. - or only in the selection.
855 - [ ] calc-replace could cycle through bases.
856 - [ ] highlight error location in red
857 - [ ] trunc(a,2) a^b pi % // & | ~ &~
858 - [ ] increase precision of sqrt)()
859 - [ ] useful error messages.
860 - [ ] alt-p to interpolate previous expression
861 - [ ] fix Make dependencies so changing calc.mdc only requires one 'make'.
862 - [ ] Don't always show fraction - maybe request it like with '@' for octal
863 - [ ] if calculation produces same result as is present, don't modify doc.
867 - [ ] remove that blank line at the end of menus
868 - [X] Enable lib-menu to show short-cut keys
869 - [X] menu-bar to which we can add menus from which commands are sent
870 - [ ] track movement so entry under cursor can be highlighted
871 - [ ] support positioning above the target is no space below.
872 - [ ] support single-click to open modal menu.??
873 - [ ] improve hack for communicating action position. Maybe require
874 an 'is-button' attribute and report button height (and width?)
881 - [ ] file patterns for "complete" to (optionally) ignore
882 - [ ] read .gitignore and add to "ignore" list
883 - [ ] top/bottom margin - "render-vmargin" set on view or doc??
884 vmargin should be relative or absolute
885 - [ ] c-mode to use tabs or spaces for indent
886 - [ ] c-mode: use only spaces for bracket-alignment, or tabs as well
887 - [ ] shell command regex to choose parsing: diff, git-log, grep/make
888 - [ ] shift width for auto and manual left/right display shift
891 - [ ] colours of whitespace: tab, at-eol, tab-after-space, past-col ....
892 - [ ] whitespace max-col (per-line??)
893 - [ ] white-space blanklines at sof, eof, multiple-together
894 - [ ] colours for notmuch summary lines
895 - [ ] colours for urls
896 - [ ] colours: dir: flag/metadata/name/link
897 - [ ] colours: dir: header
898 - [ ] colours: email spacer
899 - [ ] colours: search: this, other, replaced
900 - [ ] colours: markup control
901 - [ ] colours: message-line
902 - [ ] colours: renderline wrap/truncate markers - char also
903 - [ ] colours: emacs: file-name open: ignored, Ok-dir, missing-dir,
905 - [ ] colours: emacs: selection: active, transient, replacable...
906 - [ ] colours: abbrev - prefix and completed
907 - [ ] colours: spell - errors
908 - [ ] colours: compose: headers, unknown, bad, header-marker,
910 - [ ] colours: compose: interpolated text, interpolation character.
911 - [ ] compose: known headers
912 - [ ] colours: diff: added, removed, '@@', diff-same
913 - [ ] colours: make: current-match, subordinate matches
914 - [ ] colours: mergeview: markers: conflict, space-only, good
915 - [ ] colours: mergeview: Unmatches, Extraneous, Changed, Conflict,
916 Conflict-spaces, Already
917 - [ ] colours: notmuch - LOTS
918 - [ ] colours: c-mode: paren-same, paren-different
919 - [ ] colours: hex ....
920 - [ ] colours: complete: matching section
922 - [ ] config alternate key-strokes???
928 - [ ] emacs-pinentry. pinentry-curses can talk to emacs using a
929 protocol that edlib can copy.
930 export INSIDE_EMACS=yes
931 Listen on a SOCK_STREAM at ${TMPDIR-/tmp}/emacs$(id -u)/pinentry.
932 On connect, end "OK". In general responses are lines terminated
933 by '\n' with OK or ERR ending a response
934 D <data up to newline> with %XX esacpe for % \n \r
939 Respond to GETPIN with D data
940 Respond to CONFIRM with OK if user sends OK.
941 Accept some settings:
942 SETTITLE Context for PIN
943 SETDESC Enter PIN for Fred Bloggs <freddy@bloggs.net>
944 SETERROR Error message
946 SETREPEAT IF PIN needs to be entered twice for confirmation
947 SETREPEATERROR message to show if they don't match
948 SETOK Text for label of OK button
949 SETCANCEL Text for label of "NO" or "Cancel" button
950 SETNOTOK NOT OK button???
952 - [ ] separate out CUA-base from mode-emacs:
954 - selection management
956 - arrows - shift for selection, control for word
958 - Next Prior Home End
959 - home/end - start/end of line
960 - Shift-home/end - start/end of file
961 - C-up/down start/end para
962 - C-bs C-del delete word
966 - two mode: command and entry
968 - d* c* s a A i I ^ $ / ? . fX
974 - "extra" on CUA-base which might conflict with emacs/vi, including
975 control-letter and function keys.
977 - C-c for copy, C-x for cut, C-v for paste,
979 - C-f find/replace C-S-f - search again
982 - attach an extensible menu to the selection
983 copy, paste-in, QR, git-view
987 Content is (mostly) ready-formatted. Need to parse and handle navigation.
989 - [ ] man page viewer
991 - MANWIDTH=72 MAN_KEEP_FORMATTING=yes man page and process X\bX
992 and _\bX for bold and underline.
995 - [ ] more charset support? Next in my popularity list from my email database
996 are: is0-8859-15 gb2312 iso-8859-2 iso-2022-jp gbk ansi_x3
997 kc_c_5601-1987 is a korean with 2-byte encoding when firt is >=0x80.
998 I don't think it can be parsed backwards..
999 windows-1250 is needed - or at least a reliable fall-back
1000 AM6PR04MB6328CFDD9A91D3F0125D1A1491809@AM6PR04MB6328.eurprd04.prod.outlook.com
1001 - [ ] use iconv(3) for char-set conversion
1003 - [ ] generic syntax highlighting:
1004 strings, comments, keywords, type/function/const/var distinction
1006 Possibly oversee diff/wiggle highlighting
1007 markdown bold/ital/code bullet, counter. heading.
1009 Call-out or regex to find para.
1010 Another to find words
1011 Maybe another to classify words
1013 Classify some content as "section" for outlining
1015 - [ ] gdb integration.
1017 - break at line in code
1018 - show code from reported line
1019 - continue to code location
1021 Possibly some of these will end up being features in other modules.
1023 - [ ] C/python code "index" pane to quickly jump to function, and see context
1024 This part of the IDE project below.
1026 - [ ] create view-pane that either puts a cursor on whole line, or moves
1027 the cursor to the "right" place. Maybe a markup to say "here is the
1028 preferred column" ?? Maybe use for make output so I can see current
1031 - [ ] tags handling - and easy tag-search without tags. e.g. git-search.
1032 alt-S looks for TAGS or .git and either does a tags-search or a grep-l and
1033 check every match. So maybe this is part of the 'make' module
1035 This might support a menu-bar, or drop-downs for spelling or dynamic completion.
1036 - [ ] hex edit block device - mmap document type
1038 - [X] image-display pane - e.g. can be given a png/jpeg etc file and display
1039 it scaled, plus allow scaling and movement
1040 - [ ] pdf-display pane - like image-display but with multiple pages.
1041 Would use libpoppler.
1043 - [ ] Separate out filesystem access from doc-text and doc-dir and elsewhere
1044 into a filesystem access module.
1045 - [ ] Create compress-access module that layers compression over fs access
1046 - [ ] Create gpg-access module that layers encryption and decryption over fs access
1047 - [ ] Create ssh-access module that uses ssh/scp to access files - maybe use python paramiko
1049 New Modules - more complex
1050 -------------------------
1052 ### remote editing ideas
1053 A good model for remote editing is to have a proxy at some point in the stack,
1054 so that edlib runs on both ends, but at some point a pane is a proxy for a remote
1055 pane (though maybe not 'pane' exactly) which connects over the network.
1058 - raw-display: this might have just ncurses on the client and everything else on
1059 the server. client could send keystroke, mouse events, resize/refresh request,
1060 selection-request, selection-content, and maybe file content
1061 server could send "panel" create/resize/reposition, panel clear,
1062 draw text with attributes, selection-request, selection-content, file-content
1063 run-command request (e.g. to run a local viewer for attachments)
1064 - generic-display: This could be a full pane, but would need to proxy
1065 Draw:text-size measurement requests which might be slow
1066 - doc-view: This would be a proxying core-doc view (doc_handle) where all
1067 the viewing panes are local, and all the doc-side panes are remote.
1068 This seems most elegant, but managing updates to marks and handling all
1069 callback might be awkward
1070 - specific docs: Some documents would explicitly support proxying.
1071 e.g. text, dir, docs. Any doc filtering (e.g. charset, crop etc) would
1072 happen locally. The proxy would use a lease to cache content locally
1073 and would treat a lease timeout like on-disk file change.
1074 - filesystem: this is little more than an sshfs mount. Probably too low level.
1076 One outcome of these musings is that edlib programs should run external
1077 commands and access file through a specific pane - either a doc pane or
1078 a display pane. This might result in them running on different hosts.
1080 The protocol over then should be QUIC if possible as they seems to allow
1081 mobility nicely. I'd need to look at how it handles network breaks.
1085 I don't think I'll go with QUIC. I'll make something focussed, like
1086 mosh and wireguard do.
1087 ssh will be used to request a key and 2 nounces - requested over the
1088 server socket. Using this key, messages are secured with the "secretbox"
1089 module of libsodium and sent via UDP - client can send from anywhere and
1090 server replies to there.
1092 Client sends keystrokes, mouse-action, size report. Each have an event
1095 Server sends pane reset/create/destroy/clear/update/done messages.
1096 These have sequence numbers with a history stored and updates are resent
1097 if a client message has an old seq number. If the client seq is too
1098 old, the server can send a reset, then create and fill each pane.
1100 The client acknowleges server messages with a 'size' update, and also
1101 reports the size every 5 seconds as a ping. Server replies with any
1102 un-acked updates, or with a new 'done' message.
1104 Some day I might need "measure" requests from the server which the
1105 client can reply to, so texts can be measured for variable-sized fonts.
1106 Server would need to cache results for performance, and would need to
1107 know if a font is constant-width, so a single measurement will suffice.
1109 I also need basic file transfer - particularly from server to client
1110 so that an external viewer can be run. May as well make it bi-di so
1111 that an external editor can be requested.
1115 An import characteristic of a good editor is low latency. While you can
1116 usually get good latency in a single thread by dividing the work up into
1117 small tasks run from an event loop, this isn't always possible or easy.
1118 So some sort of threading will be useful.
1120 Some of the use-cases for threading that have occurred to me are:
1122 - multiple event loops:: gtk code needs to use the glib event loop, but
1123 I rather use a simpler event loop when not using gtk. I current have
1124 a mechanism to select between event loops so the glib one is selected
1125 for everything if anything needs it. But I don't like this approach.
1127 If I could have threads, I'd have the edlib event loop handling
1128 the main editor loop, and gtk could be in a separate thread with its
1129 own event loop, exchanging messages with the main loop as needed.
1131 - long-running tasks:: word count and spell check can each be divided
1132 up into small events, which each do a limited amount of work and reschedule
1133 themselves, but having a separate thread that could just keep working
1134 until the job is done would be easier.
1136 - fsync:: Calling fsync when saving a file is important, but can be slow.
1137 It would be nice if the main thread could just write out the file,
1138 then a separate thread could call fsync() and report when that was done.
1140 - remote editing:: It probably doesn't require threads, but they might
1141 be a suitable abstraction for allowing one editor instance to work
1142 with another over a socket - possibly between machines. I imagine
1143 an editor running on my notebook communicating with the editor
1144 running on my desktop - directly accessing the document as stored
1145 in the desktop editor. These would have to be two separate threads - separate
1146 processes even. The same mechanism used for local threads to communicate
1147 could be leveraged for remote threads to communicate.
1149 I probably don't want any shared data structures except the pipe that sends
1150 events back and forth, and these events need to be standard commands communicating
1151 between panes. So it might be a variant of notifications.
1153 Keeping tracks of marks across the link will probably be the most complex
1154 part. Possibly only marks owned by the pane will be mirrored across.
1156 ### interactive shell / terminal emulator
1158 I never quite got into using shell-mode in emacs - it never felt quite
1159 as raw as an xterm. And the infinite history bothered me - possibly
1162 Still, a shell mode for edlib might be a useful thing, though having
1163 edlib easily available in any terminal window might be just as good.
1165 If I did a shell mode, I would capture the output of each command into
1166 a separate buffer, and display all those buffers in the one view.
1167 Sufficiently old buffers would be discarded. Output from any recent
1168 command could easily be saved or piped. It would be possible to
1169 arrange for some interactive commands to also send output of each
1170 command to a separate buffer.
1172 Auto paging would be disabled (where possible) and edlib would page
1173 output as needed. This means that `cat bigfile` could move the whole
1174 file into a buffer, which wouldn't be good. If a “less” command could
1175 give the filename to edlib and let it display, that might be nice.
1177 It would generally be useful to have a pane that read from a pipe and
1178 only read more when some view wanted to see more of the output. It might
1179 also be useful for such a pane to store the content in a mem-mapped file
1180 rather than in anon memory.
1182 ### Outline code rendering.
1184 I like the principle of outlines and only showing the heading of
1185 nearby sections, but the detail of the current section. I've always
1186 found them a bit clumsy to use. I want the rendering to automatically
1187 do what I want, partly depending on where the cursor is, partly
1190 So when I am editing I want to see a lot of immediately surrounding
1191 text, but I also want to see nearby minor headings and all major
1193 If headings are short enough and there are enough of them, the having
1194 several to a line would be a good idea - maybe even abbreviated. If I
1195 click on an abbreviated heading in the middle of a line at the top of
1196 the screen, then that section should open up, and the nearby sections
1197 should get a bit more space.
1199 When searching, I probably don't need as much context of the current
1200 point, so less of the current section would be displayed, more of
1201 surrounding sections. If those surrounding sections also contained
1202 matches, then that would be the part of those sections that was shown.
1204 I would like to implement this sort of view for markright mode, but
1205 more importantly I want to implement it for C-mode. When editing C
1206 code (which I do a lot) I want the few lines at the top and bottom of
1207 the view to just list some function names. Then maybe a few lines
1208 with function signature one the whole line.
1210 Certainly the start of the current function would appear somewhere no
1211 matter where in the function I am editing, and as many of the
1212 variables as possible. If I am in an “if” statement in a “for” look,
1213 then the loop header and the if condition would be displayed if at all
1216 ### a “reflection” document so I can view the internal data structures.
1218 When developing a new pane things go wrong, but it is hard to see what.
1219 I want a pane which shows me the structure of all panes, with parent/focus
1220 links, with notification chains, and with other ad-hoc connections.
1222 I'd also like to be able to follow a command as it moves through the panes.
1223 This probably needs to be recorded, then played back for me.
1225 ### calendar/diary/planner
1227 I don't keep a diary or use a planner much, so this seems like an odd thing to include.
1228 But dates are cool, and this is a highly structured concept and I like structure.
1229 At the very least I want a calendar pop-up.
1231 ### A suite of tools making use of some sort of "mark-down" like language
1233 Restructured text? Markdown? Commonmark? Markright?
1235 Having simple readable extensible markup is useful for writing
1236 READMEs and TODO lists and emails and calendar entries and presentations
1237 and all sorts of stuff. I probably want to invent my own, because the
1238 world always needs another markup language.
1242 - easy render to PDF - e.g. use PyFPDF
1243 - ASCII-Math or similar
1244 - anchors for links, structure tags (author, title), foot notes,
1245 figure captures, tables, index, content.
1247 - spreadsheet cells for auto calculations.
1248 - outlining support of course.
1250 Syntax - markdown plus...
1253 - basic paragraph: not indented more than 3 spaces
1254 - heading: starts # or single line followed by 3 or more - or = on next
1256 - bullet list: lines starts '-' in first 4. Following lines that are
1257 indented are included. Maybe '*' or '+' also do same?? A waste
1258 - number list: digits period.
1259 - block-quote: lines start '>' These nest naturally
1260 - code: lines indented with no prefix
1261 - fenced code: line starts ``` then until a close. Ouch - hard to parse
1263 - horzontal rule: --- or ___ or *** and nothing else following blank line
1265 - table. Line start '|' continue to blank line.??
1266 A row starts with '|' at start of line and ends with '|' at end of line.
1267 - formatting info starts ':'
1268 - image: ![caption](file)
1269 - reference [label]: link "text" If link in HERE then internal
1270 reference. link can have #label to find label in that file.
1273 - is a line ends 2 or more spaces, hard line break. If 0 or 1, then continue
1278 `word` is monospaced (code)
1279 [word] is a link. [word](link) is too
1280 or [word](link "title text")
1285 \X is X literal. \ * _ `
1287 $=number[calculation](format)
1289 Formatting controls..
1291 Non-module functionality
1292 ------------------------
1296 Both user-documentation and developer documentation, extracted from
1297 literate programming comments, and viewable using markdown mode. This
1298 would include links to other files with more content. Maybe
1299 documentation from a given file could be parsed out and displayed
1300 interactively by a doc pane.
1304 To build an IDE with edlib there are various parts that are needed.
1305 They wouldn't all be in one pane, but the various panes might work
1308 Functionality includes:
1310 - LSP (Language Server Protocol) integration.
1311 - build:: I can already run "make" easily, though there is room for improvement.
1312 - error location:: Going to an error line is easy. It might be nice to have
1313 the error message appear in-line with the code, rather than needing to have
1314 a separate pane containing that.
1315 - search:: jump to definition or use of function, types, variables, structure fields etc.
1316 Most of this needs an external tool, whether 'grep' or 'git grep' or 'cscope'.
1317 - syntax highlight:: different colours for different types of symbols is sometimes nice.
1318 - auto-format:: indenting and comment wrapping are particularly helpful to have
1319 automatic support for. I've never found I wanted key-strokes to insert
1320 structured commands, but maybe having a close-bracket auto-added when
1321 the open is typed would be nice. Then when close is typed, just step over
1322 the already existing one.
1323 - outlining:: I would really like to always be able to see the function name and
1324 signature - and probably the names of surrounding functions so that I can easily
1325 navigate to them. See "Outline code rendering" above.
1327 Interaction with gdb would be nice too - things like
1329 - set break points and watch points from the code
1330 - step up and down stack and jump around code at same time.
1331 - view values of variables directly from the code.