Changing Giocoso's appearance

1.0 Introduction

Giocoso runs in a terminal session and expects the geometry of that terminal session window to be at least 106 characters wide and 26 lines deep. This is usually configured on most Linux distros by editing the 'Profile' associated with terminal sessions. Here, for example, is how Konsole does it within KDE:

You will usually also be able to configure a profile's default text colouring properties in the same general settings area. For example:

Here, I'm selecting the 'Green on Black' general colour scheme, which results in a generally very dark black background and bright green text.

Giocoso then runs within the terminal session configured in this manner and picks up many of its display attributes from those settings. If you wish to modify the general appearance of Giocoso's main program display window, therefore, you should first see what terminal configuration options your operating system provides natively.

That said, there are a number of parameters that can be supplied to Giocoso to alter the way it interacts with these terminal configuration settings, and I'll describe those features next.

2.0 Altering Text Colours with Displaycolour

Broadly speaking, Giocoso assigns different colours to text depending on the function of that text. Static program display text (such as a copyright notice) will be in a different colour from dynamic text that describes what music the program is playing right now, for example. Error messages will be in a different colour again. Any runtime search filters you've provided when launching Giocoso will be in yet another colour and so on.

Generally and by default, Giocoso uses the following colours for the following types of text:

  • Static display messages: Green
  • Error messages: Red
  • Dynamic Text: Yellow
  • Text whose value depends on user input: Blue
  • Labels and identifiers: White

You'll see all of that happening in the following screenshot:

Elements like the program header area which simply display information that doesn't change (or seldom changes) are green; several bits of text are blue; larger bits of text (whose precise wording will change as new pieces of music are played) appear in light yellow; and so on.

This then is the default colour scheme in a terminal that has been configured to display with a black background. The same colour scheme can look quite different if the terminal has been configured differently, though. Here are a couple of examples from my KDE/Konsole setup:

Here, I've configured my terminal generally to use the 'Black on Light Yellow' colour scheme. If you squint really hard, you'll see that Giocoso is still managing to use its default 5-functional-colours mechanism, precisely as before... but, obviously, yellow text on a yellow background isn't terribly legible!

Or, to take one more example:

This time I've decided to blind myself with the 'Black on White' terminal colour scheme. Again, Giocoso is still using its standard five-colour model, and you can certainly distinguish green from blue and yellow text, as before. But yellow text on a white background is scarcely more legible than before!

It is in this context, therefore, that you may want to use Giocoso's text-colour changing runtime parameter --displaycolour (or --displaycolor for people who take their spellings from Noah Webster!). This allows you to specify one of five possible values:

  • light
  • neutral
  • dark
  • classic
  • newclassic

Newclassic is the default value and provides the five-colour display I've already shown above in several screenshots. Classic is an earlier version of newclassic, retained for compatibility reasons: the only difference between the two is that classic uses a dark blue for user input-dependent text, whereas newclassic uses a much brighter (and more legible!) cyan/light blue. By way of comparison, here's classic:

And here's newclassic:

The only functional difference between them is that newclassic's blue text is easier to read on dark backgrounds (according to my eyes, of course!)

The remaining three options for --displaycolour essentially reduce Giocoso's use of colour to: all white, all black or all yellow, losing the functional distinction between colour components. For example, here is light:

Everything is now fairly monochrome, with white text throughout. Static text labels are now yellow, to distinguish them from the other text, but no distinction is being made between filters, the name of the music being played and so on. It's basically yellow labels and plain white everything else. For this reason, I've had to use a terminal colour scheme that supplies a dark background, otherwise I'd be displaying white text on white, which is not going to be very legible!

Now, here's the dark version:

We are still using mostly monochromatic text for all text elements, without regard to that element's function, but now labels are dark blue and every other bit of text is plain black. For that reason, I've now had to change my terminal's colour scheme to one that provides a light background: black text on a black background also makes for less than functional outcomes!

