From 9cbcca04dfcdb7782e19d229317147c0f216daf6 Mon Sep 17 00:00:00 2001 From: o9000 Date: Wed, 25 May 2016 11:54:51 +0200 Subject: [PATCH] Updated doc --- CMakeLists.txt | 3 +- INSTALL.txt | 10 - README.md | 2 + doc/footer.html | 2 + doc/generate-doc.sh | 13 + doc/header.html | 201 +++++++++ doc/images/panel_padding.jpg | Bin 0 -> 22086 bytes doc/images/panel_size_margin.jpg | Bin 0 -> 13454 bytes doc/images/task_padding.jpg | Bin 0 -> 12001 bytes doc/images/taskbar_padding.jpg | Bin 0 -> 11302 bytes doc/manual.html | 727 +++++++++++++++++++++++++++++++ doc/readme.html | 253 +++++++++++ doc/tint2.1 | 34 +- doc/tint2.html | 524 ++++++++++++++++++++++ doc/tint2.md | 35 +- 15 files changed, 1759 insertions(+), 45 deletions(-) delete mode 100644 INSTALL.txt create mode 100644 doc/footer.html create mode 100755 doc/generate-doc.sh create mode 100644 doc/header.html create mode 100644 doc/images/panel_padding.jpg create mode 100644 doc/images/panel_size_margin.jpg create mode 100644 doc/images/task_padding.jpg create mode 100644 doc/images/taskbar_padding.jpg create mode 100644 doc/manual.html create mode 100644 doc/readme.html create mode 100644 doc/tint2.html diff --git a/CMakeLists.txt b/CMakeLists.txt index 9480494..b4a1089 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,7 +244,8 @@ install( FILES tint2.desktop DESTINATION ${DATADIR}/applications ) install( CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${DATADIR}/icons/hicolor WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})" ) install( FILES themes/tint2rc DESTINATION ${SYSCONFDIR}/xdg/tint2 ) install( FILES default_icon.png DESTINATION ${DATADIR}/tint2 ) -install( FILES AUTHORS ChangeLog README.md doc/tint2.md DESTINATION ${DOCDIR} ) +install( FILES AUTHORS ChangeLog README.md doc/tint2.md doc/manual.html doc/readme.html DESTINATION ${DOCDIR} ) +install( DIRECTORY doc/images DESTINATION ${DOCDIR} ) install( FILES doc/tint2.1 DESTINATION ${MANDIR}/man1 ) if( ENABLE_EXTRA_THEMES ) add_subdirectory(themes) diff --git a/INSTALL.txt b/INSTALL.txt deleted file mode 100644 index 541b8d0..0000000 --- a/INSTALL.txt +++ /dev/null @@ -1,10 +0,0 @@ -To build and install tint2 you need CMake. -These steps should be enough for building tint2: - -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr ../ -make -sudo make install - -To see additional options you can set at the 'cmake' step, run 'cmake -L ../' diff --git a/README.md b/README.md index ec78e26..8471f58 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Changes: https://gitlab.com/o9000/tint2/blob/0.12.11/ChangeLog Documentation: [doc/tint2.md](doc/tint2.md) Compile it with (see also [dependencies](https://gitlab.com/o9000/tint2/wikis/Install#dependencies)): + ``` git clone https://gitlab.com/o9000/tint2.git cd tint2 @@ -15,6 +16,7 @@ make -j4 ``` To install, run (as root): + ``` make install ``` diff --git a/doc/footer.html b/doc/footer.html new file mode 100644 index 0000000..308b1d0 --- /dev/null +++ b/doc/footer.html @@ -0,0 +1,2 @@ + + diff --git a/doc/generate-doc.sh b/doc/generate-doc.sh new file mode 100755 index 0000000..5a4ee29 --- /dev/null +++ b/doc/generate-doc.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# You can install md2man with gem install md2man. You need gem and ruby-dev. + +md2man-roff tint2.md > tint2.1 + +cat header.html > manual.html +cat tint2.md | sed 's/^# TINT2 .*$/# TINT2/g' | md2man-html >> manual.html +cat footer.html >> manual.html + +cat header.html > readme.html +cat ../README.md | sed 's|doc/tint2.md|manual.html|g' | md2man-html >> readme.html +cat footer.html >> readme.html diff --git a/doc/header.html b/doc/header.html new file mode 100644 index 0000000..664316b --- /dev/null +++ b/doc/header.html @@ -0,0 +1,201 @@ + + + + + + + diff --git a/doc/images/panel_padding.jpg b/doc/images/panel_padding.jpg new file mode 100644 index 0000000000000000000000000000000000000000..752f4ff9f89e939ca40f5183e1e15af7176f5b0b GIT binary patch literal 22086 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 xhj)?kNh;YN<@WFE2y?(_#FcCF#E`{{z< literal 0 HcmV?d00001 diff --git a/doc/images/panel_size_margin.jpg b/doc/images/panel_size_margin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecbd5772529318a621fc83c0d921b9ac0e5e6b72 GIT binary patch literal 13454 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 literal 0 HcmV?d00001 diff --git a/doc/images/task_padding.jpg b/doc/images/task_padding.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eadafd432af94838536c0f452b1a3adccd69d361 GIT binary patch literal 12001 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 b@1a&2m--eTKL|1oUjG~3|1f=cH1@v$e(X + + + + + + +

TINT2

NAME

tint2 - lightweight panel/taskbar

SYNOPSIS

tint2 [-c path_to_config_file]

DESCRIPTION

tint2 is a simple panel/taskbar made for modern X window managers. +It was specifically made for Openbox but it should also work with other window managers (GNOME, KDE, XFCE etc.).

Features:

+
    +
  • Panel with taskbar, system tray, clock and launcher icons;
  • +
  • Easy to customize: color/transparency on fonts, icons, borders and backgrounds;
  • +
  • Pager like capability: move tasks between workspaces (virtual desktops), switch between workspaces;
  • +
  • Multi-monitor capability: create one panel per monitor, showing only the tasks from the current monitor;
  • +
  • Customizable mouse events.
  • +
+

Goals:

+
    +
  • Be unintrusive and light (in terms of memory, CPU and aesthetic);
  • +
  • Follow the freedesktop.org specifications;
  • +
  • Make certain workflows, such as multi-desktop and multi-monitor, easy to use.
  • +
+

OPTIONS

-c path_to_config_file
Specifies which configuration file to use instead of the default.

CONFIGURATION

Table of contents

+ +

Introduction

These are instructions for configuring tint2 directly by editing its config file. +You may also use instead the graphical interface tint2conf.

The first time you run tint2, it will create the config file in $HOME/.config/tint2/tint2rc (This applies if you have done a clean install. Running tint2 in the source directory without doing 'make install' will not create the config file.)

You can also specify another file on the command line with the -c option, e.g.: tint2 -c $HOME/tint2.conf. This can be used to run multiple instances of tint2 that use different settings.

If you change the config file while tint2 is running, the command killall -SIGUSR1 tint2 will force tint2 to reload it.

All the configuration options supported in the config file are listed below. +Try to respect as much as possible the order of the options as given below.

Backgrounds and borders

The tint2 config file starts with the options defining background elements with borders:

+
    +
  • rounded = number_of_pixels : the corner radius

  • +
  • border_width = integer : the border width in pixels

  • +
  • border_sides = LRTB : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used. (since 0.12.12)

  • +
  • background_color = color opacity

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz).
    • +
  • +
  • border_color = color opacity

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
  • background_color_hover = color opacity (default: same as background_color) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz)
    • +
  • +
  • border_color_hover = color opacity (default: same as border_color) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
  • background_color_pressed = color opacity (default: same as background_color_hover) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz)
    • +
  • +
  • border_color_pressed = color opacity (default: same as border_color_hover) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
+

You can define as many backgrounds as you want. For example, the following config defines two backgrounds:

rounded = 1
+border_width = 0
+background_color = #282828 100
+border_color = #000000 0
+
+rounded = 1
+border_width = 0
+background_color = #f6b655 90
+border_color = #cccccc 40
+
+

tint2 automatically identifies each background with a number starting from 1 (1, 2, ...). +Afterwards, you can apply a background to objects (panel, taskbar, task, clock, systray) using the background id, for example:

panel_background_id = 1
+taskbar_background_id = 0
+task_background_id = 0
+task_active_background_id = 2
+systray_background_id = 0
+clock_background_id = 0
+
+

Identifier 0 refers to a special background which is fully transparent, identifier 1 applies the first background defined in the config file etc.

Panel

+
    +
  • panel_items = LTSBC defines the items tint2 will show and the order of those items. Each letter refers to an item, defined as:

    +
      +
    • L shows the Launcher
    • +
    • T shows the Taskbar
    • +
    • S shows the Systray (also called notification area)
    • +
    • B shows the Battery status
    • +
    • C shows the Clock
    • +
    • F adds an extensible spacer (freespace). Has no effect if T is also present. (since 0.12)
    • +
    • E adds an executor plugin. You can specify more than one. (since 0.12.4)
    • +
    +

    For example, panel_items = STC will show the systray, the taskbar and the clock (from left to right).

  • +
  • panel_monitor = monitor (all or 1 or 2 or ...) : Which monitor tint2 draws the panel on

    +
      +
    • The first monitor is 1
    • +
    • Use panel_monitor = all to get a separate panel per monitor
    • +
  • +
  • primary_monitor_first = boolean (0 or 1) : Place the primary monitor before all the other monitors in the list. (since 0.12.4)

  • +
+

+
    +
  • panel_position = vertical_position horizontal_position orientation

    +
      +
    • vertical_position is one of: bottom, top, center
    • +
    • horizontal_position is one of: left, right, center
    • +
    • orientation is one of: horizontal, vertical
    • +
  • +
  • panel_size = width height

    +
      +
    • width and height can be specified without units (e.g. 123) as pixels, or followed by % as percentages of the monitor size (e.g. 50%). Use 100% for full monitor width/height. +Example:
    • +
  • +
