Files
zsh-completions/src/_virtualbox
T
Aaron Schrab 3f55429b0e Move modelines to end of file
Having a vim modeline or emacs local variable line somewhere in the
middle of the file isn't really helpful.  By default, vim will only
check the first and last 5 lines of a file for a modeline (assuming the
modeline option is enabled).  Emacs is even more strict about the type
of local variable line that was in use, it will only check the first
line of the file or the second line if the first line specifies a script
interpreter (which isn't the case here).

Move the vim modeline to the end of the file so that it can actually be
found by vim but is out of the way for editing.  For emacs more work is
required, convert that to the more verbose Local Variables syntax which
emacs will look for starting 3000 characters from the end of the file.

Also there is no zsh mode for emacs (according to
zsh-users/zsh-completions#75), use the "Shell-Script" mode instead.
This seems to automatically detect that the files are for zsh.

I'm not an emacs user, so I haven't tested that portion much.  But, this
does at least improve the syntax highlighting there.
2012-08-23 11:18:49 -04:00

318 lines
11 KiB
Bash

#compdef VBoxManage=vboxmanage VBoxHeadless=vboxheadless
# ------------------------------------------------------------------------------
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the zsh-users nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for VirtualBox (http://www.virtualbox.org).
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Massimiliano Torromeo <massimiliano.torromeo@gmail.com>
# * Julien Nicoulaud <julien.nicoulaud@gmail.com>
#
# ------------------------------------------------------------------------------
_vboxmachines() {
VBoxManage list vms | egrep -o '^"[^"]+"' 2>/dev/null | sed -e 's|"||g' | while read machine; do
_wanted 'machine' expl 'machine' compadd $machine
done
}
# Roughly guess command options
_vboxcommandoptions() {
cmd="$1"
cmdoutput=$(VBoxManage "$cmd" 2>/dev/null | tail -n +2 | grep -v 'Syntax error:' | grep -v '<uuid>|<name>' | sed 's|<[^>]\+>||g' | sed 's|VBoxManage [^ ]\+ | |')
optcount=0
option=""
optlines=()
echo "$cmdoutput" | egrep -o ' [\[A-Za-z0-9\-\<].*' | while read line; do
option="${option}${line}"
if [[ $line[-1] != '|' ]]; then
optcount=$(($optcount+1))
optlines[$optcount]="$option"
option=""
fi
done
# optionals ([abc])
for line in $optlines; do
echo "$line" | egrep -o '\[[^]]+\]' | while read option; do
option=$(echo $option | sed 's|[]\[]||g' | cut -d ' ' -f 1)
_options=(${(s:|:)option})
for option in $_options; do
_wanted "${cmd}_option" expl "${cmd} option" compadd -- $option
done
done
done
# mandatory
for line in $optlines; do
echo "$line" | sed 's|\[[^]]\+\]|\n|g' | while read option; do
if [[ "$option" != "" ]]; then
_option=$(echo $option | cut -d ' ' -f 1)
_options=(${(s:|:)option})
for option in $_options; do
_wanted "${cmd}_option" expl "${cmd} option" compadd -- $option
done
fi
done
done
}
# List possible mediums
_vboxmediums() {
_wanted "mediums" expl "mediums" compadd -- "none"
_wanted "mediums" expl "mediums" compadd -- "emptydrive"
_wanted "mediums" expl "mediums" compadd -- "iscsi"
_files -g '*.{iso,vmdk,vdi}'
for CD in /dev/cd/*; do
readlink -f $CD
done | uniq | while read CD; do
_wanted "host drives" expl "host drives" compadd -- "host:$CD"
done
}
# List available os types
_vboxostypes() {
VBoxManage list ostypes | grep '^ID' | awk '{print $2}' | while read OSTYPE; do
_wanted 'ostype' expl 'os type' compadd -- $OSTYPE
done
}
# Guess options for this commands
_vboxopts_controlvm() { _vboxcommandoptions controlvm }
_vboxopts_modifyvm() { _vboxcommandoptions modifyvm }
_vboxopts_export() { _vboxcommandoptions export }
_vboxmanage() {
local -a _1st_arguments
_1st_arguments=(
"list:gives information about VirtualBox's current settings"
'showvminfo:shows information about a particular virtual machine'
'registervm:import a virtual machine definition in an XML file into VirtualBox'
'unregistervm:unregisters a virtual machine'
'createvm:creates a new XML virtual machine definition file'
'modifyvm:changes the properties of a registered virtual machine which is not running'
'import:imports a virtual appliance in OVF format by copying the virtual disk images and creating virtual machines in VirtualBox'
'export:exports one or more virtual machines from VirtualBox into a virtual appliance in OVF format'
'startvm:starts a virtual machine that is currently in the "Powered off" or "Saved" states'
'controlvm:change the state of a virtual machine that is currently running'
'discardstate:discards the saved state of a virtual machine which is not currently running'
'adoptstate:adopt a saved state file (.sav)'
'snapshot:control snapshots'
'closemedium:removes a hard disk, DVD or floppy image from a VirtualBox media registry'
'storageattach:attaches/modifies/removes a storage medium connected to a storage controller'
'storagectl:attaches/modifies/removes a storage controller'
'bandwidthctl:creates/deletes/modifies bandwidth groups'
'showhdinfo:shows information about a virtual hard disk image'
'createhd:creates a new virtual hard disk image'
'modifyhd:change the characteristics of a disk image after it has been created'
'clonehd:duplicates a registered virtual hard disk image to a new image file with a new unique identifier'
'convertfromraw:converts a raw disk image to a VirtualBox Disk Image (VDI) file'
'getextradata:retrieve string data to a virtual machine or to a VirtualBox configuration'
'setextradata:attach string data to a virtual machine or to a VirtualBox configuration'
'setproperty:change global settings which affect the entire VirtualBox installation'
'usbfilter:used for working with USB filters in virtual machines, or global filters'
'sharedfolder:share folders on the host computer with guest operating systems'
'guestproperty:get or set properties of a running virtual machine'
'guestcontrol:control certain things inside a guest from the host'
'debugvm:for experts who want to tinker with the exact details of virtual machine execution'
'metrics:monitor the usage of system resources'
'hostonlyif:change the IP configuration of a host-only network interface'
'dhcpserver:control the DHCP server that is built into VirtualBox'
'extpack:add or remove VirtualBox extension packs'
)
local context state line expl
local -A opt_args
_arguments '*:: :->subcmds' && return 0
if (( CURRENT == 1 )); then
_describe -t commands "VBoxManage commands" _1st_arguments -V1
return
fi
case "$words[1]" in
list)
_arguments \
'--long' \
':list option:(vms runningvms ostypes hostdvds hostfloppies bridgedifs hostonlyifs dhcpservers hostinfo hostcpuids hddbackends hdds dvds floppies usbhost usbfilters systemproperties extpacks)'
;;
showvminfo)
_arguments \
:machine:_vboxmachines \
'--details' \
'--machinereadable' \
'--log: :'
;;
unregistervm)
_arguments \
:machine:_vboxmachines \
'--delete'
;;
createvm)
_arguments \
'--name: :' \
'--ostype:os type:_vboxostypes' \
'--register' \
'--basefolder:folder:_files -/' \
'--settingsfile:file:_files' \
'--uuid: :'
;;
modifyvm)
_arguments \
:machine:_vboxmachines \
:modifyvm_option:_vboxopts_modifyvm
;;
import)
_arguments \
':ovf file:_files -g \*.{ovf,ova}' \
'--dry-run'
;;
export)
_arguments \
:machine:_vboxmachines \
:export_option:_vboxopts_export
;;
startvm)
_arguments \
:machine:_vboxmachines \
'--type:running mode:(gui sdl headless)'
;;
controlvm)
_arguments \
:machine:_vboxmachines \
:controlvm_option:_vboxopts_controlvm
;;
adoptstate)
_arguments \
:machine:_vboxmachines \
':sav file:_files -g \*.sav'
;;
closemedium)
_arguments \
':type:(disk dvd floppy)' \
':file:_files' \
'--delete'
;;
discardstate|bandwidthctl|getextradata|setextradata|debugvm)
_arguments \
:machine:_vboxmachines
;;
storagectl)
_arguments \
:machine:_vboxmachines \
'--name: :' \
'--add:type:(ide scsi floppy sas)' \
'--controller:type:(LSILogic|LSILogicSAS|BusLogic|IntelAHCI|PIIX3|PIIX4|ICH6|I82078)' \
--sataideemulation{1..4}":port:({1..30})" \
"--sataportcount:num:({1..30})" \
'--hostiocache:bool:(on off)' \
'--bootable:bool:(on off)' \
'--remove' #"
;;
storageattach)
_arguments \
:machine:_vboxmachines\
'--storagectl:storage ctl:("IDE Controller" "SATA Controller")' \
'--port: :' \
'--device: :' \
'--type:drive type:(dvddrive hdd fdd)' \
'--medium:mediums:_vboxmediums' \
'--mtype:behaviour:(normal writethrough immutable shareable)' \
'--comment: :' \
'--passthrough:enabled?:(on off)' \
'--bandwidthgroup: :' \
'--forceunmount' '--server: :' \
'--target: :' \
'--lun: :' \
'--encodedlun: :' \
'--username: :' \
'--password: :' \
'--intnet: :'
;;
createhd)
_arguments \
'--filename:filename:_files -g \*.{vdi,vmdk,vhd}' \
'--size:megabytes:' \
'--sizebyte:bytes:' \
'--format:type:(VDI VMDK VHD)' \
'--variant:type:(Standard Fixed Split2G Stream ESX)'
;;
sharedfolder)
_arguments \
':action:(add remove)' \
:machine:_vboxmachines \
'--name: :' \
'--hostpath:path:_files -/' \
'--transient' \
'--readonly' \
'--automount'
;;
esac
return 1
}
_vboxheadless() {
local context state line expl
local -A opt_args
_arguments \
'(-s -startvm --startvm)'{-s,-startvm,--startvm}'[Start given VM]:machine:_vboxmachines' \
'(-n --vnc)'{-n,--vnc}'[Enable the built in VNC server]' \
'(-m --vncport)'{-m,--vncport}'[TCP port number to use for the VNC server]:port:' \
'(-o --vncpass)'{-o,--vncpass}'[Set the VNC server password]:pw:' \
'(-v -vrde --vrde)'{-v,-vrde,--vrde}"[Enable (default) or disable the VRDE server or don't change the setting]::(on off config)" \
'(-e -vrdeproperty --vrdeproperty)'{-e,-vrdeproperty,--vrdeproperty}'[Set a VRDE property]: :' \
'(-c -capture --capture)'{-c,-capture,--capture}'[Record the VM screen output to a file]' \
'(-w --width)'{-w,--width}'[Frame width when recording]:width:' \
'(-h --height)'{-h,--height}'[Frame height when recording]:height:' \
'(-r --bitrate)'{-r,--bitrate}'[Recording bit rate when recording]:bitrate:' \
'(-f --filename)'{-f,--filename}'[File name when recording. The codec used will be chosen based on the file extension]:filename:_files'
}
_virtualbox() {
local ret=1
_call_function ret _$service
return ret
}
_virtualbox "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et