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