+
# The panel's width is 94% the size of the monitor, the height is 30 pixels:
+panel_size = 94% 30
+
+ +
    +
  • panel_margin = horizontal_margin vertical_margin : The margins define the distance between the panel and the horizontal/vertical monitor edge. Use 0 to obtain a panel with the same size as the edge of the monitor (no margin).
  • +
+

+
    +
  • panel_padding = horizontal_padding vertical_padding spacing : Please refer to the image below.
  • +
+

+
    +
  • font_shadow = boolean (0 or 1)

  • +
  • panel_background_id = integer : Which background to use for the panel.

  • +
  • wm_menu = boolean (0 or 1) : Defines if tint2 forwards unhandled mouse events to your window manager. Useful for window managers such as openbox, which display the start menu if you right click on the desktop.

  • +
  • panel_dock = boolean (0 or 1) : Defines if tint2 is placed into the window manager's dock. For the openbox window manager it is advised to also use a modifier for the moveButton option, otherwise the mouse click is not forwarded to tint2 (in ~/.config/openbox/rc.xml).

  • +
  • panel_layer = bottom/normal/top : Places tint2 into the bottom/normal/top layer. This is helpful for specifying if the panel can be covered by other windows or not. The default is the bottom layer, but with real transparency normal or top layer may be a nice alternative.

  • +
  • strut_policy = follow_size/minimum/none : STRUTs are used by the window manager to decide the size of maximized windows. Note: on multi-monitor (Xinerama) setups, the panel must be placed at the edge (not in the middle) of the virtual screen for this to work correctly.

    +
      +
    • follow_size means that the maximized windows always resize to have a common edge with tint2.
    • +
    • minimum means that the maximized windows always expand to have a common edge with the hidden panel. This is useful if the autohide option is enabled.
    • +
    • none means that the maximized windows use the full screen size.
    • +
  • +
  • panel_window_name = string : Defines the name of the panel's window. Default: 'tint2'. (since 0.12)

  • +
  • disable_transparency = boolean (0 or 1) : Whether to disable transparency instead of detecting if it is supported. Useful on broken graphics stacks. (since 0.12)

  • +
  • mouse_effects = boolean (0 or 1) : Whether to enable mouse hover effects for clickable items. (since 0.12.3)

  • +
  • mouse_hover_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency on mouse hover (works only when mouse_effects = 1).` (since 0.12.3)

  • +
  • mouse_pressed_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency on mouse press (works only when mouse_effects = 1).` (since 0.12.3)

  • +
  • autohide = boolean (0 or 1) : Whether to enable panel hiding when the mouse cursor exists the panel.

  • +
  • autohide_show_timeout = float : Show timeout in seconds after the mouse cursor enters the panel. Use '.' as decimal separator.

  • +
  • autohide_hide_timeout = float : Hide timeout in seconds after the mouse cursor exits the panel. Use '.' as decimal separator.

  • +
  • autohide_height = integer : panel height (width for vertical panels) in hidden mode.

  • +
+

Launcher

+
    +
  • launcher_item_app = path_to_application : Each launcher_item_app must be a file path to a .desktop file following the freedesktop.org specification. The paths may begin with ~, which is expanded to the path of the user's home directory. If only a file name is specified, the file is search in the standard application directories ($XDG_DATA_HOME/applications, ~/.local/share/applications, $XDG_DATA_DIRS/applications, /usr/local/share/applications, /usr/share/applications, /opt/share/applications).

  • +
  • launcher_apps_dir = path_to_directory : Specifies a path to a directory from which the launcher is loading all .desktop files (all subdirectories are explored recursively). Can be used multiple times. The path may begin with ~, which is expanded to the path of the user's home directory. (since 0.12)

  • +
  • launcher_background_id = integer : Defines which background to use.

  • +
  • launcher_icon_background_id = integer : Defines which background to use for icons.

  • +
  • launcher_padding = horizontal_padding vertical_padding spacing

  • +
  • launcher_icon_size = integer : The launcher icon size, in pixels.

  • +
  • launcher_icon_theme = name_of_theme : (Optional) Uses the specified icon theme to display shortcut icons. Note that tint2 will detect and use the icon theme of your desktop if you have an XSETTINGS manager running (which you probably do), unless launcher_icon_theme_override = 1.

  • +
  • launcher_icon_theme_override = boolean (0 or 1) : Whether launcher_icon_theme overrides the value obtained from the XSETTINGS manager. (since 0.12)

  • +
  • launcher_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency.

  • +
  • launcher_tooltip = boolean (0 or 1) : Whether to show tooltips for the launcher icons.

  • +
  • startup_notifications = boolean (0 or 1) : Whether to show startup notifications when starting applications from the launcher. (since 0.12)

  • +
+

Taskbar / Pager

+
    +
  • taskbar_mode = single_desktop/multi_desktop

    +
      +
    • single_desktop : Shows a normal taskbar listing the tasks running on the current virtual desktop (also known as 'workspace');
    • +
    • multi_desktop : Pager like capability. Shows multiple taskbars, one per virtual desktop, with which: + +
        +
      • You can drag-and-drop tasks between virtual desktops;
      • +
      • You can switch between virtual desktops.
      • +
    • +
  • +
  • taskbar_distribute_size = boolean (0 or 1) : If enabled, in multi-desktop mode distributes between taskbars the available size proportionally to the number of tasks. Default: disabled. (since 0.12)

  • +
  • taskbar_padding = horizontal_padding vertical_padding spacing

  • +
+

+
    +
  • taskbar_background_id = integer : Which background to use

  • +
  • taskbar_active_background_id = integer : Which background to use for the taskbar of the current virtual desktop.

  • +
  • taskbar_hide_inactive_tasks = boolean (0 or 1) : If enabled, the taskbar shows only the active task. (since 0.12)

  • +
  • taskbar_hide_different_monitor = boolean (0 or 1) : If enabled, the taskbar shows only the tasks from the current monitor. Useful when running different tint2 instances on different monitors, each one having its own config. (since 0.12)

  • +
  • taskbar_always_show_all_desktop_tasks = boolean (0 or 1) : Has effect only if taskbar_mode = multi_desktop. If enabled, tasks that appear on all desktops are shown on all taskbars. Otherwise, they are shown only on the taskbar of the current desktop. (since 0.12.4)

  • +
  • taskbar_sort_order = none/title/center : Specifies the sort order of the tasks on the taskbar. (since 0.12)

    +
      +
    • none : No sorting. New tasks are simply appended at the end of the taskbar when they appear.
    • +
    • title : Sorts the tasks by title.
    • +
    • center : Sorts the tasks by their window centers.
    • +
    • mru : Shows the most recently used tasks first. (since 0.12.4)
    • +
    • lru : Shows the most recently used tasks last. (since 0.12.4)
    • +
  • +
  • task_align = left/center/right : Specifies the alignment of the tasks on the taskbar. Default: left.

  • +
  • taskbar_name = boolean (0 or 1) : Whether to show the virtual desktop name in the taskbar.

  • +
  • taskbar_name_padding = padding : Padding for the virtual desktop name.

  • +
  • taskbar_name_background_id = integer : Which background to use for the desktop name.

  • +
  • taskbar_name_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE] : Font configuration for the desktop name.

  • +
  • taskbar_name_font_color = color opacity (0 to 100) : Font color for the desktop name.

  • +
  • taskbar_name_active_background_id = integer : Which background to use for the name of the current desktop.

  • +
  • taskbar_name_active_font_color = color opacity (0 to 100) : Font color for the name of the current desktop.

  • +
+

Taskbar buttons

The following options configure the task buttons in the taskbar:

+
    +
  • task_icon = boolean (0 or 1) : Whether to display the task icon.

  • +
  • task_text = boolean (0 or 1) : Whether to display the task text.

  • +
  • task_centered = boolean (0 or 1) : Whether the task text is centered.

  • +
  • task_tooltip = boolean (0 or 1) : Whether to show tooltips for tasks.

  • +
  • task_maximum_size = width height

    +
      +
    • width is used with horizontal panels to limit the size of the tasks. Use width = 0 to get full taskbar width.
    • +
    • height is used with vertical panels.
    • +
  • +
  • task_padding = horizontal_padding vertical_padding spacing

  • +
  • urgent_nb_of_blink = integer : Number of blinks on 'get attention' events.

  • +
+

+
    +
  • task_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • task_font_color = color opacity (0 to 100)

  • +
  • task_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjust the task icon's color and transparency.

  • +
  • task_background_id = integer : Which background to use for non selected tasks

  • +
+
For the next 3 options STATUS can be active / iconified / urgent:
* task_STATUS_font_color = color opacity (0 to 100)
+
    +
  • task_STATUS_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the task icon's color and transparency.

  • +
  • task_STATUS_background_id = integer : Which background to use for the task.

  • +
+

Mouse actions for taskbar buttons

The possible mouse events are: left, middle, right, scroll_up, scroll_down.

The possible mouse actions are: none, close, toggle, iconify, shade, toggle_iconify, maximize_restore, desktop_left, desktop_right, next_task, prev_task.

Use mouse_event = action to customize mouse actions. Example: + + mouse_middle = none + mouse_right = close + mouse_scroll_up = toggle + mouse_scroll_down = iconify +

The action semantics:
* none : If wm_menu = 1 is set, the mouse event is forwarded to the window manager. Otherwise it is ignored. +* close : close the task +* toggle : toggle the task +* iconify : iconify (minimize) the task +* toggle_iconify : toggle or iconify the task +* maximize_restore : maximized or minimized the task +* shade : shades (collapses) the task +* desktop_left : send the task to the desktop on the left +* desktop_right : send the task to the desktop on the right +* next_task : send the focus to next task +* prev_task : send the focus to previous task

System Tray

