Giter Club home page Giter Club logo

vscode-ibmi's People

Contributors

alanseiden avatar angelorpa avatar barrettotte avatar beckhamrryyaann avatar chrjorgensen avatar connorholyday avatar dariocs avatar dependabot[bot] avatar dferrand avatar forstie avatar github-actions[bot] avatar jwoehr avatar marianne-ott avatar novy400 avatar p-behr avatar priceaj avatar rbeckham avatar richardm90 avatar richardschoen avatar sanjulaganepola avatar scottklement avatar sebcil avatar sebjulliand avatar sjlennon avatar steph-beneschan-256 avatar szsascha avatar thebeardedgeek avatar theprez avatar worksofliam avatar wright4i avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vscode-ibmi's Issues

QSH not running from bash

I receive the above mentioned error message, when I attempt to connect to our IBM i server. There is no further information about the error. So what can I do know? I already checked the server side and I noticed, that there is a SSH connection to my PC:

image

Successfully connected as clearly indicated by the job log:

image

Last but not least, I receive error "Object already exists. Object is /home/raddatz." when I execute command "mkdir '/home/raddatz'", whereas "IBMi.js" checks for "File exists". Could that be part of the problem?

Adding Graphical Debugging Through ACS

Hi everyone ,
What do you think if we add a graphical debug through the ACS?
If you already installed IBM Toolbox for Java on your server, both the jt400.jar and the tes.jar files are in the same directory on the server: /QIBM/ProdData/HTTP/Public/jt400/lib/
After copying the jar files to your client, add them to your client CLASSPATH environment variable.
To start Debug Manager from a command prompt on your client, run the following command: java utilities.DebugMgr
reference:
https://www.itjungle.com/2020/06/08/guru-graphical-debugging-through-acs/
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzamq/rzamqrunning.htm

Make database results pretty

We're using a webview with a very simple HTML table to render SQL resultsets.

image

Wondering if anyone would be able to make the table prettier? I have no idea how we should do it, really!

About the package.json file

Is it me, or is the package.json file for extensions super ugly? I hate having to define my command in three places.

For example, code-for-ibmi.connect is defined in 3 places... seems kinda crazy.

Quick comments

Being able to use Ctrl/Command + FORWARD_SLASH would be nice when editing RPG, CL, etc. I can easily do this one.

Might involve creating a command which looks at the activeEditor, etc.

Option to enforce double-click to open source member or IFS file.

I find myself single-clicking files and opening them randomly when I really didn't want the file or source member to open.

If others like single-click open functionality, create a setting called Single-Click-Open.

If enabled, function as does already.

If disabled, enforce double click opens.

Note: If I were to click a HUUGE file this could be disruptive.

No obvious way to close a connection

I have two systems that I connect to regularly. If I try to open a second connection while one is active, I get an error telling me there is already an active connection. But I can find no obvious way to disconnect from one and connect to the other.

I'm probably just missing something but ...

Library list per connection

Hi,

Have you considered putting the library list setting on connection level instead of as a global setting (code-for-ibmi.libraryList)?

I have multiple servers I want to connect to, but they all have different library lists for compilation and not all libraries exist on all servers. This forces me to change the library list setting when I switch servers, since trying to set the library list with a nonexistent library returns an exception (CPF2110).

Language tools for RPGLE (outline, content assist, etc)

Somethings to consider:

  • When the user saves the member (or streamfile) do we want to run a compiler with *EVENTF *NOGEN so we can generate an error listing, which would then populate the diagnostics panel? This is more real-time than having to compile every time you want the diagnostics to update. We can do this without a language server.
  • Do we want to build an outline view for RPGLE? This means looking for structs, variables, and procedures to populate an outline view? Might require an LSP
  • Do we want 'go-to reference'? For this, we may have to make it so the LSP also looks in copy/include header files
  • I personally want to be able to hit F12 on a header copy/include and have it open that source. (I guess this would be part of 'go-to reference')

