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

📄 odbc.py.i

📁 这个是内存数据库的客户端
💻 I
📖 第 1 页 / 共 5 页
字号:
// The contents of this file are subject to the MonetDB Public License// Version 1.1 (the "License"); you may not use this file except in// compliance with the License. You may obtain a copy of the License at// http://monetdb.cwi.nl/Legal/MonetDBLicense-1.1.html//// Software distributed under the License is distributed on an "AS IS"// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the// License for the specific language governing rights and limitations// under the License.//// The Original Code is the MonetDB Database System.//// The Initial Developer of the Original Code is CWI.// Portions created by CWI are Copyright (C) 1997-2007 CWI.// All Rights Reserved.%module odbc%include "typemaps.i"%{#include <sqltypes.h>#include <sqlucode.h>#ifdef SQL_MAX_OPTION_STRING_LENGTH#define BUFLEN ((SQL_MAX_OPTION_STRING_LENGTH) > 1024 ? (SQL_MAX_OPTION_STRING_LENGTH) : 1024)#else#define BUFLEN 1024#endif#if !defined(PY_LONG_LONG) && defined(LONG_LONG)/* in python 2.2 it's still called LONG_LONG, but we use the newer   name PY_LONG_LONG */#define PY_LONG_LONG LONG_LONG#endifstatic PyObject *ErrorObject;%}%ignore __SQLTYPES_H;%include "sqltypes.h"%init %{{	PyObject *odbc;	/* create the error object */	ErrorObject = PyErr_NewException("odbc.error", NULL, NULL);	PyDict_SetItemString(d, "error", ErrorObject);	/* dirty trick to export the error object just created to the	   interface module odbc */	odbc = PyImport_ImportModule("odbc");	if (odbc == NULL)		Py_FatalError("can't import module odbc for _odbc");	PyModule_AddObject(odbc, "error", ErrorObject);	PyModule_AddObject(odbc, "SQLGetConnectAttrA",			   PyObject_GetAttrString(m, "SQLGetConnectAttr"));	PyModule_AddObject(odbc, "SQLGetEnvAttrA",			   PyObject_GetAttrString(m, "SQLGetEnvAttr"));	PyModule_AddObject(odbc, "SQLGetStmtAttrA",			   PyObject_GetAttrString(m, "SQLGetStmtAttr"));	PyModule_AddObject(odbc, "SQLGetConnectOptionA",			   PyObject_GetAttrString(m, "SQLGetConnectOption"));	PyModule_AddObject(odbc, "SQLGetDescFieldA",			   PyObject_GetAttrString(m, "SQLGetDescField"));	PyModule_AddObject(odbc, "SQLGetDiagFieldA",			   PyObject_GetAttrString(m, "SQLGetDiagField"));	PyModule_AddObject(odbc, "SQLGetInfoA",			   PyObject_GetAttrString(m, "SQLGetInfo"));	PyModule_AddObject(odbc, "SQLSetConnectOptionA",			   PyObject_GetAttrString(m, "SQLSetConnectOption"));	PyModule_AddObject(odbc, "SQLSetStmtOptionA",			   PyObject_GetAttrString(m, "SQLSetStmtOption"));	Py_DECREF(odbc);}%}%{/*  helper code for SQLWCHAR parameters */static PyObject *PyUnicode_FromSqlWChar(const SQLWCHAR *s, SQLSMALLINT l){	const SQLWCHAR *s1;	Py_UNICODE *u, *u1;	PyObject *o;	if (s == NULL) {		Py_INCREF(Py_None);		return Py_None;	}	if (l == SQL_NTS)		for (l = 0, s1 = s; *s1; s1++, l++)			;	u = PyMem_Malloc((l + 1) * sizeof(Py_UNICODE));	for (s1 = s, u1 = u; l > 0; s1++, u1++, l--)		*u1 = *s1;	o = PyUnicode_FromUnicode(u, (int) (s1 - s));	PyMem_Free(u);	return o;}SQLWCHAR *SqlWChar_FromPyUnicode(PyObject *o, int *lp){	Py_UNICODE *u;	int ul;	SQLWCHAR *b, *s;	if ((u = PyUnicode_AsUnicode(o)) == NULL)		return NULL;	ul = PyUnicode_GetSize(o);	if ((b = s = PyMem_Malloc((ul + 1) * sizeof(SQLWCHAR))) == NULL)		return NULL;	while (ul-- >= 0)		*s++ = *u++;	if (lp)		*lp = (int) (s - b) - 1;	return b;}%}%typemap(in, numinputs=1) (SQLWCHAR *STRING, int LENGTH) (int len) {	if (($1 = SqlWChar_FromPyUnicode($input, &len)) == NULL) goto fail;	$2 = ($2_type) len;}%typemap(argout) (SQLWCHAR *STRING, int LENGTH) {	PyMem_Free($1);}/*  output arg to return a Handle */%typemap(in, numinputs=0) SQLHANDLE *OUTPUT (SQLHANDLE temp) {	$1 = &temp;}%typemap(argout,fragment="t_output_helper") SQLHANDLE *OUTPUT {	PyObject *o = SWIG_NewPointerObj((void *) *$1, $1_descriptor, 0);	$result = t_output_helper($result, o);}/*  output arg to return a 5-byte state string  used only in SQLError and SQLGetDiagRec*/%typemap(in, numinputs=0) SQLCHAR *Sqlstate (SQLCHAR tempbuf[6]) {	$1 = tempbuf;}%typemap(argout,fragment="t_output_helper") SQLCHAR *Sqlstate {	PyObject *o = PyString_FromStringAndSize((char *) $1, 5);	$result = t_output_helper($result, o);}// SQLErrorA, SQLGetDiagRecA%apply SQLCHAR *Sqlstate {SQLCHAR *szSqlState};// SQLErrorW, SQLGetDiagRecW%typemap(in, numinputs=0) SQLWCHAR *szSqlState (SQLWCHAR tempbuf[6]) {	$1 = tempbuf;}%typemap(argout,fragment="t_output_helper") SQLWCHAR *szSqlState {	PyObject *o = PyUnicode_FromSqlWChar($1, 5);	$result = t_output_helper($result, o);}/*  Three args to return a string: OUTBUF points to a buffer of length  BUFSIZE which is filled with *OUTSIZE characters plus a NUL byte.  If the buffer is too small, *OUTSIZE returns the required buffer  size.*/%typemap(in, numinputs=0) (char *OUTBUF, int BUFSIZE, int *OUTSIZE) (SQLCHAR msgbuf[BUFLEN], $*3_type msglen) {	$1 = msgbuf;	$2 = ($2_type) sizeof(msgbuf);	$3 = &msglen;}%typemap(argout,fragment="t_output_helper") (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {	PyObject *o = PyString_FromStringAndSize((char *) $1, *$3 >= $2 ? $2 - 1 : *$3);	$result = t_output_helper($result, o);}%typemap(in, numinputs=0) (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) (SQLWCHAR msgbuf[BUFLEN], $*3_type msglen) {	$1 = msgbuf;	$2 = ($2_type) (sizeof(msgbuf) / sizeof(SQLWCHAR));	$3 = &msglen;}%typemap(argout,fragment="t_output_helper") (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {	PyObject *o = PyUnicode_FromSqlWChar($1, *$3 >= $2 ? $2 - 1 : *$3);	$result = t_output_helper($result, o);}// SQLError, SQLGetDiagRec%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *MessageText, SQLSMALLINT BufferLength, SQLSMALLINT *TextLength)};// SQLErrorA, SQLGetDiagRecA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT *pcbErrorMsg)};// SQLErrorW, SQLGetDiagRecW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT *pcbErrorMsg)};// SQLAllocConnect%newobject SQLAllocConnect;%apply SQLHANDLE *OUTPUT {SQLHDBC *ConnectionHandle};// SQLAllocEnv%newobject SQLAllocEnv;%apply SQLHANDLE *OUTPUT {SQLHENV *EnvironmentHandle};// SQLAllocHandle#if (ODBCVER >= 0x0300)%newobject SQLAllocHandle;%apply SQLHANDLE *OUTPUT {SQLHANDLE *OutputHandle};#endif// SQLAllocStmt%newobject SQLAllocStmt;%apply SQLHANDLE *OUTPUT {SQLHSTMT *StatementHandle};// SQLBrowseConnect, SQLBrowseConnectA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn)};// SQLBrowseConnectW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn)};// SQLColAttribute%typemap(in, numinputs=1) (SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute) (char tempbuf[BUFLEN], $*4_type buflen, int temp) {	$1 = ($1_ltype) PyInt_AsLong($input);	if (PyErr_Occurred()) SWIG_fail;	$2 = (SQLPOINTER) tempbuf;	$3 = (SQLSMALLINT) sizeof(tempbuf);	$4 = &buflen;	$5 = (SQLPOINTER) &temp;}%typemap(argout,fragment="t_output_helper") (SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute) {	PyObject *o;	switch ($1) {	case SQL_DESC_AUTO_UNIQUE_VALUE:	case SQL_DESC_CASE_SENSITIVE:	case SQL_DESC_CONCISE_TYPE:	case SQL_DESC_COUNT:	case SQL_DESC_DISPLAY_SIZE:	case SQL_DESC_FIXED_PREC_SCALE:	case SQL_DESC_LENGTH:	case SQL_DESC_NULLABLE:	case SQL_DESC_NUM_PREC_RADIX:	case SQL_DESC_OCTET_LENGTH:	case SQL_DESC_PRECISION:	case SQL_DESC_SCALE:	case SQL_DESC_SEARCHABLE:	case SQL_DESC_TYPE:	case SQL_DESC_UNNAMED:	case SQL_DESC_UNSIGNED:	case SQL_DESC_UPDATABLE:		o = PyInt_FromLong((long) * (int *) $5);		break;	default:		o = PyString_FromStringAndSize((char *) $2, *$4 >= $3 ? $3 - 1 : *$4);		break;	}	$result = t_output_helper($result, o);}// SQLColAttributeA%apply (SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute) {(SQLSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT *pcbCharAttr, SQLPOINTER pNumAttr)};// SQLColAttributeW%typemap(in, numinputs=1) (SQLUSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT *pcbCharAttr, SQLPOINTER pNumAttr) (char tempbuf[BUFLEN], $*4_type buflen, int temp) {	$1 = ($1_ltype) PyInt_AsLong($input);	if (PyErr_Occurred()) SWIG_fail;	$2 = (SQLPOINTER) tempbuf;	$3 = (SQLSMALLINT) sizeof(tempbuf);	$4 = &buflen;	$5 = (SQLPOINTER) &temp;}%typemap(argout,fragment="t_output_helper") (SQLUSMALLINT iField, SQLPOINTER pCharAttr, SQLSMALLINT cbCharAttrMax, SQLSMALLINT *pcbCharAttr, SQLPOINTER pNumAttr) {	PyObject *o;	switch ($1) {	case SQL_DESC_AUTO_UNIQUE_VALUE:	case SQL_DESC_CASE_SENSITIVE:	case SQL_DESC_CONCISE_TYPE:	case SQL_DESC_COUNT:	case SQL_DESC_DISPLAY_SIZE:	case SQL_DESC_FIXED_PREC_SCALE:	case SQL_DESC_LENGTH:	case SQL_DESC_NULLABLE:	case SQL_DESC_NUM_PREC_RADIX:	case SQL_DESC_OCTET_LENGTH:	case SQL_DESC_PRECISION:	case SQL_DESC_SCALE:	case SQL_DESC_SEARCHABLE:	case SQL_DESC_TYPE:	case SQL_DESC_UNNAMED:	case SQL_DESC_UNSIGNED:	case SQL_DESC_UPDATABLE:		o = PyInt_FromLong((long) * (int *) $5);		break;	default:		o = PyUnicode_FromSqlWChar((SQLWCHAR *) $2, (*$4 >= $3 ? (SQLSMALLINT) ($3 - sizeof(SQLWCHAR)) : *$4) / sizeof(SQLWCHAR));		break;	}	$result = t_output_helper($result, o);}%ignore SQLColAttributes;// SQLColumnPrivileges, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures,// SQLTablePrivileges// SQLColumnPrivilegesA, SQLPrimaryKeysA, SQLProcedureColumnsA, SQLProceduresA,// SQLTablePrivilegesA, SQLColumnsA, SQLSpecialColumnsA, SQLTablesA%apply (char *STRING, int LENGTH) {(SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szTableName, SQLSMALLINT cbTableName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szColumnName, SQLSMALLINT cbColumnName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szProcName, SQLSMALLINT cbProcName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szTableType, SQLSMALLINT cbTableType)};// SQLColumns, SQLSpecialColumns, SQLStatistics, SQLTables%apply (char *STRING, int LENGTH) {(SQLCHAR *CatalogName, SQLSMALLINT NameLength1)};%apply (char *STRING, int LENGTH) {(SQLCHAR *SchemaName, SQLSMALLINT NameLength2)};%apply (char *STRING, int LENGTH) {(SQLCHAR *TableName, SQLSMALLINT NameLength3)};%apply (char *STRING, int LENGTH) {(SQLCHAR *ColumnName, SQLSMALLINT NameLength4)};%apply (char *STRING, int LENGTH) {(SQLCHAR *TableType, SQLSMALLINT NameLength4)};// SQLConnect%apply (char *STRING, int LENGTH) {(SQLCHAR *ServerName, SQLSMALLINT NameLength1)};%apply (char *STRING, int LENGTH) {(SQLCHAR *UserName, SQLSMALLINT NameLength2)};%apply (char *STRING, int LENGTH) {(SQLCHAR *Authentication, SQLSMALLINT NameLength3)};// SQLColumnPrivilegesW, SQLPrimaryKeysW, SQLProcedureColumnsW, SQLProceduresW,// SQLTablePrivilegesW, SQLColumnsW, SQLSpecialColumnsW, SQLTablesW%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szCatalogName, SQLSMALLINT cbCatalogName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szSchemaName, SQLSMALLINT cbSchemaName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szTableName, SQLSMALLINT cbTableName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szColumnName, SQLSMALLINT cbColumnName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szProcName, SQLSMALLINT cbProcName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szTableType, SQLSMALLINT cbTableType)};// SQLConnectA%apply (char *STRING, int LENGTH) {(SQLCHAR *szDSN, SQLSMALLINT cbDSN)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szUID, SQLSMALLINT cbUID)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szAuthStr, SQLSMALLINT cbAuthStr)};// SQLConnectW%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szDSN, SQLSMALLINT cbDSN)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szUID, SQLSMALLINT cbUID)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szAuthStr, SQLSMALLINT cbAuthStr)};// SQLDataSources%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1)};%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *Description, SQLSMALLINT BufferLength2, SQLSMALLINT *NameLength2)};// SQLDataSourcesA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT *pcbDSN)};%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT *pcbDescription)};// SQLDataSourcesW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szDSN, SQLSMALLINT cbDSNMax, SQLSMALLINT *pcbDSN)};%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szDescription, SQLSMALLINT cbDescriptionMax, SQLSMALLINT *pcbDescription)};// SQLDescribeCol%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT *NameLength)};%apply int *OUTPUT {SQLSMALLINT *DataType};%apply int *OUTPUT {SQLULEN *ColumnSize};%apply int *OUTPUT {SQLSMALLINT *DecimalDigits};%apply int *OUTPUT {SQLSMALLINT *Nullable};// SQLDescribeColA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT *pcbColName)};// SQLDescribeColW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szColName, SQLSMALLINT cbColNameMax, SQLSMALLINT *pcbColName)};%apply int *OUTPUT {SQLSMALLINT *pfSqlType};%apply int *OUTPUT {SQLULEN *pcbColDef};%apply int *OUTPUT {SQLSMALLINT *pibScale};%apply int *OUTPUT {SQLSMALLINT *pfNullable};// SQLDescribeParam, SQLDescribeParamA%apply int *OUTPUT {SQLSMALLINT *pfSqlType};%apply int *OUTPUT {SQLULEN *pcbParamDef};%apply int *OUTPUT {SQLSMALLINT *pibScale};%apply int *OUTPUT {SQLSMALLINT *pfNullable};// SQLDriverConnect,  SQLDriverConnectA%apply (char *STRING, int LENGTH) {(SQLCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn)};%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut)};// SQLDriverConnectW%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn)};%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut)};// SQLDrivers, SQLDriversA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT *pcbDriverDesc)};%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT *pcbDrvrAttr)};// SQLDriversW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT *pcbDriverDesc)};%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT *pcbDrvrAttr)};// SQLError, SQLGetDiagRec// SQLErrorA, SQLGetDiagRecA%apply int *OUTPUT {SQLINTEGER *NativeError};// SQLErrorW, SQLGetDiagRecW%apply int *OUTPUT {SQLINTEGER *pfNativeError};// SQLExecDirect, SQLPrepare%apply (char *STRING, int LENGTH) {(SQLCHAR *StatementText, SQLINTEGER TextLength)};// SQLExecDirectA, SQLPrepareA%apply (char *STRING, int LENGTH) {(SQLCHAR *szSqlStr, SQLINTEGER cbSqlStr)};// SQLExecDirectW, SQLPrepareW%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szSqlStr, SQLINTEGER cbSqlStr)};// SQLExtendedFetch%apply int *OUTPUT {SQLROWSETSIZE *pcrow};%apply int *OUTPUT {SQLUSMALLINT *rgfRowStatus};// SQLForeignKeys, SQLForeignKeysA%apply (char *STRING, int LENGTH) {(SQLCHAR *szPkCatalogName, SQLSMALLINT cbPkCatalogName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szPkSchemaName, SQLSMALLINT cbPkSchemaName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szPkTableName, SQLSMALLINT cbPkTableName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szFkCatalogName, SQLSMALLINT cbFkCatalogName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szFkSchemaName, SQLSMALLINT cbFkSchemaName)};%apply (char *STRING, int LENGTH) {(SQLCHAR *szFkTableName, SQLSMALLINT cbFkTableName)};// SQLForeignKeysW

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -