Forum bépo

Forum des utilisateurs du bépo

Vous n'êtes pas identifié(e).

#201 25/12/2014 21:14:54

rat bière sé
Le vilain admin
Inscription : 15/3/2012
Messages : 809

Re : [sujet technique] Adapter le bépo à l’ergodox

chincha a écrit :

Je ne peux malheureusement pas mettre le lien car j'ai du me réinscrire sur le forum suite à la vraisemblable suppression de mon compte..

Rebienvenu parmi nous chincha. Au nom de l'équipe d'administration je te présente mes plus sincères excuses pour ce désagrément. Il me semble ne pas avoir vu passer ton pseudo lors de mes suppressions manuelles des comptes dormants sans aucun message dont nous suspections qu'ils ne soient pas du spam, c'est donc avant cela que le mal a été fait, par un script automatique à la justice aveugle hmm
En tout cas, maintenant que tu as au moins posté un message ce genre de péripétie ne t'arrivera plus smile


GNU/Linux depuis 2/2012 : Ubuntu→ Xubuntu 4/12→ Debian (Xfce) 10/12 + Cubian 10/13
BOINC (World Community Grid) depuis 4/11 - BÉPO depuis 3/12 - Vapoteur depuis 10/13
Claviers Cherry G80-3000 (MXClear), TIPRO MID KM128A (MXBlack) Noppo MID 87 ANSI (MXRed)
Kensington Orbit trackball (à gauche), Wacom Intuos3 A4

Hors ligne

#202 26/12/2014 00:47:43

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

