📄 win_keymap.c
字号:
}/* * Semantic class definitions */static unsigned short funct_keys[] = { ACTION_STOP, ACTION_AGAIN, ACTION_PROPS, ACTION_UNDO, ACTION_FRONT, ACTION_BACK, ACTION_COPY, ACTION_OPEN, ACTION_CLOSE, ACTION_PASTE, ACTION_FIND_BACKWARD, ACTION_FIND_FORWARD, ACTION_REPLACE, ACTION_CUT,0 };static unsigned short edit_keys[] = { ACTION_ERASE_CHAR_BACKWARD, ACTION_ERASE_CHAR_FORWARD, ACTION_ERASE_WORD_BACKWARD, ACTION_ERASE_WORD_FORWARD, ACTION_ERASE_LINE_BACKWARD, ACTION_ERASE_LINE_END,0 };static unsigned short motion_keys[] = { ACTION_GO_CHAR_BACKWARD, ACTION_GO_CHAR_FORWARD, ACTION_GO_WORD_BACKWARD, ACTION_GO_WORD_FORWARD, ACTION_GO_WORD_END, ACTION_GO_LINE_BACKWARD, ACTION_GO_LINE_FORWARD, ACTION_GO_LINE_END, ACTION_GO_LINE_START, ACTION_GO_COLUMN_BACKWARD, ACTION_GO_COLUMN_FORWARD, ACTION_GO_DOCUMENT_START, ACTION_GO_DOCUMENT_END,0 };static unsigned short text_keys[] = { ACTION_CAPS_LOCK, ACTION_SELECT_FIELD_BACKWARD, ACTION_SELECT_FIELD_FORWARD, ACTION_COPY_THEN_PASTE, ACTION_STORE, ACTION_LOAD, ACTION_GET_FILENAME, ACTION_SET_DIRECTORY, ACTION_MATCH_DELIMITER, ACTION_EMPTY, ACTION_INSERT,0 };voidwin_keymap_set_smask_class(windowfd, class) int windowfd; Event_class class;{ Bitmask *m = keymap_from_fd[windowfd].smask; unsigned short *p; win_keymap_lazy_init(); win_keymap_lazy_bind(); if (!m) m = keymap_from_fd[windowfd].smask = sv_bits_new_mask(SUNVIEW_LAST - SUNVIEW_FIRST + 1); switch (class) { case KEYMAP_FUNCT_KEYS: for (p = funct_keys; *p ; p++) (void)sv_bits_set_mask(m, *p - SUNVIEW_FIRST); break; case KEYMAP_EDIT_KEYS: for (p = edit_keys; *p ; p++) (void)sv_bits_set_mask(m, *p - SUNVIEW_FIRST); break; case KEYMAP_MOTION_KEYS: for (p = motion_keys; *p ; p++) (void)sv_bits_set_mask(m, *p - SUNVIEW_FIRST); break; case KEYMAP_TEXT_KEYS: for (p = text_keys; *p ; p++) (void)sv_bits_set_mask(m, *p - SUNVIEW_FIRST); break; }}voidwin_keymap_set_imask_class(mask, class) Inputmask *mask; Event_class class;{/* unsigned short *p; win_keymap_lazy_init(); win_keymap_lazy_bind(); switch (class) { case KEYMAP_FUNCT_KEYS: for (p = funct_keys; *p ; p++) win_keymap_set_imask_from_std_bind(mask, *p); break; case KEYMAP_EDIT_KEYS: for (p = edit_keys; *p ; p++) win_keymap_set_imask_from_std_bind(mask, *p); break; case KEYMAP_MOTION_KEYS: for (p = motion_keys; *p ; p++) win_keymap_set_imask_from_std_bind(mask, *p); break; case KEYMAP_TEXT_KEYS: for (p = text_keys; *p ; p++) win_keymap_set_imask_from_std_bind(mask, *p); break; }*/}/****************************************************************************** * win_keymap_map(fd, event) -- attempt to translate the event into * a keymap mapping; return 1 if translation occurs, 0 if not ******************************************************************************/static int mapped_fd;static unsigned short mapped_event, mapped_action, mapped_shiftmask, mapped_flags;intwin_keymap_map(fd, event) int fd; Event *event;{ register struct keymap_table *km; register unsigned short ie_code = event_id(event), action = 0; register unsigned short user_code; register Bitmask *kb = keymap_from_fd[fd].smask; win_keymap_lazy_init(); win_keymap_lazy_bind(); if (!kb) kb = keymap_from_fd[fd].smask = sv_bits_new_mask(SUNVIEW_LAST - SUNVIEW_FIRST + 1); if (std_bind == SUNOS_4_X) { if (ie_code < 160 || ie_code > 255 || event_meta_is_down(event)) { /* * Only execute switch statement if ie_code is not 0xA0 * through 0xFF and generated by compose key on type-4 * keyboard. */ switch(ie_code) { case WIN_STOP: action = ACTION_STOP; break; case KEY_TOP(1): action = ACTION_CAPS_LOCK; break; case 127: /* DEL */ /* kludge for compatibility with 4.0. * do mapping if user has not modified default * mappings (i.e., user_code == 0). This is * never true in 4.1 since the default keys * are always mapped in textsw_once.c. * This applies to DEL, ^W and ^U */ if (keymap_from_fd[fd].keymap) user_code = keymap_from_fd[fd].keymap->km_table[WIN_KEYMAP_ERASE_CHAR].code; else user_code = 127; switch(user_code) { case 0: case 127: if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_ERASE_CHAR_FORWARD; } else { action = ACTION_ERASE_CHAR_BACKWARD; } break; default: break; } break; case 23: /* ^W */ /* kludge for compatibility with 4.0. * do mapping if user has not modified default * mappings */ if (keymap_from_fd[fd].keymap) user_code = keymap_from_fd[fd].keymap->km_table[WIN_KEYMAP_ERASE_WORD].code; else user_code = 23; switch(user_code) { case 0: case 23: if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_ERASE_WORD_FORWARD; } else { action = ACTION_ERASE_WORD_BACKWARD; } break; default: break; } break; case 21: /* ^U */ /* kludge for compatibility with 4.0. * do mapping if user has not modified default * mappings */ if (keymap_from_fd[fd].keymap) user_code = keymap_from_fd[fd].keymap->km_table[WIN_KEYMAP_ERASE_LINE].code; else user_code = 21; switch(user_code) { case 0: case 21: if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_ERASE_LINE_END; } else { action = ACTION_ERASE_LINE_BACKWARD; } break; default: break; } break; case 225: /* Meta-a */ case KEY_LEFT(2): action = ACTION_AGAIN; break; case 245: /* Meta-u */ action = ACTION_UNDO; break; case 227: /* Meta-c */ case 195: /* Meta-C */ case 131: /* Meta-Cntl-C */ case KEY_LEFT(6): action = ACTION_COPY; break; case 246: /* Meta-v */ case 214: /* Meta-V */ case 150: /* Meta-Cntl-V */ case KEY_LEFT(8): action = ACTION_PASTE; break; case 198: /* Meta-F */ action = ACTION_FIND_BACKWARD; break; case 230: /* Meta-f */ action = ACTION_FIND_FORWARD; break; case 248: /* Meta-x */ case 216: /* Meta-X */ case 152: /* Meta-Cntl-X */ case KEY_LEFT(10): action = ACTION_CUT; break; case 175: /* Meta-/ */ case 191: /* Meta-? */ case 32569: /* Help Key */ action = ACTION_HELP; break; /* case 241: Meta-q case 209: Meta-Q action = ACTION_QUOTE; break; case 141: Meta-Cntl-M action = ACTION_DO_IT; break; */ case KEY_LEFT(3): action = ACTION_PROPS; break; case KEY_RIGHT(11): action = ACTION_GO_LINE_FORWARD; break; case KEY_RIGHT(13): action = ACTION_GO_DOCUMENT_END; break; case KEY_RIGHT(7): action = ACTION_GO_DOCUMENT_START; break; case KEY_LEFT(4): if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_REDO; } else { action = ACTION_UNDO; } break; case KEY_LEFT(5): if (event->ie_shiftmask & SHIFTMASK) { action = ACTION_BACK; } else { action = ACTION_FRONT; } break; case KEY_LEFT(7): if (event->ie_shiftmask & SHIFTMASK) { action = ACTION_CLOSE; } else { action = ACTION_OPEN; } break; case KEY_LEFT(9): if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_FIND_BACKWARD; } else if (event_shiftmask(event) & CTRLMASK) { action = ACTION_REPLACE; } else { action = ACTION_FIND_FORWARD; } break; case 2: /* cntl-b */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_CHAR_FORWARD; } else { action = ACTION_GO_CHAR_BACKWARD; } } break; case 6: /* cntl-F */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_CHAR_BACKWARD; } else { action = ACTION_GO_CHAR_FORWARD; } } break; case 44: /* cntl-, */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_WORD_FORWARD; } else { action = ACTION_GO_WORD_BACKWARD; } } break; case 46: /* cntl-. */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_WORD_BACKWARD; } else { action = ACTION_GO_WORD_FORWARD; } } break; case 31: /* US */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_WORD_BACKWARD; } else { action = ACTION_GO_WORD_FORWARD; } } break; case 1: /* cntl-a */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_LINE_END; } else { action = ACTION_GO_LINE_BACKWARD; } } break; case 5: /* cntl-e */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_LINE_BACKWARD; } else { action = ACTION_GO_LINE_END; } } break; case ';': if (event_shiftmask(event) & CTRLMASK) { action = ACTION_GO_LINE_FORWARD; } break; case 16: /* cntl-p */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_COLUMN_FORWARD; } else { action = ACTION_GO_COLUMN_BACKWARD; } } break; case 14: /* cntl-n */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_COLUMN_BACKWARD; } else { action = ACTION_GO_COLUMN_FORWARD; } } break; case 13: /* cntl-m */ if (event_shiftmask(event) & CTRLMASK) { if (event_shiftmask(event) & SHIFTMASK) { action = ACTION_GO_DOCUMENT_START; } else { action = ACTION_GO_DOCUMENT_END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -