#!/bin/sh
#
# See the function show_help_new_tool in order to know more about this tool


#-------------------------------------------------------------------------------
#   Show help
#-------------------------------------------------------------------------------
show_help(){
   # Actual implemented features:
echo -e "
OPTIONS:
  -h This help
  -help This help
  --help This help
  --h This help
  --help-new Info about this tool

  -restart Restart Enlightenment
  -exit Exit Enlightenment

  -module-enable OPT1 Enable the module named 'OPT1'
  -module-disable OPT1 Disable the module named 'OPT1'
  -module-load OPT1 Loads the module named 'OPT1' into memory
  -module-unload OPT1 Unloads the module named 'OPT1' from memory

  -profile-list List all existing profiles
  -profile-add OPT1 Add profile named OPT1
  -profile-del OPT1 Delete profile named OPT1
  -default-profile-get Get the default configuration profile
  -default-profile-set OPT1 Set the default configuration profile to OPT1

  -desktops-get Get the number of virtual desktops
  -desktop-show OPT1 OPT2 Show the desk at position OPT1 (x) and OPT2 (y), see -desktops-get for current count.
  -desktop-show-by-name OPT1 Show the desk named OPT1
  -desktop-bg-add OPT1 OPT2 OPT3 OPT4 OPT5 Add a desktop bg definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = bg file path
  -desktop-bg-del OPT1 OPT2 OPT3 OPT4 Delete a desktop bg definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y.
  -desktop-bg-list List all current desktop bg definitions

Note: This is a new implementation of enlightenment_remote,
      for more information about it see the '--help-new' option.
"
# List of available features: qdbus org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject
}


#-------------------------------------------------------------------------------
#   Show info about the new implementation of enlightenment_remote
#-------------------------------------------------------------------------------
show_help_new_tool(){
   echo -e "
This is a new implementation of enlightenment_remote, it uses dbus calls to
enlightenment so it is using the new system, this tool is a front-end just like
the original tool, created for the ease-to-use of the users and in order to
maintain a bit of compatibility with possible scripts from the users too.

The original tool is not (at the date of today) not removed and you can still
have access to it, it is renamed to enlightenment_remote_old

This tool depends of the command dbus-send, normally included in the main 
dbus package

This tool is just a front-end and may be not updated, you should
use dbus calls instead

If you want to see the list of actual dbus calls available for Enlightenment,
run: qdbus org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject
"
}


#===  FUNCTION  ================================================================
#          NAME:  ERC
#   DESCRIPTION:  eremote callback
#    PARAMETERS:  interface/method call
#       RETURNS:  
#===============================================================================
ERC(){
   dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1"
}

#===  FUNCTION  ================================================================
#          NAME:  ERCS
#   DESCRIPTION:  eremote call with string parameter
#    PARAMETERS:  interface/method call, string parameter
#       RETURNS:  
#===============================================================================
ERCS(){
   dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" string:"$2"
}

#===  FUNCTION  ================================================================
#          NAME:  ERGS 
#   DESCRIPTION:  Get a (single) value (string)
#    PARAMETERS:  interface/method call
#       RETURNS:  value (string)
#===============================================================================
ERGS(){
   result="$( dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" )"
   echo $result
   unset result
}

#===  FUNCTION  ================================================================
#          NAME:  ERGM
#   DESCRIPTION:  Get a (multiple) values (string)
#    PARAMETERS:  interface/method call
#       RETURNS:  values (string)
#===============================================================================
ERGM(){
   result="$( dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" )"
   result="${result##*[}"
   result="${result%%]*}"
   for value in $result
   do
      echo -n "$value "
   done
   echo ""
   unset result value
}

#===  FUNCTION  ================================================================
#          NAME:  ERGMI
#   DESCRIPTION:  Get a (multiple) values (integer)
#    PARAMETERS:  interface/method call
#       RETURNS:  values (integer)
#===============================================================================
ERGMI(){
   result="$( dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" )"
   result="$( echo "$result" | sed 's/int32//g' )"
   for value in $result
   do
      echo -n "$value "
   done
   echo ""
   unset result value
}

