From 9bcb083b48bc7549bd055866dbc6f06556a37626 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Thu, 16 Aug 2018 23:57:05 +0300 Subject: [PATCH 1/6] Add Zsh completion script from Zsh sources Originally from: https://github.com/zsh-users/zsh/blob/master/Completion/X/Command/_code --- build/gulpfile.hygiene.js | 1 + resources/completions/zsh/_code | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 resources/completions/zsh/_code diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js index 6a4cd05d17f..01e1ee53898 100644 --- a/build/gulpfile.hygiene.js +++ b/build/gulpfile.hygiene.js @@ -107,6 +107,7 @@ const copyrightFilter = [ '!resources/linux/snap/snapcraft.yaml', '!resources/linux/snap/electron-launch', '!resources/win32/bin/code.js', + '!resources/completions/**', '!extensions/markdown-language-features/media/highlight.css', '!extensions/html-language-features/server/src/modes/typescript/*', '!extensions/*/server/bin/*' diff --git a/resources/completions/zsh/_code b/resources/completions/zsh/_code new file mode 100644 index 00000000000..9e0045bfd5e --- /dev/null +++ b/resources/completions/zsh/_code @@ -0,0 +1,36 @@ +#compdef code + +local arguments + +arguments=( + '(-d --diff)'{-d,--diff}'[compare two files with each other]:file to compare:_files:file to compare with:_files' + \*{-a,--add}'[add specified directory to the last active window.]:directory:_directories' + '(-g --goto)'{-g,--goto}'[open a file at the path on the specified line and column position]:file\:line[\:column]:_files -r \:' + '(-n --new-window -r --reuse-window)'{-n,--new-window}'[open a new window]' + '(-n --new-window -r --reuse-window)'{-r,--reuse-window}'[open a file or directory in the last active window]' + '(-w --wait)'{-w,--wait}'[wait for the files to be closed before returning]' + '--locale=[specify the locale to use]:locale (e.g. en-US or zh-TW):(de en en-US es fr it ja ko ru zh-CN zh-TW bg hu pt-br tr bg hu pt-br tr)' + '--user-data-dir[specify the directory that user data is in]:directory:_directories' + '(- *)'{-v,--version}'[print version]' + '(- *)'{-h,--help}'[print usage]' + '--extensions-dir[specify the root path for extensions]:root path:_directories' + '--list-extensions[list the installed extensions]' + '--show-versions[show versions of installed extensions, when using --list-extension]' + '--install-extension[specify extension to install]:id or path:_files -g "*.vsix(-.)"' + '--uninstall-extension[specify extension to uninstall]:id or path:_files -g "*.vsix(-.)"' + '--enable-proposed-api[enable proposed api features for specified extension]:extension id' + '--verbose[print verbose output (implies --wait)]' + '--log[specify log level to use]:level [info]:(critical error warn info debug trace off)' + '(-s --status)'{-s,--status}'[print process usage and diagnostics information]' + '(-p --performance)'{-p,--performance}'[start with the "Developer: Startup Performance" command enabled]' + '--prof-startup[run CPU profiler during startup]' + '--disable-extensions[disable all installed extensions]' + '--inspect-extensions[allow debugging and profiling of extensions]' + '--inspect-brk-extensions[allow debugging and profiling of extensions with the extension host being paused after start]' + '--disable-gpu[disable GPU hardware acceleration]' + '--upload-logs[uploads logs from current session to a secure endpoint]:confirm:(iConfirmLogsUpload)' + '--max-memory=[specify max memory size for a window]:size (Mbytes)' + '*:filename:_files' +) + +_arguments -s -S $arguments From 7c6b5eba5a230ee67140eb5a16d1963f3999bfd0 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Fri, 17 Aug 2018 00:04:21 +0300 Subject: [PATCH 2/6] Update Zsh completion script Adding new options and updating help text to be closer to the commands help text. --- resources/completions/zsh/_code | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/resources/completions/zsh/_code b/resources/completions/zsh/_code index 9e0045bfd5e..1cf22326301 100644 --- a/resources/completions/zsh/_code +++ b/resources/completions/zsh/_code @@ -4,33 +4,35 @@ local arguments arguments=( '(-d --diff)'{-d,--diff}'[compare two files with each other]:file to compare:_files:file to compare with:_files' - \*{-a,--add}'[add specified directory to the last active window.]:directory:_directories' + \*'--folder-uri[open a window with given folder uri(s)]:folder uri: ' + \*{-a,--add}'[add folder(s) to the last active window]:directory:_directories' '(-g --goto)'{-g,--goto}'[open a file at the path on the specified line and column position]:file\:line[\:column]:_files -r \:' - '(-n --new-window -r --reuse-window)'{-n,--new-window}'[open a new window]' - '(-n --new-window -r --reuse-window)'{-r,--reuse-window}'[open a file or directory in the last active window]' + '(-n --new-window -r --reuse-window)'{-n,--new-window}'[force to open a new window]' + '(-n --new-window -r --reuse-window)'{-r,--reuse-window}'[force to open a file or folder in an already opened window]' '(-w --wait)'{-w,--wait}'[wait for the files to be closed before returning]' - '--locale=[specify the locale to use]:locale (e.g. en-US or zh-TW):(de en en-US es fr it ja ko ru zh-CN zh-TW bg hu pt-br tr bg hu pt-br tr)' - '--user-data-dir[specify the directory that user data is in]:directory:_directories' + '--locale=[the locale to use (e.g. en-US or zh-TW)]:locale (e.g. en-US or zh-TW):(de en en-US es fr it ja ko ru zh-CN zh-TW bg hu pt-br tr)' + '--user-data-dir[specify the directory that user data is kept in]:directory:_directories' '(- *)'{-v,--version}'[print version]' '(- *)'{-h,--help}'[print usage]' - '--extensions-dir[specify the root path for extensions]:root path:_directories' + '--extensions-dir[set the root path for extensions]:root path:_directories' '--list-extensions[list the installed extensions]' '--show-versions[show versions of installed extensions, when using --list-extension]' - '--install-extension[specify extension to install]:id or path:_files -g "*.vsix(-.)"' - '--uninstall-extension[specify extension to uninstall]:id or path:_files -g "*.vsix(-.)"' - '--enable-proposed-api[enable proposed api features for specified extension]:extension id' + '--install-extension[install an extension]:id or path:_files -g "*.vsix(-.)"' + '--uninstall-extension[uninstall an extension]:id or path:_files -g "*.vsix(-.)"' + '--enable-proposed-api[enables proposed API features for extensions]::extension id: ' '--verbose[print verbose output (implies --wait)]' - '--log[specify log level to use]:level [info]:(critical error warn info debug trace off)' + '--log[log level to use]:level [info]:(critical error warn info debug trace off)' '(-s --status)'{-s,--status}'[print process usage and diagnostics information]' '(-p --performance)'{-p,--performance}'[start with the "Developer: Startup Performance" command enabled]' '--prof-startup[run CPU profiler during startup]' '--disable-extensions[disable all installed extensions]' + '--disable-extension[disable an extension]:extension id: ' '--inspect-extensions[allow debugging and profiling of extensions]' '--inspect-brk-extensions[allow debugging and profiling of extensions with the extension host being paused after start]' '--disable-gpu[disable GPU hardware acceleration]' - '--upload-logs[uploads logs from current session to a secure endpoint]:confirm:(iConfirmLogsUpload)' - '--max-memory=[specify max memory size for a window]:size (Mbytes)' - '*:filename:_files' + '--upload-logs[upload logs from current session to a secure endpoint]:confirm:(iConfirmLogsUpload)' + '--max-memory=[max memory size for a window (in Mbytes)]:size (Mbytes)' + '*:file or directory:_files' ) _arguments -s -S $arguments From de4b9f6410556e78195b77e335f0606ac18d3105 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Fri, 17 Aug 2018 03:16:45 +0300 Subject: [PATCH 3/6] Package completions under resources/completions --- build/gulpfile.vscode.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 608c1a42915..62422c75afb 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -336,6 +336,8 @@ function packageTask(platform, arch, opts) { .pipe(electron(_.extend({}, config, { platform, arch, ffmpegChromium: true }))) .pipe(filter(['**', '!LICENSE', '!LICENSES.chromium.html', '!version'])); + result = es.merge(result, gulp.src('resources/completions/**', { base: '.' })); + if (platform === 'win32') { result = es.merge(result, gulp.src('resources/win32/bin/code.js', { base: 'resources/win32' })); From 20d5a6bb25aaefe483d940b062274fe3b062dd51 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Fri, 17 Aug 2018 14:12:06 +0300 Subject: [PATCH 4/6] Add Bash completion script --- resources/completions/bash/code | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 resources/completions/bash/code diff --git a/resources/completions/bash/code b/resources/completions/bash/code new file mode 100644 index 00000000000..e377c5d24e2 --- /dev/null +++ b/resources/completions/bash/code @@ -0,0 +1,61 @@ +_code() +{ + local cur prev words cword split + _init_completion -s || return + + _expand || return + + case $prev in + -d|--diff) + _filedir + return + ;; + -a|--add|--user-data-dir|--extensions-dir) + _filedir -d + return + ;; + -g|--goto) + compopt -o nospace + _filedir + return + ;; + --locale) + COMPREPLY=( $( compgen -W 'de en en-US es fr it ja ko ru zh-CN zh-TW bg hu pt-br tr' ) ) + return + ;; + --install-extension|--uninstall-extension) + _filedir vsix + return + ;; + --log) + COMPREPLY=( $( compgen -W 'critical error warn info debug trace off' ) ) + return + ;; + --folder-uri|--disable-extension|--max-memory) + # argument required but no completions available + return 0 + ;; + --enable-proposed-api) + # argument optional but no completions available + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-d --diff --folder-uri -a --add -g + --goto -n --new-window -r --reuse-window -w --wait --locale= + --user-data-dir -v --version -h --help --extensions-dir + --list-extensions --show-versions --install-extension + --uninstall-extension --enable-proposed-api --verbose --log -s + --status -p --performance --prof-startup --disable-extensions + --disable-extension --inspect-extensions + --inspect-brk-extensions --disable-gpu --upload-logs + --max-memory=' -- "$cur") ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + return + fi + + _filedir +} && +complete -F _code code From ccceaa2f52412815fb2f9023adcd214c45b46c43 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Fri, 17 Aug 2018 14:18:07 +0300 Subject: [PATCH 5/6] Automatically install Bash and Zsh completions in deb/rpm --- build/gulpfile.vscode.linux.js | 16 ++++++++++++++-- resources/linux/rpm/code.spec.template | 6 ++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index 49f2cad8ad7..ad328980214 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -44,6 +44,12 @@ function prepareDebPackage(arch) { const icon = gulp.src('resources/linux/code.png', { base: '.' }) .pipe(rename('usr/share/pixmaps/' + product.applicationName + '.png')); + const bash_completion = gulp.src('resources/completions/bash/code') + .pipe(rename('usr/share/bash-completion/completions/code')); + + const zsh_completion = gulp.src('resources/completions/zsh/_code') + .pipe(rename('usr/share/zsh/vendor-completions/_code')); + const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) .pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; })); @@ -78,7 +84,7 @@ function prepareDebPackage(arch) { .pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@')) .pipe(rename('DEBIAN/postinst')); - const all = es.merge(control, postinst, postrm, prerm, desktop, appdata, icon, code); + const all = es.merge(control, postinst, postrm, prerm, desktop, appdata, icon, bash_completion, zsh_completion, code); return all.pipe(vfs.dest(destination)); }; @@ -122,6 +128,12 @@ function prepareRpmPackage(arch) { const icon = gulp.src('resources/linux/code.png', { base: '.' }) .pipe(rename('BUILD/usr/share/pixmaps/' + product.applicationName + '.png')); + const bash_completion = gulp.src('resources/completions/bash/code') + .pipe(rename('BUILD/usr/share/bash-completion/completions/code')); + + const zsh_completion = gulp.src('resources/completions/zsh/_code') + .pipe(rename('BUILD/usr/share/zsh/site-functions/_code')); + const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) .pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; })); @@ -142,7 +154,7 @@ function prepareRpmPackage(arch) { const specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' }) .pipe(rename('SOURCES/' + product.applicationName + '.xpm')); - const all = es.merge(code, desktop, appdata, icon, spec, specIcon); + const all = es.merge(code, desktop, appdata, icon, bash_completion, zsh_completion, spec, specIcon); return all.pipe(vfs.dest(getRpmBuildPath(rpmArch))); }; diff --git a/resources/linux/rpm/code.spec.template b/resources/linux/rpm/code.spec.template index cf594670da7..bb2e21c0059 100644 --- a/resources/linux/rpm/code.spec.template +++ b/resources/linux/rpm/code.spec.template @@ -18,9 +18,13 @@ Visual Studio Code is a new choice of tool that combines the simplicity of a cod mkdir -p %{buildroot}/usr/share/@@NAME@@ mkdir -p %{buildroot}/usr/share/applications mkdir -p %{buildroot}/usr/share/pixmaps +mkdir -p %{buildroot}/usr/share/bash-completion/completions +mkdir -p %{buildroot}/usr/share/zsh/site-functions cp -r usr/share/@@NAME@@/* %{buildroot}/usr/share/@@NAME@@ cp -r usr/share/applications/@@NAME@@.desktop %{buildroot}/usr/share/applications cp -r usr/share/pixmaps/@@NAME@@.png %{buildroot}/usr/share/pixmaps +cp usr/share/bash-completion/completions/code %{buildroot}/usr/share/bash-completion/completions/code +cp usr/share/zsh/site-functions/_code %{buildroot}/usr/share/zsh/site-functions/_code %post # Remove the legacy bin command if this is the stable build @@ -52,3 +56,5 @@ fi /usr/share/@@NAME@@/ /usr/share/applications/@@NAME@@.desktop /usr/share/pixmaps/@@NAME@@.png +/usr/share/bash-completion/completions/code +/usr/share/zsh/site-functions/_code From cecaba689a95646ed3c3c3b6aff22229a86fd825 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Thu, 13 Sep 2018 22:24:17 +0300 Subject: [PATCH 6/6] Merge in upstream changes to the Zsh completion script https://github.com/zsh-users/zsh/commit/def92fc006140e79c79118137002baad816201c9 --- resources/completions/zsh/_code | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/completions/zsh/_code b/resources/completions/zsh/_code index 1cf22326301..9579cffb2f6 100644 --- a/resources/completions/zsh/_code +++ b/resources/completions/zsh/_code @@ -25,8 +25,8 @@ arguments=( '(-s --status)'{-s,--status}'[print process usage and diagnostics information]' '(-p --performance)'{-p,--performance}'[start with the "Developer: Startup Performance" command enabled]' '--prof-startup[run CPU profiler during startup]' - '--disable-extensions[disable all installed extensions]' - '--disable-extension[disable an extension]:extension id: ' + '(--disable-extension --disable-extensions)--disable-extensions[disable all installed extensions]' + \*'--disable-extension[disable an extension]:extension id: ' '--inspect-extensions[allow debugging and profiling of extensions]' '--inspect-brk-extensions[allow debugging and profiling of extensions with the extension host being paused after start]' '--disable-gpu[disable GPU hardware acceleration]'