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