#===  FUNCTION  ================================================================
#          NAME:  ERGMST
#   DESCRIPTION:  Get a (multiple) struct value
#    PARAMETERS:  interface/method call
#       RETURNS:  struct values
#===============================================================================
ERGMST(){
   result="$( dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" )"
   result="${result##*array \[}"
   result="${result%%]*}"
   result="$( echo "$result" | sed -e 's/int32//g' -e 's/struct {//g' )"
   for value in $result
   do
      if test "$value" = "}"; then
         echo
      else
         echo -n "$value "
      fi
   done
   echo ""
   unset result value
}

#===  FUNCTION  ================================================================
#          NAME:  ERCIIIIS
#   DESCRIPTION:  eremote call with int, int, int, int, string parameter
#    PARAMETERS:  interface/method call, int, int, int, int, string
#       RETURNS:  
#===============================================================================
ERCIIIIS(){
   dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" int32:"$2" int32:"$3" int32:"$4" int32:"$5" string:"$6"
}

#===  FUNCTION  ================================================================
#          NAME:  ERCIIII
#   DESCRIPTION:  eremote call with int, int, int, int parameter
#    PARAMETERS:  interface/method call, int, int, int, int
#       RETURNS:  
#===============================================================================
ERCIIII(){
   dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" int32:"$2" int32:"$3" int32:"$4" int32:"$5"
}

#===  FUNCTION  ================================================================
#          NAME:  ERCII
#   DESCRIPTION:  eremote call with int, int parameter
#    PARAMETERS:  interface/method call, int, int
#       RETURNS:  
#===============================================================================
ERCII(){
   dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" int32:"$2" int32:"$3"
}



#-------------------------------------------------------------------------------
#   E Restart
#-------------------------------------------------------------------------------
er_restart(){
   ERC org.enlightenment.wm.Core.Restart
   sleep 6
}

#-------------------------------------------------------------------------------
#   E Logout
#-------------------------------------------------------------------------------
er_exit(){
   ERC org.enlightenment.wm.Core.Shutdown
}

#-------------------------------------------------------------------------------
#   E Module Disable
#-------------------------------------------------------------------------------
er_module_disable(){
   ERCS org.enlightenment.wm.Module.Disable "$2"
}

#-------------------------------------------------------------------------------
#   E Module Enable
#-------------------------------------------------------------------------------
er_module_enable(){
   ERCS org.enlightenment.wm.Module.Enable "$2"
}

#-------------------------------------------------------------------------------
#   E Module Load
#-------------------------------------------------------------------------------
er_module_load(){
   ERCS org.enlightenment.wm.Module.Load "$2"
}

#-------------------------------------------------------------------------------
#   E Module Unload
#-------------------------------------------------------------------------------
er_module_unload(){
   ERCS org.enlightenment.wm.Module.Unload "$2"
}

#-------------------------------------------------------------------------------
#   E Profile Add
#-------------------------------------------------------------------------------
er_profile_add(){
   ERCS org.enlightenment.wm.Profile.Add "$2"
}

#-------------------------------------------------------------------------------
#   E Profile Delete
#-------------------------------------------------------------------------------
er_profile_del(){
   ERCS org.enlightenment.wm.Profile.Delete "$2"
}

#-------------------------------------------------------------------------------
#   E Profile List
#-------------------------------------------------------------------------------
er_profile_list(){
   ERGM org.enlightenment.wm.Profile.List
}

#-------------------------------------------------------------------------------
#   E Profile Get
#-------------------------------------------------------------------------------
er_default_profile_get(){
   ERGS org.enlightenment.wm.Profile.Get
}


#-------------------------------------------------------------------------------
#   E Profile Set
#-------------------------------------------------------------------------------
er_default_profile_set(){
   ERCS org.enlightenment.wm.Profile.Set "$2"
}


#-------------------------------------------------------------------------------
#   E Virtual desktop get
#-------------------------------------------------------------------------------
er_desktop_get(){
   ERGMI org.enlightenment.wm.Desktop.GetVirtualCount
}

#-------------------------------------------------------------------------------
#   E Virtual show
#-------------------------------------------------------------------------------
er_desktop_show(){
   ERCII org.enlightenment.wm.Desktop.Show "$2" "$3"
}

#-------------------------------------------------------------------------------
#   E Virtual show by name
#-------------------------------------------------------------------------------
er_desktop_show_by_name(){
   ERCS org.enlightenment.wm.Desktop.ShowByName "$2"
}