Am open to ideas and discussion.

Allow me to trigger a QSH script on action for IFS file.

Maybe it already works this way, but I haven't tested yet.

This way if I have a make file or something else PASE/QSH I want to run I can trigger it here.

An alternative option is I can use my QSHEXEC command to run a QSH/PASE script.

Different Library List for OBJECT BROWSER and DATABASE BROWSER

As I wrote in the object, I think that the lists should be different:

  • On the list used by the OBJECT BROWSER I should put the libraries in which I store my compiled programs
  • On the list used by the DATABASE BROWSER I should put the libraries in which I store my tables and my datas

Is it correct or did I misunderstood how to use the extension?

Thanks in advance for your great job

Unable to open rpgle files from some locations (due to ASP)

Firstly, thanks so much for your work on this extension, I am not native to as400 programming but this extension makes it a breeze to review code already written.

I am having difficulties opening files from some locations, they simply do not open. I took the liberty to run this extension locally and console.log the ssh commands to get an understanding of what exactly is failing and why:

Here is what I can provide, hopefully it helps illustrate my problem.

When double clicking on a file I receive these logs in the extension:
image

Specifically I see the command to be

system "CPYTOSTMF FROMMBR('/QSYS.lib/WLIB.lib/QRPGLESRC.file/CFCRTGCDS.mbr') TOSTMF('/tmp/vscodetemp-oiZyUiJVC3') STMFOPT(*REPLACE) STMFCCSID(1208)"

and the result to be:

stderr:'CPFA0A9: Object not found.  Object is /QSYS.lib/WLIB.lib/QRPGLESRC.file/CFCRTGCDS.mbr.\nCPFA097: Object not copied.  Object is /QSYS.lib/WLIB.lib/QRPGLESRC.file/CFCRTGCDS.mbr.'

Compared to a different directory, which is successful as follows:

image

Any thoughts on how I might be able to debug this further?

Severity Level in Problems

After a compile I see something like this:
image
Would it be possible to:

  1. Add the severity level to the message
  2. Filter which severity levels we want to see.
    The filter icon does allow various severities, but doesn't seem to have any impact:
    image

Auto copy member to developer library

Since we now have the comparison features in the extension, I am wondering if we should add some new functionality that

  1. When they click on a member, it checks to see if they have a 'developer library' defined
  2. It prompts the user if they'd first like to copy the member to their develop library and edit from there instead
  3. If they say no, they will edit the source as normal. If they say yes, it will copy the source into their developer library (into the same source file name, member, and extension) and they would work on their changes there.
  4. When they are done, there will be a new mention option that allows them to compare their changes with what's in the library the source came from. If they are happy with their changes, they can run another command to copy their changes back to the original member.
  • It would be configurable. You would have to enable this feature and define a developer library

Mostly looking for ideas on this. I think it sounds like a good idea, but is it really?

PR template

Needs to include the following items:

  • have tested my change
  • updated relevant documentation
  • Remove any/all console.logs I added
  • eslint is not complaining
  • have added myself to the contributors list in the README

Allow me to download / upload a source member to my PC for offline editing

It would be nice to quickly download a copy of an source member form a source file for offline editing.

Not high priority, but would be cool.

Download:
Right click on member, select download, prompt where to save to locally.

Upload:
Right click source member and select upload, prompt for local file to upload. Will replace contents of selected source member.

Issue with renaming

Renaming errors when you only change the extension, which should be possible.

Can't open connection dialog

When pressing F1 and choosing "IBMi: Connect" I get the following error:
Command 'IBM i: Connect' resulted in an error
(command 'code-for-ibmi.connect' not found)

code-for-ibmi 0.0.6, VS Code 1.53.2 on linux

Any interest in spool file browser?

I was thinking about casually exploring adding an additional browser for browsing spool files similar to the member, IFS, and object browsers this week after work when I found the time.

