Browse Source

Smart indentation cleanup

merge-requests/365/head
eidheim 10 years ago
parent
commit
89c96d598d
  1. 43
      src/source.cc
  2. 3
      src/source.h
  3. 9
      src/source_clang.cc
  4. 3
      src/source_clang.h

43
src/source.cc

@ -151,12 +151,12 @@ Source::View::View(const boost::filesystem::path &file_path, const boost::filesy
if(ends_line || *iter=='/' || *iter=='*') //iter_has_context_class is sadly bugged if(ends_line || *iter=='/' || *iter=='*') //iter_has_context_class is sadly bugged
backward_success=context_iter.backward_char(); backward_success=context_iter.backward_char();
if(backward_success) { if(backward_success) {
if(last_keyval_is_backspace && !is_word_iter(iter) && iter.forward_char()) {} //backspace fix if(last_keyval==GDK_KEY_BackSpace && !is_word_iter(iter) && iter.forward_char()) {} //backspace fix
if((spellcheck_all && !get_source_buffer()->iter_has_context_class(context_iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(context_iter, "comment") || get_source_buffer()->iter_has_context_class(context_iter, "string")) { if((spellcheck_all && !get_source_buffer()->iter_has_context_class(context_iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(context_iter, "comment") || get_source_buffer()->iter_has_context_class(context_iter, "string")) {
if(!is_word_iter(iter) || last_keyval_is_return) { //Might have used space or - to split two words if(!is_word_iter(iter) || last_keyval==GDK_KEY_Return) { //Might have used space or - to split two words
auto first=iter; auto first=iter;
auto second=iter; auto second=iter;
if(last_keyval_is_return) { if(last_keyval==GDK_KEY_Return) {
while(first && !first.ends_line() && first.backward_char()) {} while(first && !first.ends_line() && first.backward_char()) {}
if(first.backward_char() && second.forward_char()) { if(first.backward_char() && second.forward_char()) {
get_buffer()->remove_tag_by_name("spellcheck_error", first, second); get_buffer()->remove_tag_by_name("spellcheck_error", first, second);
@ -1049,6 +1049,21 @@ bool Source::View::find_left_bracket_backward(Gtk::TextIter iter, Gtk::TextIter
} }
bool Source::View::on_key_press_event(GdkEventKey* key) { bool Source::View::on_key_press_event(GdkEventKey* key) {
if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) {
if(spellcheck_suggestions_dialog->on_key_press(key))
return true;
}
if(autocomplete_dialog && autocomplete_dialog->shown) {
if(autocomplete_dialog->on_key_press(key))
return true;
}
last_keyval=key->keyval;
if(get_buffer()->get_has_selection())
return on_key_press_event_basic(key);
if(is_bracket_language) if(is_bracket_language)
return on_key_press_event_bracket_language(key); return on_key_press_event_bracket_language(key);
else else
@ -1057,20 +1072,6 @@ bool Source::View::on_key_press_event(GdkEventKey* key) {
//Basic indentation //Basic indentation
bool Source::View::on_key_press_event_basic(GdkEventKey* key) { bool Source::View::on_key_press_event_basic(GdkEventKey* key) {
if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) {
if(spellcheck_suggestions_dialog->on_key_press(key))
return true;
}
if(key->keyval==GDK_KEY_BackSpace)
last_keyval_is_backspace=true;
else
last_keyval_is_backspace=false;
if(key->keyval==GDK_KEY_Return)
last_keyval_is_return=true;
else
last_keyval_is_return=false;
get_source_buffer()->begin_user_action(); get_source_buffer()->begin_user_action();
auto iter=get_buffer()->get_insert()->get_iter(); auto iter=get_buffer()->get_insert()->get_iter();
//Indent as in next or previous line //Indent as in next or previous line
@ -1286,18 +1287,10 @@ bool Source::View::on_key_press_event_basic(GdkEventKey* key) {
//Bracket language indentation //Bracket language indentation
bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) { bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) {
if(spellcheck_suggestions_dialog->on_key_press(key))
return true;
}
auto iter=get_buffer()->get_insert()->get_iter(); auto iter=get_buffer()->get_insert()->get_iter();
if(iter.backward_char() && (get_source_buffer()->iter_has_context_class(iter, "comment") || get_source_buffer()->iter_has_context_class(iter, "string"))) if(iter.backward_char() && (get_source_buffer()->iter_has_context_class(iter, "comment") || get_source_buffer()->iter_has_context_class(iter, "string")))
return on_key_press_event_basic(key); return on_key_press_event_basic(key);
if(get_buffer()->get_has_selection()) {
return on_key_press_event_basic(key);
}
get_source_buffer()->begin_user_action(); get_source_buffer()->begin_user_action();
iter=get_buffer()->get_insert()->get_iter(); iter=get_buffer()->get_insert()->get_iter();
//Indent depending on if/else/etc and brackets //Indent depending on if/else/etc and brackets

3
src/source.h

@ -154,8 +154,7 @@ namespace Source {
bool spellcheck_all=false; bool spellcheck_all=false;
std::unique_ptr<SelectionDialog> spellcheck_suggestions_dialog; std::unique_ptr<SelectionDialog> spellcheck_suggestions_dialog;
bool last_keyval_is_backspace=false; guint last_keyval=0;
bool last_keyval_is_return=false;
private: private:
GtkSourceSearchContext *search_context; GtkSourceSearchContext *search_context;
GtkSourceSearchSettings *search_settings; GtkSourceSearchSettings *search_settings;

9
src/source_clang.cc

@ -501,15 +501,6 @@ Source::ClangViewParse(file_path, project_path, language), autocomplete_state(Au
}); });
} }
bool Source::ClangViewAutocomplete::on_key_press_event(GdkEventKey *key) {
last_keyval=key->keyval;
if(autocomplete_dialog && autocomplete_dialog->shown) {
if(autocomplete_dialog->on_key_press(key))
return true;
}
return View::on_key_press_event(key);
}
void Source::ClangViewAutocomplete::autocomplete_dialog_setup() { void Source::ClangViewAutocomplete::autocomplete_dialog_setup() {
auto start_iter=get_buffer()->get_insert()->get_iter(); auto start_iter=get_buffer()->get_insert()->get_iter();
if(prefix.size()>0 && !start_iter.backward_chars(prefix.size())) if(prefix.size()>0 && !start_iter.backward_chars(prefix.size()))

3
src/source_clang.h

@ -76,8 +76,6 @@ namespace Source {
virtual void async_delete(); virtual void async_delete();
bool full_reparse() override; bool full_reparse() override;
protected: protected:
bool on_key_press_event(GdkEventKey* key) override;
std::thread autocomplete_thread; std::thread autocomplete_thread;
private: private:
std::atomic<AutocompleteState> autocomplete_state; std::atomic<AutocompleteState> autocomplete_state;
@ -87,7 +85,6 @@ namespace Source {
std::unordered_map<std::string, std::pair<std::string, std::string> > autocomplete_dialog_rows; std::unordered_map<std::string, std::pair<std::string, std::string> > autocomplete_dialog_rows;
std::vector<AutoCompleteData> autocomplete_get_suggestions(const std::string &buffer, int line_number, int column); std::vector<AutoCompleteData> autocomplete_get_suggestions(const std::string &buffer, int line_number, int column);
Tooltips autocomplete_tooltips; Tooltips autocomplete_tooltips;
guint last_keyval=0;
std::string prefix; std::string prefix;
std::mutex prefix_mutex; std::mutex prefix_mutex;

Loading…
Cancel
Save