⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win_keymap.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
}/* *    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 + -