+
    +
  • systray_padding = horizontal_padding vertical_padding spacing

  • +
  • systray_background_id = integer : Which background to use.

  • +
  • systray_sort = ascending/descending/left2right/right2left : Specifies the sorting order for the icons in the systray: in ascending/descending alphabetical order of the icon title, or always add icons to the right/left (note that with left2right or right2left the order can be different on panel restart).

  • +
  • systray_icon_size = max_icon_size : Set the maximum system tray icon size to number. Set to 0 for automatic icon sizing.

  • +
  • systray_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjust the systray icons color and transparency.

  • +
  • systray_monitor = integer (1, 2, ...) : On which monitor to draw the systray. The first monitor is 1. (since 0.12)

  • +
+

Clock

+
    +
  • time1_format = %H:%M : The format used by the first line of the clock.

    +
      +
    • time1_format, time2_format and clock_tooltip use the 'strftime' syntax. More info can be found here: http://www.manpagez.com/man/3/strftime/
    • +
    • To hide the clock, comment time1_format and time2_format.
    • +
  • +
  • time1_timezone = :US/Hawaii

    +
      +
    • time1_timezone, time2_timezone and clock_tooltip_timezone can be used to specify a timezone. If you do not specify a value the system-wide timezone is used. The timezones can usually be found in /usr/share/zoneinfo. If your timezones are in a different directory, you need to specify the absolute path, e.g. time1_timezone = :/different/zoneinfo/dir/US/Hawaii Always prepend the timezone with a ':'
    • +
  • +
  • time1_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • time2_format = %A %d %B

  • +
  • time2_timezone = :Europe/Berlin

  • +
  • time2_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • clock_font_color = color opacity (0 to 100)

  • +
  • clock_padding = horizontal_padding vertical_padding

  • +
  • clock_background_id = integer : Which background to use

  • +
  • clock_tooltip = %a, %d. %b %Y : Format for the clock's tooltip.

  • +
  • clock_tooltip_timezone = :UTC

  • +
  • clock_lclick_command = text : Command to execute on left click.

  • +
  • clock_rclick_command = text : Command to execute on right click.

  • +
  • clock_mclick_command = text : Command to execute on middle click. (since 0.12.1)

  • +
  • clock_uwheel_command = text : Command to execute on wheel scroll up. (since 0.12.1)

  • +
  • clock_dwheel_command = text : Command to execute on wheel scroll down. (since 0.12.1)

  • +
+

Tooltip

+
    +
  • tooltip_padding = horizontal_padding vertical_padding

  • +
  • tooltip_show_timeout = float : Delay to show the tooltip in seconds. Use . as decimal separator.

  • +
  • tooltip_hide_timeout = float : Delay to hide the tooltip in seconds. Use . as decimal separator.

  • +
  • tooltip_background_id = integer : Which background to use for tooltips. Note that with fake transparency the alpha channel and corner radius options are not respected.

  • +
  • tooltip_font_color = color opacity (0 to 100)

  • +
  • tooltip_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
+

Battery

+
    +
  • battery_hide = never/integer (0 to 100) : At what battery percentage the battery item is hidden.

  • +
  • battery_low_status = integer: At what battery percentage the low command is executed.

  • +
  • battery_low_cmd = notify-send "battery low" : Command to execute when the battery is low.

  • +
  • bat1_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • bat2_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • battery_font_color = color opacity (0 to 100)

  • +
  • battery_padding = horizontal_padding vertical_padding

  • +
  • battery_background_id = integer : Which background to use for the battery.

  • +
  • battery_tooltip_enabled = boolean (0 or 1) : Enable/disable battery tooltips. (since 0.12.3)

  • +
  • battery_lclick_command = text : Command to execute on left click. (since 0.12.1)

  • +
  • battery_rclick_command = text : Command to execute on right click. (since 0.12.1)

  • +
  • battery_mclick_command = text : Command to execute on middle click. (since 0.12.1)

  • +
  • battery_uwheel_command = text : Command to execute on wheel scroll up. (since 0.12.1)

  • +
  • battery_dwheel_command = text : Command to execute on wheel scroll down. (since 0.12.1)

  • +
  • ac_connected_cmd = text : Command to execute when the power adapter is plugged in. (since 0.12.3)

  • +
  • ac_disconnected_cmd = text : Command to execute when the power adapter is unplugged. (since 0.12.3)

  • +
+

Executor

+
    +
  • execp = new : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple Es in panel_items. (since 0.12.4)

  • +
  • execp_command = text : Command to execute. (since 0.12.4)

  • +
  • execp_interval = integer : The command is executed again after execp_interval seconds from the moment it exits. If zero, the command is executed only once. (since 0.12.4)

  • +
  • execp_continuous = integer : If non-zero, the last execp_continuous lines from the output of the command are displayed, every execp_continuous lines; this is useful for showing the output of commands that run indefinitely, such as ping 127.0.0.1. If zero, the output of the command is displayed after it finishes executing. (since 0.12.4)

  • +
  • execp_has_icon = boolean (0 or 1) : If execp_has_icon = 1, the first line printed by the command is interpreted as a path to an image file. (since 0.12.4)

  • +
  • execp_cache_icon = boolean (0 or 1) : If execp_cache_icon = 0, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by execp_command). (since 0.12.4)

  • +
  • execp_icon_w = integer : You can use execp_icon_w and execp_icon_h to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. (since 0.12.4)

  • +
  • execp_icon_h = integer : See execp_icon_w. (since 0.12.4)

  • +
  • execp_tooltip = text : The tooltip. Leave it empty to not display a tooltip. Not specifying this option leads to showing an automatically generated tooltip with information about when the command was last executed. (since 0.12.4)

  • +
  • execp_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE] : The font used to draw the text. (since 0.12.4)

  • +
  • execp_font_color = color opacity : The font color. (since 0.12.4)

  • +
  • execp_markup = boolean (0 or 1) : If non-zero, the output of the command is treated as Pango markup, which allows rich text formatting. The format is documented here. Note that using this with commands that print data downloaded from the Internet is a possible security risk. (since 0.12.4)

  • +
  • execp_background_id = integer : Which background to use. (since 0.12.4)

  • +
  • execp_centered = boolean (0 or 1) : Whether to center the text. (since 0.12.4)

  • +
  • execp_padding = horizontal_padding vertical_padding spacing_between_icon_and_text (since 0.12.4)

  • +
  • execp_lclick_command = text : Command to execute on left click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_mclick_command = text : Command to execute on right click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_rclick_command = text : Command to execute on middle click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_uwheel_command = text : Command to execute on wheel scroll up. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_dwheel_command = text : Command to execute on wheel scroll down. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
+

Executor samples

