Skip to content

exiahuang/Xycode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xycode README

xycode is a lightweight command executor for vscode.

If you want to build a vscode extension, maybe you can use xycode first.

Reference

Project Details

Usage of xycode:

Features

  • Less than 100k.
  • Shared configuration (tasks/settings) of VScode.
  • Integrated with system command and work with vscode.
  • Support Docker development.
    • express
    • flask
    • jekyll
  • Support c lang.
  • Support vbs.
  • Support dotnet core.
  • Support go language.
  • Support python.
  • Support ruby.
  • Support gradle.
  • Support npm/nodejs/express/vue.
  • Support prettier, format source automatically.
  • Support Heroku development.
  • Support git command.
  • Support sfdx, it is a Rapid development tool for Salesforce SFDX Development. Metadata diff with server, retrieve standard sobject...
  • Support Wenyan 文言文編程語言.
  • Support hexo/mkdoc blog.
  • Support WSL Develope.
  • TODO : a calculator.

Download config

Download in Vscode

run xycode: download config, and select config file.

Manually Download

Please download config From xycode-config. And copy the configs to Home directory( ~/.xycode or %USERPROFILE%/.xycode)

use ctrl+shift+p , search xycode: open config directory

Custom Config

create json file

create json file in below

  • Windows user: %USERPROFILE%/.xycode
  • Linux/Mac user: ~/.xycode

json data construct

