From 8cfbb72337f76934002b8606fa715719cfe4d80c Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 4 Mar 2014 20:01:19 +0000 Subject: [PATCH 1/3] Added OSX desktop notifications using terminal-notifier Requires Xcode WIP - No configure.ac changes --- src/ui/notifier.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/ui/notifier.c b/src/ui/notifier.c index ebc61e0d..8582acf2 100644 --- a/src/ui/notifier.c +++ b/src/ui/notifier.c @@ -23,6 +23,7 @@ #include #include +#include #include #ifdef HAVE_LIBNOTIFY @@ -205,6 +206,25 @@ _notify(const char * const message, int timeout, Shell_NotifyIcon(NIM_MODIFY, &nid); #endif + GString *notify_command = g_string_new("terminal-notifier -title 'Profanity' -message '"); + g_string_append(notify_command, message); + g_string_append(notify_command, "'"); + + char *term_name = getenv("TERM_PROGRAM"); + char *app_id = NULL; + if (g_strcmp0(term_name, "Apple_Terminal") == 0) { + app_id = "com.apple.Terminal"; + } else if (g_strcmp0(term_name, "iTerm.app") == 0) { + app_id = "com.googlecode.iterm2"; + } + + if (app_id != NULL) { + g_string_append(notify_command, " -sender "); + g_string_append(notify_command, app_id); + } + + system(notify_command->str); + g_string_free(notify_command, TRUE); } void From 3f73a55cb0e1f25b1052bff9a0c769244dbb830e Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 4 Mar 2014 20:16:47 +0000 Subject: [PATCH 2/3] Log message when cannot send desktop nofication --- src/ui/notifier.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/notifier.c b/src/ui/notifier.c index 8582acf2..7c366434 100644 --- a/src/ui/notifier.c +++ b/src/ui/notifier.c @@ -223,7 +223,11 @@ _notify(const char * const message, int timeout, g_string_append(notify_command, app_id); } - system(notify_command->str); + int res = system(notify_command->str); + if (res == -1) { + log_error("Could not send desktop notificaion."); + } + g_string_free(notify_command, TRUE); } From b5171cb054c9d9f4efb2ddb69c41a922b14f0aab Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 4 Mar 2014 22:59:09 +0000 Subject: [PATCH 3/3] Added configure checks to enable desktop notifications on OSX --- configure.ac | 37 ++++++++++++++++++++++++++++++------- src/ui/notifier.c | 2 ++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index efe4fcc3..245d20a3 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,13 @@ AC_PROG_CC ### Get canonical host AC_CANONICAL_HOST -AS_IF([test "x$host_os" = xcygwin], +PLATFORM="unknown" +AS_CASE([$host_os], + [darwin*], [PLATFORM="osx"], + [cygwin], [PLATFORM="cygwin"], + [PLATFORM="nix"]) + +AS_IF([test "x$PLATFORM" = xcygwin], [AC_DEFINE([PLATFORM_CYGWIN], [1], [Cygwin])]) ### Options @@ -111,12 +117,28 @@ PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.26], [], [AC_MSG_ERROR([glib 2.26 or higher is required for profanity])]) PKG_CHECK_MODULES([curl], [libcurl], [], [AC_MSG_ERROR([libcurl is required for profanity])]) -AS_IF([test "x$enable_notifications" != xno], - [PKG_CHECK_MODULES([libnotify], [libnotify], - [AC_DEFINE([HAVE_LIBNOTIFY], [1], [libnotify module])], - [AS_IF([test "x$enable_notifications" = xyes], - [AC_MSG_ERROR([libnotify is required but does not exist])], - [AC_MSG_NOTICE([libnotify support will be disabled])])])]) + +### Check for desktop notification support +### Linux requires libnotify +### Windows uses native OS calls +### OSX requires terminal-notifier + +AS_IF([test "x$PLATFORM" = xosx], + [AS_IF([test "x$enable_notifications" != xno], + [NOTIFIER_PATH="no" + AC_PATH_PROG(NOTIFIER_PATH, terminal-notifier, no) + AS_IF([test "x$NOTIFIER_PATH" = xno], + [AS_IF([test "x$enable_notifications" = xyes], + [AC_MSG_ERROR([terminal-notifier not found, required for desktop notifications.])], + [AC_MSG_NOTICE([Desktop notifications not supported.])])], + [AC_DEFINE([HAVE_OSXNOTIFY], [1], [terminal notifier])])])], + [test "x$PLATFORM" = xnix], + [AS_IF([test "x$enable_notifications" != xno], + [PKG_CHECK_MODULES([libnotify], [libnotify], + [AC_DEFINE([HAVE_LIBNOTIFY], [1], [libnotify module])], + [AS_IF([test "x$enable_notifications" = xyes], + [AC_MSG_ERROR([libnotify is required but does not exist])], + [AC_MSG_NOTICE([libnotify support will be disabled])])])])]) # TODO: rewrite this if test "x$with_xscreensaver" = xyes; then @@ -193,6 +215,7 @@ AC_CONFIG_FILES([Makefile]) AC_OUTPUT echo "" +echo "PLATFORM : $host_os" echo "PACKAGE_STATUS : $PACKAGE_STATUS" echo "AM_CFLAGS : $AM_CFLAGS" echo "AM_CPPFLAGS : $AM_CPPFLAGS" diff --git a/src/ui/notifier.c b/src/ui/notifier.c index 7c366434..16fd814f 100644 --- a/src/ui/notifier.c +++ b/src/ui/notifier.c @@ -206,6 +206,7 @@ _notify(const char * const message, int timeout, Shell_NotifyIcon(NIM_MODIFY, &nid); #endif +#ifdef HAVE_OSXNOTIFY GString *notify_command = g_string_new("terminal-notifier -title 'Profanity' -message '"); g_string_append(notify_command, message); g_string_append(notify_command, "'"); @@ -229,6 +230,7 @@ _notify(const char * const message, int timeout, } g_string_free(notify_command, TRUE); +#endif } void