execp = new
+execp_command = hostname
+execp_interval = 0
+
+
execp = new
+execp_command = df -h | awk '/\/$/ { print $6 ": " $2 " " $5}'
+execp_interval = 10
+
+
Button with icon and rich text, executes command when clicked
execp = new
+execp_command = echo /usr/share/icons/elementary-xfce/emblems/24/emblem-colors-blue.png; echo '<span foreground="#7f7">Click</span> <span foreground="#77f">me</span> <span foreground="#f77">pls</span>'
+execp_has_icon = 1
+execp_interval = 0
+execp_centered = 1
+execp_font = sans 9
+execp_markup = 1
+execp_font_color = #aaffaa 100
+execp_padding = 2 0
+execp_tooltip = I will tell you a secret...
+execp_lclick_command = zenity --info "--text=$(uname -sr)"
+execp_background_id = 2
+
+
Desktop pager with text
execp = new
+execp_command = xprop -root -spy | awk '/^_NET_CURRENT_DESKTOP/ { print "Workspace " ($3 + 1) ; fflush(); }'
+execp_interval = 1
+execp_continuous = 1
+
+
Desktop pager with icon
execp_command = xprop -root -spy | awk -v home="$HOME" '/^_NET_CURRENT_DESKTOP/ { print home "/.config/myPager/" ($3 + 1) ".png\n" ; fflush(); }'
+execp_interval = 1
+execp_has_icon = 1
+execp_cache_icon = 1
+execp_continuous = 2
+
+
Round-trip time to the gateway, refreshed every second
execp = new
+execp_command = ping -i 1 -W 1 -O -D -n $(ip route | grep default | grep via | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*') | awk '/no/ { print "<span foreground=\"#faa\">timeout</span>"; fflush(); }; /time=/ { gsub(/time=/, "", $8); printf "<span foreground=\"#7af\">%3.0f %s</span>\n", $8, $9; fflush(); } '
+execp_continuous = 1
+execp_interval = 1
+execp_markup = 1
+
+
Memory usage
execp = new
+execp_command = free -s 2 | awk '/^-/ { printf "Mem: '$(free -h | awk '/^Mem:/ { print $2 }')' %.0f%\n", 100*$3/($3+$4); fflush(stdout) }'
+execp_interval = 1
+execp_continuous = 1
+
+
Network load
# Note the use of "stdbuf -oL" to force the program to flush the output line by line.
+execp = new
+execp_command = stdbuf -oL bwm-ng -o csv -t 1000 | awk -F ';' '/total/ { printf "Net: %.0f Mb/s\n", ($5*8/1.0e6) }; fflush(stdout)'
+execp_continuous = 1
+execp_interval = 1
+
+

Example configuration

#---------------------------------------------
+## TINT2 CONFIG FILE
+#---------------------------------------------
+
+#---------------------------------------------
+## BACKGROUND AND BORDER
+#---------------------------------------------
+rounded = 7
+border_width = 2
+background_color = #000000 60
+border_color = #ffffff 18
+
+rounded = 5
+border_width = 0
+background_color = #ffffff 40
+border_color = #ffffff 50
+
+rounded = 5
+border_width = 0
+background_color = #ffffff 18
+border_color = #ffffff 70
+
+#---------------------------------------------
+## PANEL
+#---------------------------------------------
+panel_monitor = all
+panel_position = bottom center
+panel_size = 94% 30
+panel_margin = 0 0
+panel_padding = 7 0
+font_shadow = 0
+panel_background_id = 1
+wm_menu = 0
+panel_dock = 0
+panel_layer = bottom
+
+#---------------------------------------------
+## TASKBAR
+#---------------------------------------------
+#taskbar_mode = multi_desktop
+taskbar_mode = single_desktop
+taskbar_padding = 2 3 2
+taskbar_background_id = 0
+#taskbar_active_background_id = 0
+
+#---------------------------------------------
+## TASKS
+#---------------------------------------------
+task_icon = 1
+task_text = 1
+task_maximum_size = 140 35
+task_centered = 1
+task_padding = 6 3
+task_font = sans 7
+task_font_color = #ffffff 70
+task_background_id = 3
+task_icon_asb = 100 0 0
+## replace STATUS by 'urgent', 'active' or 'iconfied'
+#task_STATUS_background_id = 2
+#task_STATUS_font_color = #ffffff 85
+#task_STATUS_icon_asb = 100 0 0
+## example:
+task_active_background_id = 2
+task_active_font_color = #ffffff 85
+task_active_icon_asb = 100 0 0
+urgent_nb_of_blink = 8
+
+#---------------------------------------------
+## SYSTRAYBAR
+#---------------------------------------------
+systray = 1
+systray_padding = 0 4 5
+systray_background_id = 0
+systray_sort = left2right
+systray_icon_size = 0
+systray_icon_asb = 100 0 0
+
+#---------------------------------------------
+## CLOCK
+#---------------------------------------------
+time1_format = %H:%M
+time1_font = sans 8
+time2_format = %A %d %B
+time2_font = sans 6
+clock_font_color = #ffffff 76
+clock_padding = 1 0
+clock_background_id = 0
+#clock_lclick_command = xclock
+clock_rclick_command = orage
+#clock_tooltip = %A %d %B
+#time1_timezone = :US/Hawaii
+#time2_timezone = :Europe/Berlin
+#clock_tooltip_timezone = :/usr/share/zoneinfo/Europe/Paris
+
+#---------------------------------------------
+## BATTERY
+#---------------------------------------------
+battery = 0
+battery_hide = 98
+battery_low_status = 10
+battery_low_cmd = notify-send "battery low"
+bat1_font = sans 8
+bat2_font = sans 6
+battery_font_color = #ffffff 76
+battery_padding = 1 0
+battery_background_id = 0
+
+#---------------------------------------------
+## TOOLTIP
+#---------------------------------------------
+tooltip = 0
+tooltip_padding = 2 2
+tooltip_show_timeout = 0.7
+tooltip_hide_timeout = 0.3
+tooltip_background_id = 1
+tooltip_font_color = #OOOOOO 80
+tooltip_font = sans 10
+
+#---------------------------------------------
+## MOUSE ACTION ON TASK
+#---------------------------------------------
+mouse_middle = none
+mouse_right = close
+mouse_scroll_up = toggle
+mouse_scroll_down = iconify
+
+#---------------------------------------------
+## AUTOHIDE OPTIONS
+#---------------------------------------------
+autohide = 0
+autohide_show_timeout = 0.3
+autohide_hide_timeout = 2
+autohide_height = 4
+strut_policy = minimum
+
+

AUTHOR

tint2 was written by Thierry Lorthiois lorthiois@bbsoft.fr. +It is based on ttm, originally written by Pål Staurland staura@gmail.com.

This manual page was originally written by Daniel Moerner dmoerner@gmail.com, for the Debian project (but may be used by others). +It was adopted from the tint2 docs.

SEE ALSO

The main website https://gitlab.com/o9000/tint2 +and the wiki page at https://gitlab.com/o9000/tint2/wikis/home.

+ + diff --git a/doc/readme.html b/doc/readme.html new file mode 100644 index 0000000..4e97361 --- /dev/null +++ b/doc/readme.html @@ -0,0 +1,253 @@ + + + + + + + +

Latest stable release: 0.12.11

Changes: https://gitlab.com/o9000/tint2/blob/0.12.11/ChangeLog

Documentation: manual.html

Compile it with (see also dependencies):

git clone https://gitlab.com/o9000/tint2.git
+cd tint2
+git checkout 0.12.11
+mkdir build
+cd build
+cmake ..
+make -j4
+
+

To install, run (as root):

make install
+
+

And then you can run the panel tint2 and the configuration program tint2conf.

Please report any problems to https://gitlab.com/o9000/tint2/issues. Your feedback is much appreciated.

P.S. GitLab is now the official location of the tint2 project, migrated from Google Code, which is shutting down. In case you are wondering why not GitHub, BitBucket etc., we chose GitLab because it is open source, it is mature and works well, looks cool and has a very nice team.

What is tint2?

tint2 is a simple panel/taskbar made for modern X window managers. It was specifically made for Openbox but it should also work with other window managers (GNOME, KDE, XFCE etc.). It is based on ttm https://code.google.com/p/ttm/.

Features

+
    +
  • Panel with taskbar, system tray, clock and launcher icons;
  • +
  • Easy to customize: color/transparency on fonts, icons, borders and backgrounds;
  • +
  • Pager like capability: move tasks between workspaces (virtual desktops), switch between workspaces;
  • +
  • Multi-monitor capability: create one panel per monitor, showing only the tasks from the current monitor;
  • +
  • Customizable mouse events.
  • +
+

Goals

+
    +
  • Be unintrusive and light (in terms of memory, CPU and aesthetic);
  • +
  • Follow the freedesktop.org specifications;
  • +
  • Make certain workflows, such as multi-desktop and multi-monitor, easy to use.
  • +
+

I want it!

+ +

How do I ...

+ +

How can I help out?

+
    +
  • Report bugs and ask questions on the issue tracker;
  • +
  • Contribute to the development by helping us fix bugs and suggesting new features.
  • +
+

Links

+ +

Screenshots

Default config:

Screenshot_2016-01-23_14-42-57

Various configs:

screenshot

+ + diff --git a/doc/tint2.1 b/doc/tint2.1 index 307df6e..5b1e377 100644 --- a/doc/tint2.1 +++ b/doc/tint2.1 @@ -65,7 +65,7 @@ Battery \[la]#battery\[ra] .IP \(bu 2 Executor \[la]#executor\[ra] .IP \(bu 2 -Example \[la]#an-example-tint2rc\[ra] +Example configuration \[la]#example-configuration\[ra] .RE .SS Introduction .PP @@ -89,7 +89,7 @@ The tint2 config file starts with the options defining background elements with .IP \(bu 2 \fB\fCborder_width = integer\fR : the border width in pixels .IP \(bu 2 -\fB\fCborder_sides = LRTB\fR : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used. +\fB\fCborder_sides = LRTB\fR : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used. \fI(since 0.12.12)\fP .IP \(bu 2 \fB\fCbackground_color = color opacity\fR .RS @@ -107,7 +107,7 @@ The tint2 config file starts with the options defining background elements with \fB\fCopacity\fR varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque .RE .IP \(bu 2 -\fB\fCbackground_color_hover = color opacity\fR (default: same as background_color) \fI(since 0.12.3)\fP +\fB\fCbackground_color_hover = color opacity\fR (default: same as \fB\fCbackground_color\fR) \fI(since 0.12.3)\fP .RS .IP \(bu 2 \fB\fCcolor\fR is specified in hex RGB, e.g. #ff0000 is red @@ -115,7 +115,7 @@ The tint2 config file starts with the options defining background elements with \fB\fCopacity\fR varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz) .RE .IP \(bu 2 -\fB\fCborder_color_hover = color opacity\fR (default: same as border_color) \fI(since 0.12.3)\fP +\fB\fCborder_color_hover = color opacity\fR (default: same as \fB\fCborder_color\fR) \fI(since 0.12.3)\fP .RS .IP \(bu 2 \fB\fCcolor\fR is specified in hex RGB, e.g. #ff0000 is red @@ -123,7 +123,7 @@ The tint2 config file starts with the options defining background elements with \fB\fCopacity\fR varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque .RE .IP \(bu 2 -\fB\fCbackground_color_pressed = color opacity\fR (default: same as background\fIcolor\fPhover) \fI(since 0.12.3)\fP +\fB\fCbackground_color_pressed = color opacity\fR (default: same as \fB\fCbackground_color_hover\fR) \fI(since 0.12.3)\fP .RS .IP \(bu 2 \fB\fCcolor\fR is specified in hex RGB, e.g. #ff0000 is red @@ -131,7 +131,7 @@ The tint2 config file starts with the options defining background elements with \fB\fCopacity\fR varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz) .RE .IP \(bu 2 -\fB\fCborder_color_pressed = color opacity\fR (default: same as border\fIcolor\fPhover) \fI(since 0.12.3)\fP +\fB\fCborder_color_pressed = color opacity\fR (default: same as \fB\fCborder_color_hover\fR) \fI(since 0.12.3)\fP .RS .IP \(bu 2 \fB\fCcolor\fR is specified in hex RGB, e.g. #ff0000 is red @@ -205,7 +205,7 @@ Use \fB\fCpanel_monitor = all\fR to get a separate panel per monitor \fB\fCprimary_monitor_first = boolean (0 or 1)\fR : Place the primary monitor before all the other monitors in the list. \fI(since 0.12.4)\fP .RE .PP -[\[la]http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg](http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg)\[ra] +[](images/panel_padding.jpg) .RS .IP \(bu 2 \fB\fCpanel_position = vertical_position horizontal_position orientation\fR @@ -237,13 +237,13 @@ panel_size = 94% 30 \fB\fCpanel_margin = horizontal_margin vertical_margin\fR : The margins define the distance between the panel and the horizontal/vertical monitor edge. Use \fB\fC0\fR to obtain a panel with the same size as the edge of the monitor (no margin). .RE .PP -[\[la]http://farm4.static.flickr.com/3438/3266303192_476a188196.jpg](http://farm4.static.flickr.com/3438/3266303192_476a188196.jpg)\[ra] +[](images/panel\fIsize\fPmargin.jpg) .RS .IP \(bu 2 \fB\fCpanel_padding = horizontal_padding vertical_padding spacing\fR : Please refer to the image below. .RE .PP -[\[la]http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg](http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg)\[ra] +[](images/panel_padding.jpg) .RS .IP \(bu 2 \fB\fCfont_shadow = boolean (0 or 1)\fR @@ -331,7 +331,7 @@ You can switch between virtual desktops. \fB\fCtaskbar_padding = horizontal_padding vertical_padding spacing\fR .RE .PP -[\[la]http://farm4.static.flickr.com/3521/3266303292_14d9b6b623.jpg](http://farm4.static.flickr.com/3521/3266303292_14d9b6b623.jpg)\[ra] +[](images/taskbar_padding.jpg) .RS .IP \(bu 2 \fB\fCtaskbar_background_id = integer\fR : Which background to use @@ -400,7 +400,7 @@ The following options configure the task buttons in the taskbar: \fB\fCurgent_nb_of_blink = integer\fR : Number of blinks on 'get attention' events. .RE .PP -[\[la]http://farm4.static.flickr.com/3086/3265475337_262799ded3.jpg](http://farm4.static.flickr.com/3086/3265475337_262799ded3.jpg)\[ra] +[](images/task_padding.jpg) .RS .IP \(bu 2 \fB\fCtask_font = [FAMILY\-LIST] [STYLE\-OPTIONS] [SIZE]\fR @@ -511,9 +511,9 @@ To hide the clock, comment \fB\fCtime1_format\fR and \fB\fCtime2_format\fR\&. .IP \(bu 2 \fB\fCtooltip_padding = horizontal_padding vertical_padding\fR .IP \(bu 2 -\fB\fCtooltip_show_timeout = float\fR : Delay to show the tooltip in seconds. Use '.' as decimal separator. +\fB\fCtooltip_show_timeout = float\fR : Delay to show the tooltip in seconds. Use \fB\fC\&.\fR as decimal separator. .IP \(bu 2 -\fB\fCtooltip_hide_timeout = float\fR : Delay to hide the tooltip in seconds. Use '.' as decimal separator. +\fB\fCtooltip_hide_timeout = float\fR : Delay to hide the tooltip in seconds. Use \fB\fC\&.\fR as decimal separator. .IP \(bu 2 \fB\fCtooltip_background_id = integer\fR : Which background to use for tooltips. Note that with fake transparency the alpha channel and corner radius options are not respected. .IP \(bu 2 @@ -569,9 +569,9 @@ To hide the clock, comment \fB\fCtime1_format\fR and \fB\fCtime2_format\fR\&. .IP \(bu 2 \fB\fCexecp_has_icon = boolean (0 or 1)\fR : If \fB\fCexecp_has_icon = 1\fR, the first line printed by the command is interpreted as a path to an image file. \fI(since 0.12.4)\fP .IP \(bu 2 -\fB\fCexecp_cache_icon = boolean (0 or 1)\fR : If execp\fIcache\fPicon = 0, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by \fB\fCexecp_command\fR). \fI(since 0.12.4)\fP +\fB\fCexecp_cache_icon = boolean (0 or 1)\fR : If \fB\fCexecp_cache_icon = 0\fR, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by \fB\fCexecp_command\fR). \fI(since 0.12.4)\fP .IP \(bu 2 -\fB\fCexecp_icon_w = integer\fR : You can use execp\fIicon\fPw and execp\fIicon\fPh to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. \fI(since 0.12.4)\fP +\fB\fCexecp_icon_w = integer\fR : You can use \fB\fCexecp_icon_w\fR and \fB\fCexecp_icon_h\fR to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. \fI(since 0.12.4)\fP .IP \(bu 2 \fB\fCexecp_icon_h = integer\fR : See \fB\fCexecp_icon_w\fR\&. \fI(since 0.12.4)\fP .IP \(bu 2 @@ -689,7 +689,7 @@ execp_continuous = 1 execp_interval = 1 .fi .RE -.SH EXAMPLE CONFIG +.SS Example configuration .PP .RS .nf @@ -834,7 +834,7 @@ strut_policy = minimum tint2 was written by Thierry Lorthiois \[la]lorthiois@bbsoft.fr\[ra]\&. It is based on ttm, originally written by Pål Staurland \[la]staura@gmail.com\[ra]\&. .PP -This manual page was written by Daniel Moerner \[la]dmoerner@gmail.com\[ra], for the Debian project (but may be used by others). +This manual page was originally written by Daniel Moerner \[la]dmoerner@gmail.com\[ra], for the Debian project (but may be used by others). It was adopted from the tint2 docs. .SH SEE ALSO .PP diff --git a/doc/tint2.html b/doc/tint2.html new file mode 100644 index 0000000..033dc77 --- /dev/null +++ b/doc/tint2.html @@ -0,0 +1,524 @@ +

TINT2 1 2016-05-22

NAME

tint2 - lightweight panel/taskbar

SYNOPSIS

tint2 [-c path_to_config_file]

DESCRIPTION

tint2 is a simple panel/taskbar made for modern X window managers. +It was specifically made for Openbox but it should also work with other window managers (GNOME, KDE, XFCE etc.).

Features:

+
    +
  • Panel with taskbar, system tray, clock and launcher icons;
  • +
  • Easy to customize: color/transparency on fonts, icons, borders and backgrounds;
  • +
  • Pager like capability: move tasks between workspaces (virtual desktops), switch between workspaces;
  • +
  • Multi-monitor capability: create one panel per monitor, showing only the tasks from the current monitor;
  • +
  • Customizable mouse events.
  • +
+

Goals:

+
    +
  • Be unintrusive and light (in terms of memory, CPU and aesthetic);
  • +
  • Follow the freedesktop.org specifications;
  • +
  • Make certain workflows, such as multi-desktop and multi-monitor, easy to use.
  • +
+

OPTIONS

-c path_to_config_file
Specifies which configuration file to use instead of the default.

CONFIGURATION

Table of contents

+ +

Introduction

These are instructions for configuring tint2 directly by editing its config file. +You may also use instead the graphical interface tint2conf.

The first time you run tint2, it will create the config file in $HOME/.config/tint2/tint2rc (This applies if you have done a clean install. Running tint2 in the source directory without doing 'make install' will not create the config file.)

You can also specify another file on the command line with the -c option, e.g.: tint2 -c $HOME/tint2.conf. This can be used to run multiple instances of tint2 that use different settings.

If you change the config file while tint2 is running, the command killall -SIGUSR1 tint2 will force tint2 to reload it.

All the configuration options supported in the config file are listed below. +Try to respect as much as possible the order of the options as given below.

Backgrounds and borders

The tint2 config file starts with the options defining background elements with borders:

+
    +
  • rounded = number_of_pixels : the corner radius

  • +
  • border_width = integer : the border width in pixels

  • +
  • border_sides = LRTB : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used.

  • +
  • background_color = color opacity

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz).
    • +
  • +
  • border_color = color opacity

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
  • background_color_hover = color opacity (default: same as background_color) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz)
    • +
  • +
  • border_color_hover = color opacity (default: same as border_color) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
  • background_color_pressed = color opacity (default: same as backgroundcolorhover) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz)
    • +
  • +
  • border_color_pressed = color opacity (default: same as bordercolorhover) (since 0.12.3)

    +
      +
    • color is specified in hex RGB, e.g. #ff0000 is red
    • +
    • opacity varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque
    • +
  • +
