I want to create an extension that can access the command line input of a workspace terminal. I also want to record the various logs that occur within that console as well. I have looked at the extension API but haven't found anything useful. How would one go about doing this?
Related
I'm trying to write an extension for VSCode, however I'm having all sorts of problems in that part of the extension doesn't appear to be recognised.
The extension is in two parts, a grammar and languages part -- this is recognised and is working well.
The second part is a debugger, but I cannot get VSCode to see this. There is obviously an error somewhere in my package.json, but I cannot find an error message anywhere.
Is there anyway to validate the package.json file? Or the solution as a whole? Hitting F5 starts up a child VSCode, but no errors. Looking in the extensions tab, it doesn't show that there is a debugger in the extension, so it must be the wrong configuration?
I'm currently writing my own language and I'm at a point where I would like to publish it to the VSCode-Marketplace so people can test it.
I have written a language extension and a syntax highlighter with the Yeoman-Generator and now want to merge it with my executable file that launches the interpreter, so that a file can get interpreted after clicking the run-code button.
I now have checked multiple articles, like:
How to add a run button in visual studio code? - StackOverflow
How to define or support a code language on Visual Studio? - StackOverflow
Debugger Extension Guide - VSCode API
However, I haven't found anything useful.
Currently, the code-runner displays the following error, when clicking on run, or pressing the shortcut:
(Code language not supported or defined.)
But even after a lot of browsing Google for adding new language support to the code-runner, I found absolutely nothing helpful.
(See this page, idk what Settings/Preferences they are referring to!?)
I also was not successful with tasks, as they don't seem to connect to the run-buttom or debug-button in any way.
My question is: How can I make the run-button execute a custom bash-command, when a file in my language is opened?
Okay, I finally did it.
For anyone wondering:
You have to go to the settings and type "code-runner" into the search bar.
Scroll down a little, and you should find the code runner-executor map.
Click on the "edit in settings.json" button.
Now a .json-file should've opened. There are two possible scenarios: Either, there is a json-object called code-runner.executorMapBy... or not.
If there is none, type code-runner.executorMapByFileExtension and let autocomplete do the job.
If the json-object exists, add the file-extension and a bash command that executes your compiler/interpreter. It gets automatically executed in the directory the program-file lies in.
Now still dont know, how to include the settings in my extension, but that was already a big step. Further help is still appreciated!
There is an open source extension called code runner, you can check source code there.
I am using pywinauto to open a file in some software. My code is supposed to open a specific file using the Open dialog:
import pywinauto
from pywinauto.application import Application
app = Application(backend="uia").start(cmd_line="C:\\Program Files (x86)\... etc")
app.Dialog.Close.click()
app.FORAM3.Derivative.OpenSpectrum.click()
app.FORAM3.Open.Edit.SetEditText(r"C:\\Users\... etc")
The code opens the software and clicks the "Open Spectrum" button, where it gets the standard Open dialog:
on the line app.FORAM3.Open.Edit.SetEditText("Paracetamol 4.foram") I get a pywinauto.findwindows.ElementNotFoundError which states that it could not find an element or a method called SetEditText.
I have already looked around on the internet and cannot find any solutions.
How to open an existing file using pywinauto from SourceForge says to use app.Open.Edit.SetEditText.
I tried using app.Open.Edit, removing the "FORAM3" part, and it could not find "Open".
I replaced this with app.Dialog.Edit and it gave me the original ElementNotFoundError.
I also looked at Open an existing excel workbook using pywinauto, however the answer to this question suggests opening the file within excel itself, which does not apply to me.
I even tried replacing SetEditText with TypeKeys and got AttributeError: Neither GUI element (wrapper) nor wrapper method 'TypeKeys' were found (typo?)
One answer in another question, "Open file from windows file dialog with python automatically", suggests to use pywinauto and gives the following code:
from pywinauto import application
app = application.Application().start_('notepad.exe')
app.Notepad.MenuSelect('File->Open')
# app.[window title].[control name]...
app.Open.Edit.SetText('filename.txt')
app.Open.Open.Click()
I tried again using SetText and again got the AttributeError saying that it could not find an element or method with that name.
The accepted answer for this particular question says to use ctypes. I may resort to this if I cannot find a solution in pywinauto. The question has also been suggested as a possible duplicate of Choosing a file in Python with simple Dialog so I looked at that.
The accepted answer here suggests to use Tkinter. The other two suggest easygui and Zenity. Not what I'm after. There are no mentions of pywinauto in the other answers.
I am not asking how to open a file. From the answers I've looked at I can clearly see how to do it. My question is: Why isn't it working? It's clear that my code isn't recognising any of these Methods that have been suggested, so there must be something else wrong.
I started using Inspect.exe.
Part of the hierarchy has a Pane with an empty string for a name. This could be the problem, however I've worked on other software with empty panes in. In those cases I have been able to ignore the empty panes and still use the child controls. There are also three different controls with the name "Filename" which could be an issue, however since I have referred to the Edit control, it can only be one of them. I did a quick check to see whether I had to refer to the Edit control as a child of the combo box, used the line app.Dialog.combobox.Edit.SetText, and got the same AttributeError again.
My final attempt at fixing the problem was to try a different console. I have been running my code in PyCharm and found a question on jetbrains asking if it was possible to run code from PyCharm in an external console, stating that the PyCharm console did not have the same low-level control that the windows cmd.exe has.
I ran my code in the IDLE shell, and got the same error:
I tried running the code in the regular python command prompt, and it closes with the same error. This seems enough evidence to suggest that PyCharm itself isn't the issue here.
So, to reiterate: Why doesn't python recognise any Edit control methods?
backend="uia" provides different hierarchy and different method names (sometimes). Default backend is "win32" so old Notepad examples are not always relevant for "uia" backend. Also old CamelCase methods are deprecated in 0.6.5 and they even exist in "win32" backend only. Use PEP-8 method names for "uia" backend like set_text. And upgrade by pip install -U pywinauto.
There are multiple commands having to do with the Integrated Terminal that VS Code offers. In my extension, I am able to open it and focus it using workbench.action.terminal.focus, but running commands in it seems hacky to do through runSelectedText. Ideally I'd like to be able to run commands directly without having intermediate document to simulate selections in and to be able to read their results.
I have found the MainThreadTerminalService which seems to offer what I want, but I don't know how to and if I even can use that from an extension. Scanning node_modules/vscode/vscode.d.ts for terminal didn't yield any results, so I presume it is not possible yet.
Using TerminalPasteAction to run the commands seems as an option, but I would first have to get the command into the clipboard and there doesn't seem to be a good way to listen to the results anyway.
I know I can run a child process and listen to it's standard output and error, but since VS Code offers the integrated terminal window, it would be nice if the user could see the commands as they run in a separate integrated terminal tab exclusive to my extension. Is this possible? Will it be?
Check this thread
https://github.com/Microsoft/vscode/issues/9957
Apparently API is limited but you have
CreateTerminal(name?: string): Terminal
interface Terminal {
name:string;
runCommand(cmd:string)
show(preserveFocus: boolean): void
hide(): void;
dispose(): void;
}
Currently, I am working on a project which has somehow started showing the test results within VS Code (instead of the separate cmd prompt window). Any way to toggle this within VS Code as part of launch.json or tasks.json? I'm clutching at straws here...
I'm beginning to think this is not configurable...
Just discovered this was part of a recent VS Code update (10.1). According to the docs, "Since the Debug Console does not support programs that need to read input from the console, the external console is still available and you can enable it by setting the attribute externalConsole to true in your launch configuration."
Add this attribute to your launch.json