Finally, here's what happens when --displaycolour is set to a value of neutral:

Once again, we have a two-tone colour scheme, where labels are light blue and everything else is dark yellow. This colour combo is somewhat unique in that it also displays acceptably if your choice of terminal colour scheme results in a light-coloured background:

It is the fact that this scheme works for both light and dark terminals that it's called 'neutral', of course.

Note that your choice of colour scheme can also be set in the Giocoso persistent configuration parameter file: uncomment and set the value of DISPLAYCOLOR=... to any one of the five possible colour scheme names and that has the same effect as invoking Giocoso with the --displaycolour runtime parameter.

If the persistent configuration file specifies one colour scheme and a runtime parameter specify another, then the runtime parameter 'wins'. If you ever supply two --displaycolour runtime parameters with different values, the last one provided 'wins'. For example, this command:

giocoso2 --dbname=main --displaycolour=neutral --displaycolour=dark

...produces this result:

...which you'll recognise as being the dark scheme, not the neutral one.

3.0 Positioning the Album Art display window

Giocoso will, by default, display album art in a separate window whenever a new piece of music starts to display. In Giocoso Version 1, the location of this album art window was fixed as being the lower centre of your primary monitor. If you were running on a desktop environment that provided their own tools for fixing window placement (such as KDE), you could intervene and arrange for the album art to be displayed precisely where you wanted it to be: but this was of no use if you were running on Gnome or XFCE, for example.

New in Giocoso Version 2, however, are the SCREENWIDTH and SCREENHEIGHT persistent configuration file parameters. These take numeric values, specifying the number of pixels your monitor has in both the horizontal and vertical directions respectively.

Note these parameters can only be set in the Giocoso persistent configuration file; they cannot be supplied as double-hyphen runtime parameters, for example.

Rather importantly, there is no requirement to be honest when setting these parameters! If you claim to have a wider screen than you actually have, the album art display window will move right-wards; if you say your monitor has less height than it really has, the album art will move upwards. By fiddling the values for these parameters, therefore, you can determine a precise location for the display of album art, regardless of what desktop environment you are running (so it works on Macs and Windows 10, too!)

Let's explore how this works, starting by telling the truth! My main monitor is 1920x1200 in size, and if I therefore set SCREENWIDTH=1920 and SCREENHEIGHT=1200, this is the result:

Giocoso has positioned the album art in the middle of the screen horizontally, and down the bottom of the screen vertically, which is pretty much Version 1's default behaviour.

But suppose I want to see the album art in the top right-hand corner of the screen? Well, if we said our monitor was only 600 pixels high, what effect would that have? Let's set SCREENHEIGHT=600, therefore:

Sure enough, because Giocoso thinks your monitor is substantially deficient in the height department, it has moved the album art upwards.

What now happens if I claim my monitor has more horizontal pixels at its disposal? Let me set DISPLAYWIDTH=3200, for example:

And bingo! Giocoso has taken the 3200 figure and divided it by 2, to arrive at what it thinks is the half-way-along-the-horizontal point, which turns out to be right-of-centre in the real world. The album art has ended up located precisely where I wanted it.

Summing that up, then:

  • increasing SCREENWIDTH makes the album art move to the right
  • decreasing SCREENWIDTH makes the album art move to the left
  • increasing SCREENHEIGHT makes the album art move downwards
  • decreasing SCREENHEIGHT makes the album art move upwards

If you are happy with your album art in its default position (centre-bottom), then you don't need to worry about any of this: just set the two parameters to their true values, and that's what you'll get, without any mental gymnastics required!

4.0 Multi-Monitor Setups

The ability to make up arbitrary values for SCREENWIDTH and SCREENHEIGHT becomes very important when you run a multi-monitor setup. In Giocoso Version 1, album art would always be displayed on your primary monitor and if that wasn't where you wanted it displayed, you were pretty much out of luck, unless you were running KDE and it's specific-window-positioning abilities.