@chincha : bonjour. Je constate que tu t’es pas mal inspiré de ma disposition, content de voir que certaines de mes idées font des émules. Pour ma part, ma disposition actuelle est très proche de la tienne mais je suis bien tenté par ma version 38b (http://forum.bepo.fr/viewtopic.php?pid=10414#p10414) je ne sais pas si je vais sauter le pas. En fait, dans ta disposition ce que je n’aimais pas c’est un peu le peu d’accessibilité du alt et/ou ~L1. Du coup tu penses quoi de mon 38b ? J’avais hésité à mettre les F1, F2 comme toi, ça ne fait pas trop bizarre que les chiffres ne correspondent pas au numéro de F ? Pour le driver que tu as utilisé, tu as un tuto ? ou tu pourrais expliquer comment tu as procédé peut-être ? Je suis très très très fortement intéressé. (pour les liens si tu n’as pas le droit pour le moment tu peux toujours les mettre sans http, un modo pourra éventuellement arranger ça.


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#203 26/12/2014 09:50:44

chincha
Membres
Inscription : 25/12/2014
Messages : 4

Re : [sujet technique] Adapter le bépo à l’ergodox

rat bière sé a écrit :

Rebienvenu parmi nous chincha. Au nom de l'équipe d'administration je te présente mes plus sincères excuses pour ce désagrément. Il me semble ne pas avoir vu passer ton pseudo lors de mes suppressions manuelles des comptes dormants sans aucun message dont nous suspections qu'ils ne soient pas du spam, c'est donc avant cela que le mal a été fait, par un script automatique à la justice aveugle hmm
En tout cas, maintenant que tu as au moins posté un message ce genre de péripétie ne t'arrivera plus smile

Pas de soucis wink


c4software a écrit :

Les touches Fn+1 et Fn+2 change de qu'elle manière le layer? Persistant ou jusqu'au relâchement de la touche?

Oui, les touches +Fn1 et +Fn2 sont des push persistants, mais je vais modifier encore les 2 couches pour avoir une permanente (numpad et souris), et une temporaire+permanente (fonctions et raccourcis).

yeKcim a écrit :

En fait, dans ta disposition ce que je n’aimais pas c’est un peu le peu d’accessibilité du alt et/ou ~L1.

Je trouve le Alt très accessible pour ma part, et pour le ~L1, je verrai à l'usage.
L'espace sous le pouce gauche est indispensable (raccourci logiciels 2D et 3D), et il faut dans tous les cas au moins 2 autres touches de modification sous chaque pouce et la troisième en accès facile.

yeKcim a écrit :

J’avais hésité à mettre les F1, F2 comme toi, ça ne fait pas trop bizarre que les chiffres ne correspondent pas au numéro de F ?

Non et c'est plutôt l'inverse qui me semble incohérent.

yeKcim a écrit :

Pour le driver que tu as utilisé, tu as un tuto ? ou tu pourrais expliquer comment tu as procédé peut-être ? Je suis très très très fortement intéressé. (pour les liens si tu n’as pas le droit pour le moment tu peux toujours les mettre sans http, un modo pourra éventuellement arranger ça.

Tu peux trouver le driver à l'adresse suivante : https://github.com/cub-uanic/tmk_keyboard
Il faut modifier tes couches dans le fichier tmk_keyboard-cub_layout\keyboard\ergodox\keymap.c.
Pour cela, tu as des exemples et de la doc dans le dossier mk_keyboard-cub_layout\doc\ (voir keycode.txt, keymap.md et build.md).

Si tu es sous Windows :
Supprime le fichier  tmk_keyboard-cub_layout\keyboard\ergodox\Makefile.pjrc, c'est une variante de compilation, on utilise la seconde Makefile.lufa.
Télécharge un compilateur GCC, par exemple : http://sourceforge.net/project/showfile … p_id=68108
Ouvre une fenêtre de commande, déplace toi dans le dossier tmk_keyboard-cub_layout\keyboard\ergodox\ avec la commande "cd".
Tape "Make" et tu pourra récupérer ton fichier .hex dans le même répertoire.

Si tu es sous linux, je pense que ce n'est pas la peine de t'expliquer comment compiler...

Voilà ma keymap si ça peut t'aider :

/*
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "keycode.h"
#include "action.h"
#include "action_util.h"
#include "action_code.h"
#include "action_macro.h"
#include "action_layer.h"
#include "bootloader.h"
#include "report.h"
#include "host.h"
#include "print.h"
#include "debug.h"
#include "keymap.h"
#include "ergodox.h"


/* ErgoDox keymap definition macro */
#define KEYMAP(                                                 \
                                                                \
    /* left hand, spatial positions */                          \
    k00,k01,k02,k03,k04,k05,k06,                                \
    k10,k11,k12,k13,k14,k15,k16,                                \
    k20,k21,k22,k23,k24,k25,                                    \
    k30,k31,k32,k33,k34,k35,k36,                                \
    k40,k41,k42,k43,k44,                                        \
                            k55,k56,                            \
                                k54,                            \
                        k53,k52,k51,                            \
                                                                \
    /* right hand, spatial positions */                         \
        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
            k28,k29,k2A,k2B,k2C,k2D,                            \
        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
                k49,k4A,k4B,k4C,k4D,                            \
    k57,k58,                                                    \
    k59,                                                        \
    k5C,k5B,k5A )                                               \
                                                                \
   /* matrix positions */                                       \
   {                                                            \
    { KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO   },   \
    { KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51},   \
    { KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52},   \
    { KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53},   \
    { KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54},   \
    { KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO,   KC_##k55},   \
    { KC_##k06,KC_##k16,KC_NO,   KC_##k36,KC_NO,   KC_##k56},   \
                                                                \
    { KC_##k07,KC_##k17,KC_NO,   KC_##k37,KC_NO,   KC_##k57},   \
    { KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO,   KC_##k58},   \
    { KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59},   \
    { KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A},   \
    { KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B},   \
    { KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C},   \
    { KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO   }    \
   }


  #if defined(KEYMAP_DVORAK)
  #include "keymap_dvorak.h"
  #elif defined(KEYMAP_BEPO)
  #include "keymap_bepo.h"
  #elif defined(KEYMAP_COLEMAK)
  #include "keymap_colemak.h"
  #elif defined(KEYMAP_WORKMAN)
  #include "keymap_workman.h"
  #elif defined(KEYMAP_MICRO)
  #include "keymap_micro.h"
  #elif defined(KEYMAP_CUB)
  #include "keymap_cub.h"
  #else


static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KEYMAP(  // layer 0 : default
        // left hand
        ESC, 1,   2,   3,   4,   5,   GRV,
        RBRC,Q,   W,   E,   R,   T,   BSPC,
        BSLS,A,   S,   D,   F,   G,
        LCTL,Z,   X,   C,   V,   B,   DEL,
        HOME,PGUP,PGDN,END, RALT,
                                      FN3, LGUI,
                                           FN1,
                                 SPC, LSFT,LALT,
        // right hand
             EQL, 6,   7,   8,   9,   0,   MINS,
             CAPS,Y,   U,   I,   O,   P,   LBRC,
                  H,   J,   K,   L,   SCLN,QUOT,
             TAB, N,   M,   COMM,DOT, SLSH,RCTL,
                       RALT,LEFT,UP,  DOWN,RGHT,
        RGUI, FN2,
        FN1,
        LALT,LSFT, ENT
    ),

    KEYMAP(  // layer 1 : function, numpad and mouse
        // left hand
        TRNS,F1,  F2,  F3,  F4,  F5,  F6,
        PSLS,PAST,P7,  P8,  P9,  PDOT,TRNS,
        PPLS,PMNS,P4,  P5,  P6,  PEQL,
        TRNS,P0,  P1,  P2,  P3,  PENT,TRNS,  
        NO,  NO,  NO,  NO,  TRNS,
                                      FN3, TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
        // right hand
             F7,  F8,  F9,  F10, F11, F12, PSCR,
             NLCK,NO,  NO,  MS_U,WH_U,NO,  SLCK,
                  BTN1,MS_L,BTN3,MS_R,BTN2,PAUS,
             TRNS,NO,  NO,  MS_D,WH_D,NO,  TRNS ,
                       TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,FN4,
        TRNS,
        TRNS,TRNS,TRNS  
    ),

    KEYMAP(  // layer 2 : keyboard functions
        // left hand
        TRNS,CALC,MYCM,MAIL,NO , NO,NO,  
        FN11,NO,  FN5, FN7, FN9, NO,TRNS,  
        NO,  NO,  FN6, FN12,FN13,NO,  
        TRNS,NO,  NO,  FN14,NO , NO,TRNS,  
        VOLD,VOLU,MUTE,NO,  TRNS,
                                      FN4, TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
        // right hand
             NO,  NO,  NO,  NO,  NO,  NO,  NO,  
             TRNS,NO,  NO,  NO,  NO,  NO,  NO,  
                  NO,  NO,  NO,  NO,  NO,  NO,  
             TRNS,NO,  NO,  NO,  NO,  NO,  NO,  
                       TRNS,TRNS,TRNS,TRNS,TRNS,  
        TRNS,FN4,
        TRNS,
        TRNS,TRNS,TRNS   
    ),

/*
    KEYMAP(  // layer 3: 
        // left hand
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  
        NO,  NO,  NO,  NO,  NO,  NO,  
        NO,  NO,  NO,  NO,  NO,  NO,  NO,  
        NO,  NO,  NO,  NO,  NO,  
                                      NO,  NO,  
                                           NO,  
                                 NO,  NO,  NO,  
        // right hand
             NO,  NO,  NO,  NO,  NO,  NO,  NO,  
             NO,  NO,  NO,  NO,  NO,  NO,  NO,  
                  NO,  NO,  NO,  NO,  NO,  NO,  
             NO,  NO,  NO,  NO,  NO,  NO,  NO,  
                       NO,  NO,  NO,  NO,  NO,  
        NO,  NO,  
        NO,  
        NO,  NO,  NO 
    ),
*/

};

/* id for user defined functions */
enum function_id {
    TEENSY_KEY,
};

/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_FUNCTION(TEENSY_KEY),                 // FN0 - Teensy key
    ACTION_LAYER_MOMENTARY(1),                   // FN1 - switch to Layer1
    ACTION_LAYER_SET(1, ON_PRESS),               // FN2 - Set Layer1
    ACTION_LAYER_SET(2, ON_PRESS),               // FN3 - Set Layer2 
    ACTION_LAYER_SET(0, ON_PRESS),               // FN4 - Set Layer0
    ACTION_MODS_KEY(MOD_LCTL, KC_A),             // FN5 - Ctrl A
    ACTION_MODS_KEY(MOD_LCTL, KC_H),             // FN6 - Ctrl C
    ACTION_MODS_KEY(MOD_LCTL, KC_SLSH),          // FN7 - Ctrl F
    ACTION_MODS_KEY(MOD_LCTL, KC_COMM),          // FN8 - Ctrl G
    ACTION_MODS_KEY(MOD_LCTL, KC_DOT),           // FN9 - Ctrl H
    ACTION_MODS_KEY(MOD_LCTL, KC_E),             // FN10 - Ctrl P
    ACTION_MODS_KEY(MOD_LCTL, KC_K),             // FN11 - Ctrl S
    ACTION_MODS_KEY(MOD_LCTL, KC_C),             // FN12 - Ctrl X
    ACTION_MODS_KEY(MOD_LCTL, KC_U),             // FN13 - Ctrl V    
    ACTION_MODS_KEY(MOD_LGUI, KC_I),             // FN14 - Win D
};

void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
    if (id == TEENSY_KEY) {
        clear_keyboard();
        print("\n\nJump to bootloader... ");
        _delay_ms(250);
        bootloader_jump(); // should not return
        print("not supported.\n");
    }
}

#endif


#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

/* translates key to keycode */
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
{
    if (layer < KEYMAPS_SIZE) {
        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
    } else {
        // fall back to layer 0
        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
    }
}


#else
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint8_t keycode)
{
    action_t action;
    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
    } else {
        action.code = ACTION_NO;
    }
    return action;
}
#endif

Il y a moyen de bricoler les LED également mais j'ai pas eu le temps de m'y pencher.

Hors ligne

#204 26/12/2014 13:06:05

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

Merci beaucoup. Pour les LED franchement vu le peu de visibilité qu’elles ont, ce n’est pas le plus urgent. Tu n’as pas répondu pour :
38b.svg.
Je suis d’accord avec toi pour l’espace. La touche alt manque d’accessibilité dans ma version actuelle car je suis dans le même cas que toi mais en inversant ~L1 et Alt. Dans ton cas, j’aurais bien inversé tab et caps lock car à l’usage je trouve la touche du haut plus accessible, or tab est vraiment plus utile que caps lock. Pour ma part j’ai vraiment besoin d’un tab à gauche (blender). Je suis sous linux, du coup, quand tu dis que tout fonctionne (vol+, vol-, mute, couper, copier, coller) c’est sous windows ?


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#205 26/12/2014 14:18:45