I would gather the tree items using QSYS2.OUTPUT_QUEUE_ENTRIES.

Starting functionality would just be viewing and deleting spool files.

Possible functionality:

Let me know if there are any suggestions or obvious pitfalls with this idea

Documentation

We need documentation in either HTML format or markdown (preferred).

Docs should live in the docs folder in the root.

The following items need documenting:

  • Login process. New login OR previous login
  • The settings. What each of them means
  • Loading members. How to add more source files
  • Opening source members
  • How to compile sources
  • How to configure the compile settings

Any issues with IASP?

I am able to set up and see my source file and library. However, when I click on some members I don't see these sources.
nothing happens.
I am able to open source on QSYSINC/H.

I am not sure if IASP is an issue? I see all the source code files expanded, it's just that it does open when double clicked.

For Run Action, change completion message since it's no longer just for compiles.

After action completes, if not using a compile command the completion message still says:
"Compiled file/member successfully" ot on fail "file/member did not compile."

Couple thoughts for easy change:
"file/member action completed successfully" or on fail "file/member action did not complete successfully."

More complex thought 1:
Possibly put a completion or error message in the settings.json for each action so they can have their own message.

More complex thought 2:
Possibly surface the CPF response message(s) from command completion.

My ideal answer would be option 2 which might surface the CPF message, but the easy change of message verbiage is good for now also.

Things to ponder.

Source member list refresh at top refreshes all current source files. Could be slow.

Is there a way to only refresh the selected source file in case a developer has several source files in their list ?

Ex: Click on source file and then click the refresh icon at the top.

If this change is made title it: "Refresh Selected Source File" instead of "Refresh Member List"

Another option would be to just re-add the Right-Click option at the source file level to just refresh the selected source file.

Either way the idea is to NOT have to refresh all members across all my source files in the list all the time.

Connect to previous IBM i

I can successfully connect using the "Connect to an IBM i" button. Therefore this issue is not urgent.

However, when I restart VSCODE, I thought I should be able to to use the "Connect to previous IBM i" to avoid some typing. While it does seem to remember my previous connections, nothing seems to happen, as shown below.
vscode1
Pressing enter on the highlighted connection, or left clicking, or right clicking result in this:
image
I press "Enter" and nothing happens.

