Recently, I discovered the i3 key mode feature. Immediately, I configured two scenarios for better i3 control: management of music/video and (external) screens.

The configuration for either scenario is straight forward. Here is my config for the management of music and video:

set $mode_playerctl "playerctl: [p]lay/[p]ause [n]ext [b]ack"
bindsym $mod+m mode $mode_playerctl
mode $mode_playerctl {
    bindsym p exec playerctl play-pause; mode "default"
    bindsym n exec playerctl next; mode "default"
    bindsym b exec playerctl previous; mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"

As any i3 user realizes quickly, the number of shortcuts to configure with any keyboard comes with a finite number of possibilities. To tackle this problem, i3 implemented key modes. Key modes can be compared to submenus. Once a key combination is pressed, a submenu is created/opened. This creates a new context, allowing you to map keys freely and independently from any other mappings. In the example above $mod+m opens such a menu. It then allows me to press the keys p, n or b to play/pause, or jump to previous or next music/video accordingly. More information about playerctl can be found here:

Here is what the menu looks like, based on the above config:

The second menu allows me to control my external screens:

set $mode_xrandr "xrandr: [a]uto [h]ome (dock) [i]ntegrated, move workspace [u]p, [d]own, [l]eft, [r]ight"
bindsym $mod+p mode $mode_xrandr
mode $mode_xrandr {
    bindsym a exec xrandr --auto; mode "default"
    bindsym h exec /home/$USER/.screenlayout/; mode "default"
    bindsym i exec /home/$USER/.screenlayout/; mode "default"

        bindsym u move workspace to output up; mode "default"
        bindsym d move workspace to output down; mode "default"
        bindsym l move workspace to output left; mode "default"
        bindsym r move workspace to output right; mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"

The use of screenlayout configurations has been documented here (my-linux-desktop, chapter “External screens”)