有没有Emacs专用的键盘?

Vim有专门的键盘 在WASD可买到:VIM by Skeletor 61-Key Custom Mechanical Keyboard

Emacs有没有专用的?WASD目前找不到。

这款Linux的也好看,不知在哪能买到

可用快捷键1

可用快捷键2

Emacs虽然自定义高,有这些用键匹配紫色布局一定很好看。

我觉得按自己的喜好定制键帽对emacs来说可能更靠谱 :rofl:

看到标题的第一刻以为你想找的是那种把C-x C-f并到一个键的键盘 :rofl:

1 个赞

定制的键帽也没找到,贴纸感觉就不好了。

经调查Ergodox是专为Emacs而设计,极好的人体工程学机械键盘。 em

Emacs 很多组合键,贴纸要怎么设计?

你可以装个 Evil 然后用 Vim 的键盘

image

4 个赞

现在用的键盘, 感觉还可以. Ctrl 设置到了中间两个黑色的键上面. Esc 设置成左手小指中间那个, 也就是平常的CapLock 这上面每个键都是可以自定义的, 对快捷键的设置非常友好.

我自己本身只用 MacBook 自带的键盘,以前也沉迷过不同的键盘,但因为工作经常需要变动位置关系——所以就变成人得适应机器,而不是机器适应我了。

据我所知,Emacs 的键位设置,其实是依据上古键盘而来,所谓的 Mete 键,其实在上古键盘是存在的,所以如果你真的要一个专用的 Emacs 键盘,你可以考虑以前用于 Sun 服务器搭配的大键盘,那上面估计就有专用按键。

另外,大家都知道的李杀本身就是键盘狂魔,这么多年测试了一大堆键盘,你可以到他的页面查看一下:

Ergonomic Keyboard Reviews http://xahlee.info/kbd/ergonomic_keyboards_index.html

1 个赞

请问键盘分成两块有什么好处?从来没用过这样的键盘。

注:现在很多手机平板输入法,也支持把虚拟键盘分成两块,但我一直没有感受到什么好处。

手机平板输入法分成两块,主要是为了让人的手可以方便按下。

至于实体键盘分成两块,主要是让人的姿势可以更自然,避免手臂肌肉长期的紧张。

从人体工程学的角度的参考:

另一个选择:keyboard.io

1 个赞

我意外地在李杀的网站里找到 Lisp Machine Keyboard,你可以看看,这些都是专门为 Lisp 而设计的键盘:

http://xahlee.info/kbd/lisp_keyboards.html

Keymacs 是最接近的,纯手工制作,成本也很高。可将大量组合键映射到额外空白键。

可编程的机械键盘,多层可自由切换。

还有人这样定义键位

