remove file's font id

This commit is contained in:
Allen Webster 2016-07-04 16:40:57 -04:00
parent cdcc01ec23
commit 3430f50103
9 changed files with 317 additions and 158 deletions

View File

@ -1027,14 +1027,6 @@ the range [1,16].</div></div><hr>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>cmdid_left_adjust_view adjusts the view to be just left of the cursor's position.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>cmdid_page_up</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>cmdid_page_up moves the view up one whole screen height and centers the cursor there.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>cmdid_page_down</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>cmdid_page_down moves the view down one whole screen height and centers the cursor there.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>cmdid_word_complete</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>cmdid_word_complete begins or continues cycling through completions for a partial word.</div></div>
</div>
@ -1196,16 +1188,23 @@ the range [1,16].</div></div><hr>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>BufferSetting_Lex</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_Lex setting is used to determine whether to store C++ tokens from with the buffer.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_Lex setting is used to determine whether to store C++ tokens
from with the buffer.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>BufferSetting_WrapLine</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_WrapLine setting is used to determine whether a buffer prefers to be viewed with wrapped lines,
individual views can be set to override this value after being tied to the buffer.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_WrapLine setting is used to determine whether a buffer prefers
to be viewed with wrapped lines, individual views can be set to override this value after
being tied to the buffer.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>BufferSetting_MapID</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_MapID setting specifies the id of the command map that should be active when a buffer is active.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The BufferSetting_MapID setting specifies the id of the command map that should be
active when a buffer is active.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>BufferSetting_Eol</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'></div></div>
</div>
</div><hr>
<div id='View_Setting_ID_doc' style='margin-bottom: 1cm;'>
@ -1216,8 +1215,20 @@ the range [1,16].</div></div><hr>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>ViewSetting_Null is not a valid setting, it is reserved to detect errors.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>ViewSetting_WrapLine</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The ViewSetting_WrapLine setting determines whether the view applies line wrapping
at the border of the panel for long lines. Whenever the view switches to a new buffer it
will reset this setting to match the 'preferred' line wrapping setting of the buffer.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>ViewSetting_ShowWhitespace</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The ViewSetting_ShowWhitespace setting determines whether the view highlights
whitespace in a file. Whenever the view switches to a new buffer this setting is turned off.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>ViewSetting_ShowScrollbar</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The ViewSetting_ShowScrollbar setting determines whether a scroll bar is attached to a view in it's scrollable section.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The ViewSetting_ShowScrollbar setting determines whether a scroll bar is
attached to a view in it's scrollable section.</div></div>
</div>
</div><hr>
<div id='Mouse_Cursor_Show_Type_doc' style='margin-bottom: 1cm;'>
@ -1235,23 +1246,24 @@ the range [1,16].</div></div><hr>
<div id='Buffer_Seek_Type_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.13: Buffer_Seek_Type</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>enum Buffer_Seek_Type;</div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Values</i></b></div><div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>The Buffer_Seek_Type is is used in a Buffer_Seek to identify which
coordinates are suppose to be used for the seek.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Values</i></b></div><div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>buffer_seek_pos</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This value indicates absolute positioning where positions are measured as the number of bytes from the start of the file.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>buffer_seek_wrapped_xy</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This value indicates xy positioning with wrapped lines where the x and y values are in pixels.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>buffer_seek_unwrapped_xy</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This value indicates xy positioning with unwrapped lines where the x and y values are in pixels.</div></div>
</div>
<div>
<div><span style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>buffer_seek_line_char</span></span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This value indicates line-character, or line-column positioning. These coordinates are 1 based to match standard line numbering.</div></div>
</div>
</div><hr>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>See Also</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#Buffer_Seek_doc'>Buffer_Seek</a></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#4coder_Buffer_Positioning_System_doc'>4coder_Buffer_Positioning_System</a></div></div><hr>
<div id='Key_Modifier_Flag_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.14: Key_Modifier_Flag</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>enum Key_Modifier_Flag;</div>
@ -1725,35 +1737,36 @@ float wrapped_y;<br>
</div>
};<br>
</div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Fields</i></b></div><div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>Full_Cursor describes the position of a cursor in every buffer
coordinate system supported by 4coder.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Fields</i></b></div><div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>pos</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the cursor's position in absolute positioning.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>line</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the number of the line where the cursor is located. This field is one based.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>character</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the number of the column where the cursor is located. This field is one based.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>unwrapped_x</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the x position measured with unwrapped lines.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>unwrapped_y</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the y position measured with unwrapped lines.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>wrapped_x</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the x position measured with wrapped lines.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>wrapped_y</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This field contains the y position measured with wrapped lines.</div></div>
</div>
</div><hr>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>See Also</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#4coder_Buffer_Positioning_System_doc'>4coder_Buffer_Positioning_System</a></div></div><hr>
<div id='Buffer_Seek_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.32: Buffer_Seek</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>struct Buffer_Seek {<br>
@ -1784,35 +1797,41 @@ int32_t character;<br>
</div>
};<br>
</div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Fields</i></b></div><div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Description</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'>Buffer_Seek describes the destination of a seek operation. There are helpers
for concisely creating Buffer_Seek structs. They can be found in 4coder_buffer_types.h.</div><div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>Fields</i></b></div><div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>type</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The type field determines the coordinate system of the seek operation.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>pos</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The pos field specified the pos when the seek is in absolute position.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>round_down</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>For xy coordinate seeks, rounding down means that any x in the box of the
character lands on that character. For instance when clicking rounding down is the
user's expected behavior. Not rounding down means that the right hand portion of
the character's box, which is closer to the next character, will land on that next
character. The unrounded behavior is the expected behavior when moving vertically
and keeping the preferred x.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>x</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The x coordinate for xy type seeks.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>y</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The y coordinate for xy type seeks.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>line</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The line number of a line-character type seek.</div></div>
</div>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>character</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>UNDOCUMENTED.</div></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>The character number of a line-character type seek.</div></div>
</div>
</div><hr>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>See Also</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#Buffer_Seek_Type_doc'>Buffer_Seek_Type</a></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#4coder_Buffer_Positioning_System_doc'>4coder_Buffer_Positioning_System</a></div></div><hr>
<div id='Buffer_Summary_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.33: Buffer_Summary</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>struct Buffer_Summary {<br>
@ -1828,6 +1847,7 @@ char * buffer_name;<br>
int32_t buffer_name_len;<br>
bool32 is_lexed;<br>
int32_t map_id;<br>
bool32 unwrapped_lines;<br>
</div>
};<br>
</div>
@ -1877,7 +1897,11 @@ int32_t map_id;<br>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>map_id</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>If this is not a null summary, this field specifies the id of the command map for this buffer.</div></div>
</div>
</div><hr>
<div>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>unwrapped_lines</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>If this is not a null summary, this field indicates whether the buffer 'prefers' wrapped lines.</div></div>
</div>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>See Also</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#Access_Flag_doc'>Access_Flag</a></div></div><hr>
<div id='View_Summary_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.34: View_Summary</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>struct View_Summary {<br>
@ -1947,7 +1971,7 @@ GUI_Scroll_Vars scroll_vars;<br>
<div style='font-family: "Courier New", Courier, monospace; text-align: left;'><span style='font-weight: 600;'>scroll_vars</span></div>
<div style='margin-bottom: 6mm;'><div style='margin-left: 5mm; margin-right: 5mm;'>This feature is not fully implemented yet.</div></div>
</div>
</div><hr>
<div style='margin-top: 3mm; margin-bottom: 3mm; color: #309030;'><b><i>See Also</i></b></div><div style='margin-left: 5mm; margin-right: 5mm;'><a href='#Access_Flag_doc'>Access_Flag</a></div></div><hr>
<div id='User_Input_doc' style='margin-bottom: 1cm;'>
<h4>&sect;3.4.35: User_Input</h4>
<div style='font-family: "Courier New", Courier, monospace; text-align: left; margin-top: 3mm; margin-bottom: 3mm; font-size: .95em; background: #DFDFDF; padding: 0.25em;'>struct User_Input {<br>

View File

@ -23,6 +23,10 @@ CUSTOM_COMMAND_SIG(write_allen_note){
write_string(app, make_lit_string("// NOTE(allen): "));
}
CUSTOM_COMMAND_SIG(write_allen_doc){
write_string(app, make_lit_string("/* DOC() */"));
}
CUSTOM_COMMAND_SIG(write_zero_struct){
write_string(app, make_lit_string(" = {0};"));
}
@ -294,6 +298,7 @@ default_keys(Bind_Helper *context){
bind(context, '=', MDFR_CTRL, write_increment);
bind(context, 't', MDFR_ALT, write_allen_todo);
bind(context, 'y', MDFR_ALT, write_allen_note);
bind(context, 'r', MDFR_ALT, write_allen_note);
bind(context, '[', MDFR_CTRL, open_long_braces);
bind(context, '{', MDFR_CTRL, open_long_braces_semicolon);
bind(context, '}', MDFR_CTRL, open_long_braces_break);
@ -327,8 +332,8 @@ default_keys(Bind_Helper *context){
bind(context, key_down, MDFR_NONE, move_down);
bind(context, key_end, MDFR_NONE, seek_end_of_line);
bind(context, key_home, MDFR_NONE, seek_beginning_of_line);
bind(context, key_page_up, MDFR_NONE, cmdid_page_up);
bind(context, key_page_down, MDFR_NONE, cmdid_page_down);
bind(context, key_page_up, MDFR_NONE, page_up);
bind(context, key_page_down, MDFR_NONE, page_down);
bind(context, key_right, MDFR_CTRL, seek_whitespace_right);
bind(context, key_left, MDFR_CTRL, seek_whitespace_left);
@ -354,7 +359,7 @@ default_keys(Bind_Helper *context){
bind(context, 'H', MDFR_CTRL, cmdid_history_forward);
bind(context, 'j', MDFR_CTRL, cmdid_to_lowercase);
bind(context, 'K', MDFR_CTRL, cmdid_kill_buffer);
bind(context, 'l', MDFR_CTRL, cmdid_toggle_line_wrap);
bind(context, 'l', MDFR_CTRL, toggle_line_wrap);
bind(context, 'm', MDFR_CTRL, cursor_mark_swap);
bind(context, 'O', MDFR_CTRL, cmdid_reopen);
bind(context, 'q', MDFR_CTRL, query_replace);
@ -371,11 +376,11 @@ default_keys(Bind_Helper *context){
bind(context, 'z', MDFR_CTRL, cmdid_undo);
bind(context, '1', MDFR_CTRL, cmdid_eol_dosify);
bind(context, '1', MDFR_CTRL, eol_dosify);
bind(context, '!', MDFR_CTRL, eol_nixify);
bind(context, '?', MDFR_CTRL, cmdid_toggle_show_whitespace);
bind(context, '?', MDFR_CTRL, toggle_show_whitespace);
bind(context, '~', MDFR_CTRL, cmdid_clean_all_lines);
bind(context, '!', MDFR_CTRL, cmdid_eol_nixify);
bind(context, '\n', MDFR_SHIFT, write_and_auto_tab);
bind(context, ' ', MDFR_SHIFT, write_character);

View File

@ -199,6 +199,36 @@ CUSTOM_COMMAND_SIG(move_down_10){
move_vertical(app, 10.f);
}
static float
get_page_jump(View_Summary *view){
i32_Rect region = view->file_region;
float page_jump = 1;
if (view->line_height > 0){
page_jump = (float)(region.y1 - region.y0) / view->line_height;
page_jump -= 3.f;
if (page_jump <= 0){
page_jump = 1.f;
}
}
return(page_jump);
}
CUSTOM_COMMAND_SIG(page_up){
unsigned int access = AccessProtected;
View_Summary view = app->get_active_view(app, access);
float page_jump = get_page_jump(&view);
move_vertical(app, -page_jump);
}
CUSTOM_COMMAND_SIG(page_down){
unsigned int access = AccessProtected;
View_Summary view = app->get_active_view(app, access);
float page_jump = get_page_jump(&view);
move_vertical(app, page_jump);
}
CUSTOM_COMMAND_SIG(move_left){
unsigned int access = AccessProtected;
@ -1265,44 +1295,6 @@ CUSTOM_COMMAND_SIG(execute_previous_cli){
}
}
CUSTOM_COMMAND_SIG(execute_arbitrary_command){
// NOTE(allen): This isn't a super powerful version of this command, I will expand
// upon it so that it has all the cmdid_* commands by default. However, with this
// as an example you have everything you need to make it work already. You could
// even use app->memory to create a hash table in the start hook.
Query_Bar bar;
char space[1024];
bar.prompt = make_lit_string("Command: ");
bar.string = make_fixed_width_string(space);
if (!query_user_string(app, &bar)) return;
// NOTE(allen): Here I chose to end this query bar because when I call another
// command it might ALSO have query bars and I don't want this one hanging
// around at that point. Since the bar exists on my stack the result of the query
// is still available in bar.string though.
app->end_query_bar(app, &bar, 0);
if (match(bar.string, make_lit_string("open all code"))){
exec_command(app, open_all_code);
}
else if(match(bar.string, make_lit_string("close all code"))){
exec_command(app, close_all_code);
}
else if (match(bar.string, make_lit_string("open menu"))){
exec_command(app, cmdid_open_menu);
}
else if (match(bar.string, make_lit_string("dos lines"))){
exec_command(app, cmdid_eol_dosify);
}
else if (match(bar.string, make_lit_string("nix lines"))){
exec_command(app, cmdid_eol_nixify);
}
else{
app->print_message(app, literal("unrecognized command\n"));
}
}
CUSTOM_COMMAND_SIG(open_in_other_regular){
exec_command(app, cmdid_change_active_panel);
exec_command(app, cmdid_interactive_open);
@ -1524,6 +1516,76 @@ CUSTOM_COMMAND_SIG(change_active_panel_regular){
#endif
//
// Common Settings Commands
//
CUSTOM_COMMAND_SIG(toggle_line_wrap){
View_Summary view = app->get_active_view(app, AccessProtected);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, AccessProtected);
bool32 unwrapped = view.unwrapped_lines;
if (buffer.exists){
unwrapped = buffer.unwrapped_lines;
}
app->view_set_setting(app, &view, ViewSetting_WrapLine, unwrapped);
}
CUSTOM_COMMAND_SIG(toggle_show_whitespace){
View_Summary view = app->get_active_view(app, AccessProtected);
app->view_set_setting(app, &view, ViewSetting_ShowWhitespace, !view.show_whitespace);
}
CUSTOM_COMMAND_SIG(eol_dosify){
View_Summary view = app->get_active_view(app, AccessOpen);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, AccessOpen);
app->buffer_set_setting(app, &buffer, BufferSetting_Eol, true);
}
CUSTOM_COMMAND_SIG(eol_nixify){
View_Summary view = app->get_active_view(app, AccessOpen);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, AccessOpen);
app->buffer_set_setting(app, &buffer, BufferSetting_Eol, false);
}
CUSTOM_COMMAND_SIG(execute_arbitrary_command){
// NOTE(allen): This isn't a super powerful version of this command, I will expand
// upon it so that it has all the cmdid_* commands by default. However, with this
// as an example you have everything you need to make it work already. You could
// even use app->memory to create a hash table in the start hook.
Query_Bar bar;
char space[1024];
bar.prompt = make_lit_string("Command: ");
bar.string = make_fixed_width_string(space);
if (!query_user_string(app, &bar)) return;
// NOTE(allen): Here I chose to end this query bar because when I call another
// command it might ALSO have query bars and I don't want this one hanging
// around at that point. Since the bar exists on my stack the result of the query
// is still available in bar.string though.
app->end_query_bar(app, &bar, 0);
if (match(bar.string, make_lit_string("open all code"))){
exec_command(app, open_all_code);
}
else if(match(bar.string, make_lit_string("close all code"))){
exec_command(app, close_all_code);
}
else if (match(bar.string, make_lit_string("open menu"))){
exec_command(app, cmdid_open_menu);
}
else if (match(bar.string, make_lit_string("dos lines"))){
exec_command(app, eol_dosify);
}
else if (match(bar.string, make_lit_string("nix lines"))){
exec_command(app, eol_nixify);
}
else{
app->print_message(app, literal("unrecognized command\n"));
}
}
// NOTE(allen|a4): scroll rule information
//

View File

@ -54,10 +54,6 @@ ENUM(uint64_t, Command_ID){
cmdid_center_view,
/* DOC(cmdid_left_adjust_view adjusts the view to be just left of the cursor's position.) */
cmdid_left_adjust_view,
/* DOC(cmdid_page_up moves the view up one whole screen height and centers the cursor there.) */
cmdid_page_up,
/* DOC(cmdid_page_down moves the view down one whole screen height and centers the cursor there.) */
cmdid_page_down,
/* DOC(cmdid_word_complete begins or continues cycling through completions for a partial word.) */
cmdid_word_complete,
@ -76,16 +72,22 @@ ENUM(uint64_t, Command_ID){
/* DOC(cmdid_to_uppercase makes all the alphabetic characters in the cursor/mark range lowercase.) */
cmdid_to_lowercase,
#if 0
/* DOC(cmdid_toggle_line_wrap toggles the line wrap setting of the active view. ) */
cmdid_toggle_line_wrap,
/* DOC(cmdid_toggle_line_wrap toggles the show whitespace setting of the active view.) */
cmdid_toggle_show_whitespace,
#endif
/* DOC(cmdid_clean_all_lines deletes extra whitespace out the currently active buffer.) */
cmdid_clean_all_lines,
#if 0
/* DOC(cmdid_eol_dosify sets the currently active buffer to dos save mode where the end of a line is "\r\n") */
cmdid_eol_dosify,
/* DOC(cmdid_eol_nixify sets the currently active buffer to nix save mode where the end of a line is "\n") */
cmdid_eol_nixify,
#endif
/* DOC(cmdid_interactive_new begins an interactive dialogue to create a new buffer.) */
cmdid_interactive_new,
@ -152,20 +154,41 @@ ENUM(int32_t, Event_Message_Type_ID){
ENUM(int32_t, Buffer_Setting_ID){
/* DOC(BufferSetting_Null is not a valid setting, it is reserved to detect errors.) */
BufferSetting_Null,
/* DOC(The BufferSetting_Lex setting is used to determine whether to store C++ tokens from with the buffer.) */
/* DOC(The BufferSetting_Lex setting is used to determine whether to store C++ tokens
from with the buffer.) */
BufferSetting_Lex,
/* DOC(The BufferSetting_WrapLine setting is used to determine whether a buffer prefers to be viewed with wrapped lines,
individual views can be set to override this value after being tied to the buffer.) */
/* DOC(The BufferSetting_WrapLine setting is used to determine whether a buffer prefers
to be viewed with wrapped lines, individual views can be set to override this value after
being tied to the buffer.) */
BufferSetting_WrapLine,
/* DOC(The BufferSetting_MapID setting specifies the id of the command map that should be active when a buffer is active.) */
/* DOC(The BufferSetting_MapID setting specifies the id of the command map that should be
active when a buffer is active.) */
BufferSetting_MapID,
/* DOC(The BufferSetting_Eol setting spcifies how line ends should be saved to the backing file.
A 1 indicates dos endings "\r\n" and a 0 indicates nix endings "\n".*/
BufferSetting_Eol,
};
/* DOC(A View_Setting_ID names a setting in a view.) */
ENUM(int32_t, View_Setting_ID){
/* DOC(ViewSetting_Null is not a valid setting, it is reserved to detect errors.) */
ViewSetting_Null,
/* DOC(The ViewSetting_ShowScrollbar setting determines whether a scroll bar is attached to a view in it's scrollable section.) */
/* DOC(The ViewSetting_WrapLine setting determines whether the view applies line wrapping
at the border of the panel for long lines. Whenever the view switches to a new buffer it
will reset this setting to match the 'preferred' line wrapping setting of the buffer.) */
ViewSetting_WrapLine,
/* DOC(The ViewSetting_ShowWhitespace setting determines whether the view highlights
whitespace in a file. Whenever the view switches to a new buffer this setting is turned off.) */
ViewSetting_ShowWhitespace,
/* DOC(The ViewSetting_ShowScrollbar setting determines whether a scroll bar is
attached to a view in it's scrollable section.) */
ViewSetting_ShowScrollbar,
};
@ -286,15 +309,19 @@ ENUM(int32_t, Mouse_Cursor_Show_Type){
// MouseCursorShow_WhenActive,// TODO(allen): coming soon
};
/* DOC(UNDOCUMENTED.) */
/* DOC(The Buffer_Seek_Type is is used in a Buffer_Seek to identify which
coordinates are suppose to be used for the seek.)
DOC_SEE(Buffer_Seek)
DOC_SEE(4coder_Buffer_Positioning_System)
*/
ENUM(int32_t, Buffer_Seek_Type){
/* DOC(UNDOCUMENTED.) */
/* DOC(This value indicates absolute positioning where positions are measured as the number of bytes from the start of the file.) */
buffer_seek_pos,
/* DOC(UNDOCUMENTED.) */
/* DOC(This value indicates xy positioning with wrapped lines where the x and y values are in pixels.) */
buffer_seek_wrapped_xy,
/* DOC(UNDOCUMENTED.) */
/* DOC(This value indicates xy positioning with unwrapped lines where the x and y values are in pixels.) */
buffer_seek_unwrapped_xy,
/* DOC(UNDOCUMENTED.) */
/* DOC(This value indicates line-character, or line-column positioning. These coordinates are 1 based to match standard line numbering.) */
buffer_seek_line_char
};
@ -457,53 +484,62 @@ struct GUI_Scroll_Vars{
int32_t prev_target_x;
};
/* DOC(UNDOCUMENTED.) */
/* DOC(Full_Cursor describes the position of a cursor in every buffer
coordinate system supported by 4coder.)
DOC_SEE(4coder_Buffer_Positioning_System) */
struct Full_Cursor{
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the cursor's position in absolute positioning.) */
int32_t pos;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the number of the line where the cursor is located. This field is one based.) */
int32_t line;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the number of the column where the cursor is located. This field is one based.) */
int32_t character;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the x position measured with unwrapped lines.) */
float unwrapped_x;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the y position measured with unwrapped lines.) */
float unwrapped_y;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the x position measured with wrapped lines.) */
float wrapped_x;
/* DOC(UNDOCUMENTED.) */
/* DOC(This field contains the y position measured with wrapped lines.) */
float wrapped_y;
};
/* DOC(UNDOCUMENTED.) */
/* DOC(Buffer_Seek describes the destination of a seek operation. There are helpers
for concisely creating Buffer_Seek structs. They can be found in 4coder_buffer_types.h.)
DOC_SEE(Buffer_Seek_Type)
DOC_SEE(4coder_Buffer_Positioning_System)*/
struct Buffer_Seek{
/* DOC(UNDOCUMENTED.) */
/* DOC(The type field determines the coordinate system of the seek operation.) */
Buffer_Seek_Type type;
union{
struct {
/* DOC(UNDOCUMENTED.) */
/* DOC(The pos field specified the pos when the seek is in absolute position.) */
int32_t pos;
};
struct {
/* DOC(UNDOCUMENTED.) */
/* DOC(For xy coordinate seeks, rounding down means that any x in the box of the
character lands on that character. For instance when clicking rounding down is the
user's expected behavior. Not rounding down means that the right hand portion of
the character's box, which is closer to the next character, will land on that next
character. The unrounded behavior is the expected behavior when moving vertically
and keeping the preferred x.) */
bool32 round_down;
/* DOC(UNDOCUMENTED.) */
/* DOC(The x coordinate for xy type seeks.) */
float x;
/* DOC(UNDOCUMENTED.) */
/* DOC(The y coordinate for xy type seeks.) */
float y;
};
struct {
/* DOC(UNDOCUMENTED.) */
/* DOC(The line number of a line-character type seek.) */
int32_t line;
/* DOC(UNDOCUMENTED.) */
/* DOC(The character number of a line-character type seek.) */
int32_t character;
};
};
};
/* DOC(
Buffer_Summary acts as a handle to a buffer and describes the state of the buffer.
) */
/* DOC(Buffer_Summary acts as a handle to a buffer and describes the state of the buffer.)
DOC_SEE(Access_Flag)*/
struct Buffer_Summary{
/* DOC(
This field indicates whether the Buffer_Summary describes a buffer that is open in 4coder.
@ -519,7 +555,6 @@ struct Buffer_Summary{
int32_t buffer_id;
/*
DOC(If this is not a null summary, this field contains flags describing the protection status of the buffer.)
DOC_SEE(Access_Flag)
*/
Access_Flag lock_flags;
@ -540,9 +575,12 @@ struct Buffer_Summary{
bool32 is_lexed;
/* DOC(If this is not a null summary, this field specifies the id of the command map for this buffer.) */
int32_t map_id;
/* DOC(If this is not a null summary, this field indicates whether the buffer 'prefers' wrapped lines.) */
bool32 unwrapped_lines;
};
/* DOC(View_Summary acts as a handle to a view and describes the state of the view.) */
/* DOC(View_Summary acts as a handle to a view and describes the state of the view.)
DOC_SEE(Access_Flag)*/
struct View_Summary{
/* DOC(
This field indicates whether the View_Summary describes a view that is open in 4coder.
@ -558,7 +596,6 @@ struct View_Summary{
int32_t buffer_id;
/*
DOC(If this is not a null summary, this field contains flags describing the protection status of the view.)
DOC_SEE(Access_Flag)
*/
Access_Flag lock_flags;

13
4ed.cpp
View File

@ -659,10 +659,13 @@ COMMAND_DECL(toggle_line_wrap){
view_set_relative_scrolling(view, scrolling);
}
#if 0
COMMAND_DECL(toggle_show_whitespace){
REQ_READABLE_VIEW(view);
view->file_data.show_whitespace = !view->file_data.show_whitespace;
}
#endif
COMMAND_DECL(toggle_tokens){
#if BUFFER_EXPERIMENT_SCALPEL <= 0
@ -734,6 +737,7 @@ COMMAND_DECL(clean_all_lines){
view_clean_whitespace(system, models, view);
}
#if 0
COMMAND_DECL(eol_dosify){
REQ_READABLE_VIEW(view);
REQ_FILE(file, view);
@ -749,6 +753,7 @@ COMMAND_DECL(eol_nixify){
file->settings.dos_write_mode = 0;
file->state.last_4ed_edit_time = system->now_time_stamp();
}
#endif
COMMAND_DECL(open_panel_vsplit){
USE_VARS(vars);
@ -1059,21 +1064,13 @@ setup_command_table(){
SET(to_uppercase);
SET(to_lowercase);
SET(toggle_line_wrap);
SET(toggle_show_whitespace);
SET(clean_all_lines);
SET(eol_dosify);
SET(eol_nixify);
SET(open_panel_vsplit);
SET(open_panel_hsplit);
SET(close_panel);
SET(change_active_panel);
SET(page_up);
SET(page_down);
SET(open_color_tweaker);
SET(open_config);
SET(open_menu);

View File

@ -22,7 +22,6 @@ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *wor
buffer->exists = 1;
buffer->ready = file_is_ready(file);
buffer->is_lexed = file->settings.tokens_exist;
buffer->buffer_id = file->id.id;
buffer->size = file->state.buffer.size;
@ -31,7 +30,9 @@ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *wor
buffer->file_name = file->name.source_path.str;
buffer->buffer_name = file->name.live_name.str;
buffer->is_lexed = file->settings.tokens_exist;
buffer->map_id = file->settings.base_map_id;
buffer->unwrapped_lines = file->settings.unwrapped_lines;
buffer->lock_flags = 0;
if (file->settings.read_only){
@ -765,6 +766,12 @@ DOC_SEE(Buffer_Setting_ID)
iter.view->map = get_map(models, file->settings.base_map_id);
}
}break;
case BufferSetting_Eol:
{
file->settings.dos_write_mode = value;
file->state.last_4ed_edit_time = system->now_time_stamp();
}break;
}
fill_buffer_summary(buffer, file, cmd);
}
@ -1136,12 +1143,42 @@ DOC_SEE(View_Setting_ID)
bool32 result = false;
if (vptr){
result = true;
switch (setting){
case ViewSetting_WrapLine:
{
Relative_Scrolling scrolling = view_get_relative_scrolling(vptr);
if (value){
if (vptr->file_data.unwrapped_lines){
vptr->file_data.unwrapped_lines = 0;
vptr->edit_pos->scroll.target_x = 0;
view_cursor_move(vptr, vptr->edit_pos->cursor.pos);
view_set_relative_scrolling(vptr, scrolling);
}
}
else{
if (!vptr->file_data.unwrapped_lines){
vptr->file_data.unwrapped_lines = 1;
view_cursor_move(vptr, vptr->edit_pos->cursor.pos);
view_set_relative_scrolling(vptr, scrolling);
}
}
}break;
case ViewSetting_ShowWhitespace:
{
vptr->file_data.show_whitespace = value;
}break;
case ViewSetting_ShowScrollbar:
{
result = true;
vptr->hide_scrollbar = !value;
}break;
default:
{
result = false;
}break;
}
fill_view_summary(view, vptr, cmd);

View File

@ -129,7 +129,6 @@ struct Editing_File_Settings{
// NOTE(allen): This part of the Editing_File is cleared whenever
// the contents of the file is set.
struct Editing_File_State{
i16 font_id;
Buffer_Type buffer;
Undo_Data undo;

View File

@ -1050,11 +1050,10 @@ file_create_from_string(System_Functions *system, Models *models,
file_set_name(working_set, file, (char*)name);
file->state.font_id = models->global_font.font_id;
file_synchronize_times(system, file, name);
Render_Font *font = get_font_info(font_set, file->state.font_id)->font;
i16 font_id = models->global_font.font_id;
Render_Font *font = get_font_info(font_set, font_id)->font;
float *advance_data = 0;
if (font) advance_data = font->advance_data;
file_measure_starts_widths(system, general, &file->state.buffer, advance_data);
@ -2124,7 +2123,8 @@ file_do_single_edit(System_Functions *system,
i32 new_line_count = buffer_count_newlines(&file->state.buffer, start, start+str_len);
i32 line_shift = new_line_count - replaced_line_count;
Render_Font *font = get_font_info(models->font_set, file->state.font_id)->font;
i16 font_id = models->global_font.font_id;
Render_Font *font = get_font_info(models->font_set, font_id)->font;
file_grow_starts_widths_as_needed(general, buffer, line_shift);
buffer_remeasure_starts(buffer, line_start, line_end, line_shift, shift_amount);
@ -2196,7 +2196,8 @@ file_do_white_batch_edit(System_Functions *system, Models *models, Editing_File
// NOTE(allen): meta data
{
Buffer_Measure_Starts state = {};
Render_Font *font = get_font_info(models->font_set, file->state.font_id)->font;
i16 font_id = models->global_font.font_id;
Render_Font *font = get_font_info(models->font_set, font_id)->font;
float *advance_data = 0;
if (font) advance_data = font->advance_data;
buffer_measure_starts_widths(&state, &file->state.buffer, advance_data);

View File

@ -682,7 +682,7 @@ buffer_measure_starts_zero_widths_(Buffer_Measure_Starts *state, Buffer_Type *bu
internal_4tech int
buffer_measure_starts_widths(Buffer_Measure_Starts *state, Buffer_Type *buffer, float *advance_data){
int result;
int result = 0;
if (advance_data){
result = buffer_measure_starts_widths_(state, buffer, advance_data);
@ -697,14 +697,11 @@ buffer_measure_starts_widths(Buffer_Measure_Starts *state, Buffer_Type *buffer,
internal_4tech void
buffer_remeasure_starts(Buffer_Type *buffer, int line_start, int line_end, int line_shift, int text_shift){
Buffer_Stringify_Type loop;
int *starts;
int line_count;
char *data;
int size, end;
int line_i, char_i, start;
starts = buffer->line_starts;
line_count = buffer->line_count;
int *starts = buffer->line_starts;
int line_count = buffer->line_count;
char *data = 0;
int size = 0, end = 0;
int line_i = 0, char_i = 0, start = 0;
assert_4tech(0 <= line_start);
assert_4tech(line_start <= line_end);
@ -760,20 +757,15 @@ internal_4tech void
buffer_remeasure_widths(Buffer_Type *buffer, float *advance_data,
int line_start, int line_end, int line_shift){
Buffer_Stringify_Type loop;
int *starts;
float *widths;
int line_count;
int widths_count;
char *data;
int size, end;
int i, j;
float width;
char ch;
starts = buffer->line_starts;
widths = buffer->line_widths;
line_count = buffer->line_count;
widths_count = buffer->widths_count;
int *starts = buffer->line_starts;
float *widths = buffer->line_widths;
int line_count = buffer->line_count;
int widths_count = buffer->widths_count;
char *data = 0;
int size = 0, end = 0;
int i = 0, j = 0;
float width = 0;
char ch = 0;
assert_4tech(0 <= line_start);
assert_4tech(line_start <= line_end);
@ -814,6 +806,11 @@ buffer_remeasure_widths(Buffer_Type *buffer, float *advance_data,
}
}
}
if (j == buffer_size(buffer)){
widths[i] = width;
assert_4tech(i+1 == line_count);
}
}
#if 0