+

You can define as many backgrounds as you want. For example, the following config defines two backgrounds:

rounded = 1
+border_width = 0
+background_color = #282828 100
+border_color = #000000 0
+
+rounded = 1
+border_width = 0
+background_color = #f6b655 90
+border_color = #cccccc 40
+
+

tint2 automatically identifies each background with a number starting from 1 (1, 2, ...). +Afterwards, you can apply a background to objects (panel, taskbar, task, clock, systray) using the background id, for example:

panel_background_id = 1
+taskbar_background_id = 0
+task_background_id = 0
+task_active_background_id = 2
+systray_background_id = 0
+clock_background_id = 0
+
+

Identifier 0 refers to a special background which is fully transparent, identifier 1 applies the first background defined in the config file etc.

Panel

+
    +
  • panel_items = LTSBC defines the items tint2 will show and the order of those items. Each letter refers to an item, defined as:

    +
      +
    • L shows the Launcher
    • +
    • T shows the Taskbar
    • +
    • S shows the Systray (also called notification area)
    • +
    • B shows the Battery status
    • +
    • C shows the Clock
    • +
    • F adds an extensible spacer (freespace). Has no effect if T is also present. (since 0.12)
    • +
    • E adds an executor plugin. You can specify more than one. (since 0.12.4)
    • +
    +

    For example, panel_items = STC will show the systray, the taskbar and the clock (from left to right).

  • +
  • panel_monitor = monitor (all or 1 or 2 or ...) : Which monitor tint2 draws the panel on

    +
      +
    • The first monitor is 1
    • +
    • Use panel_monitor = all to get a separate panel per monitor
    • +
  • +
  • primary_monitor_first = boolean (0 or 1) : Place the primary monitor before all the other monitors in the list. (since 0.12.4)

  • +
+

+
    +
  • panel_position = vertical_position horizontal_position orientation

    +
      +
    • vertical_position is one of: bottom, top, center
    • +
    • horizontal_position is one of: left, right, center
    • +
    • orientation is one of: horizontal, vertical
    • +
  • +
  • panel_size = width height

    +
      +
    • width and height can be specified without units (e.g. 123) as pixels, or followed by % as percentages of the monitor size (e.g. 50%). Use 100% for full monitor width/height. +Example:
    • +
  • +
+
# The panel's width is 94% the size of the monitor, the height is 30 pixels:
+panel_size = 94% 30
+
+ +
    +
  • panel_margin = horizontal_margin vertical_margin : The margins define the distance between the panel and the horizontal/vertical monitor edge. Use 0 to obtain a panel with the same size as the edge of the monitor (no margin).
  • +
