Thanks, I'd appreciate it.

On Sunday, February 19, 2023 at 12:38:04 PM UTC-5 jkn wrote:

> sorry, I have installed it but not tried it. I'll give it a go this week
>
> On Sunday, February 19, 2023 at 2:27:15 AM UTC tbp1...@gmail.com wrote:
>
>> If nobody complains about it in another week, I'll package it up as a new 
>> Leo command.
>>
>> On Monday, February 6, 2023 at 4:15:40 AM UTC-5 jkn wrote:
>>
>>> I'll give it a try (kubuntu linux, mainly) and let you know what I 
>>> find...
>>>
>>> On Monday, February 6, 2023 at 6:18:42 AM UTC tbp1...@gmail.com wrote:
>>>
>>>> I've been working on a command to run an external file (@file, @clean 
>>>> ...).  I think it is ready, and I'd appreciate it if other folks could 
>>>> test 
>>>> it for me.  The idea is that you select a node in the external file tree 
>>>> and launch the command.  It works on Windows and Linux but not Mac (I need 
>>>> more information about the Mac, and I don't have one for testing).
>>>>
>>>> As long as the processing program such as Ruby, Python, Julia, is on 
>>>> the path (and the file is a known file type) - or you specify it in a 
>>>> @data 
>>>> setting node - a new terminal will open, run your GUI or console program, 
>>>> and wait for you to close it.
>>>>
>>>> The new command is the @button node in the attached Leo outline.  I 
>>>> suggest copying in into the @buttons tree in your myLeoSettings.leo 
>>>> outline 
>>>> and restarting Leo.
>>>>
>>>> The languages it can handle without adding an @data node - it's 
>>>> documented in the command's docstring - are python, shell, batch (for 
>>>> Windows), ruby, lua, and julia.
>>>>
>>>> Here are some technical details -
>>>>
>>>> This command was hard to get working right on Linux (and I can't swear 
>>>> that it will work on Linux if the external file name has spaces), and the 
>>>> reason was my requirement to open a new terminal and keep it open after 
>>>> the 
>>>> external program finishes.  I want that so that any output can be seen and 
>>>> studied.  
>>>>
>>>> It's easy to launch a program and have it write to Leo's own console, 
>>>> but that is not ideal, because 1) other Leo output may get mixed in with 
>>>> the external program's or the output may get scrolled offscreen; 2) if the 
>>>> external program crashes, it may leave your Leo console running a 
>>>> secondary 
>>>> shell; and 3) if you launch a GUI program that lasts a long time your 
>>>> output may get very confusing.
>>>>
>>>> It turns out that to reliably keep the new terminal open on Linux, you 
>>>> have to open a terminal and use that to run the shell, not just launch the 
>>>> shell.  This is a problem because there are a lot of Linux distros and 
>>>> they 
>>>> don't all have the same terminal.  In particular, the different terminals 
>>>> don't always use the same options to run a shell with its command line.  
>>>> The shell may also differ.  Almost all desktops use bash, usually at 
>>>> /usr/bin/bash, but a user can change that and some do.
>>>>
>>>> So we can't assume that the shell will be bash, nor what the terminal 
>>>> may be.  x-terminal-emulator does not give you the same options across 
>>>> distros, either.  $TERM doesn't actually give you the terminal either, 
>>>> just 
>>>> a logical terminal so the right colors can be set up. 
>>>>
>>>> To keep the terminal open after the command runs, some terminals have 
>>>> an option for that, some have the option but it doesn't work, and some 
>>>> don't have the option. Also, the option name is subject to change (I found 
>>>> at least one distro that issued a deprecation warning) So we need another 
>>>> solution.  My solution is to have the shell wait for user input after the 
>>>> main command finishes.  After a long time running queries on the Internet 
>>>> I 
>>>> have not found a more workable way.
>>>>
>>>> So how do we find the terminal and shell?  By running pstree -s $$ and 
>>>> parsing its output.  Then we run that terminal with --help and try to 
>>>> parse the help message to find the right option.  This works on all cases 
>>>> I've tried, but it's probably a little fragile.
>>>>
>>>> If the shell isn't bash, or we can't figure it out, we use the $SHELL 
>>>> variable.
>>>>
>>>> Then we use the command's internal table, or the system file 
>>>> association, to find the right processor to run.  We also check to make 
>>>> sure it can actually be found.
>>>>
>>>> Finally we can construct the command and run it.  Whew, that was 
>>>> tricky!  It's easier on Windows because we don't have to discover the 
>>>> terminal and shell, and the launch options are always the same.
>>>>
>>>> For the Mac, I don't know the terminal or shell names nor the right 
>>>> options to invoke.  I'm pretty sure that if I learn them this command will 
>>>> work on a Mac too.
>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/91a89a82-2330-4a62-a817-6ce503ea8906n%40googlegroups.com.

Reply via email to