diff options
author | Michał Cichoń <michcic@gmail.com> | 2015-08-25 18:39:36 +0200 |
---|---|---|
committer | Michał Cichoń <michcic@gmail.com> | 2015-08-25 18:39:36 +0200 |
commit | d5876d68f2676072834c83509f1ee79fb3c48f65 (patch) | |
tree | f21aa1ad30b9f99071c148917aa74e0f7fb98816 | |
parent | 103d71ac2fb3ead96da16d25097f1f559c953fcd (diff) | |
download | pianobar-windows-d5876d68f2676072834c83509f1ee79fb3c48f65.tar.gz pianobar-windows-d5876d68f2676072834c83509f1ee79fb3c48f65.tar.bz2 pianobar-windows-d5876d68f2676072834c83509f1ee79fb3c48f65.zip |
Add format_title settings to control Pianobar window title appearance.
Since I'm not aware of any standard method to set title with escape codes explicit mechanism to control window title was introduced.
-rw-r--r-- | src/config.h | 2 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/settings.c | 5 | ||||
-rw-r--r-- | src/settings.h | 1 | ||||
-rw-r--r-- | src/ui.c | 36 |
5 files changed, 48 insertions, 0 deletions
diff --git a/src/config.h b/src/config.h index 2d335a9..2de1cfc 100644 --- a/src/config.h +++ b/src/config.h @@ -6,6 +6,8 @@ #define VERSION "2014.09.28-dev" +#define TITLE "Pianobar" + /* Visual C++ name restrict differently */ #ifdef _WIN32 #define restrict __restrict @@ -247,6 +247,8 @@ static void BarMainPlayerCleanup (BarApp_t *app) { BarPlayer2Finish(app->player); + BarConsoleSetTitle (TITLE); + //if (threadRet == (void *) PLAYER_RET_OK) { // app->playerErrors = 0; //} else if (threadRet == (void *) PLAYER_RET_SOFTFAIL) { @@ -340,6 +342,8 @@ int main (int argc, char **argv) { BarConsoleInit (); + BarConsoleSetTitle (TITLE); + /* init some things */ BarPlayer2Init (&app.player); diff --git a/src/settings.c b/src/settings.c index 297cfbc..6ce55c9 100644 --- a/src/settings.c +++ b/src/settings.c @@ -128,6 +128,7 @@ void BarSettingsDestroy (BarSettings_t *settings) { free (settings->npSongFormat); free (settings->npStationFormat); free (settings->listSongFormat); + free (settings->titleFormat); free (settings->fifo); free (settings->rpcHost); free (settings->rpcTlsPort); @@ -173,6 +174,7 @@ void BarSettingsRead (BarSettings_t *settings) { settings->npSongFormat = strdup ("\"%t\" by \"%a\" on \"%l\"%r%@%s"); settings->npStationFormat = strdup ("Station \"%n\" (%i)"); settings->listSongFormat = strdup ("%i) %a - %t%r"); + settings->titleFormat = strdup (TITLE " - \"%t\" by \"%a\" on \"%l\"%r%@%s"); settings->rpcHost = strdup (PIANO_RPC_HOST); settings->rpcTlsPort = NULL; settings->partnerUser = strdup ("android"); @@ -325,6 +327,9 @@ void BarSettingsRead (BarSettings_t *settings) { } else if (streq ("format_list_song", key)) { free (settings->listSongFormat); settings->listSongFormat = strdup (val); + } else if (streq ("format_title", key)) { + free (settings->titleFormat); + settings->titleFormat = strdup (val); } else if (streq ("fifo", key)) { free (settings->fifo); settings->fifo = BarSettingsExpandTilde (val, userhome); diff --git a/src/settings.h b/src/settings.h index d0fdbfa..8718b34 100644 --- a/src/settings.h +++ b/src/settings.h @@ -101,6 +101,7 @@ typedef struct { char *npSongFormat; char *npStationFormat; char *listSongFormat; + char *titleFormat; char *fifo; char *rpcHost, *rpcTlsPort, *partnerUser, *partnerPassword, *device, *inkey, *outkey, *caBundle; char keys[BAR_KS_COUNT]; @@ -27,6 +27,7 @@ THE SOFTWARE. #include "ui.h" #include "ui_readline.h" +#include "console.h" #include <assert.h> typedef int (*BarSortFunc_t) (const void *, const void *); @@ -73,6 +74,27 @@ static const char *BarStrCaseStr (const char *haystack, const char *needle) { return NULL; } +char* BatStrFormat (const char* format, va_list args) { + static const size_t c_initial_buffer_size = 256; + + char* buffer = malloc(c_initial_buffer_size); + size_t buffer_size = c_initial_buffer_size; + + int chars_writen; + while ((chars_writen = _vsnprintf(buffer, buffer_size - 1, format, args)) < 0) { + size_t new_buffer_size = buffer_size * 3 / 2; + if (new_buffer_size < buffer_size) { /* handle overflow */ + chars_writen = buffer_size; + break; + } + + buffer = realloc(buffer, new_buffer_size); + buffer_size = new_buffer_size; + } + + return buffer; +} + /* output message and flush stdout * @param message */ @@ -91,6 +113,7 @@ void BarUiMsg (const BarSettings_t *settings, const BarUiMsg_t type, case MSG_ERR: case MSG_QUESTION: case MSG_LIST: + case MSG_DEBUG: /* print ANSI clear line */ fputs ("\033[2K", stdout); @@ -106,6 +129,15 @@ void BarUiMsg (const BarSettings_t *settings, const BarUiMsg_t type, va_start (fmtargs, format); vprintf (format, fmtargs); + + if (type == MSG_DEBUG) { + char* msg = BatStrFormat (format, fmtargs); + if (msg != NULL) { + BarConsoleSetClipboard (msg); + free (msg); + } + } + va_end (fmtargs); if (settings->msgFormat[type].postfix != NULL) { @@ -696,6 +728,10 @@ void BarUiPrintSong (const BarSettings_t *settings, "talr@su", vals); BarUiAppendNewline (outstr, sizeof (outstr)); BarUiMsg (settings, MSG_PLAYING, "%s", outstr); + + BarUiCustomFormat(outstr, sizeof(outstr), settings->titleFormat, + "talr@su", vals); + BarConsoleSetTitle(outstr); } /* Print list of songs |