+

+
    +
  • panel_padding = horizontal_padding vertical_padding spacing : Please refer to the image below.
  • +
+

+
    +
  • font_shadow = boolean (0 or 1)

  • +
  • panel_background_id = integer : Which background to use for the panel.

  • +
  • wm_menu = boolean (0 or 1) : Defines if tint2 forwards unhandled mouse events to your window manager. Useful for window managers such as openbox, which display the start menu if you right click on the desktop.

  • +
  • panel_dock = boolean (0 or 1) : Defines if tint2 is placed into the window manager's dock. For the openbox window manager it is advised to also use a modifier for the moveButton option, otherwise the mouse click is not forwarded to tint2 (in ~/.config/openbox/rc.xml).

  • +
  • panel_layer = bottom/normal/top : Places tint2 into the bottom/normal/top layer. This is helpful for specifying if the panel can be covered by other windows or not. The default is the bottom layer, but with real transparency normal or top layer may be a nice alternative.

  • +
  • strut_policy = follow_size/minimum/none : STRUTs are used by the window manager to decide the size of maximized windows. Note: on multi-monitor (Xinerama) setups, the panel must be placed at the edge (not in the middle) of the virtual screen for this to work correctly.

    +
      +
    • follow_size means that the maximized windows always resize to have a common edge with tint2.
    • +
    • minimum means that the maximized windows always expand to have a common edge with the hidden panel. This is useful if the autohide option is enabled.
    • +
    • none means that the maximized windows use the full screen size.
    • +
  • +
  • panel_window_name = string : Defines the name of the panel's window. Default: 'tint2'. (since 0.12)

  • +
  • disable_transparency = boolean (0 or 1) : Whether to disable transparency instead of detecting if it is supported. Useful on broken graphics stacks. (since 0.12)

  • +
  • mouse_effects = boolean (0 or 1) : Whether to enable mouse hover effects for clickable items. (since 0.12.3)

  • +
  • mouse_hover_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency on mouse hover (works only when mouse_effects = 1).` (since 0.12.3)

  • +
  • mouse_pressed_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency on mouse press (works only when mouse_effects = 1).` (since 0.12.3)

  • +
  • autohide = boolean (0 or 1) : Whether to enable panel hiding when the mouse cursor exists the panel.

  • +
  • autohide_show_timeout = float : Show timeout in seconds after the mouse cursor enters the panel. Use '.' as decimal separator.

  • +
  • autohide_hide_timeout = float : Hide timeout in seconds after the mouse cursor exits the panel. Use '.' as decimal separator.

  • +
  • autohide_height = integer : panel height (width for vertical panels) in hidden mode.

  • +
+

Launcher

+
    +
  • launcher_item_app = path_to_application : Each launcher_item_app must be a file path to a .desktop file following the freedesktop.org specification. The paths may begin with ~, which is expanded to the path of the user's home directory. If only a file name is specified, the file is search in the standard application directories ($XDG_DATA_HOME/applications, ~/.local/share/applications, $XDG_DATA_DIRS/applications, /usr/local/share/applications, /usr/share/applications, /opt/share/applications).

  • +
  • launcher_apps_dir = path_to_directory : Specifies a path to a directory from which the launcher is loading all .desktop files (all subdirectories are explored recursively). Can be used multiple times. The path may begin with ~, which is expanded to the path of the user's home directory. (since 0.12)

  • +
  • launcher_background_id = integer : Defines which background to use.

  • +
  • launcher_icon_background_id = integer : Defines which background to use for icons.

  • +
  • launcher_padding = horizontal_padding vertical_padding spacing

  • +
  • launcher_icon_size = integer : The launcher icon size, in pixels.

  • +
  • launcher_icon_theme = name_of_theme : (Optional) Uses the specified icon theme to display shortcut icons. Note that tint2 will detect and use the icon theme of your desktop if you have an XSETTINGS manager running (which you probably do), unless launcher_icon_theme_override = 1.

  • +
  • launcher_icon_theme_override = boolean (0 or 1) : Whether launcher_icon_theme overrides the value obtained from the XSETTINGS manager. (since 0.12)

  • +
  • launcher_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the icon color and transparency.

  • +
  • launcher_tooltip = boolean (0 or 1) : Whether to show tooltips for the launcher icons.

  • +
  • startup_notifications = boolean (0 or 1) : Whether to show startup notifications when starting applications from the launcher. (since 0.12)

  • +
+

Taskbar / Pager

+
    +
  • taskbar_mode = single_desktop/multi_desktop

    +
      +
    • single_desktop : Shows a normal taskbar listing the tasks running on the current virtual desktop (also known as 'workspace');
    • +
    • multi_desktop : Pager like capability. Shows multiple taskbars, one per virtual desktop, with which: + +
        +
      • You can drag-and-drop tasks between virtual desktops;
      • +
      • You can switch between virtual desktops.
      • +
    • +
  • +
  • taskbar_distribute_size = boolean (0 or 1) : If enabled, in multi-desktop mode distributes between taskbars the available size proportionally to the number of tasks. Default: disabled. (since 0.12)

  • +
  • taskbar_padding = horizontal_padding vertical_padding spacing

  • +
+

+
    +
  • taskbar_background_id = integer : Which background to use

  • +
  • taskbar_active_background_id = integer : Which background to use for the taskbar of the current virtual desktop.

  • +
  • taskbar_hide_inactive_tasks = boolean (0 or 1) : If enabled, the taskbar shows only the active task. (since 0.12)

  • +
  • taskbar_hide_different_monitor = boolean (0 or 1) : If enabled, the taskbar shows only the tasks from the current monitor. Useful when running different tint2 instances on different monitors, each one having its own config. (since 0.12)

  • +
  • taskbar_always_show_all_desktop_tasks = boolean (0 or 1) : Has effect only if taskbar_mode = multi_desktop. If enabled, tasks that appear on all desktops are shown on all taskbars. Otherwise, they are shown only on the taskbar of the current desktop. (since 0.12.4)

  • +
  • taskbar_sort_order = none/title/center : Specifies the sort order of the tasks on the taskbar. (since 0.12)

    +
      +
    • none : No sorting. New tasks are simply appended at the end of the taskbar when they appear.
    • +
    • title : Sorts the tasks by title.
    • +
    • center : Sorts the tasks by their window centers.
    • +
    • mru : Shows the most recently used tasks first. (since 0.12.4)
    • +
    • lru : Shows the most recently used tasks last. (since 0.12.4)
    • +
  • +
  • task_align = left/center/right : Specifies the alignment of the tasks on the taskbar. Default: left.

  • +
  • taskbar_name = boolean (0 or 1) : Whether to show the virtual desktop name in the taskbar.

  • +
  • taskbar_name_padding = padding : Padding for the virtual desktop name.

  • +
  • taskbar_name_background_id = integer : Which background to use for the desktop name.

  • +
  • taskbar_name_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE] : Font configuration for the desktop name.

  • +
  • taskbar_name_font_color = color opacity (0 to 100) : Font color for the desktop name.

  • +
  • taskbar_name_active_background_id = integer : Which background to use for the name of the current desktop.

  • +
  • taskbar_name_active_font_color = color opacity (0 to 100) : Font color for the name of the current desktop.

  • +
+

Taskbar buttons

The following options configure the task buttons in the taskbar:

+
    +
  • task_icon = boolean (0 or 1) : Whether to display the task icon.

  • +
  • task_text = boolean (0 or 1) : Whether to display the task text.

  • +
  • task_centered = boolean (0 or 1) : Whether the task text is centered.

  • +
  • task_tooltip = boolean (0 or 1) : Whether to show tooltips for tasks.

  • +
  • task_maximum_size = width height

    +
      +
    • width is used with horizontal panels to limit the size of the tasks. Use width = 0 to get full taskbar width.
    • +
    • height is used with vertical panels.
    • +
  • +
  • task_padding = horizontal_padding vertical_padding spacing

  • +
  • urgent_nb_of_blink = integer : Number of blinks on 'get attention' events.

  • +
+

+
    +
  • task_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • task_font_color = color opacity (0 to 100)

  • +
  • task_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjust the task icon's color and transparency.

  • +
  • task_background_id = integer : Which background to use for non selected tasks

  • +
+
For the next 3 options STATUS can be active / iconified / urgent:
* task_STATUS_font_color = color opacity (0 to 100)
+
    +
  • task_STATUS_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjusts the task icon's color and transparency.

  • +
  • task_STATUS_background_id = integer : Which background to use for the task.

  • +
+

Mouse actions for taskbar buttons

The possible mouse events are: left, middle, right, scroll_up, scroll_down.

The possible mouse actions are: none, close, toggle, iconify, shade, toggle_iconify, maximize_restore, desktop_left, desktop_right, next_task, prev_task.

Use mouse_event = action to customize mouse actions. Example: + + mouse_middle = none + mouse_right = close + mouse_scroll_up = toggle + mouse_scroll_down = iconify +

The action semantics:
* none : If wm_menu = 1 is set, the mouse event is forwarded to the window manager. Otherwise it is ignored. +* close : close the task +* toggle : toggle the task +* iconify : iconify (minimize) the task +* toggle_iconify : toggle or iconify the task +* maximize_restore : maximized or minimized the task +* shade : shades (collapses) the task +* desktop_left : send the task to the desktop on the left +* desktop_right : send the task to the desktop on the right +* next_task : send the focus to next task +* prev_task : send the focus to previous task

System Tray

+
    +
  • systray_padding = horizontal_padding vertical_padding spacing

  • +
  • systray_background_id = integer : Which background to use.

  • +
  • systray_sort = ascending/descending/left2right/right2left : Specifies the sorting order for the icons in the systray: in ascending/descending alphabetical order of the icon title, or always add icons to the right/left (note that with left2right or right2left the order can be different on panel restart).

  • +
  • systray_icon_size = max_icon_size : Set the maximum system tray icon size to number. Set to 0 for automatic icon sizing.

  • +
  • systray_icon_asb = alpha (0 to 100) saturation (-100 to 100) brightness (-100 to 100) : Adjust the systray icons color and transparency.

  • +
  • systray_monitor = integer (1, 2, ...) : On which monitor to draw the systray. The first monitor is 1. (since 0.12)

  • +
