GoldenChaos-BTT Support and Feedback Thread

I found a sneaky new setting in the beta BTT UI that allowed me to make an icon-only Now Playing widget. This means I was able to split out album art into its own spot and enlarge it :open_mouth: behold!


Coming in the next experimental version. Let me know if you like this or prefer the previous version!

(I fixed the iCloud Download icon too.)

2 Likes

Hi,

I love goldenchaos presets so much. I've been using it since day 1 and it's one of the reasons I bought bettertouch in the first place. I just updated recently and I lost the ability to make calendar and reminder appear on the Widgets in Home Strip.

I've enabled it via GC-BTT settings. I have installed icalBuddy. I don't know what else to do to make them appear.

Can you help me?

Thank you in advance

I've been having an issue with BTT and battery drain on a new MBP 2018. If I close my MBP without quitting BTT, my battery drains even though it should be asleep. It will go from 100% to dead overnight. I've only been having the issue when running BTT and have tested multiple times. I've reset SMC and have checked usage and scripts, but I don't see anything that may be preventing the computer from sleeping or anything that should be causing this. Anyone have a similar issue or any insight?

@GoldenChaos really great work.

if possible one thing I'm missing while using this is the autocomplete future in safari when you see prefilled some fields (from names, phone numbers to credit card details selection etc). for that reason only I see myself disabling/enabling the app a lot and it's a bit frustrating. is it possible that while in safari to keep that fields on?

other thing, not so critical is that in some websites playing (live) video there is an icon on the Touch Bar to enable PiP video. for YouTube it's easy to just click two times with the right click and select PiP, but other websites don't have this options. is it possible to have that button somewhere (ideally dynamic whenever a video is playing)?

really appreciate all the work here

Sorry for the delayed responses, guys!

@era3z did you completely remove the previous version of GC-BTT before upgrading? What version did you upgrade to?

@gravvy admittedly, I have not left my MacBook unplugged overnight to test this, but it sounds like it would be a BTT issue and not a GC-BTT issue, possibly related to how BTT tries to restart itself after sleep? Just a hunch. @Andreas_Hegenberg what do you think?

@cezar.cretzu I totally agree about autocomplete, and I've been looking for a way to do this for a long time. Unfortunately, GC-BTT and the native Touch Bar are completely separate, so you can only get one or the other at any given time. There are a few "solutions" you can try for now while I work on something better:

  • Use the built-in shortcut for toggling between the native Touch Bar and GC-BTT, cmd+opt+shift+0, for instances when you need the native Touch Bar UI - that way you don't have to quit BTT
  • Set up a conditional activation group for Safari and set it to show the native Touch Bar only when Safari is the active app. Conditional activation groups can be found on the left side of the BTT preferences window (the two default ones are Global and Finder!)
  • if you use 1Password, the latest experimental version includes a 1Password button that engages 1Password's autofill

As for a dynamic PiP button, that's definitely coming soon :slight_smile:

When I install a new version of GoldenChaos I first remove the old one as per the instructions. Then I import it from the link in the forum.

The preferences for most of my settings (not showing reminders, Siri, etc) are preserved in the settings menu, but are not actually reflected in the touchbar itself. I have to toggle them twice (from disabled to enabled and then back to disabled) to get the right behaviour.

This is a known issue, and actually the sole thing preventing me from releasing the current experimental version as stable. I think I'm just going to ping @Andreas_Hegenberg and ask why my initialization trigger isn't working...

what does the initialization trigger do?

1 Like

Tries to initialize all unset settings to their default values when the settings window loads for the first time so that the switches don't return null. However, the initialization trigger I wrote doesn't seem to actually work.

Here's where it's located in the latest experimental version:

And here's my script portion at the top of the settings window. The initialization function is called at the bottom in the window.addEventListener block.

Basically, it doesn't seem to do anything, making me question if it's actually running or if my script just isn't working properly. But I don't have a good way to test since, well, all my variables are already set.