#-------------------------------------------------------------------------------
#   E Desktop background add
#-------------------------------------------------------------------------------
er_desktop_bg_add(){
   ERCIIIIS org.enlightenment.wm.Desktop.Background.Add "$2" "$3" "$4" "$5" "$6"
}

#-------------------------------------------------------------------------------
#   E Desktop background del
#-------------------------------------------------------------------------------
er_desktop_bg_del(){
   ERCIIII org.enlightenment.wm.Desktop.Background.Del "$2" "$3" "$4" "$5"
}

#-------------------------------------------------------------------------------
#   E Desktop background list
#-------------------------------------------------------------------------------
er_desktop_bg_list(){
   ERGMST org.enlightenment.wm.Desktop.Background.List
}




#===  FUNCTION  ================================================================
#          NAME:  Main
#   DESCRIPTION:  We start there and go to the desired option
#    PARAMETERS:  get options and use them
#       RETURNS:  just finishes and exit
#===============================================================================

if ! type dbus-send > /dev/null 2>&1; then
   echo "E: dbus-send command not found, please install it first"
   exit 1
fi

case "$1" in
   --help-new)
      show_help_new_tool
   ;;
   -restart)
      er_restart
   ;;
   -exit)
      er_exit 
   ;;
   -module-enable)
      er_module_enable "$@"
   ;;
   -module-disable)
      er_module_disable "$@"
   ;;
   -module-load)
      er_module_load "$@"
   ;;
   -module-unload)
      er_module_unload "$@"
   ;;
   -profile-add)
      er_profile_add "$@"
   ;;
   -profile-del)
      er_profile_del "$@"
   ;;
   -profile-list)
      er_profile_list
   ;;
   -default-profile-get)
      er_default_profile_get
   ;;
   -default-profile-set)
      er_default_profile_set "$@"
   ;;
   -desks-get|-desktops-get)
      er_desktop_get
   ;;
   -desktop-show)
      er_desktop_show "$@"
   ;;
   -desktop-show-by-name)
      er_desktop_show_by_name "$@"
   ;;
   -desktop-bg-add)
      er_desktop_bg_add "$@"
   ;;
   -desktop-bg-del)
      er_desktop_bg_del "$@"
   ;;
   -desktop-bg-list)
      er_desktop_bg_list
   ;;


   # This entry needs to be allways the last option of the list (*)
   -h|-help|--help|--h|*)
      show_help
   ;;
esac