chincha
Membres
Inscription : 25/12/2014
Messages : 4

Re : [sujet technique] Adapter le bépo à l’ergodox

yeKcim a écrit :

Pour les LED franchement vu le peu de visibilité qu’elles ont, ce n’est pas le plus urgent.

Pas si sûr, je verrai bien celles de gauche en indicateur de layers...

yeKcim a écrit :

Tu n’as pas répondu pour :

+: la position de Num, Caps, Home, End, Page Up/Dwn en retrait
- : la position de Fn et Win à gauche, mais il me faut la même à droite. Le AltGr trop accessible à droite.


yeKcim a écrit :

Dans ton cas, j’aurais bien inversé tab et caps lock car à l’usage je trouve la touche du haut plus accessible, or tab est vraiment plus utile que caps lock.

Bonne remarque, je vais les permuter.

yeKcim a écrit :

Je suis sous linux, du coup, quand tu dis que tout fonctionne (vol+, vol-, mute, couper, copier, coller) c’est sous windows ?

Oui, je suis sous Windows pour des raisons professiionnelles car je travaille chez moi, mais j'ai plusieurs distribs Linux sous VirtualBox et je n'ai pas encore testé.

Hors ligne

#206 26/12/2014 15:13:02

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

chincha a écrit :

- : la position de Fn et Win à gauche, mais il me faut la même à droite. Le AltGr trop accessible à droite.

ils sont aussi à droite si tu maintiens la touche miroir (violette)

Dernière modification par yeKcim (26/12/2014 20:39:10)


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#207 27/12/2014 14:43:57

robin_moussu
Membres
Inscription : 17/3/2013
Messages : 292

Re : [sujet technique] Adapter le bépo à l’ergodox

Salut à tous,
Je suis ce thread de loin, donc je m'excuse si les réponses à mes questions s'y trouve déjà.
@fabien: à quoi te sert ta touche aide-mémoire, comment fonctionne-elle ?
@yeckim: j'ai vu que tu as rajouté une touche swap. Est ce que c'est vraiment utile ? Est ce qu'une touche swap seulement à gauche ne serai pas suffisante ? (je suppose que tu utilise ta souris en main droite).

Hors ligne

#208 28/12/2014 12:13:41

fabien
Membres
Inscription : 10/1/2010
Messages : 329

Re : [sujet technique] Adapter le bépo à l’ergodox

yeKcim a écrit :

@fabien: Décidément c’est une disposition de folie que tu as fait. Je me demande comment tu fais pour retenir autant de couches

Merci^^
En fait cela n'a posé aucun problème pour la mémoriser. Les couches ne sont plus dispersées au petit bonheur la chance, mais structurées selon une logique (la mienne), donc tout est là où je m'attends à ce que ce soit.

Par exemple : dans la couche signe, à gauche, il y a tous mes accents. Ma rangée de repos est o-u-i-a, du coup si on appuie sur Signes, cela devient ô-û-î-â. Sur la ligne du dessus, il y a ö-ü-ï-ä. Les autres accents étant en accès directs, tout est là, évident et sans réflexion. Mon principe est de recréer les couches de bases, pas d'en rajouter. Du coup elles sont plus simples.


robin_moussu a écrit :

@fabien: à quoi te sert ta touche aide-mémoire, comment fonctionne-elle ?

Elle génère et affiche une image de ma disposition, directement à partir du txt stockant les correspondances de touches. L'image disparaît quand on ré-appuie.

aide-mémoire

Cette aide-mémoire se modifie quand j'appuie sur une modificatrice, et rétablit les labels dès qu'on la relâche.
Par contre je ne suis pas un vrai programmeur, donc c'est codé avec les pieds et je n'ai pas retouché l'apparence depuis mon TrulyErgo ^^
J'ai aussi un carton d'aide sous mon écran, mais je m'en sers surtout pour griffonner de nouveaux essais.

Dernière modification par fabien (28/12/2014 12:15:36)

Hors ligne

#209 28/12/2014 23:21:23

robin_moussu
Membres
Inscription : 17/3/2013
Messages : 292

Re : [sujet technique] Adapter le bépo à l’ergodox

@fabien : La fenêtre qui s'affiche en sur-brillance c'est un programme fournis avec l'ergodox où c'est un programme que t'as installé ?

Hors ligne

#210 29/12/2014 23:28:20

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

robin_moussu a écrit :

j'ai vu que tu as rajouté une touche swap. Est ce que c'est vraiment utile ? Est ce qu'une touche swap seulement à gauche ne serai pas suffisante ? (je suppose que tu utilise ta souris en main droite).

Je ne me rends pas vraiment bien compte de son utilité car je n’ai pas encore migré vers cette disposition. Mais sans, je n’aurais pas de modificateurs à droite donc cela me semble indispensable.


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#211 1/1/2015 20:55:59

fabien
Membres
Inscription : 10/1/2010
Messages : 329

Re : [sujet technique] Adapter le bépo à l’ergodox

robin_moussu a écrit :

@fabien : La fenêtre qui s'affiche en sur-brillance c'est un programme fournis avec l'ergodox où c'est un programme que t'as installé ?

Je l'ai codée moi-même.

à propos Yekcim :

Utilises-tu ta couche fn ? Car je remarque que la modificatrice est loin. Je me disais que cela devait empêcher un usage fréquent. Du coup tu as mis les principales touches en doublon (les flèches, PgUp, PgDn…) Finalement, ce n'est que pour les F1 à F12, qui se font au prix d'une contorsion ?

Je n'ai pas bien compris ce que tu répondais à Mimoza :

le num bloque, le fn est utilisable en maintien.

Est-ce la même couche, (je veux dire, pourrait-on faire un PgUp en appuyant sur Num ?) et deux modificatrices pour des modalités d'accès différentes ?

Fabien, intéressé d'en discuter.

Dernière modification par fabien (1/1/2015 21:20:33)

Hors ligne

#212 2/1/2015 00:52:30

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

fabien, je l’utilise énormément. Elle me permet d’accéder au pavé num, aux F1, F2,… en particulier. Son accès n’est pas trop horrible (alt est bien pire) mais pour résoudre cela j’ai créé la dispo

38b.svg

qu’il va vraiment falloir que je trouve le temps de tester

Dernière modification par yeKcim (2/1/2015 00:54:48)


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#213 5/1/2015 00:26:58

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

chincha, un immense merci pour tes explications. Maintenant j’ai des touches multimedia, des raccourcis vers couper copier coller, une touche menu,… tout semble fonctionnel, je vais même certainement ajouter encore plein de choses du coup (genre KC_MAIL, KC_CALC, KC_MYCM ou annuler, sauvegarder,…). Comme tu dis ne pas trouver très lisible les dispos en une seule image j’ai mis ma nouvelle dispo en 2 dessins. Note : Dans ta dispo, il manque . et , dans le pavé num, ça ne te manque pas trop ?

Dites bonjour à 39 que j’utilise actuellement (c’est laborieux quand on déplace espace backspace entrée…) :

39.svg

Elle n’est pas encore finie puisque les touches . et , du pavé sont toujours les touches standard pas celles du pavé et la touche miroir n’est pas encore implémentée.

Pour obtenir cette dispo, voici le keymap.c :