But if increasing SCREENWIDTH makes the album art display ever right-wards, then it should be obvious that if you increase it sufficiently, it will end up being displayed on your second monitor (assuming the second monitor is the one on the right of your main display).

As an example, let me set SCREENHEIGHT back to its true value of 1200, and then make SCREENWIDTH be equal to 3,840 (which is what two 1920x1200 monitors side-by-side actually have as their combined horizontal pixel count):

You will note that the album art has squeezed over as much as it can to the right-hand edge of the left-most monitor's display. That's a specifically Linux result, by the way: on a Mac, the album art would be displayed precisely half-way between each monitor, because 3840 ÷ 2 is precisely on the shared edge of the two monitors. Linux appears not to permit screen-straddling in that way, however, so tucks the window in as far as it can go.

The trick is to remember that Giocoso always halves the horizontal pixel count when determining where to place the album art window. So if you want it to appear in the middle of the right-hand panel, that's really at position 1-screen-plus-half-the-other-screen, and twice 1.5 is three. So if I set SCREENWIDTH=5760, I'm claiming I have three screens'-worth of horizontal pixels... and the result is:

Sure enough, the album art is now in the lower-middle of my secondary monitor. Obviously, I can keep increasing the pixel count to push it even further to the right.

In case you ever acquire a three-monitor setup and wanted the album art displayed in the middle of the third monitor, I hope from the above you can see that you'd merely have to pretend your horizontal pixel count was five screens'-worth, or 9,600 pixels.

5.0 Making Allowances for a Dock

The vertical placement of the album art window always makes a little bit of an allowance for the fact that operating systems these days generally have things like a taskbar displayed on the bottom edge of the screen. Giocoso moves album art upwards from the default bottom edge by 60 pixels to allow for this. This amount of vertical movement upwards is fixed -though, of course, if you were to reduce SCREENHEIGHT in the persistent configuration file, you'd effectively be able to make the album art move upwards by any arbitrary amount.

On Apple's macOS, however, and on some Linux distros that have taken to emulating the look of macOS, the presence of a dock makes the old 60-pixel allowance insufficient (especially when magnification effects can make the dock double in size as you hover over it). To deal with this, the --withdock runtime parameter has been added to Giocoso Version 2. If present when Giocoso is launched, the album art is moved upwards by a further 42 pixels, in addition to the existing 60, which has proved sufficient in all my testing to allow the album art window to 'clear' the dock, even on full magnification. The parameter can also be specified in the persistent configuration parameter file, setting WITHDOCK=Yes.

If the parameter is set to No in the persistent configuration file, but --withdock is present as a runtime parameter, the runtime parameter wins and the dock adjustment is applied anyway.

As an example, if I have WITHDOCK=No in my configuration file and launch Giocoso with the vanilla command:

giocoso --dbname=main

...I get this result:

...and you'll note how the bottom of the album art is practically touching the circumference of the blue/green map thing on my wallpaper.

But if I use this command to launch Giocoso:

giocoso --dbname=main --withdock

...then this is the result

 

...and you'll note that the album art has moved upwards significantly to the point where the album art window is not touching the blue/green circumference at all. The runtime parameter has taken effect, regardless of the 'no dock' setting in the persistent configuration file.

Note, however, that the effect does not work in reverse, because there is no 'nodock' runtime parameter. That is, if the persistent configuration file says 'allow for a dock', there is no runtime parameter that can contradict that.

Finally, note that --withdock doesn't really do anything that you couldn't do yourself by setting SCREENHEIGHT to a pixel value less than your monitor actually has. The point of it was to allow a quick 'nudge-up' of the album art window without you having to set 'fake' values for the SCREENHEIGHT parameter. But if you are happy to fiddle with SCREENHEIGHT to achieve the desired effect, it is true to say that there is really zero need for the withdock parameter.

6.0 Accented Characters

