Fluor icon indicating copy to clipboard operation
Fluor copied to clipboard

Fluor stopped working with Karabiner Elements 13.7 on Big Sur

Open therealmarv opened this issue 3 years ago • 15 comments

Fluor does not work with Karabiner Elements 13.7 on Big Sur anymore (it worked for years on Catalina and Karabiner Elements 13.5 and below). It works perfectly fine if Karabiner Elements is turned off though.

I suppose it's more a Karabiner Elements than a Fluor issue. I've reported it also there: https://github.com/pqrs-org/Karabiner-Elements/issues/2858

therealmarv avatar Oct 21 '21 08:10 therealmarv

I am still using Fluor 2.1.0 build 1670 and it works OK. I once updated it but found out the new version does not work with Karabiner... So I rolled it back to the older version.

cyugao avatar Nov 17 '21 21:11 cyugao

I am still using Fluor 2.1.0 build 1670 and it works OK. I once updated it but found out the new version does not work with Karabiner... So I rolled it back to the older version.

Thanks! I can confirm that. I have an unusual requirement: to switch to function-key (fn) mode in Fluor when a particular app (BeebEm 4) is active on macOS Mojave on an old 2014 MacBook Pro. But I also want Karabiner-Elements to remap the Right Option key to Enter (because I got used to the muscle-memory ages ago on an old MacBook). Reverting to Fluor 2.1.0 was the only way to achieve what I wanted because the latest release of Fluor (v2.5.0) doesn't seem to work with Karabiner-Elements.

lurkio avatar Nov 19 '21 22:11 lurkio

FWIW, I found a link for Fluor 2.1.0: https://web.archive.org/web/20210201220229/https://fluorapp.net/

yous avatar Nov 27 '21 10:11 yous

Hi guys I had same problem, and I found one [Karabiner-Elements complex_modifications rules] and no need anymore for flour : https://ke-complex-modifications.pqrs.org/#function_keys You can change setting for any app you want, it works for me

arozmarin avatar Jun 29 '22 23:06 arozmarin

Hi guys I had same problem, and I found one [Karabiner-Elements complex_modifications rules] and no need anymore for flour : https://ke-complex-modifications.pqrs.org/#function_keys You can change setting for any app you want, it works for me

Unfortunately that is not ideal as it prevents you from using the Fn key to temporarily control media in the apps you've chosen.

Keagel avatar Sep 01 '22 12:09 Keagel

Unfortunately that is not ideal as it prevents you from using the Fn key to temporarily control media in the apps you've chosen. That is correct. Did you find a way around it @Keagel ?

Jendker avatar Sep 04 '22 14:09 Jendker

Unfortunately that is not ideal as it prevents you from using the Fn key to temporarily control media in the apps you've chosen. That is correct. Did you find a way around it @Keagel ?

I haven't. I figured it might be possible with Karabiner Elements using complex rules to tell it to override the behavior of the media keys when pressed with Fn but I haven't been able to get it to work.

Keagel avatar Sep 06 '22 12:09 Keagel

Thanks for the answer. I've tried that in the end, config got extremely long, but it works fine.

Jendker avatar Sep 06 '22 15:09 Jendker

Do you mind sharing your config?

Keagel avatar Sep 06 '22 17:09 Keagel

No problem! This is the pattern I'm using:

"from" : {
  "key_code" : "f1",
  "modifiers" : {
    "mandatory" : [ "fn" ]
  }
},
"to" : [ {
  "consumer_key_code" : "display_brightness_decrement"
} ],
"conditions" : [ {
  "type" : "frontmost_application_if",
  "bundle_identifiers" : [ "^bundle_identifiers$" ]
} ],
"type" : "basic"
}, {
"from" : {
  "key_code" : "f1"
},
"to" : [ {
  "key_code" : "f1"
} ],
"conditions" : [ {
  "type" : "frontmost_application_if",
  "bundle_identifiers" : [ "^bundle_identifiers$" ]
} ],
"type" : "basic"
}

This repo vastly simplifies writing of Karabiner configs, you could consider using it: https://github.com/yqrashawn/GokuRakuJoudo

Jendker avatar Sep 06 '22 19:09 Jendker

That's pretty much the configuration I had written too, for me it doesn't work though.

Edit: never mind, it works just fine. Thank you!

Keagel avatar Sep 07 '22 09:09 Keagel

An update for those that would like to also disable media keys with modifiers (ctrl, shift, command, option):