################################################################################
################################################################################
################################################################################
ignore_this(){
# IGNORE THIS SECTION
# think at it just like as a TODO list or a list where are listed all the old options of enlightenmen_remote
# Remember that the elements of this next list are removed every time they are implemented on this tool

echo "
  -module-list List all loaded modules
  -default-bg-set OPT1 Set the default background edje to the desktop background in the file 'OPT1' (must be a full path)
  -default-bg-get Get the default background edje file path
  -font-available-list List all available fonts
  -font-apply Apply font settings changes
  -font-fallback-append OPT1 Append OPT1 to the fontset
  -font-fallback-prepend OPT1 Prepend OPT1 to the fontset
  -font-fallback-list List the fallback fonts in order
  -font-fallback-remove OPT1 Remove OPT1 from the fontset
  -font-default-set OPT1 OPT2 OPT3 Set textclass (OPT1) font (OPT2) and size (OPT3)
  -font-default-get OPT1 List the default font associated with OPT1
  -font-default-remove OPT1 Remove the default text class OPT1
  -font-default-list List all configured text classes
  -font-fallback-clear Clear list of fallback fonts
  -lang-list List all available languages
  -lang-set OPT1 Set the current language to 'OPT1'
  -lang-get Get the current language
  -dirs-list OPT1 List the directory of type specified by 'OPT1', try 'themes'
  -dirs-list-append OPT1 OPT2 Append the directory of type specified by 'OPT2' to the list in 'OPT1'
  -dirs-list-prepend OPT1 OPT2 Prepend the directory of type specified by 'OPT2' to the list in 'OPT1'
  -dirs-list-remove OPT1 OPT2 Remove the directory of type specified by 'OPT2' from the list in 'OPT1'
  -framerate-set OPT1 Set the animation framerate (fps)
  -framerate-get Get the animation framerate (fps)
  -menus-scroll-speed-set OPT1 Set the scroll speed of menus (pixels/sec)
  -menus-scroll-speed-get Get the scroll speed of menus (pixels/sec)
  -focus-policy-set OPT1 Set the focus policy. OPT1 = CLICK, MOUSE or SLOPPY
  -focus-policy-get Get focus policy
  -edge-flip-dragging-set OPT1 Set the edge flip while dragging policy flag (0/1)
  -edge-flip-dragging-get Get the edge flip while dragging policy flag
  -font-cache-set OPT1 Set the font cache size (Kb)
  -font-cache-get Get the speculative font cache size (Kb)
  -image-cache-set OPT1 Set the image cache size (Kb)
  -image-cache-get Get the speculative image cache size (Kb)
  -edje-cache-set OPT1 Set the edje cache size (items)
  -edje-cache-get Get the speculative edje cache size (items)
  -edje-collection-cache-set OPT1 Set the edje collection cache size (items)
  -edje-collection-cache-get Get the speculative edje collection cache size (items)
  -menus-fast-move-threshold-set OPT1 Set the mouse speed (pixels/second) that is considered a 'fast move'
  -menus-fast-move-threshold-get Get the mouse speed (pixels/second) that is considered a 'fast move'
  -menus-click-drag-timeout-set OPT1 Set the time (in sec) between a mouse press and release that will keep the menu up anyway
  -menus-click-drag-timeout-get Get the time (in sec) between a mouse press and release that will keep the menu up anyway
  -border-shade-animate-set OPT1 Set the shading animation flag (0/1)
  -border-shade-animate-get Get the shading animation flag (0/1)
  -border-shade-transition-set OPT1 Set the shading animation algorithm (0, 1, 2 or 3)
  -border-shade-transition-get Get the shading animation algorithm (0, 1, 2 or 3)
  -border-shade-speed-set OPT1 Set the shading speed (pixels/sec)
  -border-shade-speed-get Get the shading speed (pixels/sec)
  -desks-set OPT1 OPT2 Set the number of virtual desktops (X x Y desks OPT1 = X, OPT2 = Y)
  -maximize-policy-set OPT1 Set the maximize policy. OPT1 = FULLSCREEN, SMART, EXPAND or FILL
  -maximize-policy-get Get maximize policy
  -maximize-manipulation-set OPT1 Allow manipulation, 1 for enabled 0 for disabled
  -maximize-manipulation-get Get manipulation, 1 for enabled 0 for disabled
  -binding-mouse-list List all mouse bindings
  -binding-mouse-add OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 Add an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters
  -binding-mouse-del OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 Delete an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters
  -binding-key-list List all key bindings
  -binding-key-add OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 Add an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters
  -binding-key-del OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 Delete an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters
  -always-click-to-raise-set OPT1 Set the always click to raise policy, 1 for enabled 0 for disabled
  -always-click-to-raise-get Get the always click to raise policy, 1 for enabled 0 for disabled
  -always-click-to-focus-set OPT1 Set the always click to focus policy, 1 for enabled 0 for disabled
  -always-click-to-focus-get Get the always click to focus policy, 1 for enabled 0 for disabled
  -use-auto-raise-set OPT1 Set use auto raise policy, 1 for enabled 0 for disabled
  -use-auto-raise-get Get use auto raise policy, 1 for enabled 0 for disabled
  -pass-click-on-set OPT1 Set pass click on policy, 1 for enabled 0 for disabled
  -pass-click-on-get Get pass click on policy, 1 for enabled 0 for disabled
  -auto-raise-delay-set OPT1 Set the auto raise delay (Seconds)
  -auto-raise-delay-get Get the auto raise delay  (Seconds)
  -use-resist-set OPT1 Set resist policy, 1 for enabled 0 for disabled
  -use-resist-get Get use resist policy, 1 for enabled 0 for disabled
  -drag-resist-set OPT1 Set drag resist threshold (0-100)
  -drag-resist-get Get drag resist threshold
  -desk-resist-set OPT1 Set desktop resist threshold (0-100)
  -desk-resist-get Get desktop resist threshold
  -window-resist-set OPT1 Set window resist threshold (0-100)
  -window-resist-get Get window resist threshold
  -gadget-resist-set OPT1 Set gadget resist threshold (0-100)
  -gadget-resist-get Get gadget resist threshold
  -winlist-warp-while-selecting-set OPT1 Set winlist (alt+tab) warp while selecting policy
  -winlist-warp-while-selecting-get Get winlist (alt+tab) warp while selecting policy
  -winlist-warp-at-end-set OPT1 Set winlist (alt+tab) warp at end policy
  -winlist-warp-at-end-get Get winlist (alt+tab) warp at end policy
  -winlist-warp-speed-set OPT1 Set winlist warp speed (0.0-1.0)
  -winlist-warp-speed-get Get winlist warp speed
  -winlist-scroll-animate-set OPT1 Set winlist (alt+tab) scroll animate policy
  -winlist-scroll-animate-get Get winlist (alt+tab) scroll animate policy
  -winlist-scroll-speed-set OPT1 Set winlist scroll speed (0.0-1.0)
  -winlist-scroll-speed-get Get winlist scroll speed
  -winlist-list-show-iconified-set OPT1 Set whether winlist (alt+tab) will show iconfied windows
  -winlist-list-show-iconified-get Get whether winlist (alt+tab) will show iconfied windows
  -winlist-list-show-other-desk-iconified-set OPT1 Set whether winlist (alt+tab) will show iconfied windows from other desks
  -winlist-list-show-other-desk-iconified-get Get whether winlist (alt+tab) will show iconfied windows from other desks
  -winlist-list-show-other-screen-iconified-set OPT1 Set whether winlist (alt+tab) will show iconfied windows from other screens
  -winlist-list-show-other-screen-iconified-get Get whether winlist (alt+tab) will show iconfied windows from other screens
  -winlist-list-show-other-desk-windows-set OPT1 Set whether winlist (alt+tab) will show other desk windows
  -winlist-list-show-other-desk-windows-get Get winlist (alt+tab) show other desk windows
  -winlist-list-show-other-screen-windows-set OPT1 Set winlist (alt+tab) show other screen windows policy
  -winlist-list-show-other-screen-windows-get Get winlist (alt+tab) show other screen windows policy
  -winlist-list-uncover-while-selecting-set OPT1 Set whether winlist (alt+tab) will show iconified windows while selecting
  -winlist-list-uncover-while-selecting-get Get whether winlist (alt+tab) will show iconified windows while selecting
  -winlist-list-jump-desk-while-selecting-set OPT1 Set winlist (alt+tab) jump desk while selecting policy
  -winlist-list-jump-desk-while-selecting-get Get winlist (alt+tab) jump desk while selecting policy
  -winlist-pos-align-x-set OPT1 Set winlist position align for x axis (0.0-1.0)
  -winlist-pos-align-x-get Get winlist position align for x axis
  -winlist-pos-align-y-set OPT1 Set winlist position align for y axis (0.0-1.0)
  -winlist-pos-align-y-get Get winlist position align for y axis
  -winlist-pos-size-w-set OPT1 Set winlist position size width (0.0-1.0)
  -winlist-pos-size-w-get Get winlist position size width
  -winlist-pos-size-h-set OPT1 Set winlist position size height (0.0-1.0)
  -winlist-pos-size-h-get Get winlist position size height
  -winlist-pos-min-w-set OPT1 Set winlist (alt+tab) minimum width
  -winlist-pos-min-w-get Get winlist (alt+tab) minimum width
  -winlist-pos-min-h-set OPT1 Set winlist (alt+tab) minimum height
  -winlist-pos-min-h-get Get winlist (alt+tab) minimum height
  -winlist-pos-max-w-set OPT1 Set winlist (alt+tab) maximum width
  -winlist-pos-max-w-get Get winlist (alt+tab) maximum width
  -winlist-pos-max-h-set OPT1 Set winlist (alt+tab) maximum height
  -winlist-pos-max-h-get Get winlist (alt+tab) maximum height
  -kill-if-close-not-possible-set OPT1 Set whether E should kill an application if it can not close
  -kill-if-close-not-possible-get Get whether E should kill an application if it can not close
  -kill-process-set OPT1 Set whether E should kill the process directly or through x
  -kill-process-get Get whether E should kill the process directly or through x
  -kill-timer-wait-set OPT1 Set interval to wait before killing client (0.0-120.0)
  -kill-timer-wait-get Get interval to wait before killing client
  -ping-clients-set OPT1 Set whether E should ping clients
  -ping-clients-get Get whether E should ping clients
  -transition-start-set OPT1 Get the background transition used when E starts
  -transition-start-get Get the background transition used when E starts
  -transition-desk-set OPT1 Set the transition used when switching desktops
  -transition-desk-get Get the transition used when switching desktops
  -transition-change-set OPT1 Set the transition used when changing backgrounds
  -transition-change-get Get the transition used when changing backgrounds
  -focus-setting-set OPT1 Set the focus setting policy ("NONE", "NEW_WINDOW", "NEW_DIALOG", "NEW_DIALOG_IF_OWNER_FOCUSED")
  -focus-setting-get Get the focus setting policy
  -exec-action OPT1 OPT2 Executes an action given the name (OPT1) and a string of parameters (OPT2).
  -theme-list List themes and associated categories
  -theme-set OPT1 OPT2 Set theme category (OPT1) and edje file (OPT2)
  -theme-get OPT1 List the theme associated with the category OPT1
  -theme-remove OPT1 Remove the theme category OPT1
  -move-info-follows-set OPT1 Set whether the move dialog should follow the client window
  -move-info-follows-get Get whether the move dialog should follow the client window
  -resize-info-follows-set OPT1 Set whether the resize dialog should follow the client window
  -resize-info-follows-get Set whether the resize dialog should follow the client window
  -move-info-visible-set OPT1 Set whether the move dialog should be visible
  -move-info-visible-get Get whether the move dialog should be visible
  -resize-info-visible-set OPT1 Set whether the resize dialog should be visible
  -resize-info-visible-get Set whether the resize dialog should be visible
  -focus-last-focused-per-desktop-set OPT1 Set whether E should remember focused windows when switching desks
  -focus-last-focused-per-desktop-get Get whether E should remember focused windows when switching desks
  -focus-revert-on-hide-or-close-set OPT1 Set whether E will focus the last focused window when you hide or close a focused window
  -focus-revert-on-hide-or-close-get Get whether E will focus the last focused window when you hide or close a focused window
  -desktop-name-add OPT1 OPT2 OPT3 OPT4 OPT5 Add a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = desktop name
  -desktop-name-del OPT1 OPT2 OPT3 OPT4 Delete a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y.
  -desktop-name-list List all current desktop name definitions
  -cursor-size-set OPT1 Set the E cursor size
  -cursor-size-get Get the E cursor size
  -use-e-cursor-set OPT1 Set whether E's cursor should be used
  -use-e-cursor-get Get whether E's cursor should be used
  -menu-autoscroll-margin-set OPT1 Set the distance from the edge of the screen the menu will autoscroll to
  -menu-autoscroll-margin-get Get the distance from the edge of the screen the menu will autoscroll to
  -menu-autoscroll-cursor-margin-set OPT1 Set the distance from the edge of the screen the cursor needs to be to start menu autoscrolling
  -menu-autoscroll-cursor-margin-get Get the distance from the edge of the screen the cursor needs to be to start menu autoscrolling
  -transient-move-set OPT1 Set if transients should move with it's parent
  -transient-move-get Get if transients should move with it's parent
  -transient-resize-set OPT1 Set if transients should move when it's parent resizes
  -transient-resize-get Get if transients should move when it's parent resizes
  -transient-raise-set OPT1 Set if transients should raise with it's parent
  -transient-raise-get Get if transients should raise with it's parent
  -transient-lower-set OPT1 Set if transients should lower with it's parent
  -transient-lower-get Get if transients should lower with it's parent
  -transient-layer-set OPT1 Set if transients should change layer with it's parent
  -transient-layer-get Get if transients should change layer with it's parent
  -transient-desktop-set OPT1 Set if transients should change desktop with it's parent
  -transient-desktop-get Get if transients should change desktop with it's parent
  -transient-iconify-set OPT1 Set if transients should iconify with it's parent
  -transient-iconify-get Get if transients should iconify with it's parent
  -modal-windows-set OPT1 Set if enlightenment should honour modal windows
  -modal-windows-get Get if enlightenment should honour modal windows
  -input-method-list List all available input methods
  -input-method-set OPT1 Set the current input method to 'OPT1'
  -input-method-get Get the current input method
  -window-placement-policy-set OPT1 Set the window placement policy. OPT1 = SMART, ANTIGADGET, CURSOR or MANUAL
  -window-placement-policy-get Get window placement policy
  -binding-signal-list List all signal bindings
  -binding-signal-add OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 Add an existing signal binding. OPT1 = Context, OPT2 = signal, OPT3 = source, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters
  -binding-signal-del OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 Delete an existing signal binding. OPT1 = Context, OPT2 = signal, OPT3 = source, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters
  -binding-wheel-list List all wheel bindings
  -binding-wheel-add OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 Add an existing wheel binding. OPT1 = Context, OPT2 = direction, OPT3 = z, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters
  -binding-wheel-del OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 Delete an existing wheel binding. OPT1 = Context, OPT2 = direction, OPT3 = z, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters
  -winlist-list-focus-while-selecting-set OPT1 Set winlist (alt+tab) focus while selecting policy
  -winlist-list-focus-while-selecting-get Get winlist (alt+tab) focus while selecting policy
  -winlist-list-raise-while-selecting-set OPT1 Set winlist (alt+tab) raise while selecting policy
  -winlist-list-raise-while-selecting-get Get winlist (alt+tab) raise while selecting policy
  -theme-category-list List all available theme categories
  -transition-list List all available transitions
  -action-list List all available actions
  -default-engine-set OPT1 Set the default rendering engine to OPT1 (SOFTWARE, SOFTWARE_16 or XRENDER)
  -default-engine-get Get the default rendering engine
  -engine-list List all existing rendering engines
  -engine-set OPT1 OPT2 Set the rendering engine for OPT1 to OPT2 (SOFTWARE or XRENDER)
  -engine-get OPT1 Get the rendering engine for OPT1
  -menu-eap-name-show-set OPT1 Set whether to show eapps' name field in menus
  -menu-eap-name-show-get Get whether eapps' name field is shown in menus
  -menu-eap-generic-show-set OPT1 Set whether to show eapps' generic field in menus
  -menu-eap-generic-show-get Get whether eapps' generic field is shown in menus
  -menu-eap-comment-show-set OPT1 Set whether to show eapps' comment field in menus
  -menu-eap-comment-show-get Get whether eapps' comment field is shown in menus
  -fullscreen-policy-set OPT1 Set the fullscreen policy. OPT1 = RESIZE or ZOOM
  -fullscreen-policy-get Get fullscreen policy
  -color-class-color-set OPT1 OPT2 OPT3 OPT4 OPT5 Set color_class (OPT1) r, g, b, a (OPT2-5)
  -color-class-color2-set OPT1 OPT2 OPT3 OPT4 OPT5 Set color_class (OPT1) color2 r, g, b, a (OPT2-5)
  -color-class-color3-set OPT1 OPT2 OPT3 OPT4 OPT5 Set color_class (OPT1) color3 r, g, b, a (OPT2-5)
  -color-class-color-list List color values for all set color classes
  -color-class-color2-list List color2 values for all set color classes
  -color-class-color3-list List color3 values for all set color classes
  -color-class-del OPT1 Delete color class named OPT1
  -color-class-list List all color classes used by currently loaded edje objects
  -cfgdlg-auto-apply-set OPT1 Set config dialogs to use auto apply, 1 for enabled 0 for disabled
  -cfgdlg-auto-apply-get Get config dialogs use auto apply policy, 1 for enabled 0 for disabled
  -cfgdlg-default-mode-set OPT1 Set default mode for config dialogs. OPT1 = BASIC or ADVANCED
  -cfgdlg-default-mode-get Get default mode for config dialogs
  -lock-desktop Locks the desktop
  -init-set OPT1 Set edje file (OPT1) to use for init screen
  -init-get Get the current edje file for init screen
  -font-hinting-set OPT1 Set font hinting method to use, 0 = Bytecode, 1 = Auto, 2 = None
  -font-hinting-get Get font hinting method
  -use-composite-set OPT1 Set whether composite should be used
  -use-composite-get Get whether composite should be used
  -remember-internal-windows-set OPT1 Set whether internal windows should be remembered
  -remember-internal-windows-get Get whether internal windows are remembered
  -logout Logout your user
  -hibernate Hibernate the computer
  -reboot Reboot the computer
  -suspend Suspend the computer
  -shutdown Halt (shutdown) the computer
  -desklock-use-custom-desklock-set OPT1 Set whether a custom desklock will be utilized
  -desklock-use-custom-desklock-get Get whether a custom desklock is being used
  -desklock-custom-desklock-cmd-set OPT1 Set the current custom desklock command to OPT1
  -desklock-custom-desklock-cmd-get Get the current custom desklock command
"
}






