@@ -35,11 +35,12 @@ function Tangle:tangle()
35
35
36
36
for _ , info in ipairs (valid_blocks ) do
37
37
if tangle_info [info .filename ] then
38
- table.insert (tangle_info [info .filename ], ' ' )
38
+ table.insert (tangle_info [info .filename ][ ' content ' ] , ' ' )
39
39
else
40
- tangle_info [info .filename ] = {}
40
+ tangle_info [info .filename ] = {content = {} }
41
41
end
42
42
43
+ local filemode = tangle_info [info .filename ][' mode' ]
43
44
local do_noweb = info .header_args [' :noweb' ] == ' yes' or info .header_args [' :noweb' ] == ' tangle'
44
45
local parsed_content = info .content
45
46
@@ -63,19 +64,33 @@ function Tangle:tangle()
63
64
local shebang = info .header_args [' :shebang' ]
64
65
if shebang then
65
66
shebang = shebang :gsub (' [\' "]' , ' ' )
66
- utils .echo_info ((' shebang: %s' ):format (shebang ))
67
67
table.insert (parsed_content , 1 , shebang )
68
+ if filemode == nil then
69
+ filemode = " o755"
70
+ end
71
+ end
72
+
73
+ local tangle_mode = info .header_args [' :tangle-mode' ]
74
+ if tangle_mode then
75
+ filemode = tangle_mode :gsub (' [\' "]' , ' ' )
68
76
end
69
77
70
78
if info .name then
71
79
block_content_by_name [info .name ] = parsed_content
72
80
end
73
- vim .list_extend (tangle_info [info .filename ], parsed_content )
81
+ vim .list_extend (tangle_info [info .filename ][' content' ], parsed_content )
82
+ tangle_info [info .filename ][' mode' ] = filemode
74
83
end
75
84
76
85
local promises = {}
77
- for filename , content in pairs (tangle_info ) do
78
- table.insert (promises , utils .writefile (filename , table.concat (self :_remove_obsolete_indent (content ), ' \n ' )))
86
+ for filename , block in pairs (tangle_info ) do
87
+ table.insert (promises , utils .writefile (filename , table.concat (self :_remove_obsolete_indent (block [' content' ]), ' \n ' )))
88
+ local mode_str = block [' mode' ]
89
+ if mode_str and mode_str :sub (1 , 1 ) == ' o' then
90
+ mode_str = mode_str :sub (2 )
91
+ local mode_num = tonumber (mode_str , 8 )
92
+ vim .loop .fs_chmod (filename , mode_num )
93
+ end
79
94
end
80
95
Promise .all (promises ):wait ()
81
96
utils .echo_info ((' Tangled %d blocks from %s' ):format (# valid_blocks , vim .fn .fnamemodify (self .file .filename , ' :t' )))
0 commit comments