Overhaul dunstctl
This commit is contained in:
		
							parent
							
								
									305ab6c4e6
								
							
						
					
					
						commit
						72d68fcec4
					
				
							
								
								
									
										130
									
								
								dunstctl
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								dunstctl
									
									
									
									
									
								
							| @ -1,89 +1,75 @@ | |||||||
| #!/bin/sh -eu | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| dbus_name="org.freedesktop.Notifications" | set -eu | ||||||
| dbus_path="/org/freedesktop/Notifications" |  | ||||||
| dbus_ifac="org.dunstproject.cmd0" |  | ||||||
| dbus_property="org.freedesktop.DBus.Properties" |  | ||||||
| 
 | 
 | ||||||
| usage() { | DBUS_NAME="org.freedesktop.Notifications" | ||||||
| 	echo "Usage: dunstctl <command> [options...]" | DBUS_PATH="/org/freedesktop/Notifications" | ||||||
| 	echo "" | DBUS_IFAC_DUNST="org.dunstproject.cmd0" | ||||||
| 	echo "Commands:" | DBUS_IFAC_PROP="org.freedesktop.DBus.Properties" | ||||||
| 	echo "  close [-a|--all]         Close the last or all notifications" | DBUS_IFAC_FDN="org.freedesktop.Notifications" | ||||||
| 	echo "  context                  Open context menu of latest notification" | 
 | ||||||
| 	echo "  display                  Redisplay closed notifications" | function die(){ printf "%s\n" "${1}" >&2; exit 1; } | ||||||
| 	echo "  status                   Reload the configuration file" | 
 | ||||||
| 	echo "  help                     Show this help" | function show_help() { | ||||||
|  | 	cat <<-EOH | ||||||
|  | 	Usage: dunstctl <command> [parameters]" | ||||||
|  | 	Commands: | ||||||
|  | 	  close                    Close the last notification | ||||||
|  | 	  close-all                Close the all notifications | ||||||
|  | 	  context                  Open context menu of latest notification | ||||||
|  | 	  history-pop              Pop one notification from history | ||||||
|  | 	  status                   Check if | ||||||
|  | 	  status-set [true|false]  Set the status | ||||||
|  | 	  help                     Show this help | ||||||
|  | 	EOH | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| method_call() { | function method_call() { | ||||||
| 	dbus-send --print-reply=literal --dest=$dbus_name $dbus_path $dbus_ifac."$*" | 	dbus-send --print-reply=literal --dest="${DBUS_NAME}" "${DBUS_PATH}" "${1}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| property_get() { | function property_get() { | ||||||
| 	result=$(dbus-send --print-reply=literal --dest=$dbus_name $dbus_path $dbus_property.Get string:$dbus_ifac string:"$*") | 	dbus-send --print-reply=literal --dest="${DBUS_NAME}" "${DBUS_PATH}" "${DBUS_IFAC_PROP}.Get" "string:${DBUS_IFAC_DUNST}" "string:${1}" | ||||||
| 	if test "${result#*'true'}" != "$result"; then |  | ||||||
| 		echo "dunst notifications are enabled" |  | ||||||
| 	else |  | ||||||
| 		echo "dunst notifications are disabled" |  | ||||||
| 	fi |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| property_set() { | function property_set() { | ||||||
| 	dbus-send --print-reply=literal --dest=$dbus_name $dbus_path $dbus_property.Set string:$dbus_ifac string:"$@" | 	dbus-send --print-reply=literal --dest="${DBUS_NAME}" "${DBUS_PATH}" "${DBUS_IFAC_PROP}.Set" "string:${DBUS_IFAC_DUNST}" "string:${1}" "${2}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| if [ $# -eq 0 ] || [ $# -gt 3 ]; then | command -v dbus-send >/dev/null 2>/dev/null || \ | ||||||
|    usage | 	die "Command dbus-send not found" | ||||||
|    exit 1 |  | ||||||
| fi |  | ||||||
| 
 | 
 | ||||||
| case "$1" in | 
 | ||||||
| "close") | case "${1:-}" in | ||||||
| 	[ $# -lt 2 ] && param="" || param="$2" | 	"close") | ||||||
| 	case "$param" in | 		method_call "${DBUS_IFAC_DUNST}.NotificationCloseLast" >/dev/null | ||||||
| 	"-a"|"--all") | 		;; | ||||||
| 		method_call NotificationCloseAll | 	"close-all") | ||||||
|  | 		method_call "${DBUS_IFAC_DUNST}.NotificationCloseAll" >/dev/null | ||||||
|  | 		;; | ||||||
|  | 	"context") | ||||||
|  | 		method_call "${DBUS_IFAC_DUNST}.ContextMenuCall" >/dev/null | ||||||
|  | 		;; | ||||||
|  | 	"history-pop") | ||||||
|  | 		method_call "${DBUS_IFAC_DUNST}.NotificationShow" >/dev/null | ||||||
|  | 		;; | ||||||
|  | 	"status") | ||||||
|  | 		property_get running | ( read _ _ status; printf "%s\n" "${status}"; ) | ||||||
|  | 		;; | ||||||
|  | 	"status-set") | ||||||
|  | 		[ "${2:-}" ] \ | ||||||
|  | 			|| die "No status parameter specified. Please give either 'true' or 'false' as running parameter." | ||||||
|  | 		[ "${2}" == "true" ] || [ "${2}" == "false" ] \ | ||||||
|  | 			|| die "Please give either 'true' or 'false' as running parameter." | ||||||
|  | 		property_set running variant:boolean:"${2}" | ||||||
|  | 		;; | ||||||
|  | 	"help"|"--help"|"-h") | ||||||
|  | 		show_help | ||||||
| 		;; | 		;; | ||||||
| 	"") | 	"") | ||||||
| 		method_call NotificationCloseLast | 		die "dunstctl: No command specified. Please consult the usage." | ||||||
| 		;; | 		;; | ||||||
| 	*) | 	*) | ||||||
| 		echo "dunstctl: unrecognized option '$2'" | 		die "dunstctl: unrecognized command '${1:-}'. Please consult the usage." | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| 	;; |  | ||||||
| "context") |  | ||||||
| 	method_call ContextMenuCall |  | ||||||
| 	;; |  | ||||||
| "display") |  | ||||||
| 	method_call NotificationShow |  | ||||||
| 	;; |  | ||||||
| "status") |  | ||||||
| 	[ $# -lt 2 ] && action="" || action="$2" |  | ||||||
| 	case "$action" in |  | ||||||
| 	"disable") |  | ||||||
| 		property_set running variant:boolean:false |  | ||||||
| 		;; |  | ||||||
| 	"enable") |  | ||||||
| 		property_set running variant:boolean:true |  | ||||||
| 		;; |  | ||||||
| 	""|"get") |  | ||||||
| 		property_get running |  | ||||||
| 		;; |  | ||||||
| 	*) |  | ||||||
| 		echo "dunstctl status: unrecognized option '$2'" |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| 	;; |  | ||||||
| "help"|"--help"|"-h") |  | ||||||
| 	usage |  | ||||||
| 	;; |  | ||||||
| *) |  | ||||||
| 	echo "dunstctl: unrecognized command '$1'" |  | ||||||
| 	exit 1 |  | ||||||
| 		;; | 		;; | ||||||
| esac | esac | ||||||
| 
 |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Benedikt Heine
						Benedikt Heine