/*
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "keycode.h"
#include "action.h"
#include "action_util.h"
#include "action_code.h"
#include "action_macro.h"
#include "action_layer.h"
#include "bootloader.h"
#include "report.h"
#include "host.h"
#include "print.h"
#include "debug.h"
#include "keymap.h"
#include "ergodox.h"


/* ErgoDox keymap definition macro */
#define KEYMAP(                                                 \
                                                                \
    /* left hand, spatial positions */                          \
    k00,k01,k02,k03,k04,k05,k06,                                \
    k10,k11,k12,k13,k14,k15,k16,                                \
    k20,k21,k22,k23,k24,k25,                                    \
    k30,k31,k32,k33,k34,k35,k36,                                \
    k40,k41,k42,k43,k44,                                        \
                            k55,k56,                            \
                                k54,                            \
                        k53,k52,k51,                            \
                                                                \
    /* right hand, spatial positions */                         \
        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
            k28,k29,k2A,k2B,k2C,k2D,                            \
        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
                k49,k4A,k4B,k4C,k4D,                            \
    k57,k58,                                                    \
    k59,                                                        \
    k5C,k5B,k5A )                                               \
                                                                \
   /* matrix positions */                                       \
   {                                                            \
    { KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO   },   \
    { KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51},   \
    { KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52},   \
    { KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53},   \
    { KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54},   \
    { KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO,   KC_##k55},   \
    { KC_##k06,KC_##k16,KC_NO,   KC_##k36,KC_NO,   KC_##k56},   \
                                                                \
    { KC_##k07,KC_##k17,KC_NO,   KC_##k37,KC_NO,   KC_##k57},   \
    { KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO,   KC_##k58},   \
    { KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59},   \
    { KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A},   \
    { KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B},   \
    { KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C},   \
    { KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO   }    \
   }

#if defined(KEYMAP_DVORAK)
#include "keymap_dvorak.h"
#elif defined(KEYMAP_COLEMAK)
#include "keymap_colemak.h"
#elif defined(KEYMAP_WORKMAN)
#include "keymap_workman.h"
#elif defined(KEYMAP_MICRO)
#include "keymap_micro.h"
#elif defined(KEYMAP_CUB)
#include "keymap_cub.h"
#else

static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KEYMAP(  // layer 0 : default
        // left hand
        ESC, 1,   2,   3,   4,   5,   GRV,
        RBRC,Q,   W,   E,   R,   T,  BSPC,
        BSLS,A,   S,   D,   F,   G,
        LCTL,Z,   X,   C,   V,   B,   DEL,
        ENT, RGUI,LGUI,LALT, TAB,
                                      PGUP,PGDN,
                                            FN3,
                                 SPC, LSFT,FN1,
						        // right hand
							   EQL, 6,   7,   8,   9,   0,   MINS,
							   TAB, Y,   U,   I,   O,   P,   LBRC,
							        H,   J,   K,   L,   SCLN,QUOT,
							   BTN2,N,   M,   COMM,DOT, SLSH,RCTL,
								   RALT,LEFT,UP,  DOWN,RGHT,
						        HOME, END,
						        FN2,
						        FN1,LSFT, ENT
    ),

    KEYMAP(  // layer 1 : function, numpad and mouse
        // left hand
        PWR, F1,  F2,  F3,  F4,  F5,  F6,
        SLEP,PGUP,HOME,UP,  END, TRNS,TRNS,
        WAKE,PGDN,LEFT,DOWN,RGHT,TRNS,
        TRNS,TRNS,FN12, FN6,FN13,TRNS,INS,  
        NO,  NO,  NO,  NO,  TRNS,
                                      VOLD,VOLU,
                                           TRNS,
                                 MUTE,TRNS,TRNS,
						        // right hand
							   F7,  F8,  F9,  F10, F11, F12, PSCR,
							   TRNS,TRNS,P7,  P8,  P9,  G,   SLCK,
							        TRNS,P4,  P5,  P6,  V,   PAUS,
							   TRNS,TRNS,P1,  P2,  P3,  P0,  TRNS,
								   TRNS,MPLY,MPRV,MNXT,MSTP,
						        CAPS,NLCK,
						        TRNS,
						        TRNS,TRNS,TRNS  
    ),

    KEYMAP(  // layer 2 : numpad comme au dessus il faudrait dot et ,
        // left hand
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
						        // right hand
							   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,  
							   TRNS,TRNS,P7,  P8,  P9,  G,   TRNS,  
							        TRNS,P4,  P5,  P6,  V,   TRNS,  
							   TRNS,TRNS,P1,  P2,  P3,  P0,  TRNS,
								   TRNS,TRNS,TRNS,TRNS,TRNS,  
						        TRNS,TRNS,
						        FN4,
						        TRNS,TRNS,TRNS   
    ),

    KEYMAP(  // layer 3: mirror, not done yet
        // left hand
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
						        // right hand
							   TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
							   TRNS,NO,  P7,  P8,  P9,  PMNS,BSPC,
							        NO,  P4,  P5,  P6,  PPLS,PENT,
							   TRNS,NO,  P1,  P2,  P3,  PPLS,PENT,
								   P0,  PDOT,SLSH,PENT,PENT,
						        TRNS,TRNS,
						        TRNS,
						        TRNS,TRNS,TRNS
    ),

};

/* id for user defined functions */
enum function_id {
    TEENSY_KEY,
};

/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_FUNCTION(TEENSY_KEY),                    // FN0 - Teensy key
    ACTION_LAYER_MOMENTARY(1),                      // FN1 - switch to Layer1
    ACTION_LAYER_SET(2, ON_PRESS),                  // FN2 - set Layer2
    ACTION_LAYER_TOGGLE(3),                         // FN3 - toggle Layer3 aka Numpad layer
    ACTION_LAYER_SET(0, ON_PRESS),                  // FN4 - set Layer0
    
    ACTION_MODS_KEY(MOD_LCTL, KC_A),             // FN5 - Ctrl A
    ACTION_MODS_KEY(MOD_LCTL, KC_H),             // FN6 - Ctrl C
    ACTION_MODS_KEY(MOD_LCTL, KC_SLSH),          // FN7 - Ctrl F
    ACTION_MODS_KEY(MOD_LCTL, KC_COMM),          // FN8 - Ctrl G
    ACTION_MODS_KEY(MOD_LCTL, KC_DOT),           // FN9 - Ctrl H
    ACTION_MODS_KEY(MOD_LCTL, KC_E),             // FN10 - Ctrl P
    ACTION_MODS_KEY(MOD_LCTL, KC_K),             // FN11 - Ctrl S
    ACTION_MODS_KEY(MOD_LCTL, KC_C),             // FN12 - Ctrl X
    ACTION_MODS_KEY(MOD_LCTL, KC_U),             // FN13 - Ctrl V    
    ACTION_MODS_KEY(MOD_LGUI, KC_I),             // FN14 - Win D
};

void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
    if (id == TEENSY_KEY) {
        clear_keyboard();
        print("\n\nJump to bootloader... ");
        _delay_ms(250);
        bootloader_jump(); // should not return
        print("not supported.\n");
    }
}

#endif


#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

/* translates key to keycode */
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
    if (layer < KEYMAPS_SIZE) {
        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
    } else {
        // fall back to layer 0
        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
    }
}

#if defined(KEYMAP_CUB)

// function keymap_fn_to_action will be defined in keymap_cub.h

#else
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint8_t keycode)
{
    action_t action;
    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
    } else {
        action.code = ACTION_NO;
    }
    return action;
}
#endif