+

Clock

+
    +
  • time1_format = %H:%M : The format used by the first line of the clock.

    +
      +
    • time1_format, time2_format and clock_tooltip use the 'strftime' syntax. More info can be found here: http://www.manpagez.com/man/3/strftime/
    • +
    • To hide the clock, comment time1_format and time2_format.
    • +
  • +
  • time1_timezone = :US/Hawaii

    +
      +
    • time1_timezone, time2_timezone and clock_tooltip_timezone can be used to specify a timezone. If you do not specify a value the system-wide timezone is used. The timezones can usually be found in /usr/share/zoneinfo. If your timezones are in a different directory, you need to specify the absolute path, e.g. time1_timezone = :/different/zoneinfo/dir/US/Hawaii Always prepend the timezone with a ':'
    • +
  • +
  • time1_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • time2_format = %A %d %B

  • +
  • time2_timezone = :Europe/Berlin

  • +
  • time2_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • clock_font_color = color opacity (0 to 100)

  • +
  • clock_padding = horizontal_padding vertical_padding

  • +
  • clock_background_id = integer : Which background to use

  • +
  • clock_tooltip = %a, %d. %b %Y : Format for the clock's tooltip.

  • +
  • clock_tooltip_timezone = :UTC

  • +
  • clock_lclick_command = text : Command to execute on left click.

  • +
  • clock_rclick_command = text : Command to execute on right click.

  • +
  • clock_mclick_command = text : Command to execute on middle click. (since 0.12.1)

  • +
  • clock_uwheel_command = text : Command to execute on wheel scroll up. (since 0.12.1)

  • +
  • clock_dwheel_command = text : Command to execute on wheel scroll down. (since 0.12.1)

  • +
+

Tooltip

+
    +
  • tooltip_padding = horizontal_padding vertical_padding

  • +
  • tooltip_show_timeout = float : Delay to show the tooltip in seconds. Use '.' as decimal separator.

  • +
  • tooltip_hide_timeout = float : Delay to hide the tooltip in seconds. Use '.' as decimal separator.

  • +
  • tooltip_background_id = integer : Which background to use for tooltips. Note that with fake transparency the alpha channel and corner radius options are not respected.

  • +
  • tooltip_font_color = color opacity (0 to 100)

  • +
  • tooltip_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
+

Battery

+
    +
  • battery_hide = never/integer (0 to 100) : At what battery percentage the battery item is hidden.

  • +
  • battery_low_status = integer: At what battery percentage the low command is executed.

  • +
  • battery_low_cmd = notify-send "battery low" : Command to execute when the battery is low.

  • +
  • bat1_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • bat2_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]

  • +
  • battery_font_color = color opacity (0 to 100)

  • +
  • battery_padding = horizontal_padding vertical_padding

  • +
  • battery_background_id = integer : Which background to use for the battery.

  • +
  • battery_tooltip_enabled = boolean (0 or 1) : Enable/disable battery tooltips. (since 0.12.3)

  • +
  • battery_lclick_command = text : Command to execute on left click. (since 0.12.1)

  • +
  • battery_rclick_command = text : Command to execute on right click. (since 0.12.1)

  • +
  • battery_mclick_command = text : Command to execute on middle click. (since 0.12.1)

  • +
  • battery_uwheel_command = text : Command to execute on wheel scroll up. (since 0.12.1)

  • +
  • battery_dwheel_command = text : Command to execute on wheel scroll down. (since 0.12.1)

  • +
  • ac_connected_cmd = text : Command to execute when the power adapter is plugged in. (since 0.12.3)

  • +
  • ac_disconnected_cmd = text : Command to execute when the power adapter is unplugged. (since 0.12.3)

  • +
+

Executor

+
    +
  • execp = new : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple Es in panel_items. (since 0.12.4)

  • +
  • execp_command = text : Command to execute. (since 0.12.4)

  • +
  • execp_interval = integer : The command is executed again after execp_interval seconds from the moment it exits. If zero, the command is executed only once. (since 0.12.4)

  • +
  • execp_continuous = integer : If non-zero, the last execp_continuous lines from the output of the command are displayed, every execp_continuous lines; this is useful for showing the output of commands that run indefinitely, such as ping 127.0.0.1. If zero, the output of the command is displayed after it finishes executing. (since 0.12.4)

  • +
  • execp_has_icon = boolean (0 or 1) : If execp_has_icon = 1, the first line printed by the command is interpreted as a path to an image file. (since 0.12.4)

  • +
  • execp_cache_icon = boolean (0 or 1) : If execpcacheicon = 0, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by execp_command). (since 0.12.4)

  • +
  • execp_icon_w = integer : You can use execpiconw and execpiconh to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. (since 0.12.4)

  • +
  • execp_icon_h = integer : See execp_icon_w. (since 0.12.4)

  • +
  • execp_tooltip = text : The tooltip. Leave it empty to not display a tooltip. Not specifying this option leads to showing an automatically generated tooltip with information about when the command was last executed. (since 0.12.4)

  • +
  • execp_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE] : The font used to draw the text. (since 0.12.4)

  • +
  • execp_font_color = color opacity : The font color. (since 0.12.4)

  • +
  • execp_markup = boolean (0 or 1) : If non-zero, the output of the command is treated as Pango markup, which allows rich text formatting. The format is documented here. Note that using this with commands that print data downloaded from the Internet is a possible security risk. (since 0.12.4)

  • +
  • execp_background_id = integer : Which background to use. (since 0.12.4)

  • +
  • execp_centered = boolean (0 or 1) : Whether to center the text. (since 0.12.4)

  • +
  • execp_padding = horizontal_padding vertical_padding spacing_between_icon_and_text (since 0.12.4)

  • +
  • execp_lclick_command = text : Command to execute on left click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_mclick_command = text : Command to execute on right click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_rclick_command = text : Command to execute on middle click. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_uwheel_command = text : Command to execute on wheel scroll up. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
  • execp_dwheel_command = text : Command to execute on wheel scroll down. If not defined, execp_command is executed immediately, unless it is currently running. (since 0.12.4)

  • +
+

Executor samples