<script>
    var variables = {};
    
    function getAllVariablesAndUpdateClasses() {
        console.log('looping through switches');
        const buttons = document.querySelectorAll('label');
        buttons.forEach(function(button, i) {
            const variable = button.id;
            window.BTT.callHandler(
                'get_string_variable',
                { variableName: variable},
                function callback(currentVariableValue) {
                    console.log(
                        'the variable',
                        variable,
                        'is set to: ',
                        currentVariableValue
                    );
                    variables[button.id] = currentVariableValue;
                    button.className = currentVariableValue;
                }
            );
        });
    }
    
    function trigger_named_async_without_response(actionName) {
        window.BTT.callHandler('trigger_named_async_without_response', {trigger_name: actionName},
            function callback(scriptResult) {   
                console.log('action result', scriptResult);
            }
        );
    }
    
    function triggerNamedActionAndRefreshSettingsWindow(actionName) {
        trigger_named_async_without_response(actionName);
        event.preventDefault();
        event.stopPropagation();
        setTimeout(function () {
            getAllVariablesAndUpdateClasses();
        }, 50);
    }
    
    function triggerPresetAndRefreshSettingsWindow(actionName) {
        trigger_named_async_without_response(actionName);
        event.preventDefault();
        event.stopPropagation();
        setTimeout(function () {
            getAllVariablesAndUpdateClasses();
        }, 2000);
    }
    
    function toggleVariable(variable, actionName, event) {
        var button = document.getElementById(variable);
        if(variables[variable] === 'true') {
            button.className = 'false';
            variables[variable] = 'false';
            window.BTT.callHandler('set_string_variable', {variableName: variable, to: 'false'});
            window.BTT.callHandler(
                'get_string_variable',
                { variableName: variable},
                function callback(currentVariableValue) {
                    console.log(
                        'the variable',
                        variable,
                        'is set to: ',
                        currentVariableValue
                    );
                }
            );
        } else {
            button.className = 'true';
            variables[variable] = 'true';
            window.BTT.callHandler('set_string_variable', {variableName: variable, to: 'true'});
            window.BTT.callHandler(
                'get_string_variable',
                { variableName: variable},
                function callback(currentVariableValue) {
                    console.log(
                        'the variable',
                        variable,
                        'is set to: ',
                        currentVariableValue
                    );
                }
            );
        }
        trigger_named_async_without_response(actionName);
        event.preventDefault();
        event.stopPropagation();
    }
    
    function setVariable(variable, setting, actionName, event) {
        window.BTT.callHandler('set_string_variable', {variableName: variable, to: setting});
        trigger_named_async_without_response(actionName);
        event.preventDefault();
        event.stopPropagation();
    }
    
    window.addEventListener(
        'bttReady',
        function(BTT) {
            trigger_named_async_without_response('Initialize Settings');
            getAllVariablesAndUpdateClasses();
        },
        false
    );
</script>

Hey @GoldenChaos! I just wanted to take a moment to say thank you for all of the amazing work you have done to make the touchbar a genuinely great bit of technology. The standard touchbar is mostly useless, but this has made it infinitely better, and for that I am extremely grateful!

1 Like

Hey @GoldenChaos!

This is an incredible preset for BTT. Looking through it, I've noticed that some of the icons do not change to their "TRUE" state and change to the alternate icons. For example, if Do Not Disturb is enabled, the icon does not change to the purple "moon with ZZZ" icon state at all.

Impacted icons that I have noticed are DND, Night Shift, and True Tone. Volume Icons and Dark Mode work correctly!

Below screenshot is the script returning "FALSE" when the DND mode was enabled.

This preset is amazing. The only thing I'm missing (though I don't know if it's possible) is to have the default app touchbar when it is available in the app.

For example, I use PhpStorm and it supports touchbar and you can customize it a lot but since this preset is active, I can't use PhpStorm touchbar when I'm in the app.

Is there any global setting or something to show this GoldenChaos preset only if no default app touchbar is available?

Hi, I had this issue as well when first trying out presets! I'm pleased to be able to tell you, it's super simple to achieve this! So, in BTT's main window, just click the + button on the left at the bottom of the list of apps. Then either select PhpStorm from the file system or from running apps. Now, you have the ability to customise BTT's behaviour for that app. Ctrl+click (or right click) the PhpStorm entry in the list, and at the bottom you'll see Touch Bar Behaviour. I'm sure you already know where this is going haha, but it sounds like you want Show App Default Touch Bar enabled for PhpStorm (and indeed any other app you work with where the devs actually spent more than 2 minutes thinking about how best to use the Touch Bar!) Hope this helps!