La méthode pour les linuxiens que ça intéressent :

wget https://github.com/cub-uanic/tmk_keyboard/archive/master.zip
unzip tmk_keyboard-master.zip
cd tmk_keyboard-master/keyboard/ergodox
//Personnaliser le fichier keymap.c en fonction des goûts et de la doc dans le dossier du même nom
sudo apt-get install avr-libc g++ gcc 
make -f Makefile.lufa clean
make -f Makefile.lufa

yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#214 5/1/2015 12:09:56

Matchiov
Membres
Inscription : 2/7/2013
Messages : 51

Re : [sujet technique] Adapter le bépo à l’ergodox

fabien a écrit :
robin_moussu a écrit :

@fabien : La fenêtre qui s'affiche en sur-brillance c'est un programme fournis avec l'ergodox où c'est un programme que t'as installé ?

Je l'ai codée moi-même.

C'est bien ça ! J'aimerais bien un programme léger qui fait apparaître la carte complète bépo ainsi. (désolé pour le léger hors-sujet)

Dernière modification par Matchiov (5/1/2015 12:10:18)

Hors ligne

#215 6/1/2015 17:35:48

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

Actuellement j’utilise 40 :

40.svg

Mais finalement j’ai bien envie de revenir vers une version plus proche de ce que j’avais jusqu’alors 40c :

40c.svg

Même si alt et meta ne sont pas ultra accessible, il y a dans cette version pas mal de point qui me plaisent beaucoup. Dans cette deuxième version, j’apprécie l’accès à home end pageup pagedown que j’utilise plus que je ne le pensais. Dans les deux cas, je me galère un peu avec l’espace à gauche, pourtant c’est bien mieux pour pas mal de points (espace accessible malgré main sur souris, altgr+espace accessible sans être obligé de doubler altgr) mais les habitudes sont difficiles à changer parfois…

J’ai voulu utiliser KC_MSEL mais ça ne fait rien sur mon poste (censé sélectionné la source multimedia d’après ce que j’ai cru comprendre). De même wake ne fait rien mais je suppose que c’est mon PC ou OS, il serait intéressant que je teste sur un portable sur lequel je sais que la sortie d’hibernation est bien fonctionnelle.


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#216 7/1/2015 23:57:10

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

Bon du coup la version 40 ne me convient pas du tout donc à la version 41 (40c légèrement retouchée)

Je n’ai pas encore regardé comment faire fonctionner find, undo et redo. Sinon le reste est fonctionnel, même le miroir (pour l’instant elle s’applique jusqu’à ce qu’on rappuie pour la désactiver, alors que j’aurais voulu qu’elle s’active à l’appui…[update du 8 janvier, cela était du à des NO au lieu de TRNS])

41.svg

Le code correspondant :

/*
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "keycode.h"
#include "action.h"
#include "action_util.h"
#include "action_code.h"
#include "action_macro.h"
#include "action_layer.h"
#include "bootloader.h"
#include "report.h"
#include "host.h"
#include "print.h"
#include "debug.h"
#include "keymap.h"
#include "ergodox.h"


/* ErgoDox keymap definition macro */
#define KEYMAP(                                                 \
                                                                \
    /* left hand, spatial positions */                          \
    k00,k01,k02,k03,k04,k05,k06,                                \
    k10,k11,k12,k13,k14,k15,k16,                                \
    k20,k21,k22,k23,k24,k25,                                    \
    k30,k31,k32,k33,k34,k35,k36,                                \
    k40,k41,k42,k43,k44,                                        \
                            k55,k56,                            \
                                k54,                            \
                        k53,k52,k51,                            \
                                                                \
    /* right hand, spatial positions */                         \
        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
            k28,k29,k2A,k2B,k2C,k2D,                            \
        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
                k49,k4A,k4B,k4C,k4D,                            \
    k57,k58,                                                    \
    k59,                                                        \
    k5C,k5B,k5A )                                               \
                                                                \
   /* matrix positions */                                       \
   {                                                            \
    { KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO   },   \
    { KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51},   \
    { KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52},   \
    { KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53},   \
    { KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54},   \
    { KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO,   KC_##k55},   \
    { KC_##k06,KC_##k16,KC_NO,   KC_##k36,KC_NO,   KC_##k56},   \
                                                                \
    { KC_##k07,KC_##k17,KC_NO,   KC_##k37,KC_NO,   KC_##k57},   \
    { KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO,   KC_##k58},   \
    { KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59},   \
    { KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A},   \
    { KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B},   \
    { KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C},   \
    { KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO   }    \
   }

#if defined(KEYMAP_DVORAK)
#include "keymap_dvorak.h"
#elif defined(KEYMAP_COLEMAK)
#include "keymap_colemak.h"
#elif defined(KEYMAP_WORKMAN)
#include "keymap_workman.h"
#elif defined(KEYMAP_MICRO)
#include "keymap_micro.h"
#elif defined(KEYMAP_CUB)
#include "keymap_cub.h"
#else

static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KEYMAP(  // layer 0 : default
        // left hand
        ESC, 1,   2,   3,   4,   5,   GRV,
        RBRC,Q,   W,   E,   R,   T,   BSPC,
        BSLS,A,   S,   D,   F,   G,
        LCTL,Z,   X,   C,   V,   B,   DEL,
        HOME,PGUP,PGDN,END, TAB,
                                      FN3,  LGUI,
                                            FN1,
                                 SPC, LSFT,LALT,
						        // right hand
							   EQL, 6,   7,   8,   9,   0,   MINS,
							   RGUI,Y,   U,   I,   O,   P,   LBRC,
							        H,   J,   K,   L,   SCLN,QUOT,
							   APP ,N,   M,   COMM,DOT, SLSH,RCTL,
	 							   RALT,LEFT,UP,  DOWN,RGHT,
						        LGUI,FN2,
						        FN1,
						        LALT,RSFT, ENT
    ),

    KEYMAP(  // layer 1 : function, numpad
        // left hand
        PWR, F1,  F2,  F3,  F4,  F5,  F6,
        SLEP,PGUP,HOME,UP,  END, FN11,INS,
        WAKE,PGDN,LEFT,DOWN,RGHT,UNDO,
        TRNS,FIND,FN12, FN6,FN13,AGAIN,TRNS,  
        TRNS,VOLD,VOLU,MUTE,MYCM,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
						        // right hand
							   F7,  F8,  F9,  F10, F11, F12, PSCR,
							   CAPS,Y   ,P7,  P8,  P9,  FN15,SLCK,
							        FN16,P4,  P5,  P6,  G   ,PAUS,
							   TRNS,P0  ,P1,  P2,  P3,  PDOT,TRNS,
								   MSEL,MPLY,MPRV,MNXT,MSTP,
						        TRNS,TRNS,
						        TRNS,
						        TRNS,TRNS,TRNS  
    ),

    KEYMAP(  // layer 2 : numpad
        // left hand
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,
                                      TRNS,TRNS,
                                           FN1,
                                 TRNS,TRNS,TRNS,
						        // right hand
							   TRNS,NLCK,PPLS,PMNS,PSLS,PAST,PEQL,  
							   TRNS,Y   ,P7,  P8,  P9,  FN15,TRNS,  
							        FN16,P4,  P5,  P6,  G   ,TRNS,  
							   TRNS,P0  ,P1,  P2,  P3,  PDOT,TRNS,
								   TRNS,TRNS,TRNS,TRNS,TRNS,  
						        TRNS,FN4,
						        FN1,
						        TRNS,TRNS,PENT   
    ),
    
 
    KEYMAP(  // layer 3: mirror
            // left hand
        MINS,0,   9,   8,   7,   6,   EQL,
        LBRC,P,   O,   I,   U,   Y,   RGUI,
        QUOT,SCLN,L,   K,   J,   H,
        RCTL,SLSH,DOT, COMM,M,   N,   APP,
        RGHT,DOWN,UP,LEFT,RALT,
                                      TRNS,LGUI,
                                           NO,
                                 ENT, RSFT,LALT,
						        // right hand
							   GRV, 5,   4,   3,   2,   1,   ESC,
							   BSPC,T,   R,   E,   W,   Q,   RBRC,
							        G,   F,   D,   S,   A,   BSLS, 
							   DEL, B,   V,   C,   X,   Z,   LCTL,
								   TAB,  END,PGDN,PGUP,HOME, 
						        LGUI,FN4,
						        NO,
						        LALT,LSFT,SPC
    ),

};

/* id for user defined functions */
enum function_id {
    TEENSY_KEY,
};

/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_FUNCTION(TEENSY_KEY),                    // FN0 - Teensy key
    ACTION_LAYER_MOMENTARY(1),                      // FN1 - switch to Layer1
    ACTION_LAYER_SET(2, ON_PRESS),                  // FN2 - set Layer2
    ACTION_LAYER_MOMENTARY(3),                      // FN3 - toggle Layer3 aka Mirror
    ACTION_LAYER_SET(0, ON_PRESS),                  // FN4 - set Layer0
    
    ACTION_MODS_KEY(MOD_LCTL, KC_A),             // FN5 - Ctrl A
    ACTION_MODS_KEY(MOD_LCTL, KC_H),             // FN6 - Ctrl C
    ACTION_MODS_KEY(MOD_LCTL, KC_SLSH),          // FN7 - Ctrl F
    ACTION_MODS_KEY(MOD_LCTL, KC_COMM),          // FN8 - Ctrl G
    ACTION_MODS_KEY(MOD_LCTL, KC_DOT),           // FN9 - Ctrl H
    ACTION_MODS_KEY(MOD_LCTL, KC_E),             // FN10 - Ctrl P
    ACTION_MODS_KEY(MOD_LCTL, KC_K),             // FN11 - Ctrl S
    ACTION_MODS_KEY(MOD_LCTL, KC_C),             // FN12 - Ctrl X
    ACTION_MODS_KEY(MOD_LCTL, KC_U),             // FN13 - Ctrl V    
    ACTION_MODS_KEY(MOD_LGUI, KC_I),             // FN14 - Win D
    ACTION_MODS_KEY(MOD_LSFT, KC_V),             // FN15 - shift+v → bépo → numpad :
    ACTION_MODS_KEY(MOD_RALT, KC_U),             // FN16 - altgr+u → bépo → numpad ˇ   
};

void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
    if (id == TEENSY_KEY) {
        clear_keyboard();
        print("\n\nJump to bootloader... ");
        _delay_ms(250);
        bootloader_jump(); // should not return
        print("not supported.\n");
    }
}

#endif


#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

/* translates key to keycode */
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
    if (layer < KEYMAPS_SIZE) {
        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
    } else {
        // fall back to layer 0
        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
    }
}

