316 lines
13 KiB
Python
316 lines
13 KiB
Python
|
# FILE: autoload/conque_term/conque_globals.py
|
||
|
# AUTHOR: Nico Raffo <nicoraffo@gmail.com>
|
||
|
# WEBSITE: http://conque.googlecode.com
|
||
|
# MODIFIED: 2011-09-02
|
||
|
# VERSION: 2.3, for Vim 7.0
|
||
|
# LICENSE:
|
||
|
# Conque - Vim terminal/console emulator
|
||
|
# Copyright (C) 2009-2011 Nico Raffo
|
||
|
#
|
||
|
# MIT License
|
||
|
#
|
||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
# of this software and associated documentation files (the "Software"), to deal
|
||
|
# in the Software without restriction, including without limitation the rights
|
||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
# copies of the Software, and to permit persons to whom the Software is
|
||
|
# furnished to do so, subject to the following conditions:
|
||
|
#
|
||
|
# The above copyright notice and this permission notice shall be included in
|
||
|
# all copies or substantial portions of the Software.
|
||
|
#
|
||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
# THE SOFTWARE.
|
||
|
|
||
|
"""Common global constants and functions for Conque."""
|
||
|
|
||
|
import sys
|
||
|
import re
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# PYTHON VERSION
|
||
|
CONQUE_PYTHON_VERSION = sys.version_info[0]
|
||
|
|
||
|
# Encoding
|
||
|
|
||
|
try:
|
||
|
# Vim's character encoding
|
||
|
import vim
|
||
|
CONQUE_VIM_ENCODING = vim.eval('&encoding')
|
||
|
|
||
|
except:
|
||
|
CONQUE_VIM_ENCODING = 'utf-8'
|
||
|
|
||
|
|
||
|
def u(str_val, str_encoding='utf-8', errors='strict'):
|
||
|
""" Foolhardy attempt to make unicode string syntax compatible with both python 2 and 3. """
|
||
|
|
||
|
if not str_val:
|
||
|
str_val = ''
|
||
|
|
||
|
if CONQUE_PYTHON_VERSION == 3:
|
||
|
return str_val
|
||
|
|
||
|
else:
|
||
|
return unicode(str_val, str_encoding, errors)
|
||
|
|
||
|
def uchr(str):
|
||
|
""" Foolhardy attempt to make unicode string syntax compatible with both python 2 and 3. """
|
||
|
|
||
|
if CONQUE_PYTHON_VERSION == 3:
|
||
|
return chr(str)
|
||
|
|
||
|
else:
|
||
|
return unichr(str)
|
||
|
|
||
|
|
||
|
# Logging
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# Unix escape sequence settings
|
||
|
|
||
|
CONQUE_CTL = {
|
||
|
1: 'soh', # start of heading
|
||
|
2: 'stx', # start of text
|
||
|
7: 'bel', # bell
|
||
|
8: 'bs', # backspace
|
||
|
9: 'tab', # tab
|
||
|
10: 'nl', # new line
|
||
|
13: 'cr', # carriage return
|
||
|
14: 'so', # shift out
|
||
|
15: 'si' # shift in
|
||
|
}
|
||
|
# 11 : 'vt', # vertical tab
|
||
|
# 12 : 'ff', # form feed
|
||
|
|
||
|
# Escape sequences
|
||
|
CONQUE_ESCAPE = {
|
||
|
'm': 'font',
|
||
|
'J': 'clear_screen',
|
||
|
'K': 'clear_line',
|
||
|
'@': 'add_spaces',
|
||
|
'A': 'cursor_up',
|
||
|
'B': 'cursor_down',
|
||
|
'C': 'cursor_right',
|
||
|
'D': 'cursor_left',
|
||
|
'G': 'cursor_to_column',
|
||
|
'H': 'cursor',
|
||
|
'P': 'delete_chars',
|
||
|
'f': 'cursor',
|
||
|
'g': 'tab_clear',
|
||
|
'r': 'set_coords',
|
||
|
'h': 'set',
|
||
|
'l': 'reset'
|
||
|
}
|
||
|
# 'L': 'insert_lines',
|
||
|
# 'M': 'delete_lines',
|
||
|
# 'd': 'cusor_vpos',
|
||
|
|
||
|
# Alternate escape sequences, no [
|
||
|
CONQUE_ESCAPE_PLAIN = {
|
||
|
'D': 'scroll_up',
|
||
|
'E': 'next_line',
|
||
|
'H': 'set_tab',
|
||
|
'M': 'scroll_down'
|
||
|
}
|
||
|
# 'N': 'single_shift_2',
|
||
|
# 'O': 'single_shift_3',
|
||
|
# '=': 'alternate_keypad',
|
||
|
# '>': 'numeric_keypad',
|
||
|
# '7': 'save_cursor',
|
||
|
# '8': 'restore_cursor',
|
||
|
|
||
|
# Character set escape sequences, with "("
|
||
|
CONQUE_ESCAPE_CHARSET = {
|
||
|
'A': 'uk',
|
||
|
'B': 'us',
|
||
|
'0': 'graphics'
|
||
|
}
|
||
|
|
||
|
# Uber alternate escape sequences, with # or ?
|
||
|
CONQUE_ESCAPE_QUESTION = {
|
||
|
'1h': 'new_line_mode',
|
||
|
'3h': '132_cols',
|
||
|
'4h': 'smooth_scrolling',
|
||
|
'5h': 'reverse_video',
|
||
|
'6h': 'relative_origin',
|
||
|
'7h': 'set_auto_wrap',
|
||
|
'8h': 'set_auto_repeat',
|
||
|
'9h': 'set_interlacing_mode',
|
||
|
'1l': 'set_cursor_key',
|
||
|
'2l': 'set_vt52',
|
||
|
'3l': '80_cols',
|
||
|
'4l': 'set_jump_scrolling',
|
||
|
'5l': 'normal_video',
|
||
|
'6l': 'absolute_origin',
|
||
|
'7l': 'reset_auto_wrap',
|
||
|
'8l': 'reset_auto_repeat',
|
||
|
'9l': 'reset_interlacing_mode'
|
||
|
}
|
||
|
|
||
|
CONQUE_ESCAPE_HASH = {
|
||
|
'8': 'screen_alignment_test'
|
||
|
}
|
||
|
# '3': 'double_height_top',
|
||
|
# '4': 'double_height_bottom',
|
||
|
# '5': 'single_height_single_width',
|
||
|
# '6': 'single_height_double_width',
|
||
|
|
||
|
CONQUE_GRAPHICS_SET = [
|
||
|
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
|
||
|
0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
|
||
|
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
|
||
|
0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
|
||
|
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
|
||
|
0x0028, 0x0029, 0x002A, 0x2192, 0x2190, 0x2191, 0x2193, 0x002F,
|
||
|
0x2588, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
|
||
|
0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
|
||
|
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
|
||
|
0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
|
||
|
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
|
||
|
0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x00A0,
|
||
|
0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x00B0, 0x00B1,
|
||
|
0x2591, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0xF800,
|
||
|
0xF801, 0x2500, 0xF803, 0xF804, 0x251C, 0x2524, 0x2534, 0x252C,
|
||
|
0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00B7, 0x007F,
|
||
|
0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
|
||
|
0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
|
||
|
0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
|
||
|
0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
|
||
|
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||
|
0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||
|
0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
|
||
|
0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
|
||
|
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
|
||
|
0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
|
||
|
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
|
||
|
0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
|
||
|
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
|
||
|
0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||
|
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
|
||
|
]
|
||
|
|
||
|
# Font codes
|
||
|
CONQUE_FONT = {
|
||
|
0: {'description': 'Normal (default)', 'attributes': {'cterm': 'NONE', 'ctermfg': 'NONE', 'ctermbg': 'NONE', 'gui': 'NONE', 'guifg': 'NONE', 'guibg': 'NONE'}, 'normal': True},
|
||
|
1: {'description': 'Bold', 'attributes': {'cterm': 'BOLD', 'gui': 'BOLD'}, 'normal': False},
|
||
|
4: {'description': 'Underlined', 'attributes': {'cterm': 'UNDERLINE', 'gui': 'UNDERLINE'}, 'normal': False},
|
||
|
5: {'description': 'Blink (appears as Bold)', 'attributes': {'cterm': 'BOLD', 'gui': 'BOLD'}, 'normal': False},
|
||
|
7: {'description': 'Inverse', 'attributes': {'cterm': 'REVERSE', 'gui': 'REVERSE'}, 'normal': False},
|
||
|
8: {'description': 'Invisible (hidden)', 'attributes': {'ctermfg': '0', 'ctermbg': '0', 'guifg': '#000000', 'guibg': '#000000'}, 'normal': False},
|
||
|
22: {'description': 'Normal (neither bold nor faint)', 'attributes': {'cterm': 'NONE', 'gui': 'NONE'}, 'normal': True},
|
||
|
24: {'description': 'Not underlined', 'attributes': {'cterm': 'NONE', 'gui': 'NONE'}, 'normal': True},
|
||
|
25: {'description': 'Steady (not blinking)', 'attributes': {'cterm': 'NONE', 'gui': 'NONE'}, 'normal': True},
|
||
|
27: {'description': 'Positive (not inverse)', 'attributes': {'cterm': 'NONE', 'gui': 'NONE'}, 'normal': True},
|
||
|
28: {'description': 'Visible (not hidden)', 'attributes': {'ctermfg': 'NONE', 'ctermbg': 'NONE', 'guifg': 'NONE', 'guibg': 'NONE'}, 'normal': True},
|
||
|
30: {'description': 'Set foreground color to Black', 'attributes': {'ctermfg': '16', 'guifg': '#000000'}, 'normal': False},
|
||
|
31: {'description': 'Set foreground color to Red', 'attributes': {'ctermfg': '1', 'guifg': '#ff0000'}, 'normal': False},
|
||
|
32: {'description': 'Set foreground color to Green', 'attributes': {'ctermfg': '2', 'guifg': '#00ff00'}, 'normal': False},
|
||
|
33: {'description': 'Set foreground color to Yellow', 'attributes': {'ctermfg': '3', 'guifg': '#ffff00'}, 'normal': False},
|
||
|
35: {'description': 'Set foreground color to Magenta', 'attributes': {'ctermfg': '5', 'guifg': '#990099'}, 'normal': False},
|
||
|
36: {'description': 'Set foreground color to Cyan', 'attributes': {'ctermfg': '6', 'guifg': '#009999'}, 'normal': False},
|
||
|
37: {'description': 'Set foreground color to White', 'attributes': {'ctermfg': '7', 'guifg': '#ffffff'}, 'normal': False},
|
||
|
39: {'description': 'Set foreground color to default (original)', 'attributes': {'ctermfg': 'NONE', 'guifg': 'NONE'}, 'normal': True},
|
||
|
40: {'description': 'Set background color to Black', 'attributes': {'ctermbg': '16', 'guibg': '#000000'}, 'normal': False},
|
||
|
41: {'description': 'Set background color to Red', 'attributes': {'ctermbg': '1', 'guibg': '#ff0000'}, 'normal': False},
|
||
|
42: {'description': 'Set background color to Green', 'attributes': {'ctermbg': '2', 'guibg': '#00ff00'}, 'normal': False},
|
||
|
43: {'description': 'Set background color to Yellow', 'attributes': {'ctermbg': '3', 'guibg': '#ffff00'}, 'normal': False},
|
||
|
45: {'description': 'Set background color to Magenta', 'attributes': {'ctermbg': '5', 'guibg': '#990099'}, 'normal': False},
|
||
|
46: {'description': 'Set background color to Cyan', 'attributes': {'ctermbg': '6', 'guibg': '#009999'}, 'normal': False},
|
||
|
47: {'description': 'Set background color to White', 'attributes': {'ctermbg': '7', 'guibg': '#ffffff'}, 'normal': False},
|
||
|
49: {'description': 'Set background color to default (original).', 'attributes': {'ctermbg': 'NONE', 'guibg': 'NONE'}, 'normal': True},
|
||
|
90: {'description': 'Set foreground color to Black', 'attributes': {'ctermfg': '8', 'guifg': '#000000'}, 'normal': False},
|
||
|
91: {'description': 'Set foreground color to Red', 'attributes': {'ctermfg': '9', 'guifg': '#ff0000'}, 'normal': False},
|
||
|
92: {'description': 'Set foreground color to Green', 'attributes': {'ctermfg': '10', 'guifg': '#00ff00'}, 'normal': False},
|
||
|
93: {'description': 'Set foreground color to Yellow', 'attributes': {'ctermfg': '11', 'guifg': '#ffff00'}, 'normal': False},
|
||
|
95: {'description': 'Set foreground color to Magenta', 'attributes': {'ctermfg': '13', 'guifg': '#990099'}, 'normal': False},
|
||
|
96: {'description': 'Set foreground color to Cyan', 'attributes': {'ctermfg': '14', 'guifg': '#009999'}, 'normal': False},
|
||
|
97: {'description': 'Set foreground color to White', 'attributes': {'ctermfg': '15', 'guifg': '#ffffff'}, 'normal': False},
|
||
|
100: {'description': 'Set background color to Black', 'attributes': {'ctermbg': '8', 'guibg': '#000000'}, 'normal': False},
|
||
|
101: {'description': 'Set background color to Red', 'attributes': {'ctermbg': '9', 'guibg': '#ff0000'}, 'normal': False},
|
||
|
102: {'description': 'Set background color to Green', 'attributes': {'ctermbg': '10', 'guibg': '#00ff00'}, 'normal': False},
|
||
|
103: {'description': 'Set background color to Yellow', 'attributes': {'ctermbg': '11', 'guibg': '#ffff00'}, 'normal': False},
|
||
|
105: {'description': 'Set background color to Magenta', 'attributes': {'ctermbg': '13', 'guibg': '#990099'}, 'normal': False},
|
||
|
106: {'description': 'Set background color to Cyan', 'attributes': {'ctermbg': '14', 'guibg': '#009999'}, 'normal': False},
|
||
|
107: {'description': 'Set background color to White', 'attributes': {'ctermbg': '15', 'guibg': '#ffffff'}, 'normal': False}
|
||
|
}
|
||
|
|
||
|
|
||
|
# regular expression matching (almost) all control sequences
|
||
|
CONQUE_SEQ_REGEX = re.compile("(\x1b\[?\??#?[0-9;]*[a-zA-Z0-9@=>]|\x1b\][0-9];.*?\x07|[\x01-\x0f]|\x1b\([AB0])")
|
||
|
CONQUE_SEQ_REGEX_CTL = re.compile("^[\x01-\x0f]$")
|
||
|
CONQUE_SEQ_REGEX_CSI = re.compile("^\x1b\[")
|
||
|
CONQUE_SEQ_REGEX_TITLE = re.compile("^\x1b\]")
|
||
|
CONQUE_SEQ_REGEX_HASH = re.compile("^\x1b#")
|
||
|
CONQUE_SEQ_REGEX_ESC = re.compile("^\x1b.$")
|
||
|
CONQUE_SEQ_REGEX_CHAR = re.compile("^\x1b[()]")
|
||
|
|
||
|
# match table output
|
||
|
CONQUE_TABLE_OUTPUT = re.compile("^\s*\|\s.*\s\|\s*$|^\s*\+[=+-]+\+\s*$")
|
||
|
|
||
|
# basic terminal colors
|
||
|
CONQUE_COLOR_SEQUENCE = (
|
||
|
'000', '009', '090', '099', '900', '909', '990', '999',
|
||
|
'000', '00f', '0f0', '0ff', 'f00', 'f0f', 'ff0', 'fff'
|
||
|
)
|
||
|
|
||
|
|
||
|
# Windows subprocess constants
|
||
|
|
||
|
# shared memory size
|
||
|
CONQUE_SOLE_BUFFER_LENGTH = 1000
|
||
|
CONQUE_SOLE_INPUT_SIZE = 1000
|
||
|
CONQUE_SOLE_STATS_SIZE = 1000
|
||
|
CONQUE_SOLE_COMMANDS_SIZE = 255
|
||
|
CONQUE_SOLE_RESCROLL_SIZE = 255
|
||
|
CONQUE_SOLE_RESIZE_SIZE = 255
|
||
|
|
||
|
# interval of screen redraw
|
||
|
# larger number means less frequent
|
||
|
CONQUE_SOLE_SCREEN_REDRAW = 50
|
||
|
|
||
|
# interval of full buffer redraw
|
||
|
# larger number means less frequent
|
||
|
CONQUE_SOLE_BUFFER_REDRAW = 500
|
||
|
|
||
|
# interval of full output bucket replacement
|
||
|
# larger number means less frequent, 1 = every time
|
||
|
CONQUE_SOLE_MEM_REDRAW = 1000
|
||
|
|
||
|
# maximum number of lines with terminal colors
|
||
|
# ignored if g:ConqueTerm_Color = 2
|
||
|
CONQUE_MAX_SYNTAX_LINES = 200
|
||
|
|
||
|
# windows input splitting on special keys
|
||
|
CONQUE_WIN32_REGEX_VK = re.compile("(\x1b\[[0-9;]+VK)")
|
||
|
|
||
|
# windows attribute string splitting
|
||
|
CONQUE_WIN32_REGEX_ATTR = re.compile("((.)\\2*)", re.DOTALL)
|
||
|
|
||
|
# special key attributes
|
||
|
CONQUE_VK_ATTR_CTRL_PRESSED = u('1024')
|
||
|
|
||
|
|