-
Notifications
You must be signed in to change notification settings - Fork 39
CppUncrustifyIndent
mitchell edited this page Dec 12, 2020
·
2 revisions
This function calls uncrustify -q -c ~/.textadept/crust.cfg
on your current
code.
To install uncrustify (there is a Debian/Ubuntu package) http://uncrustify.sourceforge.net/
function indent_cpp()
-- written by JB Mouret -- [email protected]
local buffer = buffer
-- unindent the current line (to make empty lines empty)
local line = buffer.line_from_position(buffer.current_pos)
local indent = buffer.line_indentation[line];
local start_pos = buffer.line_end_position[line - 1] + 1
local s = math.max(start_pos, buffer.current_pos - indent)
for i=1,10 do buffer.back_tab() end
local line_length = buffer.line_length(line)
local empty_line = (line_length == 1)
if (empty_line) then buffer.add_text(';') end
local input = buffer:get_text()
local tmpfile = _USERHOME..'/.ft'
local conf = _USERHOME..'/crust.cfg'
local f = io.open(tmpfile, 'wb')
f:write(input)
f:close()
local cmd = table.concat({"uncrustify -q -c ", conf, ' -f "'..tmpfile..'"'}, ' ')
local p = io.popen(cmd)
local fv2 = buffer.first_visible_line
buffer:set_text(p:read('*all'))
buffer:line_scroll(0, fv2);
s = s + buffer.line_indentation[buffer.line_from_position(s)]
buffer:goto_pos(s)
if (empty_line) then
buffer:line_end()
buffer:delete_back();
end
os.remove(tmpfile)
end
To bind this function to "tab" (as emacs does it):
_G.keys.cpp['\t'] = indent_cpp