#if defined(KEYMAP_CUB)

// function keymap_fn_to_action will be defined in keymap_cub.h

#else
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint8_t keycode)
{
    action_t action;
    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
    } else {
        action.code = ACTION_NO;
    }
    return action;
}
#endif

Dernière modification par yeKcim (8/1/2015 21:43:30)


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#217 10/1/2015 14:04:42

chincha
Membres
Inscription : 25/12/2014
Messages : 4

Re : [sujet technique] Adapter le bépo à l’ergodox

yeKcim a écrit :

chincha, un immense merci pour tes explications. Maintenant j’ai des touches multimedia, des raccourcis vers couper copier coller, une touche menu,… tout semble fonctionnel, je vais même certainement ajouter encore plein de choses du coup (genre KC_MAIL, KC_CALC, KC_MYCM ou annuler, sauvegarder,…). Comme tu dis ne pas trouver très lisible les dispos en une seule image j’ai mis ma nouvelle dispo en 2 dessins. Note : Dans ta dispo, il manque . et , dans le pavé num, ça ne te manque pas trop ?
Dites bonjour à 39 que j’utilise actuellement (c’est laborieux quand on déplace espace backspace entrée…) :

De rien, il n'y avait rien de compliqué non ?
Pour ma part, ça m'avait pris une journée environ pour comprendre et avoir un clavier fonctionnel et une autre pour le customiser à mon goût.
Maintenant, je fais mes modifs à la volée smile suivant les nouveaux besoins...

J'ai bien ajouté le  . et la , dans le pavé num mais l'aperçu de la disposition n'était pas à jour.

yeKcim a écrit :

Je n’ai pas encore regardé comment faire fonctionner find, undo et redo.

Le find ne fonctionne effectivement pas. J'ai donc remplacé le keycode par le raccourci Ctrl F.
Je n'ai pas essayé les undo et redo, mais ça doit être la même chose. Le développeur a du juger que ces codes étaient inutiles vu que la plupart des gens utilisent les raccourcis CtrlF  CtrlZ et CtrlY.

Pour ma config actuelle, je me suis ajouté des couches de raccourcis dédiées à mes éditeurs et applis CAD pro (je suis rédacteur technique freelance) et c'est un vrai gain de productivité et de confort !
Je ne me sers presque plus de mon G13, un keypad programmable, sauf en 3D type Catia à cause du joystick sous le pouce gauche.

http://mcv78.free.fr//ergodox/v1.2/couche%201.png

Hors ligne

#218 11/1/2015 13:12:03

rat bière sé
Le vilain admin
Inscription : 15/3/2012
Messages : 809

Re : [sujet technique] Adapter le bépo à l’ergodox

Une question : Je vois que vous avez tous les deux placé Ç juste à côté du A, n'est-il pas trop difficile de faire le digramme « ça » avec le même doigt ?


GNU/Linux depuis 2/2012 : Ubuntu→ Xubuntu 4/12→ Debian (Xfce) 10/12 + Cubian 10/13
BOINC (World Community Grid) depuis 4/11 - BÉPO depuis 3/12 - Vapoteur depuis 10/13
Claviers Cherry G80-3000 (MXClear), TIPRO MID KM128A (MXBlack) Noppo MID 87 ANSI (MXRed)
Kensington Orbit trackball (à gauche), Wacom Intuos3 A4

Hors ligne

#219 11/1/2015 17:02:37

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

rat bière sé : pas plus que BAteau


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#220 11/1/2015 17:39:14

dormomuso
Membres
Inscription : 24/3/2014
Messages : 9

Re : [sujet technique] Adapter le bépo à l’ergodox

Je suis en train de lire et relire vos commentaires. C'est assez fascinant.
Tout d'abord re-bonjour à tous, ça fait un bail que je n'étais pas passé par ici.
Et merci pour vos dispositions - je vais en reprendre une telle quelle ;-)
Mais pour l'instant, j'ai juste quelques milliers de questions.

