Habilitar cambio de tabs remapeando teclado con ñ
En teclados que están en español o que tienen ñ no es posible usar CTRL + \ para intercambiar entre tabs de un registro en EspoCRM.
El siguiente custom script habilita las combinaciones:
- CTRL + ´: Salto entre tabs en vista detalle/edición de un registro.
- CTRL + ñ: Ir a campo de búsqueda en vista lista de registros.
Implementación
- Crear o modificar custom/Espo/Custom/Resources/metadata/app/client.json y agregar el llamado al script custom:
JSON
"scriptList": [
"__APPEND__",
"client/custom/src/keyboard-es-fix.js"
]
- Crear /var/www/html/autofocus/client/custom/src/keyboard-es-fix.js
JAVASCRIPT
/**
* keyboard-es-fix.js
*
* Fixes EspoCRM keyboard shortcuts for Spanish keyboard layouts.
*
* Root cause: EspoCRM's ShortcutManager uses e.code (physical key position on a
* US ANSI keyboard) instead of e.key (the actual character produced). On Spanish
* keyboards several characters occupy different physical keys, so the shortcuts
* Ctrl+/ and Ctrl+\ never fire as EspoCRM expects.
*
* Strategy: map ergonomic Ctrl+{digit/key} combos directly to the target shortcut
* using e.code, without requiring Shift. This keeps shortcuts to 2 keys.
*
* Por qué Ctrl+7 no funciona:
* Los browsers (Chrome, Firefox) interceptan Ctrl+1..8 para cambiar de
* pestaña del browser. El evento de teclado nunca llega al JavaScript.
*
* Remappings aplicados (teclado QWERTY español):
*
* Ctrl + Ñ → foco barra de búsqueda (Ñ tiene e.code='Semicolon')
* Ctrl + ' → cambiar tab en detalle (´ tiene e.code='Quote')
*
* Estas combinaciones no las usa ningún browser ni EspoCRM → seguras.
*
* Shortcuts que ya funcionan en teclado español (no necesitan fix):
* Ctrl + , → filtro anterior (EspoCRM usa Comma, no '<')
* Ctrl + . → filtro siguiente (EspoCRM usa Period, no '>')
* Ctrl + Enter, Space, S, flechas, Delete
*/
(function () {
'use strict';
if (typeof Espo === 'undefined' || typeof Espo.Utils === 'undefined') {
return;
}
/**
* Code-based remappings: Ctrl+{código físico} → shortcut EspoCRM.
*
* Usamos e.code (posición física) para evitar depender de qué carácter
* produce la tecla con o sin Shift. Estas combinaciones no las usa
* ningún browser ni el sistema operativo.
*
* Teclado QWERTY español:
* 'Semicolon' = tecla Ñ → reemplaza Ctrl+/ (foco búsqueda)
* 'Quote' = tecla ´ / ' → reemplaza Ctrl+\ (cambiar tab detalle)
*/
const CODE_REMAPS = {
'Semicolon': 'Slash', // Ctrl+Ñ → foco barra de búsqueda
'Quote': 'Backslash', // Ctrl+´ → cambiar tab en vista detalle
};
const originalFn = Espo.Utils.getKeyFromKeyEvent;
const isMac = (typeof IS_MAC !== 'undefined') ? IS_MAC : false;
Espo.Utils.getKeyFromKeyEvent = function (e) {
const isCtrl = isMac ? e.metaKey : e.ctrlKey;
if (isCtrl && !e.shiftKey && !e.altKey && CODE_REMAPS[e.code]) {
return 'Control+' + CODE_REMAPS[e.code];
}
return originalFn.call(this, e);
};
})();
- Limpiar caché y probar.