{
    "conditions": [
        {
            "bundle_identifiers": [
                ...
            ],
            "type": "frontmost_application_if"
        }
    ],
    "from": {
        "key_code": "f12",
        "modifiers": {
            "mandatory": [
                "fn"
            ]
        }
    },
    "to": [
        {
            "consumer_key_code": "volume_increment"
        }
    ],
    "type": "basic"
},
{
    "conditions": [
        {
            "bundle_identifiers": [
                ...
            ],
            "type": "frontmost_application_if"
        }
    ],
    "from": {
        "key_code": "f12",
        "modifiers": {
            "optional": [
                "caps_lock",
                "command",
                "control",
                "shift",
                "option"
            ]
        }
    },
    "to": [
        {
            "key_code": "f12"
        }
    ],
    "type": "basic"
}

If the modifiers aren't specified in the second part of the configuration that maps the F12 key back to itself (instead of the media functionality), they get caught by the first section with the fn modifier because the mandatory configuration doesn't prevent other modifiers from being used. Without that modification, shortcuts like ⌘+F12 don't work properly as they still act as media keys.

Keagel avatar Dec 07 '22 18:12 Keagel

Copy-paste solution for people finding this in the future.

First you'll need to know how to create your own complex rule - video tutorial. Once you're set up with a new json file in the right folder, launch Karabiner-EventViewer, select 'Frontmost Application', open the application you want this to work with, then replace my com.ableton.live entries with whatever it says the bundle identifier is for the application you just opened.

The fn keys act as function keys in the selected application, but change to brightness, volume etc when fn is held. This isn't the case for f3-f6 because I don't use the mission control, spotlight etc buttons, but if you want them to work you'll be able to figure it out from the code. This is Jendker's solution as above but written out in full. Hope this helps someone!

{
  "title": "Github solution - Function keys work as fn keys (instead of media keys)",
  "maintainers": [
    "harmtemolder"
  ],
  "rules": [
    {
      "description": "Function keys work as fn keys",
      "manipulators": [
        {
          "type": "basic",
          "from" : {
            "key_code" : "f1",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "display_brightness_decrement"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f1"
          },
          "to" : [ {
            "key_code" : "f1"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f2",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "display_brightness_increment"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f2"
          },
          "to" : [ {
            "key_code" : "f2"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f3"
          },
          "to" : [ {
            "key_code" : "f3"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f4"
          },
          "to" : [ {
            "key_code" : "f4"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f5"
          },
          "to" : [ {
            "key_code" : "f5"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f6"
          },
          "to" : [ {
            "key_code" : "f6"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f7",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "rewind"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f7"
          },
          "to" : [ {
            "key_code" : "f7"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f8",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "play_or_pause"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f8"
          },
          "to" : [ {
            "key_code" : "f8"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f9",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "fastforward"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f9"
          },
          "to" : [ {
            "key_code" : "f9"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f10",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "mute"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f10"
          },
          "to" : [ {
            "key_code" : "f10"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f11",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "volume_decrement"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f11"
          },
          "to" : [ {
            "key_code" : "f11"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type": "basic",
          "from" : {
            "key_code" : "f12",
            "modifiers" : {
              "mandatory" : [ "fn" ]
            }
          },
          "to" : [ {
            "consumer_key_code" : "volume_increment"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        },
        {
          "type" : "basic",
          "from" : {
            "key_code" : "f12"
          },
          "to" : [ {
            "key_code" : "f12"
          } ],
          "conditions" : [ {
            "type" : "frontmost_application_if",
            "bundle_identifiers" : [ "com.ableton.live" ]
          } ]
        }
      ]
    }
  ]
}

joexcm avatar Sep 09 '23 16:09 joexcm

I'll just add my 0.02$ to the post above. It's important to add:

            "modifiers" : {
              "optional" : [ "any" ]
            }

to each basic modification to make sure that any modifier keeps working as expected with F keys.

Jendker avatar Sep 11 '23 05:09 Jendker

Reading this issue, and seeing how Fluor seems unmaintained, I tried Karabiner Elements.

But it's too complicated for doing just this, which in my case was defaulting to F1, F2,... on Parallels Desktop.

I'm a programmer. I don't shy away from scripts and configs, etc. But the experience is too complicated compared to what Fluor gives for this job.

I think I'll continue to use Fluor until it breaks (works well on Sonoma 14.3), then look at the best script to start with and customise.

Huge thanks to @Pyroh for creating this.

Meligy avatar Feb 05 '24 23:02 Meligy