I use VSCODE mainly for playing with node.js and do not consider myself an expert. So this may be a user error on my part. Or maybe something in my setup. This is my settings.json: (Hmmm. I don't see why the font suddenly changes after "code-for-ibmi.connections". Perhaps there is some hex garbage in there.)
`{
"telemetry.enableTelemetry": false,
"editor.renderControlCharacters": false,
"editor.fontFamily": "Cascadia Code, Inconsolata, Lucida Sans",
"editor.fontLigatures": false,
"editor.renderWhitespace": "none",
"editor.cursorStyle": "block",
"editor.minimap.enabled": false,
"terminal.integrated.shell.windows": "C:\WINDOWS\System32\cmd.exe",
"window.zoomLevel": 0,
"update.mode": "start",
"compile-hero.disable-compile-files-on-did-save-code": false,
"compile-hero.generate-minified-html": true,
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"code-for-ibmi.connections": [

    {
        "host": "pub400.com",
        "port": 2222,
        "username": "lennons"
    },
    {
        "host": "ipublic.online",
        "port": 2222,
        "username": "lennons"
    }
],
"code-for-ibmi.homeDirectory": "/home/lennons1",
"code-for-ibmi.libraryList": "QSYS2,QSYSINC, LENNONS1",
"code-for-ibmi.logCompileOutput": true,
"code-for-ibmi.sourceFileList": [
    "QSYSINC/H",
    "lennons1/QTEMP",
    "lennons1/QCLSRC",
    "lennons1/qrpglesrc"
],
"code-for-ibmi.temporaryLibrary": "lennons2",
"code-for-ibmi.compileCommands": [

    {
        "fileSystem": "member",
        "extensions": [
            "rpgle",
            "rpg"
        ],
        "name": "CRTBNDRPG",
        "command": "CRTBNDRPG PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE)"
    },
    {
        "fileSystem": "member",
        "extensions": [
            "CLLE",
            "CL"
        ],
        "name": "CRTBNDCL",
        "command": "CRTBNDCL PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE)"
    },
    {
        "fileSystem": "member",
        "extensions": [
            "CLP"
        ],
        "name": "CRTCLPGM",
        "command": "CRTCLPGM PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*SOURCE) OUTPUT(*PRINT)"
    }
]

}`

Configuration of SSH connection

HI,

Could you let me configure the port for connecting to my IBM I or Could you let me specify a certificate?

Because my server on port 22 accept connections only with certificate (because it is open on internet), while on port 2222 it let me connect with user and password.

Many thanks.

Could I use git?

Until now, I copy my source into my home directory (of my ibm i user) and there I make a git.init, so I can use git.

Is there a possibility to use git with your extension?

Many thanks.

Load Problems as you save

It would be nice if the Problems window loading issues with your source when you saved (this is because we'd go back to the server to get us information).

In order to do this, we need to run compile commands with OPTION(*EVENTF *NOGEN).

  • *EVENTF generates the information/error listing
  • *NOGEN stops the source from actually compiling

We'd need to add code to add these to the commands that support them. I believe the list of commands that support both these options are:

  • CRTBNDRPG
  • CRTRPGMOD
  • CRTSQLRPGI
  • CRTBNDCBL
  • CRTCBLMOD
  • CRTBNDC
  • CRTCMOD
  • CRTCLMOD - it is not available on CRTBNDCL

If anyone else knows other options that would speed up this command execution, please me know.

The developers would also have to specify which action they want to use to run the command. Since we won't know from just saving, it usually helps to have a directive in the source so we can use it and know which action to run without prompting the user. For example:

//compile:CRTSQLRPGI
/* compile:CRTCLMOD */
* compile:CRTBNDCBL

If one is not specified, then it will not run.

Save before Compile Alert Prompt

When I was compiling today it kept giving me errors with my code. I had made the corrections but was still getting the errors. Finally, I realized that I hadn't saved the changes first and it was trying to compile the last saved changes (which still contained the error).

Can we get a prompt to save if we haven't done that first or have VS Code automatically save first as part of the CRTL + E to compile?

Web view to edit connection settings

I think it would be neat if we could add a webview with simple input boxes and lists that would let the user manage the current connection settings (instead.getConfig()).

This might make it nicer than having to keep editing the JSON file.

The user would click 'Save', pass the new values back to the app and the app would call set to update the config (or maybe we need a setMany too?)

CPF3064: Library ILEDITOR not found - when adding new source file

I'm on 0.2.3. The issue occurs after I add a new source file, then try to expand it.
image

If I exit VSCODE and restart it, the problem is fixed and I can expand the source file.

Note also that while trying to document this issue I have managed to add QPRGLESRC several times. This occurred because I added it, but it didn't show up. I then added it twice more without it showing up. Finally, when I added QDDSSRC, the three QRPGLESRCs showed up. Timing issue maybe...

I've been on various earlier releases and I understand that things are improving rapidly. Thus my settings.json file is somewhat messy which might be contributing to this problem. There are a lot of lines in low intensity which I believe means they are not referenced and one of these is ""code-for-ibmi.temporaryLibrary" which was an earlier setting.. I see that now that library lists are connection specific (a good change!) there I now have several "tempLibrary": "ILEDITOR" lines.

Here's my settings.json file:

Click to expand!
{
    "telemetry.enableTelemetry": false,
    "editor.renderControlCharacters": false,
    "editor.fontFamily": "Cascadia Code, Inconsolata, Lucida Sans",
    "editor.fontLigatures": false,
    "editor.renderWhitespace": "none",
    "editor.cursorStyle": "block",
    "editor.minimap.enabled": false,
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
    "window.zoomLevel": 0,
    "update.mode": "start",
    "compile-hero.disable-compile-files-on-did-save-code": false,
    "compile-hero.generate-minified-html": true,
    "[javascript]": {
        "editor.defaultFormatter": "vscode.typescript-language-features"
    },
    "[html]": {
        "editor.defaultFormatter": "vscode.html-language-features"
    },
    "code-for-ibmi.connections": [
        {
            "host": "pub400.com",
            "port": 2222,
            "username": "lennons"
        },
        {
            "host": "ipublic.online",
            "port": 2222,
            "username": "lennons"
        }
    ],
    "code-for-ibmi.homeDirectory": "/home/lennons/qrpglesrc",
    "code-for-ibmi.libraryList": "QSYS2,QSYSINC, LENNONS1",
    "code-for-ibmi.logCompileOutput": true,
    "code-for-ibmi.sourceFileList": [
        "QSYSINC/H",
        "lennons1/QTEMP",
        "lennons1/QCLSRC",
        "lennons1/qrpglesrc"
    ],
    "code-for-ibmi.temporaryLibrary": "lennons2",
    "code-for-ibmi.compileCommands": [
        {
            "fileSystem": "member",
            "extensions": [
                "rpgle",
                "rpg"
            ],
            "name": "CRTBNDRPG",
            "command": "CRTBNDRPG PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE)"
        },
        {
            "fileSystem": "member",
            "extensions": [
                "CLLE",
                "CL"
            ],
            "name": "CRTBNDCL",
            "command": "CRTBNDCL PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE)"
        },
        {
            "fileSystem": "member",
            "extensions": [
                "CLP"
            ],
            "name": "CRTCLPGM",
            "command": "CRTCLPGM PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*SOURCE) OUTPUT(*PRINT)"
        }
    ],
    "workbench.activityBar.iconClickBehavior": "focus",
    "workbench.list.openMode": "doubleClick",
    "code-for-ibmi.connectionSettings": [
        {
            "host": "pub400.com",
            "sourceFileList": [
                "QSYSINC/H",
                "LENNONS1/TEMP"
            ],
            "libraryList": [
                "QSYS2",
                "QSYSINC"
            ],
            "homeDirectory": "/home/lennons",
            "tempLibrary": "ILEDITOR",
            "buildLibrary": "QTEMP"
        },
        {
            "host": "ipublic.online",
            "sourceFileList": [
                "QSYSINC/QRPGLESRC",
                "LENNONS1/TEMP",
                "LENNONS1/QCLSRC",
                "LENNONS1/QRPGLESRC",
                "LENNONS1/QRPGLESRC",
                "LENNONS1/QRPGLESRC",
                "LENNONS1/QDDSSRC"
            ],
            "libraryList": [
                "QSYS2",
                "QSYSINC"
            ],
            "homeDirectory": "/home/lennons",
            "tempLibrary": "ILEDITOR",
            "buildLibrary": "QTEMP"
        }
    ],
    "code-for-ibmi.actions": [
    
        {
            "type": "member",
            "extensions": [
                "RPGLE",
                "RPG"
            ],
            "name": "Create Bound RPG Program (CRTBNDRPG)",
            "command": "CRTBNDRPG PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE) TGTRLS(*CURRENT)"
        },
        {
            "type": "member",
            "extensions": [
                "SQLRPGLE"
            ],
            "name": "Create SQL ILE RPG Program (CRTSQLRPGI)",
            "command": "?CRTSQLRPGI OBJ(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) CLOSQLCSR(*ENDMOD) OPTION(*EVENTF) DBGVIEW(*SOURCE) TGTRLS(*CURRENT)"
        },
        {
            "type": "member",
            "extensions": [
                "RPGLE",
                "RPG"
            ],
            "name": "Create RPG Module (CRTRPGMOD)",
            "command": "?CRTRPGMOD MODULE(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE) TGTRLS(*CURRENT)"
        },
        {
            "type": "member",
            "extensions": [
                "CMD"
            ],
            "name": "Create Command (CRTCMD)",
            "command": "?CRTCMD CMD(&OPENLIB/&OPNMBR) PGM(&OPNLIB/&OPNMBRC) SRCFILE(&OPENLIB/&OPENSPF) ALLOW(*ALL) CURLIB(*NOCHG) PRDLIB(*NOCHG)"
        },
        {
            "type": "member",
            "extensions": [
                "CMD"
            ],
            "name": "Create Command (Allow Return Variables - CRTCMD)",
            "command": "?CRTCMD CMD(&OPENLIB/&OPNMBR) PGM(&OPNLIB/&OPNMBRC) SRCFILE(&OPENLIB/&OPENSPF) ALLOW(ALLOW(*BPGM *IPGM *BMOD *IMOD) ) CURLIB(*NOCHG) PRDLIB(*NOCHG)"
        },
        {
            "type": "member",
            "extensions": [
                "pf",
                "lf"
            ],
            "name": "Delete File (DLTF)",
            "command": "?DLTF FILE(&OPENLIB/&OPENMBR)"
        },
        {
            "type": "member",
            "extensions": [
                "dspf"
            ],
            "name": "Create Display File (CRTDSPF)",
            "command": "?CRTDSPF FILE(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) SRCMBR(&OPENMBR) RSTDSP(*NO) REPLACE(*YES)"
        },
        {
            "type": "member",
            "extensions": [
                "pf"
            ],
            "name": "Create Physical File (CRTPF)",
            "command": "?CRTPF FILE(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) SRCMBR(&OPENMBR) SIZE(*NOMAX) MAXMBRS(1)"
        },
        {
            "type": "member",
            "extensions": [
                "lf"
            ],
            "name": "Create :Logical File (CRTLF)",
            "command": "?CRTLF FILE(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF)"
        },
        {
            "type": "member",
            "extensions": [
                "CLP",
                "CLLE"
            ],
            "name": "Create CL Program (CRTCLP)",
            "command": "?CRTCLPGM PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OUTPUT(*PRINT) REPLACE(*YES)"
        },
        {
            "type": "member",
            "extensions": [
                "CLP",
                "CLLE"
            ],
            "name": "Create Bound CL Program (CRTBNDCL)",
            "command": "?CRTBNDCL PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*EVENTF) DBGVIEW(*SOURCE)"
        },
        {
            "type": "member",
            "extensions": [
                "GLOBAL"
            ],
            "name": "Create Program (CRTPGM)",
            "command": "?CRTPGM PGM(&OPENLIB/&OPENMBR) MODULE(*PGM) ENTMOD(*FIRST) BNDSRVPGM(*NONE) BNDDIR(*NONE) ACTGRP(*ENTMOD) TGTRLS(*CURRENT)"
        },
        {
            "type": "object",
            "extensions": [
                "GLOBAL"
            ],
            "name": "Delete object",
            "command": "?DLTOBJ OBJ(&LIBRARY/&NAME) OBJTYPE(*&TYPE)"
        },
        {
            "type": "object",
            "extensions": [
                "pgm"
            ],
            "name": "Call program",
            "command": "?CALL &LIBRARY/&NAME"
        }
    ]
}

Allow me to download / upload files to my PC with the IFS browser.

It would be nice to quickly download a copy of an IFS file or regular source member for offline editing.

Not high priority, but would be cool

Download selected IFS file:
Right click on IFS file, select download, prompt where to save to locally.

Upload selected IFS file:
Right click IFS file and select upload, prompt for local file to upload. Will replace contents of selected IFS file.

Upload File by Selecting Upload option on dir itself
Right click dir name, select upload, prompt for file name, upload the IFS file into the selected directory. Prompt for replace if IFS file already exists.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.