43c16c9d2c4690ebb6b8e9e6109cc156dccdd0d6
[scilab.git] / scilab / modules / scipad / BUGS
1 SCIPAD BUGS AND WISHES LIST
2
3
4 Bugs:
5 -----
6 -bug 2789, of course (debugger broken by the new Scilab-Tcl interface)
7  A few references:
8  http://bugzilla.scilab.org/show_bug.cgi?id=2789
9  http://wiki.scilab.org/Tcl_Thread
10  http://wiki.scilab.org/Scipad_debugger_inner_beauties
11
12 -issues related with non colorizing single quoted text:
13   . code lines such as mprintf("%s",'this is a function') break the line
14     number counting in functions if not properly colorized as textquoted.
15     Solution could be to detect all quoted strings, with single or double
16     quotes, and .textarea tag add some invisibletextquoted aside the
17     existing (visible) textquoted tag used for colorization, and use only
18     invisibletextquoted for Scilab function detection within buffers, in
19     other words, separate the strings detection from their colorization
20     Note: when done, the messageBox in proc checkforduplicateorunterminatedfuns
21     must be updated (and the msg files as well)
22
23 -proc blinkbrace blinks even if the brackets/braces are quoted, e.g. "[" "]"
24
25 -proc blinkquote blinks even for partially commented text, e.g.
26  a "string.. // this is no "string
27
28 -On some platforms certain bindings for blinking character never trigger,
29  e.g. for bracketleft on Windows (AltGr-5, french keyboard) one gets
30  Control_L plus parenleft - this one however blinks through the parenleft
31  binding, but others such as braceleft do never trigger and gives
32  Control_L plus quoteright - depends on keyboard, platform and whatnot...
33  See also bug 1542
34
35 -Some shortcuts may not work on certain platforms. E.g. Control-F1 does not on
36  at least one Mandrake 10.1 Official Linux. Was also found on a RH8 machine.
37
38 -When a function definition line ends with a comment, the line numbering is
39  wrong 1 unit, resulting in various strange behaviors: execution not stopping
40  at breakpoints or not up-to-date value of variables in the watch window
41  This is Scilab bug 1469 (outside of Scipad) that deals with the general
42  issue of mismatch between line numbering as reported by fun2string and that
43  held by the breakpoint handling
44
45 -logical line numbering issue:
46    function a=foo(); a=1;
47     a=2;
48    endfunction
49  In scipad, a=1 is on line 1; for scilab it is on line 2 of function foo
50  Also related to bug 1469 - better wait for clarification on this one instead
51  of working around Scilab parser bugs
52
53 -step-by-step debugging may highlight the wrong line in Scipad when continued
54  lines without dots are present before the breakpoint stop. Bug 1469 again!!!
55
56 -Bug 1469 once more in the following case (mind the spaces before
57  "endfunction"):
58 function test
59   a=1
60   endfunction
61  In this case the debugger in single step mode will highlight line 1 after
62  line 3 whereas this won't happen for:
63 function test
64   a=1
65 endfunction
66
67 -watching some very large variable content looks like the variable is empty
68  This is Tk bug 1449858.
69
70 -Multiple file open in the file dialog: There is a Tcl bug on tk_getOpenFile,
71  which does not correctly work on Linux with -multiple 1 option. See Tcl
72  bug 1614032. I have proposed a patch for this bug to the Tcl core team, but
73  it is not yet committed in the Tcl source code. There is also bug 1578519
74  about special dirs on Windows, still for tk_getOpenFile.
75
76 -When there are wrapped lines of varying lengths, as the user scrolls, the
77  length of the scroll box changes. 
78  This is actually fixed in Tk 8.5: http://www.tcl.tk/cgi-bin/tct/tip/155.html
79  No workaround available in 8.4, this is a deep Tk core issue.
80
81 -Line numbers of lines located after the active breakpoint are slightly
82  misaligned with the lines they're facing. This is due to the font of the
83  active breakpoint tag ($actbptextFont), which has a slightly larger size
84  than $textFont, the latter being used for the line numbers.
85  A general scheme should be derived so that line numbers support different
86  font sizes in the text they face. The algorithm could be something like:
87    . Check what tags has the line in front of the line number
88    . Retrieve the -font option of the highest priority tag
89    . If this is not empty, extract the -size attribute of the font and tag
90      the line number with a modified $textFont having this -size
91    . Otherwise (the -font option of the higest priority tag is an empty
92      list) check out the tag that is of priority just below the highest
93      and run the game again
94    . When there is no tag left, use the $textFont -size value as a fallback
95  Beware of performance issues here! This must be done for each visible line!
96  Moreover, this would still not be perfect: mixed sizes inside single lines
97  would not be supported (but such complications are anyway not used in
98  Scipad currently)
99  Easier fix: use the same size for all the fonts displayed in textareas!
100
101 -watching a list containing a list with an undefined
102  element resets the watched variable to an empty list (perhaps proc
103  createsetinscishellcomm should be recursive)
104  example: watch Q in   M=list(1,2,[1,2]);M(5)=33;Q=list(M,888);
105
106 -bug in the font chooser: If I tag some properties, then OK, then reopen
107  the dialog, sometimes they are reshown tagged, sometimes not.
108
109 -on at least one system (RH Linux), opening the font chooser, clicking OK
110  and reopening it can make the font size increase everytime the chooser
111  is opened again. This behaviour is font dependent. This is a Tk bug:
112  http://sourceforge.net/tracker/index.php?func=detail&aid=1548868&group_id=12997&atid=112997
113
114 -now that bug 2161 is fixed and the behavior of exists(..,option) is clarified
115  perhaps ext_exists.sci should check whether the variable exists in the
116  global environment, since (from help exists): "the exists function does not
117  check if a variable exists in the global namespace" -- well, first let's
118  wait for clarifications about help macrovar (see bug 2161 comment #5)
119
120 -when background tasks are not allowed, typing quickly enough will produce
121  shuffled output: output characters are not in the order they were typed.
122  This happens when the load on Scipad is heavy, for instance with the test
123  case provided here:
124  http://groups.google.fr/group/comp.soft-sys.math.scilab/browse_thread/thread/ea6b6dc9bce5f0e6
125
126
127 Old bugs/whishes which have been hacked but could have been done better:
128 ------------------------------------------------------------------------
129
130 -the window geometry is now managed in pixels. This is fine for restoring
131  exactly the same window geometry as in the previous session, but loses
132  some advantages of the previously broken grid management, such as resize
133  of the window upon font size changes.
134
135 -2nd-button now succeeds in importing an X external selection into scipad
136  under linux. With one remaining glitch, the insertion cursor zomps back
137  to the beginning of the insertion at the end of the process.
138  Under windows 2nd-button is ineffective if the selection is external, 
139  but has the side effect (with some glitches) to drop at the mouse point the
140  selection it is within scipad
141  On Windows:btn-2 in the same textarea as the selection: it's a move (wrong!),
142  while btn-2 in another textarea: it's a copy/paste
143  On Linux: always copy/paste (correct)
144
145 -Make printing from Scipad work on Linux and implement it for Windows.
146  Try to preserve the colorization in the process.
147  Possible references for implementation on a Windows box are:
148  http://wiki.tcl.tk/11319
149  http://wiki.tcl.tk/9846
150  http://pages.infinit.net/cclients/files/tkprint1.1.html
151  http://wiki.tcl.tk/2497
152  http://aspn.activestate.com/ASPN/Cookbook/Tcl/Recipe/284848
153  Tk request 734625 (Output the contents of a text widget to a (PostScript) file)
154  Tk request 220817 (Direct Print Support for all widgets)
155  http://www.du.edu/~mschwart/tclextensions.html (printer extension)
156  http://www.nyx.net/~mschwart/ (printer extension)
157  -- Printing works on Linux and now also on Windows. It makes use of Scilab
158     internal new functions that do not preserve colorization. I'm convinced
159     that an internal Tk printing scheme would be better.
160
161 -trying to debug functions with names > 24 characters does not work. This is
162  a very general Scilab limitation (in the debugger context, setbpt looses
163  characters for long names, that's why it doesn't work). Currently 
164  a check on name length when colorizing user functions has been added to
165  remind the user from this limit. Only this visual hint is provided, i.e.
166  configure execution will propose too long names. Scipad or the debugger
167  is not limited to 24 chars, but Scilab still is. Let's wait for Scilab
168  improvement instead of restraining the debugger!
169
170 -anything could happen during debug if the same function name can be found more
171  than once among the opened buffers, for instance the wrong buffer could become
172  the active one to show the active breakpoint - same issue in configureexec:
173  if a function is defined in more than one buffer, proc checkarglist may
174  detect the wrong one and prevent correct configuration of the debugger
175  Since duplicate function definitions are not supported by the debugger, a
176  warning is issued to the user, and the debugger refuses to execute
177  To let the debugger support this would perhaps be desirable, but very difficult
178  since the internals in Scilab store breakpoints linked to a function name:
179  setbpt("funname",bptline).
180  Two functions with the same name would therefore mix their breakpoints!
181
182 -Avoid to destroy and recreate the whole watch window when hiding/displaying
183  one of its sub-areas. Would probably require -hide option for panedwindow,
184  but this one is only available from Tk 8.5 (TIP #179)
185  --I tried it and indeed using -hide avoids to redraw the watch window when
186    panes are hidden or remapped.
187    However, when both the variables area and the call stack area are hidden,
188    the watch window must be non resizable, thus wm resizable 0/1 0/1 when
189    switching panes. This wm resizable command always redraws the window
190    because of the need to redraw the border, and this creates a visual flash
191    of the window. I couldn't avoid it, and thus I just dropped this wish
192  --in case this wish comes up again, investigate whether TIP 125 (Converting
193    between Frame and Toplevel Windows) could be of any use to dock/undock
194    the watch window (well, this feature is already working well, but if the
195    watch could hide/display its parts without a complete redrawing, then
196    TIP 125 could be useful). TIP 125 is implemented in Tk8.5b2 (27/10/07)
197    and above.
198
199 -during debug, string variables which contain data which does not make sense as
200  text in the current locale, are shown as mangled in the watch variable area.
201  This can happen for example when watching a chinese string in a latin locale.
202  The behavior is intrinsic in tcl, and after all understandable as such. While
203  we don't make any effort to circumvent tcl interpretation of illogically coded
204  strings, the fact could have side effects on the original variables if debug
205  exits abnormally.
206  Snippet to demonstrate the intrinsic problem:
207
208    $ setenv LANG ja ; scilab -nw -nb
209   -->a=ascii([230,173,164]); TCL_SetVar("atcl",a);
210   ascii(TCL_GetVar("atcl"))
211     ans  =
212        186.    161.
213
214
215 Wishes:
216 -------
217
218 Debugger wishes:
219
220 -Use the -listvariable option for $lbvarname and $lbvarval listboxes - this
221  could automate a lot of sync work with watchvars and watchvarsprops
222
223 -Add an "Evaluate now!" button in the generic expressions area. Warning: then
224  a roundtrip to Scilab must be done before evaluating, or let the roundtrip be
225  mandatory when modifying any watch variable
226
227 -Scipad defines and uses, mostly for the debugger, some variables in order to
228  send values to Scipad. All these variables currently start with the prefix 
229  db_, in order to reduce the risk of the use of such variable names in Scilab
230  for another purpose, e.g. in the function to be debugged. We could use more
231  sophisticated things to be absolutely sure that the variable names 
232  instantiated by Scipad are not used in Scilab, so that conflicts would 
233  always be avoided. For instance, browsing the existing known
234  variables and checking for existence, etc. could be used (who, who_user...)
235  At least, db_xx names should be made 24 char long (longest=less likely that
236  mr. lambda chooses the same name) and have the word scipad sneaked inside
237  them to make things clearer.
238  Another improvement would be to use implementation of request 319 whenever
239  possible, i.e. switch back all the TCL_EvalStr("set temp ....");TCL_Getvar("temp")
240  of the current codebase into using the result of TCL_EvalStr directly.
241  This will also avoid some ifs about the scilab4/5 environment
242  But the final fix would be to have namespaces in Scilab.
243  And anyway this naming convention should be documented in scipad.xml
244
245 -include profiling into the debugger. The idea would be something like
246  making "Run Profiling" another button/command of the debugger, disabled
247  in editing mode, active only after Configure for Debug. Once started 
248  profiling, all the debugger stepping and watch commands would be disabled,
249  except for "break" and "cancel debug". At the end of the run, 
250  plotprofile() is called [plotprofile too needs to be adapted so
251  that it won't create a new buffer, but refers to the original].
252  "Run profiling" would also be callable again, for cumulation.
253  There is however a big potential showstopper. For profiling, the
254  function (or wrapper) has to be getf(,"p"); we're now making the
255  functions known to scilab with exec() instead. getf() has known bugs
256  (1968, 2072, 2253) and limitations in comparison with exec().
257  In particular it doesn't support nested function definitions (bug 1564).
258  Oh yes, but in Scilab5 we now have add_profiling !
259
260 -breakpoint, activebreakpoint and continued lines tags are not visible
261  when selected. No solution found so far. Only one tag with -background
262  option has highest priority, and there is no -selectbackground option
263  for tags (the latter is Tk request #1759972)
264  This problem has been submitted in comp.lang.tcl, see:
265  http://groups.google.com/group/comp.lang.tcl/browse_frm/thread/d60973524b786c0e/14a82aef3b1dd24f
266  It has been suggested to create a tag that has the desired background
267  attributes, add an execution trace on the widget command, and whenever
268  the selection changes (e.g.: when the execution trace fires on a
269  "tag add sel"), add this tag to the selected range.
270  Personnally, I think this is a very complicated way of making this
271  work, especially considering that three tags with background should
272  be dealt with and combined (what about a continued line also tagged
273  as a breakpointed line, in which some characters are selected?)
274  Not worth the effort and complication I think.
275  Now that one side margin is implemented (for line numbers), it is pretty
276  easy to add further margins and this could be used to tag breakpoints
277  instead of tagging the line (but there is a lot of implications: for
278  instance the debugger currently scans the textarea for breakpoint tags
279  and does not maintain a list of breakpointed lines)
280
281 -add a debugger command: "Show next instruction", with a little yellow arrow
282  in the margin, and perhaps a breakpoint pink dot in that margin, or other
283  debugger info
284
285 -debug of functions with argn(1)>0
286  the debugger is not able to go into something like
287      function [a,b,c]=foo(x,y,z)
288        if argn(1)<>3 then error(41); end
289      endfunction
290  The current version of the debugger cannot cope with this because it always
291  invokes the configured function with no lhs
292
293 -new debug command: Continue out of loop
294
295 -increment the breakpoint hit count for any debugger move, not only in nostep
296  mode. Currently the hit count is not incremented when the debugger stops on
297  a breakpointed line, unless this line has been hit using F11. E.g. in step
298  by step mode, passing over a breakpoint doesn't increment the hit count.
299  The problem is that bptsprops($ID,hitcount) doesn't exist at any debug stop,
300  it only exists for stops corresponding to a breakpoint that was set
301  previously by the user
302
303 -add a condition type (perhaps, but then document it also): isinerror
304
305 -breakpoints GUI: right-click (or another way?) to remove a breakpoint from
306  the breakpoints GUI.
307  But then, adding breakpoints should perhaps also be possible from the GUI?
308
309 -breakpoints GUI: change the areas containing the name of the breakpointed
310  function and the line number into editable spinboxes allowing the user to
311  modify the breakpoint position from the GUI
312
313
314 Other wishes:
315
316 -Improve the look and feel of Scipad by using Ttk (Tk8.5) - This applies
317  especially to Linux platforms
318
319 -parentheses and brackets get colorized in colors according to their level
320  of nesting
321
322 -unmatched parentheses are highlighted (e.g. stroke-tru) like in Matlab's 
323  editor
324
325 -highlighting of for--end, while--end, select--end blocks while
326  typing, like for parentheses; scope background remains highlighted in a
327  background tint (choose a suitable scheme for nested structures), OR,
328  block keywords are highlighted in different colors than standard keywords.
329
330 -a taylored 3rd-button popup menu (currently it is just the edit menu) - i.e.
331  it includes execute selection, comment/uncomment this line, insert/delete
332  breakpoints
333  Note: a first step to this has been implemented. During a debug session, 
334  the popup menu is a debug menu.
335
336 -(customizable?) tool bar
337  Note: a first step to this has been implemented in the debugger watch window.
338  What this wish is about is a toolbar right below the main menu bar, with the
339  usual icons/actions: Open, Save, Find...
340
341 -Blink single quotes. More difficult than to blink double quotes because
342  of the transpose case
343
344 -'Matlab' colorization scheme for .m files
345
346 -"auto smart wrap on": lines exceeding a margin could be truncated at
347  word boundaries with .. dots and \n
348  Hint: some clever use of the -wraplength option of text widgets?
349
350 -Add an eventual "revert to defaults button" (colors option menu)
351
352 -*maybe* a global undo stack instead of one per buffer
353  advantages: can undo at once a dnd from one pane to another one
354  drawbacks : big big implementation work if the built-in undo of the text
355              widget was abandoned, but maybe it could be feasible to detect
356              changes in the undo stacks of more than one buffer at the same
357              time - still tricky...
358  Note that as per TIP 169 peers already share one single undo stack
359
360 -minimal Scipad wm size: Probably it would be wise to make the minimum
361  dependent on the number of tiles, so that all the features (menu, title,
362  textbuffer, scrollbars...) remain visible - take fontsize and locale into
363  account
364  warning: updating minsize on file open or dnd could lead to a very large
365  window, therefore minsize should also be clamped to some clever maximum
366
367 -Improvements for find/replace:
368   . Dynamical indices in the find in files results: Currently: launch find
369     in files, then delete a line in the buffer between two matches, then
370     click on the second match. The wrong line is highlighted. Beware of
371     performance while fixing this!
372   . The find/replace entries in the dialog could be comboboxes retaining
373     the strings previously searched or replaced
374       o combobox 2.3 and BWidgets 1.7.0 are currently in the Scilab distro
375         and both provide comboboxes. We could link Scipad to them, but
376         apparently the Tile package, which also provides combos, is now
377         included in Tk and will be part of Tk 8.5.
378   . Multiline find/replace and find in files (to be tested with Tk8.5, which
379     has the feature; no fallback seen in Tk8.4 since in
380     8.4 .text search searches on a per line basis - or use regexp instead
381     of .text search, big work...) - Automatically expand the entry widgets
382     size according to the length of what is pasted inside them
383   . More than one results window for find in files (user can select a
384     target window that will contain the search results)
385   . More than one find in files thread at the same time
386   . Emacs like search (Ctrl-s). It is now implemented under Firefox, even
387     under windows. The search goes on as you start typing in the word you are
388     looking for. Opening a separate widget really slows down the search. Firefox
389     has made an excellent tradeoff between emacs' expert like behavior and
390     windows facilites. This feature however involves a new subpane at the
391     bottom of the window, some alternative search and mark procedures,
392     etc. Probably feasible but discussable if worth the effort; then the
393     existing search dialog will become "advanced search" as there is
394     certainly no room for all its options in an one line subpane.
395
396 -detect duplicate/missing underlines in the message files
397
398 -Improve further the regexps for continued lines detection, the goal being
399  to detect only legal (in the Scilab parser sense) continued lines.
400
401 -Emacs bindings in Scipad. Proposed list is at:
402 http://groups.google.fr/group/comp.soft-sys.math.scilab/browse_thread/thread/dc0807b11fb118ab/9fe94a45d23f92fe
403
404 -Improve bindings for keypad keys:
405   NumLock-off KP-7       --> Home
406   NumLock-on  KP-7       --> 7
407   NumLock-off Shift-KP-7 --> Mark from current to beginning of line.
408   NumLock-on  Shift-KP-7 --> Mark from current to beginning of line.
409   NumLock-off Ctrl-KP-7  --> Mark from current to beginning of text.
410   NumLock-on  Ctrl-KP-7  --> Mark from current to beginning of text.
411 (and likewise for KP-1 and end of line/text)
412
413 -Add a function "Beautify code" for Scilab schemes: (optionally) suppress
414  tabs, and reindents according to keywords (if, function, while, for...)
415  This is aka automatic indentation (like indent-region in emacs)
416
417 -When executing the content with a button, the scilab command line is not
418  put in the history. This means that it cannot be called back with arrows.
419  Often the editor is used to write a script that is wanted to be run a number
420  of times. It would be nice then not to have to click on a button and just
421  recall the command using arrows (or ctrl-p)
422  Might be feasible: addhistory, gethistoryfile, but in trunk (Scilab5) only
423
424 -Request 262: tabbed buffers (see discussion in this request)
425
426 -Request 459: memorize some informations related to a window (see discussion
427  in this request)
428
429 -Requests 461 and 462: improvements wrt to xml editing. However, the position
430  expressed by Enrico says it all: "Scipad was never really conceived to be a
431  full fledged xml editor - there would be too much to do and there are much
432  better dedicated editors around - I'd be a little wary of introducing new
433  features here."
434
435 -Use eq/ne instead of ==/!= throughout the code whenever string comparison
436  is meant:
437 http://groups.google.fr/group/comp.lang.tcl/browse_thread/thread/eea78c744811e2c3/47482ff7037343ab
438
439 -diff feature: dialog allowing to select two files among the opened ones (or
440  browse for not yet opened files), and launch an external diff tool such as
441  winmerge (Windows), or others. The command to launch the tool is stored as a
442  preference. Watch out for security problems if someone stores "format c:"!
443  Or integrate a Tcl diffing tool perhaps? tkdiff is a well refined and mature
444  tool, distributed under the GPL.  http://sourceforge.net/projects/tkdiff/
445  The GPL license and the fact it's written in Tcl are two strongly positive
446  facts wrt integration in Scipad
447
448 -remove the scilab4/scilab5 environment detection once scilab5 is stabilized
449  and if it doesn't ease backporting to scilab-gtk. Code to remove can be
450  found by highlighting differences between versions 6.117 and 6.118 of Scipad.
451  Well, not sure this should be done after all. Why would we prevent backports?
452
453 -improvements in the font chooser (proposal to be refined):
454  1. For each (text- and menu-) font, add a new area similar to the already
455     existing example area, for displaying the current fonts, with their
456     properties (Name, Size, Style) written in clear text in the -text
457     option of the labelframe. This area always displays the fonts as they
458     were on the dialog opening, along with the properties the fonts had
459     also when the user opened the dialog. In other words these new areas
460     never change their content during the time the dialog is open.
461     The user can then visually compare the font he used (i.e. the font he had
462     before any change) with the one he will use if he clicks on
463     OK or Apply (this was the initial request). The font he used is displayed
464     in the new area, while the candidate new properties of the selected font
465     are displayed in the already existing sample area.
466  2. When switching from Text to Menu font (the radiobutton), the current
467     values of the font (the current ones in the dialog, with default values
468     being the original font ones) are preserved, so that when switching
469     again they are preselected again.
470  3. Add an Apply button (the font chooser dialog will flash, i.e. close/reopen
471     immediately - acceptable).
472     Clicking on OK or Apply applies the selection to the "Use as" font only.
473  4. The "Use as" should place the radiobuttons next to the sample text areas,
474     so that it's visually clearer what to press for changing what. (this could
475     well become a nightmare to kep everything aligned...)
476 An other possible solution is to wait for tk_chooseFont be implemented in Tcl:
477 https://sourceforge.net/tracker/?func=detail&atid=312997&aid=1477426&group_id=12997
478 This is patch 1477426, with already a number of implementation proposals.
479 Might be far better to make use of the Tcl-designed selection font, keeping mine
480 as a default fallback whenever the user has an old Tk version.