diff options
Diffstat (limited to 'modules/cpp/init.lua')
-rw-r--r-- | modules/cpp/init.lua | 164 |
1 files changed, 151 insertions, 13 deletions
diff --git a/modules/cpp/init.lua b/modules/cpp/init.lua index cce101a8..55555a65 100644 --- a/modules/cpp/init.lua +++ b/modules/cpp/init.lua @@ -3,28 +3,166 @@ --- -- The cpp module. -- It provides utilities for editing C/C++ code. +-- User tags are loaded from _USERHOME/modules/cpp/tags and user apis are loaded +-- from _USERHOME/modules/cpp/api. module('_m.cpp', package.seeall) -if type(_G.snippets) == 'table' then +-- Markdown: +-- ## Key Commands +-- +-- + `Alt+L, M`: Open this module for editing. +-- + `.`: When to the right of a known symbol, show an autocompletion list of +-- fields and functions. +-- + `->`: When to the right of a known symbol, show an autocompletion list of +-- fields and functions. +-- + `Ctrl+I`: (Windows and Linux) Autocomplete symbol. +-- + `~`: (Mac OSX) Autocomplete symbol. +-- + `Ctrl+H`: Show documentation for the selected symbol or the symbol under +-- the caret. +-- + `Shift+Return`: Add ';' to line end and insert newline. +-- +-- ## Fields +-- +-- * `sense`: The C/C++ [Adeptsense](_m.textadept.adeptsense.html). + +local m_editing, m_run = _m.textadept.editing, _m.textadept.run +-- Comment string tables use lexer names. +m_editing.comment_string.cpp = '//' +-- Compile and Run command tables use file extensions. +m_run.compile_command.c = + 'gcc -pedantic -Os -o "%(filename_noext)" %(filename)' +m_run.compile_command.cpp = + 'g++ -pedantic -Os -o "%(filename_noext)" %(filename)' +m_run.run_command.c = '%(filedir)%(filename_noext)' +m_run.run_command.cpp = '%(filedir)%(filename_noext)' +m_run.error_detail.c = { + pattern = '^(.-):(%d+): (.+)$', + filename = 1, line = 2, message = 3 +} + --- --- Container for C/C++-specific snippets. --- @class table --- @name snippets.cpp - _G.snippets.cpp = {} +-- Sets default buffer properties for C/C++ files. +function set_buffer_properties() + end -if type(_G.keys) == 'table' then +-- Adeptsense. + +sense = _m.textadept.adeptsense.new('cpp') +sense.ctags_kinds = { + c = 'classes', + d = 'functions', + e = 'fields', + f = 'functions', + g = 'classes', + m = 'fields', + s = 'classes', + t = 'classes' +} +sense.syntax.type_declarations = { + '(%u[%w_%.]+)[%s%*&]+%_[^%w_]', -- Foo bar, Foo *bar, Foo* bar, Foo &bar, etc. +} +sense:add_trigger('.') +sense:add_trigger('->') + +-- Load user tags and apidoc. +if lfs.attributes(_USERHOME..'/modules/cpp/tags') then + sense:load_ctags(_USERHOME..'/modules/cpp/tags') +end +if lfs.attributes(_USERHOME..'/modules/cpp/api') then + sense.api_files[#sense.api_files + 1] = _USERHOME..'/modules/cpp/api' +end + +-- Commands. + --- -- Container for C/C++-specific key commands. -- @class table --- @name keys.cpp - _G.keys.cpp = {} -end +-- @name _G.keys.cpp +_G.keys.cpp = { + al = { + m = { io.open_file, + (_HOME..'/modules/cpp/init.lua'):iconv('UTF-8', _CHARSET) }, + }, + ['s\n'] = { function() + buffer:line_end() + buffer:add_text(';') + buffer:new_line() + end }, + [not OSX and 'ci' or '~'] = { sense.complete, sense }, + ch = { sense.show_apidoc, sense }, +} -require 'cpp.adeptsense' -require 'cpp.commands' -require 'cpp.snippets' +-- Snippets. -function set_buffer_properties() +--- +-- Container for C/C++-specific snippets. +-- @class table +-- @name _G.snippets.cpp +if type(_G.snippets) == 'table' then + _G.snippets.cpp = { + rc = 'reinterpret_cast<%1>(%2(%(selected_text)))', + sc = 'static_cast<%1>(%2(%(selected_text)))', + cc = 'const_cast<%1>(%2(%(selected_text)))', + -- Lua snippets + lf = 'static int %1(function)(lua_State *%2(lua)) {\n\t%0\n\treturn 0;\n}', + ls = 'lua_State', + lgf = 'lua_getfield(%1(lua), %2(-1), %3(field));', + lgg = 'lua_getglobal(%1(lua), %2(global));', + lgt = 'lua_gettable(%1(lua), %2(-2));', + ltop = 'lua_gettop(%1(lua));', + lib = 'lua_isboolean(%1(lua), %2(-1))', + licf = 'lua_iscfunction(%1(lua), %2(-1))', + lif = 'lua_isfunctionu(%1(lua), %2(-1))', + linil = 'lua_isnil(%1(lua), %2(-1))', + linone = 'lua_isnone(%1(lua), %2(-1))', + linonen = 'lua_isnoneornil(%1(lua), %2(-1))', + lin = 'lua_isnumber(%1(lua), %2(-1))', + lis = 'lua_isstring(%1(lua), %2(-1))', + lit = 'lua_istable(%1(lua), %2(-1))', + lith = 'lua_isthread(%1(lua), %2(-1))', + liu = 'lua_isuserdata(%1(lua), %2(-1))', + llen = 'lua_objlen(%1(lua), %2(-1))', + lpop = 'lua_pop(%1(lua), %2(1));', + lpb = 'lua_pushboolean(%1(lua), %2(boolean));', + lpcc = 'lua_pushcclosure(%1(lua), %2(closure_func), %3(num_values));', + lpcf = 'lua_pushcfunction(%1(lua), %2(cfunction));', + lpi = 'lua_pushinteger(%1(lua), %2(integer));', + lplu = 'lua_pushlightuserdata(%1(lua), %2(userdata));', + lpnil = 'lua_pushnil(%1(lua));', + lpn = 'lua_pushnumber(%1(lua), %2(number));', + lps = 'lua_pushstring(%1(lua), %2(string));', + lpth = 'lua_pushthread(%1(lua));', + lpv = 'lua_pushvalue(%1(lua), %2(-1));', + lrg = 'lua_rawget(%1(lua), %2(-2));', + lrgi = 'lua_rawgeti(%1(lua), %2(-2), %3(1));', + lrs = 'lua_rawset(%1(lua), %2(-3));', + lrsi = 'lua_rawseti(%1(lua), %2(-2), %3(1));', + lr = 'lua_register(%1(lua), %2(fname), %3(cfunction));', + lsf = 'lua_setfield(%1(lua), %2(-2), %3(field));', + lsg = 'lua_setglobal(%1(lua), %2(global));', + lst = 'lua_settable(%1(lua), %2(-3));', + ltb = 'lua_toboolean(%1(lua), %2(-1))', + ltcf = 'lua_tocfunction(%1(lua), %2(-1))', + lti = 'lua_tointeger(%1(lua), %2(-1))', + ltn = 'lua_tonumber(%1(lua), %2(-1))', + ltp = 'lua_topointer(%1(lua), %2(-1))', + lts = 'lua_tostring(%1(lua), %2(-1))', + ltth = 'lua_tothread(%1(lua), %2(-1))', + ltu = 'lua_touserdata(%1(lua), %2(-1))', + lt = 'lua_type(%1(lua), %2(-1))', + llcint = 'luaL_checkint(%1(lua), %2(-1))', + llci = 'luaL_checkinteger(%1(lua), %2(-1))', + llcl = 'luaL_checklong(%1(lua), %2(-1))', + llcn = 'luaL_checknumber(%1(lua), %2(-1))', + llcs = 'luaL_checkstring(%1(lua), %2(-1))', + llcu = 'luaL_checkudata(%1(lua), %2(-1), %3(mt_name))', + llerr = 'luaL_error(%1(lua), %2(errorstring)%3(, %4(arg)));', + lloint = 'luaL_optint(%1(lua), %2(-1), %3(default))', + lloi = 'luaL_optinteger(%1(lua), %2(-1), %3(default))', + llol = 'luaL_optlong(%1(lua), %2(-1), %3(default))', + llon = 'luaL_optnumber(%1(lua), %2(-1), %3(default))', + llos = 'luaL_optstring(%1(lua), %2(-1), %3(default))', + } end |