Notamment à propos des raccourcis claviers. J'utiliser beaucoup :
ctrl (+shift) + tab pour passer d'un onglet à l'autre,
et alt (+shift) + tab ou win (+shift) + tab pour passer d'une fenêtre à l'autre.
Est-ce que c'est facilement accessible avec vos dispositions ? (ça n'a pas l'air)
Je me creuse aussi le ciboulot pour améliorer l'accès aux caractères :
- espérantophones (ĈĜĤĴŜŬ)
- et occitanophones (ÁÀÇÉÈÍÌÓÒÚÙ)...

Par ailleurs, j'ai jeté un oeil du côté de Ergodox Gelatin et même de l'horrible Ergodox Taser :-(
Je suis assez content d'être repassé par ici. Cela dit, il y a peut-être des idées à piquer du côté de Gelatin :
https://geekhack.org/index.php?topic=42463.25
https://github.com/antevens/gelatin
http://patorjk.com/keyboard-layout-analyzer/#/config
https://www.massdrop.com/ext/ergodox/?r … 2a4b5badc4

Je vais peut-être lire son code pour me former et tenter d'y comprendre quelque chose.
Mais je tourne en rond. Pas assez de connaissance technique.
Pas encore trouvé les bonnes docs sur le fonctionnement d'un clavier classique.
Pour l'instant :
- j'utilise l'outil de configuration de massdrop
- et un bricolage de Portable Keyboard Layout,
- je suis encore sous windows XP (bientôt sur Linux Mint),
Au final, je ne comprends pas exactement ce qu'il se passe sous le capot, ni ce qui est faisable ou pas.
Dernière question (hors-sujet désolé) : existe-t-il des projet de clavier (et pilote) unicode ?

Dernière modification par dormomuso (11/1/2015 17:49:32)

Hors ligne

#221 11/1/2015 18:41:41

rat bière sé
Le vilain admin
Inscription : 15/3/2012
Messages : 809

Re : [sujet technique] Adapter le bépo à l’ergodox

yeKcim a écrit :

rat bière sé : pas plus que BAteau

Justement, B et A sous le même doigt sont déjà un gros point noir de bépo (tout comme C, T et l'apostrophe), autant ne pas en ajouter. Personnellement J'ai laissé Ç à droite et mis W et Z à gauche. On peut aussi aller plus loin en mettant '! et ^? à gauche pour remettre B et P avec les autres consonnes usuelles mais je pense qu'à ce stade déplacer des touches serait peu productif et il serait plus judicieux de repartir à zéro avec une nouvelle carte d'acessibilité et pondre une nouvelle disposition optimisée pour le Ergodox.

dormomuso a écrit :

Au final, je ne comprends pas exactement ce qu'il se passe sous le capot, ni ce qui est faisable ou pas.
Dernière question (hors-sujet désolé) : existe-t-il des projet de clavier (et pilote) unicode ?

Il n'est pas possible d'avoir un clavier "unicode" étant donné que ça n'envoie que des codes touches à l'ordinateur qui les traduit ensuite en caractères selon la disposition choisie. À la limite tu peux faire ça en faisant des macros utilisant les raccourcis clavier de Windows pour les caractères Unicode mais ça ne fonctionnerait que sur ce système (pas du tout sur Linux, OSX, BIOS, Grub ou DOS) et sans doute pas compatible avec tous les programmes.
Pour avoir un clavier "unicode" il faudrait un nouveau protocole de communication du clavier qui enverrait non pas un code touche mais le nom du caractère. Le clavier se devra donc d'être plus intelligent, avec un controleur bien plus performant.


GNU/Linux depuis 2/2012 : Ubuntu→ Xubuntu 4/12→ Debian (Xfce) 10/12 + Cubian 10/13
BOINC (World Community Grid) depuis 4/11 - BÉPO depuis 3/12 - Vapoteur depuis 10/13
Claviers Cherry G80-3000 (MXClear), TIPRO MID KM128A (MXBlack) Noppo MID 87 ANSI (MXRed)
Kensington Orbit trackball (à gauche), Wacom Intuos3 A4

Hors ligne

#222 21/1/2015 16:56:36

MCMic
Membres
Inscription : 23/9/2014
Messages : 6

Re : [sujet technique] Adapter le bépo à l’ergodox

Je suis un peu jaloux de ceux qui ont sauté le pas pour compiler la version qui fonctionne…
YeKcim, sur ta lancée tu voudrais pas faire un configurateur en ligne qui génère des dispos qui marchent? (Est-ce que le code du configurateur de massdrop est dispo?)

[EDIT] Ah, et YeKcim finalement tu as pas mené à bien le projet de layer qwerty? Je comptais te le piquer :-P

Dernière modification par MCMic (21/1/2015 16:57:39)

Hors ligne

#223 21/1/2015 18:06:58

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

MCMic : Ben finalement ce n’est pas très utile, il suffit de configurer le système pour avoir un azerty, un bépo et un qwerty. Pour switcher il suffit de faire Super+Espace (sous ubuntu en tout cas). Faire un configurateur n’est pas vraiment utile, le fichier texte à écrire est assez simple à faire, vraiment ! et en utilisant les commandes que j’ai répété ici c’est parfait.


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

#224 22/1/2015 15:50:25

MCMic
Membres
Inscription : 23/9/2014
Messages : 6

Re : [sujet technique] Adapter le bépo à l’ergodox

J’ai pas le courage de refaire mon agencement à la main pour l’instant.
Pour le layer qwerty, j’en ai besoin en général dans des jeux, qui sont donc en plein écran et qui laissent pas la main à l’OS.
Donc c’est pour éviter de devoir ressortir du jeu.

Hors ligne

#225 1/2/2015 11:59:39

yeKcim
Membres
Inscription : 8/4/2014
Messages : 114
Site Web

Re : [sujet technique] Adapter le bépo à l’ergodox

Voici la réponse universelle 42 :

42.svg

tab sur la rangée de repos, fn accessible, une touche ctrl+alt pour les raccourcis claviers de fou de blender et gimp ! Certes c’est une sacrée modification mais elle est très intéressante à mon avis

Le code correspondant :

/*
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "keycode.h"
#include "action.h"
#include "action_util.h"
#include "action_code.h"
#include "action_macro.h"
#include "action_layer.h"
#include "bootloader.h"
#include "report.h"
#include "host.h"
#include "print.h"
#include "debug.h"
#include "keymap.h"
#include "ergodox.h"


/* ErgoDox keymap definition macro */
#define KEYMAP(                                                 \
                                                                \
    /* left hand, spatial positions */                          \
    k00,k01,k02,k03,k04,k05,k06,                                \
    k10,k11,k12,k13,k14,k15,k16,                                \
    k20,k21,k22,k23,k24,k25,                                    \
    k30,k31,k32,k33,k34,k35,k36,                                \
    k40,k41,k42,k43,k44,                                        \
                            k55,k56,                            \
                                k54,                            \
                        k53,k52,k51,                            \
                                                                \
    /* right hand, spatial positions */                         \
        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
            k28,k29,k2A,k2B,k2C,k2D,                            \
        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
                k49,k4A,k4B,k4C,k4D,                            \
    k57,k58,                                                    \
    k59,                                                        \
    k5C,k5B,k5A )                                               \
                                                                \
   /* matrix positions */                                       \
   {                                                            \
    { KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO   },   \
    { KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51},   \
    { KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52},   \
    { KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53},   \
    { KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54},   \
    { KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO,   KC_##k55},   \
    { KC_##k06,KC_##k16,KC_NO,   KC_##k36,KC_NO,   KC_##k56},   \
                                                                \
    { KC_##k07,KC_##k17,KC_NO,   KC_##k37,KC_NO,   KC_##k57},   \
    { KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO,   KC_##k58},   \
    { KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59},   \
    { KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A},   \
    { KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B},   \
    { KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C},   \
    { KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO   }    \
   }

#if defined(KEYMAP_DVORAK)
#include "keymap_dvorak.h"
#elif defined(KEYMAP_COLEMAK)
#include "keymap_colemak.h"
#elif defined(KEYMAP_WORKMAN)
#include "keymap_workman.h"
#elif defined(KEYMAP_MICRO)
#include "keymap_micro.h"
#elif defined(KEYMAP_CUB)
#include "keymap_cub.h"
#else

static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KEYMAP(  // layer 0 : default
        // left hand
        ESC, 1,   2,   3,   4,   5,   GRV,
        BSPC,Q,   W,   E,   R,   T,   RBRC,
        TAB ,A,   S,   D,   F,   G,
        LCTL,Z,   X,   C,   V,   B,   DEL,
        HOME,PGUP,PGDN,END, LALT,
                                      FN3, LGUI,
                                           FN17,
                                 SPC, LSFT, FN1,
						        // right hand
							   EQL, 6,   7,   8,   9,   0,   MINS,
							   BSLS,Y,   U,   I,   O,   P,   LBRC,
							        H,   J,   K,   L,   SCLN,QUOT,
							   RGUI,N,   M,   COMM,DOT, SLSH,RCTL,
	 							    RALT,LEFT,UP,  DOWN,RGHT,
						        LGUI,FN2,
						        APP ,
						        FN1 ,RSFT, ENT
    ),

    KEYMAP(  // layer 1 : function, numpad
        // left hand
        PWR, F1,  F2,  F3,  F4,  F5,  F6,
        SLEP,PGUP,HOME,UP,  END, FN11,INS,
        WAKE,PGDN,LEFT,DOWN,RGHT,FN8 ,
        TRNS,FN7,FN12,FN6, FN13,FN9 ,TRNS,  
        MYCM,VOLD,VOLU,MUTE,TRNS,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
						        // right hand
							   F7,  F8,  F9,  F10, F11, F12, PSCR,
							   CAPS,Y   ,P7,  P8,  P9,  FN15,SLCK,
							        FN16,P4,  P5,  P6,  G   ,PAUS,
							   TRNS,P0  ,P1,  P2,  P3,  PDOT,TRNS,
								    MSEL,MPLY,MPRV,MNXT,MSTP,
						        TRNS,TRNS,
						        TRNS,
						        TRNS,TRNS,TRNS  
    ),

    KEYMAP(  // layer 2 : numpad
        // left hand
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,TRNS,TRNS,TRNS,TRNS,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,FN1,
						        // right hand
							   TRNS,NLCK,PPLS,PMNS,PSLS,PAST,PEQL,  
							   TRNS,Y   ,P7,  P8,  P9,  FN15,TRNS,  
							        FN16,P4,  P5,  P6,  G   ,TRNS,  
							   TRNS,P0  ,P1,  P2,  P3,  PDOT,TRNS,
								    TRNS,TRNS,TRNS,TRNS,TRNS,  
						        TRNS,FN4,
						        TRNS,
						        FN1,TRNS,PENT   
    ),
    
 
    KEYMAP(  // layer 3: mirror
            // left hand
        MINS,0,   9,   8,   7,   6,   EQL,
        LBRC,P,   O,   I,   U,   Y,   BSLS,
        QUOT,SCLN,L,   K,   J,   H,
        RCTL,SLSH,DOT, COMM,M,   N,   RGUI,
        RGHT,DOWN,UP,  LEFT,RALT,
                                      TRNS,LGUI,
                                           TRNS,
                                 ENT, RSFT,NO,
						        // right hand
							   GRV, 5,   4,   3,   2,   1,   ESC,
							   RBRC,T,   R,   E,   W,   Q,   BSPC,
							        G,   F,   D,   S,   A,   TAB, 
							   DEL, B,   V,   C,   X,   Z,   LCTL,
								    TAB, END, PGDN,PGUP,HOME, 
						        LGUI,FN2,
						        TRNS,
						        NO  ,LSFT,SPC
    ),

};

/* id for user defined functions */
enum function_id {
    TEENSY_KEY,
};

/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_FUNCTION(TEENSY_KEY),                    // FN0 - Teensy key
    ACTION_LAYER_MOMENTARY(1),                      // FN1 - switch to Layer1
    ACTION_LAYER_SET(2, ON_PRESS),                  // FN2 - set Layer2
    ACTION_LAYER_MOMENTARY(3),                      // FN3 - toggle Layer3 aka Mirror
    ACTION_LAYER_SET(0, ON_PRESS),                  // FN4 - set Layer0
    
    ACTION_MODS_KEY(MOD_LCTL, KC_A),             // FN5 - Ctrl A
    ACTION_MODS_KEY(MOD_LCTL, KC_H),             // FN6 - Ctrl C
    ACTION_MODS_KEY(MOD_LCTL, KC_SLSH),          // FN7 - Ctrl F
    ACTION_MODS_KEY(MOD_LCTL, KC_LBRC),          // FN8 - Ctrl Z (undo)
    ACTION_MODS_KEY(MOD_LCTL, KC_X),             // FN9 - Ctrl Y (redo)
    ACTION_MODS_KEY(MOD_LCTL, KC_E),             // FN10 - Ctrl P
    ACTION_MODS_KEY(MOD_LCTL, KC_K),             // FN11 - Ctrl S
    ACTION_MODS_KEY(MOD_LCTL, KC_C),             // FN12 - Ctrl X
    ACTION_MODS_KEY(MOD_LCTL, KC_U),             // FN13 - Ctrl V    
    ACTION_MODS_KEY(MOD_LGUI, KC_I),             // FN14 - Win D
    ACTION_MODS_KEY(MOD_LSFT, KC_V),             // FN15 - shift+v → bépo → numpad :
    ACTION_MODS_KEY(MOD_RALT, KC_U),             // FN16 - altgr+u → bépo → numpad ˇ   
    ACTION_MODS(MOD_LCTL | MOD_LALT)             // FN17 - Ctrl + Alt 
};

void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
    if (id == TEENSY_KEY) {
        clear_keyboard();
        print("\n\nJump to bootloader... ");
        _delay_ms(250);
        bootloader_jump(); // should not return
        print("not supported.\n");
    }
}

#endif


#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

/* translates key to keycode */
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
    if (layer < KEYMAPS_SIZE) {
        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
    } else {
        // fall back to layer 0
        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
    }
}

#if defined(KEYMAP_CUB)

// function keymap_fn_to_action will be defined in keymap_cub.h

#else
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint8_t keycode)
{
    action_t action;
    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
    } else {
        action.code = ACTION_NO;
    }
    return action;
}
#endif

Dernière modification par yeKcim (1/2/2015 21:05:44)


yeknan.free.fr: Participer à un projet libre est un jeu... Et toi, à quoi tu joues ?

Hors ligne

Pied de page des forums