We're working on a feature for customizable hotkeys.
Try it out at this URL (using your Test Server credentials) and provide feedback below in the comments:
https://customizable-hotkeys.feature.zztakeoff.com/app

Great to be able to personalise our zzTakeoff
Also I Tried a Hotey Key CTRL + H for Hide All which was accepted however this is a browser Hot Key combination.
As so many Hot key are already in use is the a way to have 2 letter combinations such H + A as Hide All
👍1I love the idea and am excited for it to come to the main application. A couple questions:
Thanks for the feedback guys.
@Victor These are profile specific. Each user configures their own. We could maybe make a way for users to easily share their settings with others if a company wanted similar hotkeys throughout for easier training, etc. We'll also dig into the merge area / merge linear hotkeys.
👍1@Victor We just deployed an update combining the hotkeys for Merge Areas and Merge Linears. I hope this is more useful. It will just auto apply the relevant command depending on whatever is selected.
👍1@Heber In case it would be useful to you, here is the bookmarklet I was using in Chrome (built by Claude) which added hot keys to Hide/Show takeoffs, Hide/Show Overlays (and in cases where there were multiple overlays you could have it cycle through which ones you wanted it to hide), and the newly added 'Isolate' function to hide all takeoffs except for the currently selected takeoff.
javascript:!function(){window.__zzHide&&document.removeEventListener("keydown",window.__zzHide,!0);var e="zzHotkeys:ov:";function t(e,t){try{"function"==typeof window[e]&&window[e](t)}catch(e){}}function n(){return takeoffPage.pageId}function r(e){var t=e.properties||{};return t.name&&(t.name.value||t.name.formatted)||e.name||e.fileName||"Overlay "+String(e._id).slice(-4)}function i(t){var r=null;try{r=localStorage.getItem(e+n())}catch(e){}var i=t.filter(function(e){return e._id==r})[0];if(i)return i;var o=t.filter(function(e){return!e.hidden});return o.length?o[0]:t[0]}function o(t){try{localStorage.setItem(e+n(),t._id)}catch(e){}}function a(e,t){mutations.setDrawObjectVisible({drawObjectId:e,visible:t})}var f=function(e){if(!e.ctrlKey&&!e.metaKey&&!function(e){if(!e)return!1;var t=(e.tagName||"").toUpperCase();return"INPUT"==t||"TEXTAREA"==t||"SELECT"==t||e.isContentEditable}(e.target)&&"undefined"!=typeof takeoffPage&&takeoffPage){var f=(e.key||"").toLowerCase();if(!(e.altKey&&"q"!=(f="KeyQ"==e.code?"q":f)||"h"!=f&&"q"!=f&&"i"!=f)){e.preventDefault(),e.stopPropagation();try{if("i"==f){var P=takeoffPage.pageId,K="zzHotkeys:iso:"+P,W=window.__zzIso||(window.__zzIso={});if(W[K]&&W[K].length){var B=W[K];W[K]=null;a(B,!0);return void t("notifySuccess","Showing everything again ("+B.length+")")}var S=takeoffPage.getSelectedDrawObjectIds()||[];if(!S.length)return void t("notifySuccess","Select a takeoff object first, then press I");var R=drawObjectsSub.getRecords()||[],TK={};R.forEach(function(x){S.indexOf(x._id)>=0&&x.takeoffId&&(TK[x.takeoffId]=1)});var O=R.filter(function(x){return x.pageId==P&&x.takeoffId&&!x.hidden&&"overlay"!=x.type&&!TK[x.takeoffId]}).map(function(x){return x._id});if(!O.length)return void t("notifySuccess","Nothing else to hide on this page");W[K]=O;a(O,!1);return void t("notifySuccess","Isolated: hid "+O.length+" other object(s) - press I again to bring them back")}if("q"==f){var d=(h=n(),(drawObjectsSub.getRecords()||[]).filter(function(e){return"overlay"==e.type&&e.pageId==h}).sort(function(e,t){return String(r(e)).localeCompare(String(r(t)))||(e._id<t._id?-1:1)}));if(!d.length)return void t("notifySuccess","No overlay on this page");if(e.altKey){var c=d.some(function(e){return!e.hidden});return a(d.map(function(e){return e._id}),!c),void t("notifySuccess",(c?"All overlays off (":"All overlays on (")+d.length+")")}if(e.shiftKey){if(d.length<2)return void t("notifySuccess","Only one overlay on this page");var l=i(d),s=d[(d.indexOf(l)+1)%25d.length];return o(s),void(l.hidden?t("notifySuccess","Q now toggles "+r(s)):(a([l._id],!1),a([s._id],!0),t("notifySuccess","Showing "+r(s))))}var u=i(d);o(u);var y=!!u.hidden;return a([u._id],y),void t("notifySuccess",d.length>1?(y?"On: ":"Off: ")+r(u)+" ("+(d.indexOf(u)+1)+"/"+d.length+")":y?"Overlay on":"Overlay off")}if(e.shiftKey){var v=(drawObjectsSub.getRecords()||[]).filter(function(e){return e.hidden&&e.pageId==takeoffPage.pageId&&"overlay"!=e.type});if(!v.length)return void t("notifySuccess","Nothing hidden on this page");a(v.map(function(e){return e._id}),!0),t("notifySuccess","Restored "+v.length+" object(s)")}else{var g=takeoffPage.getSelectedDrawObjectIds();g&&g.length&&takeoffPage.hideSelectedDrawObjects()}}catch(e){t("notifyError","Hotkey: "+e.message)}var h}}};window.__zzHide=f,document.addEventListener("keydown",f,!0),t("notifySuccess","Hotkeys armed - H hide, Shift+H restore, I isolate selected takeoff, Q overlay, Shift+Q next overlay, Alt+Q all overlays")}();
🚀2