{ "tasks": [ { "label": "label name, required", "description": "description, not required", "command": "your command, required", // cwd is not required "cwd": "path of current working directory", // filetypes is not required // "filetypes": [".py"], // if you not need the command , please set it true // "inActive": false, // show the message in termial, default show in channel. // "termial": { name?: string, shellPath?: string, shellArgs?: string[] | string }; // before run the command, you can set some check. "beforeTriggers": [ { "type": "buildin", "fn": "CheckFileExist", "params": ["${project_directory}/${project_name}"] } ], // after ran the command, you can do something. "afterTriggers": [ { "type": "buildin", "fn": "SwitchFolder", "params": ["${project_directory}/${project_name}"] } ] } ], "variables": { "apex_template": { "label": "sfdc apex template", "description": "", "value": [ "DefaultApexClass", "ApexException", "ApexUnitTest", "InboundEmailService" ] }, "base_metadata": { "label": "default sfdc metadata", "description": "", "value": "ApexClass, ApexPage, ApexComponent, ApexTrigger" } } }

Predefined variables

  • ${HOME} - Home directory
  • ${file} - the current opened file
  • ${relativeFile} - the current opened file relative to workspaceFolder
  • ${relativeFileDirname} - the current opened file's dirname relative to workspaceFolder
  • ${fileBasename} - the current opened file's basename
  • ${fileBasenameNoExtension} - the current opened file's basename with no file extension
  • ${workspaceFolder} - the path of the folder opened
  • ${workspaceFolderBasename} - the name of the folder opened in Sublime without any slashes (/)
  • ${fileDirname} - the current opened file's dirname
  • ${fileExtname} - the current opened file's extension
  • ${YYYYMMDD} - current date
  • ${YYYYMMDD_HHmm} - current datetime
  • ${TMPDIR} - Temp directory
  • ${XYCODE_PATH} - XYCODE Extension path

Windows Only Predefined variables:

  • ${wslHOME} - WSL Home directory
  • ${wslTMPDIR} - WSL Temp directory
  • ${wslFile} - the current opened wsl file path
  • ${wslWorkspaceFolder} - the wsl path of the folder opened
  • ${wslFileDirname} - the current opened file's wsl dirname

Predefined trigger

  • Mkdirs - make directory
  • SwitchFolder - switch project folder
  • OpenFile - open file
  • CopyFile - copy file
  • CheckFileExist - check file exist
  • Diff - diff file

friendly user interface

  • input - Custom Input String
  • select - Select List
  • multiselect - Multiple Select List
  • openFolderDailog - Folder Path Selector
  • singleFileDailog - File Path Selector
  • multiFilesDailog - Mutliple File Paths Selector

support wslpath

use |wslpath to change the windows path to wsl path example :

  • get the wsl path of folder: echo ${openFolderDailog:project_directory|wslpath}
  • get the wsl path of current file: echo ${file|wslpath}

config example

example 1: input

echo user input

{ "tasks": [ { "label": "hello:echo:user-input", "description": "echo user input", "command": "echo ${input:project_directory}" } ], "variables": {} }

if you want to set the default value, please define the variable:

{ "tasks": [ { "label": "hello:echo:user-input", "description": "echo user input", "command": "echo ${input:project_directory}" } ], "variables": { "project_directory": { "label": "project directory", "value": "${HOME}/test-project" } } }

example 2: select

echo user select

{ "tasks": [ { "label": "hello:echo:user-select", "description": "echo user select", "command": "echo ${select:dotnet_template}" } ], "variables": { "dotnet_template": { "label": "dotnet core template", "value": [ "console", "classlib", "wpf", "wpflib", "wpfcustomcontrollib", "wpfusercontrollib", "winforms" ] } } }

example 3: multiselect

echo files path, you can use separator to control the result string.

{ "tasks": [ { "label": "hello:echo:multiselect", "description": "echo user multiselect", "command": "echo ${multiselect:METADATA}" } ], "variables": { "METADATA": { "label": "sfdc metadata", "separator": ",", "value": [ "ApexClass", "ApexComponent", "ApexPage", "ApexTestSuite", "ApexTrigger" ] } } }

example 4: openFolderDailog

echo directory path

{ "tasks": [ { "label": "hello:echo:folder-path", "description": "echo directory", "command": "echo ${openFolderDailog:project_directory}" } ], "variables": {} }

example 5: singleFileDailog

single file dailog, you can use filters to control the file type.

{ "tasks": [ { "label": "hello:echo:file-path", "description": "echo single file path", "command": "echo ${singleFileDailog:package_xml}" } ], "variables": { "package_xml": { "label": "sfdc package.xml path", "filters": { "package.xml": ["xml"] }, "value": "./manifest/package.xml" } } }

example 6: multiFilesDailog

Mutliple File Paths Selector

  • use filters to control the file type.
  • use separator to control the result string.
{ "tasks": [ { "label": "hello:echo:files-paths", "description": "echo files paths", "command": "echo ${multiFilesDailog:sfdcsourcesfiles}" } ], "variables": { "sfdcsourcesfiles": { "label": "sfdc sources files", "separator": ",", "value": "" } } }

example 7: run command in wsl

change the shellPath, you can run command in wsl/bash/powershell ... or other termial

{ "label": "run command in wsl", "termial": { "name": "xycode", "shellPath": "wsl.exe" }, "command": "pwd" }

example 8: auto formatter and auto runner

After you save file in vscode, It will use yapf to format code and run python code automatically.

{ "tasks": [], "variables": {}, "onSaveEvents": [ { "label": "format python code", "description": "format python code", "filetypes": [".py"], "inActive": false, "command": "yapf \"${file}\" --style \"google\" -i" }, { "label": "run python file", "description": "run python file", "filetypes": [".py"], "inActive": false, "cwd": "${fileDirname}", "command": "python \"${file}\"" } ] }

example 10: user prettier to format source code.

use Prettier to pretty code .

{ "tasks": [], "variables": {}, "onSaveEvents": [ { "label": "pretty code.", "description": "Prettier is an opinionated code formatter.", "filetypes": [".json", ".javascript", ".js", ".md", ".css", ".vue"], "inActive": false, "cwd": "${fileDirname}", "command": "prettier --write \"${file}\" --single-quote=true --end-of-line=lf --arrow-parens=always --tab-width=4" } ] }

example 11: use wsl.

{ "tasks": [ { "label": "hello:echo:wsl-folder-path", "description": "echo directory", "options": { "shell": "C:\\Windows\\System32\\bash.exe" }, "command": "echo ${openFolderDailog:project_directory|wslpath}" } ], "variables": {} }

example 12: define console.

{ "tasks": [ { "label": "console: WSL", "description": "open WSL", "notShowProcess": true, "command": "cd ${workspaceFolder} && start wsl" }, { "label": "console: cmd", "description": "open cmd", "notShowProcess": true, "command": "start cmd" }, { "label": "console: Cmder", "description": "open Cmder", "notShowProcess": true, "command": "Cmder.exe /single ${workspaceFolder}" }, { "label": "console: bash", "description": "open bash", "notShowProcess": true, "command": "cd ${workspaceFolder} && start bash" }, { "label": "console: mintty.exe", "description": "open mintty.exe", "notShowProcess": true, "command": "start /b mintty.exe /bin/bash --login" } ], "variables": {} }

xysfdx-open-wsl

example 13: explorer and sublime

open directory in windows explorer or sublime.

{ "tasks": [ { "label": "windows: explorer", "description": "open explorer", "notShowProcess": true, "command": "start explorer ${workspaceFolder}" }, { "label": "windows: open home directory", "description": "open home directory", "notShowProcess": true, "command": "start explorer ${HOME}" }, { "label": "sublime", "description": "open sublime", "notShowProcess": true, "command": "\"C:\\Program Files\\Sublime Text 3\\sublime_text.exe\" \"${openFolderDailog:project_directory}\"" }, { "label": "sublime:open this workspace", "description": "open sublime", "notShowProcess": true, "command": "\"C:\\Program Files\\Sublime Text 3\\sublime_text.exe\" \"${workspaceFolder}\"" } ], "variables": {} }

example 14: use docker

add docker to your json file in ~/.xycode, then each task in this json config file will run in docker container.

{ "tasks": [ { "description": "use docker run command!", "label": "docker:run js", "command": "node ${file}", "dockerOptions": { "openTTY": false } } ], "variables": {}, "docker": { "dockerContainer": "${lowercaseWorkspaceName}_sfdx_1" } }

more example about docker:

example 15: use dynamic variables

define a dynamic variable, the value of var is the script result.

{ "tasks": [ { "label": "docker:base:attach docker shell", "termial": { "name": "docker" }, "description": "open default termial", "command": "docker exec -it \"${select:docker_container_names}\" /bin/sh -c \"[ -e /bin/bash ] && /bin/bash || /bin/sh\"" } ], "variables": { "docker_container_names": { "label": "docker container name", "scripttype": "shell", "script": "docker container ls --format=\"{{.Names}}\" --all", "datatype": "array", "separator": "\n" } } }

Shortkey

shortkey: ctrl+shift+i

Requirements

Require commands which you set in your config file in ~/.xycode/*.json

Extension Settings

This extension contributes the following settings:

  • xycode.maxBuffer: The maxBuffer option specifies the largest number of bytes allowed on stdout or stderr.

Known Issues

None

Release Notes

Release Notes:

1.0.0

Initial release of Xycode.

Enjoy it!

About

a lightweight and fast command executor for vscode.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •