@binding-set gtk-mac-alt-arrows
{
  bind "<alt>Right"           { "move-cursor" (words, 1, 0) };
  bind "<alt>KP_Right"        { "move-cursor" (words, 1, 0) };
  bind "<alt>Left"            { "move-cursor" (words, -1, 0) };
  bind "<alt>KP_Left"         { "move-cursor" (words, -1, 0) };
  bind "<shift><alt>Right"    { "move-cursor" (words, 1, 1) };
  bind "<shift><alt>KP_Right" { "move-cursor" (words, 1, 1) };
  bind "<shift><alt>Left"     { "move-cursor" (words, -1, 1) };
  bind "<shift><alt>KP_Left"  { "move-cursor" (words, -1, 1) };
}

@binding-set gtk-mac-alt-delete
{
  bind "<alt>Delete" { "delete-from-cursor" (word-ends, 1) };
  bind "<alt>KP_Delete" { "delete-from-cursor" (word-ends, 1) };
  bind "<alt>BackSpace" { "delete-from-cursor" (word-ends, -1) };
}

@binding-set gtk-mac-cmd-c
{
  bind "<meta>x" { "cut-clipboard" () };
  bind "<meta>c" { "copy-clipboard" () };
  bind "<meta>v" { "paste-clipboard" () };
  unbind "<ctrl>x";
  unbind "<ctrl>c";
  unbind "<ctrl>v";
}

@binding-set gtk-mac-text-view
{
  bind "<shift><meta>a" { "select-all" (0) };
  bind "<meta>a" { "select-all" (1) };
  unbind "<shift><ctrl>a";
  unbind "<ctrl>a";
}

@binding-set gtk-mac-label
{
  bind "<meta>a" {
    "move-cursor" (paragraph-ends, -1, 0)
    "move-cursor" (paragraph-ends, 1, 1)
  };
  bind "<shift><meta>a" { "move-cursor" (paragraph-ends, 0, 0) };
  bind "<meta>c" { "copy-clipboard" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
  unbind "<ctrl>c";
}

@binding-set gtk-mac-entry
{
  bind "<meta>a" {
    "move-cursor" (buffer-ends, -1, 0)
    "move-cursor" (buffer-ends, 1, 1)
  };
  bind "<shift><meta>a" { "move-cursor" (visual-positions, 0, 0) };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
}

@binding-set gtk-mac-file-chooser
{
  bind "<meta>v" { "location-popup-on-paste" () };
  unbind "<ctrl>v";

  bind "<meta><shift>G" { "location-popup" () };
  bind "<meta><shift>H" { "home-folder" () };
  bind "<meta>Up" { "up-folder" () };
}

@binding-set gtk-mac-tree-view
{
  bind "<meta>a" { "select-all" () };
  bind "<shift><meta>a" { "unselect-all" () };
  bind "<meta>f" { "start-interactive-search" () };
  bind "<meta>F" { "start-interactive-search" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
  unbind "<ctrl>f";
  unbind "<ctrl>F";
}

@binding-set gtk-mac-icon-view
{
  bind "<meta>a" { "select-all" () };
  bind "<shift><meta>a" { "unselect-all" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
}

@binding-set gtk-mac-alt-arrows
{
  bind "<alt>Right"           { "move-cursor" (words, 1, 0) };
  bind "<alt>KP_Right"        { "move-cursor" (words, 1, 0) };
  bind "<alt>Left"            { "move-cursor" (words, -1, 0) };
  bind "<alt>KP_Left"         { "move-cursor" (words, -1, 0) };
  bind "<shift><alt>Right"    { "move-cursor" (words, 1, 1) };
  bind "<shift><alt>KP_Right" { "move-cursor" (words, 1, 1) };
  bind "<shift><alt>Left"     { "move-cursor" (words, -1, 1) };
  bind "<shift><alt>KP_Left"  { "move-cursor" (words, -1, 1) };
}

@binding-set gtk-mac-alt-delete
{
  bind "<alt>Delete" { "delete-from-cursor" (word-ends, 1) };
  bind "<alt>KP_Delete" { "delete-from-cursor" (word-ends, 1) };
  bind "<alt>BackSpace" { "delete-from-cursor" (word-ends, -1) };
}

@binding-set gtk-mac-cmd-c
{
  bind "<meta>x" { "cut-clipboard" () };
  bind "<meta>c" { "copy-clipboard" () };
  bind "<meta>v" { "paste-clipboard" () };
  unbind "<ctrl>x";
  unbind "<ctrl>c";
  unbind "<ctrl>v";
}

@binding-set gtk-mac-text-view
{
  bind "<shift><meta>a" { "select-all" (0) };
  bind "<meta>a" { "select-all" (1) };
  unbind "<shift><ctrl>a";
  unbind "<ctrl>a";
}

@binding-set gtk-mac-label
{
  bind "<meta>a" {
    "move-cursor" (paragraph-ends, -1, 0)
    "move-cursor" (paragraph-ends, 1, 1)
  };
  bind "<shift><meta>a" { "move-cursor" (paragraph-ends, 0, 0) };
  bind "<meta>c" { "copy-clipboard" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
  unbind "<ctrl>c";
}

@binding-set gtk-mac-entry
{
  bind "<meta>a" {
    "move-cursor" (buffer-ends, -1, 0)
    "move-cursor" (buffer-ends, 1, 1)
  };
  bind "<shift><meta>a" { "move-cursor" (visual-positions, 0, 0) };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
}

@binding-set gtk-mac-file-chooser
{
  bind "<meta>v" { "location-popup-on-paste" () };
  unbind "<ctrl>v";

  bind "<meta><shift>G" { "location-popup" () };
  bind "<meta><shift>H" { "home-folder" () };
  bind "<meta>Up" { "up-folder" () };
}

@binding-set gtk-mac-tree-view
{
  bind "<meta>a" { "select-all" () };
  bind "<shift><meta>a" { "unselect-all" () };
  bind "<meta>f" { "start-interactive-search" () };
  bind "<meta>F" { "start-interactive-search" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
  unbind "<ctrl>f";
  unbind "<ctrl>F";
}

@binding-set gtk-mac-icon-view
{
  bind "<meta>a" { "select-all" () };
  bind "<shift><meta>a" { "unselect-all" () };
  unbind "<ctrl>a";
  unbind "<shift><ctrl>a";
}

iconview {
  -gtk-key-bindings: gtk-mac-icon-view;
}

textview {
  -gtk-key-bindings: gtk-mac-alt-arrows, gtk-mac-alt-delete, gtk-mac-cmd-c, gtk-mac-text-view;
}

entry {
  -gtk-key-bindings: gtk-mac-alt-arrows, gtk-mac-alt-delete, gtk-mac-cmd-c, gtk-mac-entry;
}

label {
  -gtk-key-bindings: gtk-mac-alt-arrows, gtk-mac-label;
}

GtkFileChooserWidget {
  -gtk-key-bindings: gtk-mac-file-chooser;
}

treeview {
  -gtk-key-bindings: gtk-mac-tree-view;
}