static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Keymap 0: Default Layer
     *
     * ,--------------------------------------------------.           ,--------------------------------------------------.
     * | Escape | Fn0  |   2  |   3  |   4  |   5  |  6   |           |  7   |   8  |   9  |   0  |  _-  |  Del |  BkSp  |
     * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
     * | F3     |   1  |   W  |   E  |   R  |   T  |  ?   |           |   "  |   Y  |   U  |   I  |   O  |  +=  |  F4    |
     * |--------+------+------+------+------+------|  /   |           |   '  |------+------+------+------+------+--------|
     * |   ~`   |   Q  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   P  |  |\    |
     * |--------+------+------+------+------+------|  F1  |           |  F2  |------+------+------+------+------+--------|
     * | LShift |   A  |   X  |   C  |   V  |   B  | +RAlt|           | +RAlt|   N  |   M  |  <,  |  >.  |  :;  | RShift |
     * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
     *   | F5   |   Z  |  F6  | LGui | LAlt |                                       | LAlt | Left |  Up  |   Dn | Rght |
     *   `----------------------------------'                                       `----------------------------------'
     *                                        ,-------------.       ,-------------.
     *                                        | Home | End  |       | PgUp | PgDn |
     *                                 ,------|------|------|       |------+------+------.
     *                                 |      |  Fn3 | Play |       |  Fn1 | Fn4  |      |
     *                                 | Space| Tab+ |------|       |------| Enter| Space|
     *                                 |      | LCtl |  Fn6 |       |  Fn7 | +LCtl|      |
     *                                 `--------------------'       `--------------------'
     */

    KEYMAP(  // layout: layer 0: default
        // left hand
        ESC, FN0, 2,   3,   4,   5,     6,
         F3, 1,   W,   E,   R,   T,  SLSH,
        GRV, Q,   S,   D,   F,   G,
        LSFT,A,   X,   C,   V,   B,   FN2,
        F5,  Z,   F6,  LGUI,LALT,
                                     HOME, END,
                                          MPLY,
                                  SPC,FN3, FN6,
        // right hand
                7,8,   9,   0,MINS,   DEL, BSPC,
             QUOT,Y,   U,   I,   O,   EQL,   F4,
                  H,   J,   K,   L,   P,   BSLS,
             FN8, N,   M,   COMM,DOT, SCLN,RSFT,
                       LALT,LEFT,DOWN,UP  ,RGHT,
        PGUP,PGDN,
        FN1,
         FN7,FN4, SPC
    ),

    KEYMAP(  // layout: layer 1: F-keys + mouse + media
        // left hand
        TRNS,TRNS, F2,  F3,  F4,  F5,   F6,
        TRNS,  F1,TRNS,TRNS,TRNS,TRNS,TRNS,
         FN5,MS_L,MS_U,MS_D,MS_R,PAUS,
        CAPS, FN9,TRNS,TRNS,TRNS,TRNS,TRNS,
        TRNS,PSCR, INS,TRNS,TRNS,
                                      TRNS,TRNS,
                                           TRNS,
                                 TRNS,TRNS,TRNS,
        // right hand
              F7, F8,  F9,  F10,  F11,TRNS,TRNS,
             TRNS,TRNS,TRNS,TRNS,TRNS, F12,TRNS,
                  BTN1,BTN2,BTN3,BTN4,BTN5,TRNS,
             TRNS,TRNS,TRNS,TRNS,TRNS,VOLU,TRNS,
                       TRNS,TRNS,MPRV,VOLD,MNXT,
        TRNS,TRNS,
        TRNS,
        TRNS,TRNS,TRNS
    ),

    KEYMAP(  // layout: layer 2: dealing with Windows
        // left hand
        ESC, FN0, 2,   3,   4,   5,     6,
         F3, 1,   W,   E,   R,   T,  SLSH,
        GRV, Q,   S,   D,   F,   G,
        LSFT,A,   X,   C,   V,   B,   FN2,
        F5,  Z,   F6,  LGUI,LALT,
                                     HOME, END,
                                          FN12,
                                  SPC,FN3,FN10,
        // right hand
                7,8,   9,   0,MINS,   DEL, BSPC,
             QUOT,Y,   U,   I,   O,   EQL,   F4,
                  H,   J,   K,   L,   P,   BSLS,
             FN8, N,   M,   COMM,DOT, SCLN,RSFT,
                       LALT,LEFT,DOWN,UP  ,RGHT,
        PGUP,PGDN,
        FN1,
        FN11,FN4, SPC
    ),
};

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

/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_LAYER_TAP_KEY(1,KC_F7),                  // FN0 - momentary switch to Layer1/F7
    ACTION_LAYER_TOGGLE(1),                         // FN1 - toggle Layer1
    ACTION_MODS_TAP_KEY(MOD_RALT, KC_F1),           // FN2 - right alt on hold, F1 on tap
    ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB),          // FN3 - left control on hold, tab on tap
    ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),          // FN4 - left control on hold, enter on tap
    ACTION_FUNCTION(TEENSY_KEY),                    // FN5 - Teensy key
    ACTION_MODS_TAP_KEY(MOD_RGUI, KC_LBRC ),        // FN6 - right gui on hold, left bracket on tap
    ACTION_MODS_TAP_KEY(MOD_RGUI, KC_RBRC ),        // FN7 - right gui on hold, right bracket on tap
    ACTION_MODS_TAP_KEY(MOD_RALT, KC_F2),           // FN8 - right alt on hold, F2 on tap
    ACTION_LAYER_TOGGLE(2),                         // FN9 - toggle Layer2
    ACTION_MODS_TAP_KEY(MOD_RCTL, KC_LBRC ),        // FN10 - right control on hold, left bracket on tap
    ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC ),        // FN11 - right control on hold, right bracket on tap
    ACTION_LAYER_TOGGLE(0),                         // FN12 - toggle Layer0
};

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

我在Reddit也问了这个问题,有很多外国工程师的讨论:

3 个赞

我以前整过 Ergodox,在打游戏的需求面前这些花里㗅哨的都没啥用,还不如普通的薄膜强。