1 Like

Is there a way to not making it change to blue? It's throwing off my red theme..

@GoldenChaos great work. Two thoughts for you:

  1. Like the microphone auto-display/auto-hide - I added two apps:
    if application "GoToMeeting" is running then return inputVolume
    if application "Slack" is running then return inputVolume

  2. The icon for the settings for GC-BTT settings doesn't show on the TouchBar for me. the button works but doesn't display the icon.

Hi there! Thanks a lot for so wonderful and functional preset.
I have a question.

What it the best way to customize it for myself with possibilities to update GoldenChaos-BTT and to add some icons from other sets? Do I need just to toggle visibility? Or it is better to remove actions by deleting to make BTT faster without unused code?

Are there any manual on this?

Playing some catchup! Sorry for the brief absence, I'm back now :slight_smile:

@simplypro @ChrisLaw did a great job answering your question, but if you're still confused let me know and I'll make a little guide with screenshots!

@bhw the blue icons are all in base64 text inside the volume up button's script. You could convent them back to images, change their color to red in your preferred image editor, then _re_convert them back to base64 and replace them in the volume up button. IMO it's not worth the effort, but if you are very determined to have something all-red then it is technically possible! The code (with base64 images inside) is here:

@adam2780 I'll add GoToMeeting in the next experimental version! As for Slack, it was that way in previous versions, but I felt that since the call feature of Slack is less used there wasn't a reliable way for me to know if a user actually needed the mic mute button in Slack. I wonder if there's a way for me to detect that Slack is on a call? Or, even better, that the microphone is in use...

@Cooluck the best way is first to use the built-in GC-BTT settings menu (cmd+opt+shift+p). Every setting set through that menu will persist between upgrades. There is no need to deleted "unused" widgets or widgets that you've turned off, since they won't run in the background or anything (I've made sure of it).

If you want to do deeper customizations, such as adding whole bits of functionality or altering the UI, I recommend making your own separate preset and augmenting GC-BTT inside your separate preset. This way, when you upgrade GC-BTT you won't remove your custom widgets. (In the same vein, if you want to modify a GC-BTT widget, you can copy it into your own preset and uncheck visibility of the GC-BTT one. But note that your copy won't obey any settings set through the settings menu.)

I'm slowly building up an FAQ but I will also make sure to eventually include some deep customization tips/instructions. No date on that, but it'll arrive sooner or later!

Finally! A question for @Andreas_Hegenberg - did you get the chance to look into my initialization question? I really, really want to solve that ASAP and get a stable version out.

Greetings @GoldenChaos and @yuuiko. Excited to have some multi-monitor support for the window management.

Is it possible that the multiple monitor management can know which monitor you are on? I have 3 monitors, if I'm on my 3rd monitor, farthest to the right, the popup shows it as the middle monitor, and if I want to push something to the 1st monitor, farthest to the left, I actually have to use the one on the left in the interface.

I'm sure the current method accounts for the most dynamic configurations, but it feels a bit unintuitive. Is it possible for it to borrow the display arrangement from the Mac settings? I made a quick image as maybe that makes more sense:

1 Like

@GoldenChaos Thanks for a detailed answer, I used built-in Settings menu of course, but need more customizations. For example, I don't need time at all but need lock button on the right, prefer when click on playing song works as play/pause and leave only next song, without previous. Also, I want to add Mission Control on the main bar.

But when I created my preset with lock button and without key modifiers it is situated not on the right side, but before GC-BTT right panel https://photos.app.goo.gl/VWncAT6PdYGvbpHy7

As I understand, I need to make a complete copy of GC-BTT to my preset to move the button. Am I right?

Hi @peripatew,

Unfortunatley I don't know of a way to 'dynamically' detect the current monitor the cursor is on, so I can't do this at the moment. I have only found a way to detect how many monitors there are, and thats it.

We had a chat about this with @Andreas_Hegenberg over at the window snapping preset thread, with the context of someone having a vertical setup, and this is what he said: