Peter Stuifzand

On screen time display

Today I liked to know the time. I don’t have a clock and on my computer it’s to much work to show the time. I use ion3 and it can show the time in a statusbar, but I don’t like that, because it takes too much of my screen real estate.

So I created a little program that shows the time for a few seconds in the right bottom corner of my screen. It’s called (how original) osdtime.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <locale.h>
#include <xosd.h>
#include <time.h>

/* seconds to display time */
int seconds_to_display = 3;

/* display font */
const char* display_font = "-adobe-helvetica-bold-r-normal-*-*-320-*-*-p-*-*";

/* time format string */
const char* time_fmt = "%H:%M:%S";

/* text-colour */
const char* text_colour = "white";

/* outline-colour */
const char* outline_colour = "black";

int main(int argc, char *argv[])
{
  xosd *osd;
  setlocale(LC_ALL, "");
  osd = xosd_create(2);
  if (osd == NULL) {
    perror("Could not create \"osd\"");
    exit(1);
  }
  /* Set the position of the display. */
  xosd_set_pos(osd, XOSD_bottom);
  xosd_set_align(osd, XOSD_right);

  /* Set the font and the colours. */
  xosd_set_font(osd, display_font);
  xosd_set_colour(osd, text_colour);

  xosd_set_outline_offset(osd, 2);
  xosd_set_outline_colour(osd, outline_colour);

  /* Display the time for some seconds. */
  int i;
  for (i = 0; i < seconds_to_display; i++) {
    time_t tm;
    struct tm *localtm;
    time(&tm);
    localtm = localtime(&tm);

    char buf[9];
    strftime(buf, 9, time_fmt, localtm);

    xosd_display(osd, 0, XOSD_string, buf);
    sleep(1);
  }

  xosd_destroy(osd);
  exit(0);
}

It uses libxosd to show the text. As always, it comes without any warranty. Use at your own risk. It can be compiled with the following command line.

gcc `xosd-config --libs --cflags` osdtime.c -o osdtime

At the beginning of the program it’s possible to set the variables to nicer values if you like.

At the ion3 side of this hack I changed the ~/.ion3/cfg_bindings.lua file. The time will be displayed when I press F11. This can be done by putting the following lines in the bindings file after the line that uses F9.

bdoc("Display the time."),
kpress(MOD2.."F11", "ioncore.exec_on(_, 'osdtime')"),
© 2023 Peter Stuifzand