On Tue, 11 Aug 2026 21:40:09 +1200, Michael Cree wrote:
Mind you, I have always programmed Matlab using emacs and normally reduce the GUI down to the command line window only. But the lastest version is a shocker that even ruins that experience, and for the first time ever I am wondering whether to move to other tools.
I was actually talking about creating a GUI for a custom application written in MATLAB. Using a language which was purpose-built mainly for dealing with arrays, now trying to cope with more complex data structures like GUI widgets, and with no proper event loop as such ... not fun.
One of my colleagues has always thought well of Julia but has never fully switch to it because it is still lacking in features.
I know you’ve previously expressed a dislike of Python. But it remains the one that attracts all the best add-on support, and also all the best minds to work on adding that support. I agree that relying on indentation for statement structure was a mistake. My way of dealing with this is to add “#end” comment lines indicating the ends of compounds statements. E.g. a block of my code, written more the way others might lay it out: now = time.monotonic() if now - last_flush >= poll_delay : try : waited = os.waitpid(-1, os.WNOHANG) except ChildProcessError : waited = (0, 0) if waited[0] != 0 : child = tuple((i, c) for i, c in enumerate(children) if c["proc"].pid == waited[0]) # sequential search good enough for small nr connections if len(child) > 0 : (i, child), = child logger.log \ ( (logging.DEBUG, logging.WARNING)[waited[1] != 0], "child pid %d terminated with status %d" % waited ) child["waited"] = True if child["done_output"] : os.unlink(child["outpipe_full"]) children.pop(i) else : logger.info("child pid %d, status %d is not one of mine" % waited) last_flush = now versus the way I actually write it: now = time.monotonic() if now - last_flush >= poll_delay : try : waited = os.waitpid(-1, os.WNOHANG) except ChildProcessError : waited = (0, 0) #end try if waited[0] != 0 : child = tuple((i, c) for i, c in enumerate(children) if c["proc"].pid == waited[0]) # sequential search good enough for small nr connections if len(child) > 0 : (i, child), = child logger.log \ ( (logging.DEBUG, logging.WARNING)[waited[1] != 0], "child pid %d terminated with status %d" % waited ) child["waited"] = True if child["done_output"] : os.unlink(child["outpipe_full"]) children.pop(i) #end if else : logger.info("child pid %d, status %d is not one of mine" % waited) #end if #end if last_flush = now #end if I think that makes it clearer where the structures are and how they nest, don’t you think? Also, I have custom Emacs commands defined to jump between lines with matching indentation. This includes the “#end” lines, so I can easily navigate between the beginning and end of a compound statement with just a keystroke.