Since Giocoso was designed to be 'the classical music player', it should come as no surprise that it was designed from the ground up to deal with names such as Antonín Dvořák or Götterdämmerung -that is, with language full of accented ("non-English") characters. Unfortunately, some operating systems make working with accented characters harder than it should be -and this can sometimes negatively affect the way Giocoso works, too. Here is an example from my own, main PC running Manjaro (one of the distros known to be prone to suffering from this problem):

That's a folder listing from my main PC of some Wagner operas. You'll notice a few sprinklings of umlauts there: Ö, ö and ä all appear, for example. Watch what happens when I launch Giocoso in that folder I've highlighted, containing the name Ötvös:

It's not immediately apparent anything is wrong. Look at the 'Now In' part of the screen, for example: Ötvös has his full complement of umlauts. Now look in the 'Playing works...' part of the screen, however, and Mr. Ötvös has become plain 'Gabor Otvos' ...and I can assure you, he's not tagged that way in the source FLAC. Here's the kid3 program (so, nothing at all to do with giocoso) exposing all the tags:

You will note Ötvös is spelled correctly in the TITLE, ALBUM, COMMENT and PERFORMER tags. So if he's in the file with umlauts, and Giocoso is displaying umlauts for the 'Now In' part of its display, why is it mangling them in the 'Playing works...' section?

Well, it's because Giocoso isn't screwing them up, but a program Giocoso relies on is. The metaflac program Giocoso uses to read tag data defaults to a behaviour where it converts from UTF-8 characters to plain ASCII equivalents (i.e., from accented to non-accented characters) whenever it thinks the system locale is set incorrectly. Basically, in situations where metaflac thinks using UTF-8 would not work correctly, it takes it upon itself to convert ç to c, ø to o and ß to s, for example. The question as to why metaflac thinks my system locale is set incorrectly I'll have to leave for another time, because it most certainly isn't, but it's been a feature of all my Manjaro installs for several months now -and it could well arise on systems you run, too.

Fortunately, there's a workaround: if you run Giocoso with the --accents runtime parameter, you force metaflac to use the UTF-8 characterset even when it would otherwise not do so, and thus forces the preservation of accented characters. Here's me playing another piece of music with the command:

giocoso --dbname=none

You will note that Giocoso declares us to be playing 'Concert champetre'. Now let me launch Giocoso again, this time with the command:

giocoso --dbname=none --accents

...and now, correctly, we are said to be playing 'Concert champêtre', with an e-circumflex.

To be fair, most operating systems are not going to be afflicted by this metaflac issue -but if you find your program display is missing accents you know ought to be there, you can at least fix the problem! I should mention aswell that, rather than having to remember to append '--accents' to your Giocoso launch commands every time, you can simply edit the persistent configuration file (run Giocoso with the command giocoso --editconf) and set ACCENTS=YES to achieve the same thing.

7.0 Conclusion

Summing up, then.

  • Giocoso by default displays text in its main terminal window in a variety of colours, each colour indicative of a particular 'function' for that piece of text. But --displaycolour can be used to tone things down to a more two-tone display, using different colour schemes to work in a variety of terminal colours.
  • Giocoso displays artwork half-way along SCREENWIDTH and towards the bottom of SCREENHEIGHT, both of which can only be set in the persistent configuration file
  • By making up values for SCREENWIDTH and SCREENHEIGHT, you can affect the placement of the album art window to wherever you prefer it to appear
  • Adding the --withdock runtime parameter to the command used to launch Giocoso nudges the album art upwards a further 42 pixels. This parameter can also be set in the persistent configuration file.
  • If WITHDOCK=Yes is set in the configuration file, no runtime parameter can be used to override that. But if WITHDOCK=No, then using --withdock when launching Giocoso will take effect anyway.

See also:

  • Displaying Album Artwork
  • Appearance Runtime Parameters

[Back to Front Page]|[Displaying Album Artwork]|[Appearance Runtime Parameters]