execp = new
+execp_command = hostname
+execp_interval = 0
+
+
execp = new
+execp_command = df -h | awk '/\/$/ { print $6 ": " $2 " " $5}'
+execp_interval = 10
+
+
Button with icon and rich text, executes command when clicked
execp = new
+execp_command = echo /usr/share/icons/elementary-xfce/emblems/24/emblem-colors-blue.png; echo '<span foreground="#7f7">Click</span> <span foreground="#77f">me</span> <span foreground="#f77">pls</span>'
+execp_has_icon = 1
+execp_interval = 0
+execp_centered = 1
+execp_font = sans 9
+execp_markup = 1
+execp_font_color = #aaffaa 100
+execp_padding = 2 0
+execp_tooltip = I will tell you a secret...
+execp_lclick_command = zenity --info "--text=$(uname -sr)"
+execp_background_id = 2
+
+
Desktop pager with text
execp = new
+execp_command = xprop -root -spy | awk '/^_NET_CURRENT_DESKTOP/ { print "Workspace " ($3 + 1) ; fflush(); }'
+execp_interval = 1
+execp_continuous = 1
+
+
Desktop pager with icon
execp_command = xprop -root -spy | awk -v home="$HOME" '/^_NET_CURRENT_DESKTOP/ { print home "/.config/myPager/" ($3 + 1) ".png\n" ; fflush(); }'
+execp_interval = 1
+execp_has_icon = 1
+execp_cache_icon = 1
+execp_continuous = 2
+
+
Round-trip time to the gateway, refreshed every second
execp = new
+execp_command = ping -i 1 -W 1 -O -D -n $(ip route | grep default | grep via | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*') | awk '/no/ { print "<span foreground=\"#faa\">timeout</span>"; fflush(); }; /time=/ { gsub(/time=/, "", $8); printf "<span foreground=\"#7af\">%3.0f %s</span>\n", $8, $9; fflush(); } '
+execp_continuous = 1
+execp_interval = 1
+execp_markup = 1
+
+
Memory usage
execp = new
+execp_command = free -s 2 | awk '/^-/ { printf "Mem: '$(free -h | awk '/^Mem:/ { print $2 }')' %.0f%\n", 100*$3/($3+$4); fflush(stdout) }'
+execp_interval = 1
+execp_continuous = 1
+
+
Network load
# Note the use of "stdbuf -oL" to force the program to flush the output line by line.
+execp = new
+execp_command = stdbuf -oL bwm-ng -o csv -t 1000 | awk -F ';' '/total/ { printf "Net: %.0f Mb/s\n", ($5*8/1.0e6) }; fflush(stdout)'
+execp_continuous = 1
+execp_interval = 1
+
+

Example configuration

#---------------------------------------------
+## TINT2 CONFIG FILE
+#---------------------------------------------
+
+#---------------------------------------------
+## BACKGROUND AND BORDER
+#---------------------------------------------
+rounded = 7
+border_width = 2
+background_color = #000000 60
+border_color = #ffffff 18
+
+rounded = 5
+border_width = 0
+background_color = #ffffff 40
+border_color = #ffffff 50
+
+rounded = 5
+border_width = 0
+background_color = #ffffff 18
+border_color = #ffffff 70
+
+#---------------------------------------------
+## PANEL
+#---------------------------------------------
+panel_monitor = all
+panel_position = bottom center
+panel_size = 94% 30
+panel_margin = 0 0
+panel_padding = 7 0
+font_shadow = 0
+panel_background_id = 1
+wm_menu = 0
+panel_dock = 0
+panel_layer = bottom
+
+#---------------------------------------------
+## TASKBAR
+#---------------------------------------------
+#taskbar_mode = multi_desktop
+taskbar_mode = single_desktop
+taskbar_padding = 2 3 2
+taskbar_background_id = 0
+#taskbar_active_background_id = 0
+
+#---------------------------------------------
+## TASKS
+#---------------------------------------------
+task_icon = 1
+task_text = 1
+task_maximum_size = 140 35
+task_centered = 1
+task_padding = 6 3
+task_font = sans 7
+task_font_color = #ffffff 70
+task_background_id = 3
+task_icon_asb = 100 0 0
+## replace STATUS by 'urgent', 'active' or 'iconfied'
+#task_STATUS_background_id = 2
+#task_STATUS_font_color = #ffffff 85
+#task_STATUS_icon_asb = 100 0 0
+## example:
+task_active_background_id = 2
+task_active_font_color = #ffffff 85
+task_active_icon_asb = 100 0 0
+urgent_nb_of_blink = 8
+
+#---------------------------------------------
+## SYSTRAYBAR
+#---------------------------------------------
+systray = 1
+systray_padding = 0 4 5
+systray_background_id = 0
+systray_sort = left2right
+systray_icon_size = 0
+systray_icon_asb = 100 0 0
+
+#---------------------------------------------
+## CLOCK
+#---------------------------------------------
+time1_format = %H:%M
+time1_font = sans 8
+time2_format = %A %d %B
+time2_font = sans 6
+clock_font_color = #ffffff 76
+clock_padding = 1 0
+clock_background_id = 0
+#clock_lclick_command = xclock
+clock_rclick_command = orage
+#clock_tooltip = %A %d %B
+#time1_timezone = :US/Hawaii
+#time2_timezone = :Europe/Berlin
+#clock_tooltip_timezone = :/usr/share/zoneinfo/Europe/Paris
+
+#---------------------------------------------
+## BATTERY
+#---------------------------------------------
+battery = 0
+battery_hide = 98
+battery_low_status = 10
+battery_low_cmd = notify-send "battery low"
+bat1_font = sans 8
+bat2_font = sans 6
+battery_font_color = #ffffff 76
+battery_padding = 1 0
+battery_background_id = 0
+
+#---------------------------------------------
+## TOOLTIP
+#---------------------------------------------
+tooltip = 0
+tooltip_padding = 2 2
+tooltip_show_timeout = 0.7
+tooltip_hide_timeout = 0.3
+tooltip_background_id = 1
+tooltip_font_color = #OOOOOO 80
+tooltip_font = sans 10
+
+#---------------------------------------------
+## MOUSE ACTION ON TASK
+#---------------------------------------------
+mouse_middle = none
+mouse_right = close
+mouse_scroll_up = toggle
+mouse_scroll_down = iconify
+
+#---------------------------------------------
+## AUTOHIDE OPTIONS
+#---------------------------------------------
+autohide = 0
+autohide_show_timeout = 0.3
+autohide_hide_timeout = 2
+autohide_height = 4
+strut_policy = minimum
+
+

AUTHOR

tint2 was written by Thierry Lorthiois lorthiois@bbsoft.fr. +It is based on ttm, originally written by Pål Staurland staura@gmail.com.

This manual page was written by Daniel Moerner dmoerner@gmail.com, for the Debian project (but may be used by others). +It was adopted from the tint2 docs.

SEE ALSO

The main website https://gitlab.com/o9000/tint2 +and the wiki page at https://gitlab.com/o9000/tint2/wikis/home.

diff --git a/doc/tint2.md b/doc/tint2.md index b43c7b1..2ca8bbe 100644 --- a/doc/tint2.md +++ b/doc/tint2.md @@ -56,7 +56,7 @@ Goals: * [Executor](#executor) - * [Example](#an-example-tint2rc) + * [Example configuration](#example-configuration) ### Introduction @@ -80,7 +80,7 @@ The tint2 config file starts with the options defining background elements with * `border_width = integer` : the border width in pixels - * `border_sides = LRTB` : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used. + * `border_sides = LRTB` : the sides to draw the border on (left, right, top, bottom). If not specified, all sides are used. *(since 0.12.12)* * `background_color = color opacity` * `color` is specified in hex RGB, e.g. #ff0000 is red @@ -90,19 +90,19 @@ The tint2 config file starts with the options defining background elements with * `color` is specified in hex RGB, e.g. #ff0000 is red * `opacity` varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque - * `background_color_hover = color opacity` (default: same as background_color) *(since 0.12.3)* + * `background_color_hover = color opacity` (default: same as `background_color`) *(since 0.12.3)* * `color` is specified in hex RGB, e.g. #ff0000 is red * `opacity` varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz) - * `border_color_hover = color opacity` (default: same as border_color) *(since 0.12.3)* + * `border_color_hover = color opacity` (default: same as `border_color`) *(since 0.12.3)* * `color` is specified in hex RGB, e.g. #ff0000 is red * `opacity` varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque - * `background_color_pressed = color opacity` (default: same as background_color_hover) *(since 0.12.3)* + * `background_color_pressed = color opacity` (default: same as `background_color_hover`) *(since 0.12.3)* * `color` is specified in hex RGB, e.g. #ff0000 is red * `opacity` varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque. Note that for a transparent panel you need to enable a desktop compositor (such as compton or compiz) - * `border_color_pressed = color opacity` (default: same as border_color_hover) *(since 0.12.3)* + * `border_color_pressed = color opacity` (default: same as `border_color_hover`) *(since 0.12.3)* * `color` is specified in hex RGB, e.g. #ff0000 is red * `opacity` varies from (0 to 100), where 0 is fully transparent, 100 is fully opaque @@ -153,7 +153,7 @@ Identifier 0 refers to a special background which is fully transparent, identifi * `primary_monitor_first = boolean (0 or 1)` : Place the primary monitor before all the other monitors in the list. *(since 0.12.4)* -![http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg](http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg) +![](images/panel_padding.jpg) * `panel_position = vertical_position horizontal_position orientation` * `vertical_position` is one of: `bottom`, `top`, `center` @@ -171,11 +171,11 @@ panel_size = 94% 30 * `panel_margin = horizontal_margin vertical_margin` : The margins define the distance between the panel and the horizontal/vertical monitor edge. Use `0` to obtain a panel with the same size as the edge of the monitor (no margin). -![http://farm4.static.flickr.com/3438/3266303192_476a188196.jpg](http://farm4.static.flickr.com/3438/3266303192_476a188196.jpg) +![](images/panel_size_margin.jpg) * `panel_padding = horizontal_padding vertical_padding spacing` : Please refer to the image below. -![http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg](http://farm4.static.flickr.com/3425/3265475271_81e8ed56e0.jpg) +![](images/panel_padding.jpg) * `font_shadow = boolean (0 or 1)` @@ -245,7 +245,7 @@ panel_size = 94% 30 * `taskbar_padding = horizontal_padding vertical_padding spacing` -![http://farm4.static.flickr.com/3521/3266303292_14d9b6b623.jpg](http://farm4.static.flickr.com/3521/3266303292_14d9b6b623.jpg) +![](images/taskbar_padding.jpg) * `taskbar_background_id = integer` : Which background to use @@ -300,7 +300,7 @@ The following options configure the task buttons in the taskbar: * `urgent_nb_of_blink = integer` : Number of blinks on 'get attention' events. -![http://farm4.static.flickr.com/3086/3265475337_262799ded3.jpg](http://farm4.static.flickr.com/3086/3265475337_262799ded3.jpg) +![](images/task_padding.jpg) * `task_font = [FAMILY-LIST] [STYLE-OPTIONS] [SIZE]` @@ -399,9 +399,9 @@ The action semantics: * `tooltip_padding = horizontal_padding vertical_padding` - * `tooltip_show_timeout = float` : Delay to show the tooltip in seconds. Use '.' as decimal separator. + * `tooltip_show_timeout = float` : Delay to show the tooltip in seconds. Use `.` as decimal separator. - * `tooltip_hide_timeout = float` : Delay to hide the tooltip in seconds. Use '.' as decimal separator. + * `tooltip_hide_timeout = float` : Delay to hide the tooltip in seconds. Use `.` as decimal separator. * `tooltip_background_id = integer` : Which background to use for tooltips. Note that with fake transparency the alpha channel and corner radius options are not respected. @@ -455,9 +455,9 @@ The action semantics: * `execp_has_icon = boolean (0 or 1)` : If `execp_has_icon = 1`, the first line printed by the command is interpreted as a path to an image file. *(since 0.12.4)* - * `execp_cache_icon = boolean (0 or 1)` : If execp_cache_icon = 0, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by `execp_command`). *(since 0.12.4)* + * `execp_cache_icon = boolean (0 or 1)` : If `execp_cache_icon = 0`, the image is reloaded each time the command is executed (useful if the image file is changed on disk by the program executed by `execp_command`). *(since 0.12.4)* - * `execp_icon_w = integer` : You can use execp_icon_w and execp_icon_h to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. *(since 0.12.4)* + * `execp_icon_w = integer` : You can use `execp_icon_w` and `execp_icon_h` to resize the image. If one of them is zero/missing, the image is rescaled proportionally. If both of them are zero/missing, the image is not rescaled. *(since 0.12.4)* * `execp_icon_h = integer` : See `execp_icon_w`. *(since 0.12.4)* @@ -564,7 +564,8 @@ execp_continuous = 1 execp_interval = 1 ``` -# EXAMPLE CONFIG +### Example configuration + ``` #--------------------------------------------- ## TINT2 CONFIG FILE @@ -706,7 +707,7 @@ strut_policy = minimum tint2 was written by Thierry Lorthiois . It is based on ttm, originally written by Pål Staurland . -This manual page was written by Daniel Moerner , for the Debian project (but may be used by others). +This manual page was originally written by Daniel Moerner , for the Debian project (but may be used by others). It was adopted from the tint2 docs. ## SEE ALSO