2004-05-25 Daniel Elstner * autogen.sh: Avoid using postfix operators on subexpressions in the regex used to extract version numbers. This makes the expression both simpler and more portable. * macros/pcre.m4 (PCRE_CHECK_VERSION): ditto. 2004-05-25 Daniel Elstner * macros/pcre.m4 (PCRE_CHECK_VERSION): Strip "-L/usr/lib" from PCRE_LIBS if necessary. Strip "-I/usr/include" from PCRE_CFLAGS too -- although not required on Debian, it's better not to rely on this. * autogen.sh: Standard POSIX regexps suck: according to the sed documentation, both "\?" and "\+" are GNU extensions. Replace by "\{0,1\}" and "\{1,\}", respectively. * macros/pcre.m4 (PCRE_CHECK_VERSION): ditto. 2004-05-21 Daniel Elstner * src/mainwindow.cc (MainWindow::on_find_files): Minor coding style modifications. 2004-05-21 Daniel Elstner * src/mainwindow.cc (MainWindow::on_select_folder): Simplify the code: with the new FileChooser we no longer have to handle the case of selecting a file instead of a directory. 2004-05-21 Daniel Elstner * src/fileio.h (ErrorBinaryFile): New exception class. * src/fileio.cc (load_iochannel): Throw ErrorBinaryFile if the input stream contains '\0' bytes, rather than just returning a null pointer. (load_file): Throw ErrorBinaryFile if the file could not be loaded in either of the specified encodings. * src/filetree.cc (FileTree::load_file_with_fallback): Handle the ErrorBinaryFile exception. 2004-05-21 Daniel Elstner * src/filetree.cc (FileTree::replace_all_matches): Substitute Gtk::TreeIter with Gtk::TreeModel::iterator for consistency. 2004-05-21 Daniel Elstner * src/undostack.cc (UndoStack::do_undo): Don't create a temporary copy of the pulse slot since libsigc++2 allows calling const slots. 2004-05-21 Daniel Elstner * src/filetree.cc: Replace a couple of explicit TreePath(iter) conversions by simple assignments. (FileTree::replace_all_matches): Make sure path_match_first_ points to the first file that still has matches after a replace operation was interrupted. (FileTree::replace_matches_at_iter): Remove the assertion that FileBuffer::get_match_count() must return 0 after returning from FileBuffer::replace_all_matches(), because the operation might have been interrupted. 2004-05-20 Daniel Elstner * ui/mainwindow.glade (entry_preview): Set "can_focus" to False. 2004-05-20 Daniel Elstner * src/mainwindow.cc: Break apart a couple of uber-long lines. 2004-05-20 Daniel Elstner * src/aboutdialog.cc (package_title): New string constant which defines the package title string plus surrounding markup. (AboutDialog::create): Use the separated package_title constant. * src/aboutdialog.{cc,h} (AboutDialog::create): Change the return type to std::auto_ptr because copying-destroys-source is just what we want. Calling release() to achieve exactly that was a silly idea to begin with. 2004-05-19 Daniel Elstner * ui/aboutdialog.glade (label_debian_*): Remove. The Debian package of regexxer is not the only one out there, and I cannot list all of them in the about dialog. Sorry Ross :/ (label_translator_{what,who}): Give credit to the translator(s) for the user's locale as listed in the translation of the string "translator-credits". (label_url): Get rid of the custom SelectableLabel widget class. The only feature provided by the custom widget was tab-navigation to labels -- I figured one can simply use C-Tab to do just that. (label_author_who): ditto (label_translator_who): ditto. * src/aboutdialog.cc (SelectableLabel): Remove custom widget. (AboutDialog::create): Acommodate to glade file modifications. 2004-05-19 Daniel Elstner * Makefile.am (ACLOCAL_AMFLAGS): No need to explicitely specify $(top_srcdir)/ in the directory name because the aclocal rule changes to that directory anyway. This also avoids confusing recent releases of gettextize. 2004-05-19 Daniel Elstner * configure.ac (CONFIG_STATUS_DEPENDENCIES): AC_SUBST() this variable with '$(top_srcdir)/po/LINGUAS' for utmost perfection ;-) 2004-05-19 Daniel Elstner * ui/mainwindow.glade (toolbar): Make glade-2 replace its old-style magic "class names" with proper GtkToolItem and derivated elements. Note that you'll need to apply the patch for #142761 in order to make changing the toolbar style at runtime work. (combo_pattern): Replace deprecated GtkCombo with GtkComboBoxEntry. * src/controller.cc (ControlItem::add_widgets): Allow for both Gtk::ToolButton and Gtk::Button widgets, and detect at runtime which type to use. * src/mainwindow.cc (MainWindow::load_xml): Due to #142755, we currently have to use get_child() on combo_pattern to gain access to the entry widget. Also, a hack was necessary to attach the tooltip to the entry without instantiating another Gtk::Tooltips object. * src/mainwindow.h: Remove a couple of unused forward declarations. 2004-05-18 Daniel Elstner * src/prefdialog.cc (PrefDialog::on_response): Invoke Gtk::Widget::activate() instead of directly calling the handler on_entry_fallback_activate(). Dunno why I didn't see this before. 2004-05-18 Daniel Elstner * src/prefdialog.cc (get_toolbar_style_index): Return -1 rather than 0 on failure. 2004-05-18 Daniel Elstner * ui/prefdialog.glade (button_textview_font): Replace custom font selection button with the new GtkFontButton. (button_match_color): Replace custom color selection button with the new GtkColorButton. (button_current_color): ditto. (combo_toolbar_style): Rename from option_toolbar_style. Use the new GtkComboBox widget instead of GtkOptionMenu. * src/prefdialog.{cc,h} (FontSelectionButton): Remove. (ColorSelectionButton): Remove. (PrefDialog): Accomodate to changes in the glade file. (on_textview_font_set): Rename from on_textview_font_selected(). (on_match_color_set): Rename from on_match_color_selected(). (on_current_color_set): Rename from on_current_color_selected(). 2004-05-18 Daniel Elstner * src/mainwindow.cc (MainWindow::load_xml): Make the folder button grab focus because otherwise the Preferences tool button will be focused after startup. I blame libglade -- its whole tool button handling seems to be somewhat shaky. 2004-05-18 Daniel Elstner * configure.ac (ALL_LINGUAS): Use `cat "$srcdir/po/LINGUAS"` to assign this variable, so that there is only one file to edit when adding a new language. 2004-05-17 Duarte Loreto * configure.ac: Added Portuguese (pt) to ALL_LINGUAS. 2004-05-17 Christian Rose * configure.ac: Added "sv" to ALL_LINGUAS. 2004-05-17 Daniel Elstner * Makefile.am (dist_noinst_SCRIPTS): Remove config.rpath because automake distributes this file automatically. List intltool-*.in files in the separate variable dist_intltool. (dist_noinst_DATA): List all *.m4 files in the separate variable dist_macros. Move $(dist_intltool) from dist_noinst_SCRIPTS here because the .in files aren't scripts. 2004-05-17 Daniel Elstner * regexxer.desktop (Name): Use _Name to make it translatable, and change the string to "regexxer Search Tool". Idea from Dag Wieers. 2004-05-17 Daniel Elstner * src/filebuffer.cc: Mark all const_cast<> work-arounds for the Gtk::TextIter API bug with // XXX comments. (FileBuffer::get_match_index): Get rid of libstdc++-v2 work-around. * src/filebuffer.h (FileBuffer): Get rid of the friend declarations that were added to work around a GCC 2.95 deficiency. * src/filetree.h (FileTree): ditto * src/mainwindow.h (MainWindow): ditto. 2004-05-17 Daniel Elstner * Makefile.am (install-schemas): Simplify. Since regexxer.schemas is now a generated file it is always placed in the build directory. (uninstall-schemas): Likewise. Also add $(schemas_DATA) to the prerequisites so that the rule will work with a clean tree. Having make uninstall generate files is a little awkward, but I cannot see a way around that :/ 2004-05-17 Daniel Elstner * Makefile.am (CLEANFILES): List build-time generated files $(desktop_DATA) and $(schemas_DATA). (DISTCLEANFILES): List configure-time generated files intltool-extract, intltool-merge and intltool-update. 2004-05-17 Daniel Elstner * autogen.sh: Execute glib-gettextize and intltoolize. * configure.ac: Call AC_PROG_INTLTOOL(). Assign ALL_LINGUAS and GETTEXT_PACKAGE, and do an AC_SUBST() of the latter. (AM_GNU_GETTEXT): Use AM_GLIB_GNU_GETTEXT() instead. * Makefile.am (dist_desktop_DATA): Remove the dist_ prefix, introduce desktop_in_files, and add the @INTLTOOL_DESKTOP_RULE@ substitution in order to make regexxer intltool-aware. (dist_schema_DATA): Likewise for the GConf schemas file. (dist_noinst_SCRIPTS): Add intltool-extract.in, intltool-merge.in and intltool-update.in. * regexxer.desktop: Rename to regexxer.desktop.in, use _Comment instead of Comment, and remove the manually inserted de and dk translations. * regexxer.schemas: Rename to regexxer.schemas.in. 2004-05-17 Daniel Elstner * src/filetreeprivate.cc (collatekey_sort_func): Use libstdc++-v3 method std::string::compare() instead of memcmp() for sub-string comparison, since libsigc++2 depends on gcc >= 3 anyway. 2004-05-17 Daniel Elstner * src/filetree.cc (FileTree::FileTree): Make the file column take up available space with set_expand(true). 2004-05-17 Daniel Elstner * configure.ac (AC_INIT): Bump version to 0.8. (PKG_CHECK_MODULES): Require gconfmm-2.6 >= 2.6.1. (REGEXXER_GCONFMM_VALUE_HACK): Remove. * src/miscutils.{cc,h} (check_for_broken_gconfmm_value_changed): Remove. (has_broken_gconfmm_value_changed): Remove. * src/main.cc (main): Remove call to gconfmm bug runtime test. * src/filebuffer.cc (on_conf_value_changed): Remove hack. * src/filetree.cc (on_conf_value_changed): ditto * src/mainwindow.cc (on_conf_value_changed): ditto. * src/prefdialog.{cc,h} (on_conf_value_changed_hack): Remove. 2004-05-16 Daniel Elstner * src/mainwindow.cc (on_select_folder): Use Gtk::FileChooserDialog instead of the old Gtk::FileSelection. 2004-05-16 Daniel Elstner * ui/prefdialog.glade: Removes the line that was inserted by buggy glade-2. 2004-05-14 Daniel Elstner * src/filetree.cc: Replace instances of `...' in message strings with "...". Since the translator is supposed to use double-quotes it would be confusing to use single quotes in the original string. * src/mainwindow.cc: ditto * src/prefdialog.cc: ditto. 2004-05-14 Daniel Elstner * ui/mainwindow.glade (button_find_files): Use a custom image and label instead of a stock item as button content, so that it can be more clearly distinguished from button_find_matches. 2004-05-13 Daniel Elstner * ui/mainwindow.glade: Reintroduce tearoff menu items by manually inserting the necessary XML elements. 2004-05-12 Daniel Elstner * src/fileio.cc: Remove the libgnome-vfsmm code already enclosed by #if 0 ... #endif. It's all in the CVS history anyway. * src/filetree.cc: ditto. 2004-05-12 Daniel Elstner * src/imagebutton.{cc,h}: Remove files as they're no longer used. * src/Makefile.am (regexxer_SOURCES): Remove imagebutton.{cc,h}. 2004-05-10 Daniel Elstner * src/globalstrings.h (glade_mainwindow_filename): New string. * src/mainwindow.{cc,h}: Use libglademm to load the UI at runtime, and make the actual Gtk::Window a member of class MainWindow. Remove the old UI creation code. * src/controller.{cc,h} (Controller::load_xml): The menu bar, toolbar and action area is now contained in mainwindow.glade, and thus this new method wholly replaces the old code which generated those widgets. (ControlItem::add_widgets): New helper method intented to help reducing the code size. * src/filetree.cc (regexxer_create_file_tree): New function. * src/statusline.cc (regexxer_create_status_line): New function. * src/main.cc (main): Access the Gtk::Window by using the new accessor method Regexxer::MainWindow::get_window(). 2004-05-10 Daniel Elstner * ui/mainwindow.glade: New file defining the main window's UI. * ui/Makefile.am (dist_glade_DATA): Add mainwindow.glade. 2004-05-10 Daniel Elstner * src/globalstrings.h (glade_aboutdialog_filename): New string. * src/aboutdialog.{cc,h}: Use libglademm to load the dialog UI at runtime, and replace class AboutDialog by a single create() function in namespace Regexxer::AboutDialog. Remove the old UI creation code. * src/mainwindow.{cc,h} (MainWindow::about_dialog_): Change type to std::auto_ptr since AboutDialog no longer exists. Replace all references to AboutDialog in the implementation too. (MainWindow::on_about): Make use of the new AboutDialog::create(). 2004-05-10 Daniel Elstner * ui/aboutdialog.glade: New file defining the UI of the about dialog. * ui/Makefile.am (dist_glade_DATA): Add aboutdialog.glade. 2004-05-10 Daniel Elstner * src/prefdialog.cc (PrefDialog::load_xml): Remove superfluous sub-block. 2004-05-10 Daniel Elstner * src/prefdialog.cc (regexxer_create_font_selection_button): Add missing parameters to the function signature. (regexxer_create_color_selection_button): ditto. 2004-05-10 Daniel Elstner * src/Makefile.am (global_defines): Define REGEXXER_PKGDATADIR. * src/globalstrings.h (glade_prefdialog_filename): New string. * src/prefdialog.{cc,h}: Use libglademm to load the dialog UI at runtime, and make the actual dialog widget a data member of class PrefDialog. Remove the old UI creation code. * src/mainwindow.cc (MainWindow::on_preferences): Use the new PrefDialog::get_dialog() accessor to get the actual widget. 2004-05-10 Daniel Elstner * ui: New directory for glade XML files. * ui/.cvsignore: New file. * ui/Makefile.am: New file. * ui/prefdialog.glade: New file defining the UI of the preferences dialog. * configure.ac (PKG_CHECK_MODULES): Check for libglademm-2.0. (AC_CONFIG_FILES): Add ui/Makefile. * Makefile.am (SUBDIRS): Add ui. 0.7: 2004-05-08 Daniel Elstner * AUTHORS: Add Murray Cumming. * NEWS: Update. 2004-05-08 Daniel Elstner * src/translation.{cc,h} (sgettext): Ditch the sgettext() approach, because it's not likely to be supported by libglade when regexxer starts using that at some point. Until now there are no ambiguous messages in regexxer, and we can switch back when the need arises. * src/controller.cc: Remove the disambiguing "...|" prefix from all translatable messages. * src/filebuffer.cc: ditto * src/filetree.cc: ditto * src/mainwindow.cc: ditto * src/prefdialog.cc: ditto * src/statusline.cc: ditto. 2004-05-07 Daniel Elstner * src/main.cc (stock_icon_info): Rename to 'stock_icon_about', as it should have been called in the first place. Apparently I misinterpreted a change in the German GNOME translation as project-wide switch to a new name for "About". Now I realize why Murray changed that string a while ago... * src/controller.{cc,h} (Controller::info): Rename to 'about'. * src/mainwindow.{cc,h} (MainWindow::on_info): Rename to 'on_about'. 2004-05-06 Daniel Elstner * src/translation.cc (compose_impl): Simplify the loop in order to avoid the need for look-ahead via Util::next(). 2004-05-05 Daniel Elstner * src/translation.cc (compose_impl): Apparently there's no need to use Glib::Unicode::isdigit() since digit_value() is defined to return -1 for non-digits anyway. 2004-05-05 Daniel Elstner * src/translation.{cc,h} (compose): Add a set of overloaded utility functions to be used to compose a text message from a format string and up to three string arguments. This allows the translator to arrange the arguments as required by the language. * src/filetree.cc (FileTree::save_file_at_iter): Make use of Util::compose() instead of separately piecing strings together. Also, translate the format string via gettext(). (load_file_with_fallback): ditto * src/mainwindow.cc (MainWindow::on_exec_search): ditto * src/prefdialog.cc (PrefDialog::on_entry_fallback_activate): ditto. 2004-05-05 Daniel Elstner * src/miscutils.cc: Compile the runtime check for that gconfmm bug only if REGEXXER_ENABLE_GCONFMM_VALUE_HACK is defined, as it currently always is. * src/main.cc (main): Test for REGEXXER_ENABLE_GCONFMM_VALUE_HACK around the call to Util::check_for_broken_gconfmm_value_changed(). 2004-05-05 Daniel Elstner * src/translation.{cc,h} (initialize_gettext): New utility function to take care of setting up the text domain. * src/main.cc (main): Use initialize_gettext(). 2004-05-05 Daniel Elstner * ABOUT-NLS: Add missing file to fix the build. * src/aboutdialog.cc: Translate all user-visible strings except for those instances where positional parameter substitution is required for proper results. I'll deal with those ones later. * src/controller.cc: ditto * src/filebuffer.cc: ditto * src/filetree.cc: ditto * src/main.cc: ditto * src/mainwindow.cc: ditto * src/pcreshell.cc: ditto * src/prefdialog.cc: ditto * src/statusline.cc: ditto. * src/translation.h (N_): #define to gettext_noop(s) rather than simply (s). This doesn't actually make a difference but I think the intent is clearer that way. 2004-05-05 Daniel Elstner Add support for message translation via gettext. * po: New directory, containing all the gettext stuff. * config.rpath: New file added by gettextize. * mkinstalldirs: ditto. * Makefile.am (dist_noinst_SCRIPTS): Add config.rpath. * autogen.sh: Don't remove mkinstalldirs because it's not installed by automake --add-missing, and gettext uses it. (WARNINGS): Comment-out in order to reduce the flood of warnings triggered by all the old m4 code in system macros. * configure.ac: Invoke AM_GNU_GETTEXT(). (AC_CONFIG_FILES): Add po/Makefile.in. * NEWS: Update. * src/translation.{cc,h}: New files implementing gettext() support. * src/statusline.cc: Translate the label of the "Stop" button. * src/main.cc (main): Add code to initialize the text domain. * src/Makefile.am (regexxer_SOURCES): Add translation.{cc,h}. 2004-05-05 Daniel Elstner * src/miscutils.{cc,h} (check_for_broken_gconfmm_value_changed): Implement a truly evil run-time check for that gconfmm bug. Although this one is already fixed in CVS, there's no release out yet and for now I wouldn't like regexxer to depend on it anyway. (has_broken_gconfmm_value_changed): Provide an accessor function to the global flag indicating whether gconfmm is broken. * src/main.cc (main): Call check_for_broken_gconfmm_value_changed(). * configure.ac (REGEXXER_GCONFMM_VALUE_HACK): Make this macro call has_broken_gconfmm_value_changed() to determine whether the work-around has to be applied. 2004-05-05 Daniel Elstner * src/filebuffer.cc (FileBuffer::replace_match): Invoke on_insert() directly in case of empty-by-empty replace in order to avoid this nasty special-case where a FileBufferActionRemoveMatch object in the stack is not followed by either an insert or an erase action. This finally fixes the last one of undo system bugs known to me. 2004-05-05 Daniel Elstner * configure.ac (AC_INIT): Bump version number to 0.7. 2004-05-05 Daniel Elstner * src/*.{cc,h}: Apply a minor change of my coding style. From now on, I put a space between a keyword and the following opening parenthesis. That is, after for, while, if, switch and catch, with sizeof being the only (I think rather intuitive) exception. * src/globalstrings.h: New file containing (you guess it) global string definitions. Currently these are mostly fully qualified GConf key names. * src/configdata.{cc,h}: Delete, as we're now using GConf. * src/Makefile.am (regexxer_SOURCES): Modify accordingly. * src/aboutdialog.cc: Prefix URL and mail strings with U+202D LEFT-TO-RIGHT OVERRIDE in order to avoid the current mess in RTL environments. (ContributorBox::ContributorBox): Escape the 'what' string by passing it to Glib::Markup::escape_text(), just in case. * src/controller.cc (add_widget_button): Reverse parameters for consistency with the other helper functions. (Controller::create_action_area): Make the implementation reflect this change. * src/filebuffer.{cc,h} (RegexxerTags::on_conf_value_changed): New signal handler listening to GConf value changes. (RegexxerTags::instance): Return the RefPtr<> by value rather than by reference, because as it turns out the extra indirection largely offsets the advantage gained by avoiding one additional ref/unref cycle. (FileBuffer::set_match_color): Remove; this setter is no longer necessary since we're now listing to GConf changes and apply them immediately. (set_current_color): ditto (get_match_color): ditto (get_current_color): ditto. (FileBuffer::weak_undo_stack_): Introduce a new data member used to record all UndoAction objects that reference MatchData instances. This is unfortunately necessary in order to be able to remove UndoActions without actually doing the undo operation, for instance when running find_matches() again. (notify_weak_undos): New function dealing with the weak references. (undo_add_weak): ditto (undo_remove_weak): ditto. (signal_match_count_changed): Remove the count argument as this information can easily be obtained by using the appropriate getter. (create_with_error_message): Invoke Unicode::ispunct() instead of testing for '.' explicitely. (is_freeable): Return true only if there are no UndoAction objects around referencing this FileBuffer. (find_matches): Call notify_weak_undos() to get rid of any references by UndoAction objects to this FileBuffer. (get_line_preview): Make this method strongly exception-safe. (on_apply_tag): New virtual method implementation, needed in order to filter tag apply operations caused by inserting from clipboard. This avoids confusion caused by highlighting text as match which is not recorded as such internally. * src/undostack.{cc,h}: Provide a way to interrupt a running undo operation (i.e. by clicking the 'Stop' button in the GUI). (do_undo): Add a slot parameter for this purpose. (undo): ditto. * src/filebufferundo.{cc,h} (do_undo): Make use of the new slot parameter in order to allow for interuption of the undo process. (FileBufferActionRemoveMatch): Make use of the weak notification mechanism now provided by FileBuffer. * src/fileshared.h (MatchData::get_match_length): Remove this pointless accessor function. * src/fileshared.cc (MatchData::~MatchData): Be extra careful and remove the quark pointing to the MatchData instance from the mark object. * src/filetree.{cc,h} (FileTree::on_conf_value_changed): New signal handler listening to GConf value changes. (set_fallback_encoding): Remove this now pointless accessor. (get_fallback_encoding): ditto. (expand_and_select): Get rid of compatibility code for GTK+ < 2.2. (on_buffer_match_count_changed): Adapt to the changes made to FileBuffer::signal_match_count_changed. * src/filetreeprivate.cc (collatekey_sort_func): Use std::memcmp() instead of std::strcmp() as the former allows for inlining of the string operation by gcc. (FileTree::BufferActionShell::do_undo): Make use of the new slot parameter in order to allow for interuption of the undo process. * src/main.cc (set_default_window_icon): New name, formerly regexxer_set_window_icon(). Replace the pixbuf list stuff with a simple call to Gtk::Window::set_default_icon_from_file(). (trap_gconf_exceptions): New global exception handler callback, invoked whenever an exception escapes from a C++ handler of a GObject signal. Our particular handler is used to filter any Gnome::Conf::Error exceptions, thus in essence ignoring them. This way we don't need to deal with exceptions in each handler of the GConf "value_changed" signal. (initialize_configuration): New function to be invoked by main() in order to load the initial configuration values. By emitting an artificial "value_changed" signal for each entry in regexxer's GConf directory, the need for separate initialization code for each key is neatly avoided. (main): Accomodate the changes listed above. * src/mainwindow.{cc,h} (MainWindow::on_conf_value_changed): New signal handler listening to GConf value changes. (on_preferences): Remove all the code dealing with individual configuration values, since we're now using a decentralized change notification approach instead. (load_configuration): Ditch this. (save_configuration): ditto. (confirm_quit_request): Honor the fact that the new GTK+ file selector doesn't append '/' to directories anymore. This bug is quite annoying and should have been fixed months ago :/ Also widen the dialog's default size to 400 pixels. (on_buffer_match_count_changed): Remove, there's no need to listen for this on the FileBuffer because the FileTree is reflecting these changes anyway. (on_buffer_bound_state_changed): ditto. (on_bound_state_changed): Because there's only one now, rename from on_filetree_bound_state_changed(). (on_filetree_match_count_changed): Take care of the FileBuffer match count as well. (on_go_next): Replace the 0.2 delta passed to scroll_to_mark() with 0.125, as the latter looks nicer to my eyes and also happens to be a 'round' number in base 2. (on_undo): Accomodate the changes made to the UndoAction classes in order to allow for interruption of the running undo process. Also instantiate a BusyAction object for this purpose. (undo_stack_clear): New method. (set_title_filename): Replace the plain '-' by U+2013 EN DASH. * src/miscutils.{cc,h} (gtk_version_at_least): Remove since it's no longer used. * src/pcreshell.{cc,h}: To my astonisment I found out that the source of my constant trouble with libpcre and UTF-8 text was caused by pcre_study() alone! The great thing is of course that simply not using that silly function is all that's needed to get rid of this constant source of mayhem. (escape_non_ascii): Remove, since no longer needed. (translate_to_char_offset): Get rid of this one too. (byte_to_char_offset): New little helper function. (check_for_single_byte_escape): The "\C" escape sequence seems to be only thing we still have to take care of manually. This particular sequence matches a single byte even of a multi-byte character, and thus is likely to cause hell to break loose. (Pattern::pcre_extra_): Remove. (Pattern::Pattern): Get rid of the pcre_study() call, and make use of the new check_for_single_byte_escape() function. (Pattern::~Pattern): No need to free pcre_extra_ anymore. (Pattern::match): Throw an exception if the regular expression exceeds the recursion and backtracking limit of libpcre. (CompileOptions): Implement the remaining bit manipulation operators for completeness. (MatchOptions): ditto. * src/prefdialog.{cc,h} (get_toolbar_style_index): New helper function. (FontSelectionButton::set_selected_font): Take the font name rather than a Pango::FontDescription object as parameter. (get_selected_font): Likewise for the return type. (PrefDialog::button_direction_): New Gtk::CheckButton member, allowing users of RTL environments to override the direction of regexxer's file editor alone. (on_conf_value_changed): New signal handler listening to GConf value changes. (initialize_configuration): New function to load the initial settings immediately after creation of the preference dialog. Works just like the identically named function in main.cc, except that it invokes on_conf_value_changed() directly instead of triggering the global "value_changed" signal. (on_textview_font_selected): Set the appropriate GConf key instead of using the old internal signal feedback mechanism. (on_match_color_selected): ditto (on_current_color_selected): ditto (on_option_toolbar_style_changed): ditto (on_entry_fallback_activate): ditto. (on_button_direction_toggled): New method. (signal_pref_textview_font_changed): Remove. (signal_pref_match_color_changed): Remove. (signal_pref_current_color_changed): Remove. (signal_pref_toolbar_style_changed): Remove. (signal_pref_fallback_encoding_changed): Remove. (on_entry_fallback_changed): Record that entry content was changed by setting the boolean entry_fallback_changed_ flag. This is just to avoid superfluous commits to the GConf database every time the preference dialog is closed. (on_response): Evaluate entry_fallback_changed_ (see above), and make sure no Gnome::Conf::Error exceptions escape from on_entry_fallback_activate(). (create_page_look): Move the signal handler setup to the ctor. (create_page_file): ditto. * src/statusline.cc (CounterBox::CounterBox): Catch possible exceptions when applying the locale to the stream object, in order to avoid crashing if the user's locale is invalid. * src/stringutils.cc (apply_modifiers): Modify the code a bit to reduce the number of string copies made. (parse_control_char): Add a 'dest' output parameter to avoid returning a string by value. (parse_hex_unichar): ditto (parse_oct_unichar): ditto. (parse_capture_index): New helper function to deal with both "$1" and "${1}"-style references in the substitution string. (validate_encoding): Simplify. Also, don't accept any error codes but NO_CONVERSION. (encodings_equal): No longer use std::find_if() since it really doesn't make the code any simpler in this particular case. (trim_whitespace): Remove; no longer used. (shell_pattern_to_regex): Various performance improvements. Also take care of a possible trailing backslash to avoid escaping the "\z" appended by regexxer itself. (substitute_references): Restructure the loop a bit, and accomodate the changes made to the parse_*_char() functions mentioned above. Also, avoid the need for ascii_isodigit() in the default branch by simply adding all 8 octal digits as case labels. (int_to_string): Catch any exceptions that might occur when applying the locale to the stream. This could happen if the user's default locale is invalid. (transform_pathname): Replace this silly 2-in-1 function by separate shorten_pathname() and expand_pathname() implementations. There really is no need to cache the home directory in a static variable. (shorten_pathname): Implement separately rather than forwarding to transform_pathname(). (expand_pathname): ditto. (enum_from_nick): New utility function to convert the 'nick' of a particular enumeration value to the actual integer value. This of course requires the the enumeration type to be registered via the GObject type system. (enum_to_nick): Likewise, but the other way around. (enum_from_nick_impl): Non-template implementation part. (enum_to_nick_impl): ditto. 2004-05-04 Daniel Elstner * macros/cxx.m4: Make use of the new AS_IF() macro, and also improve the portability of the shell code a bit. * macros/pcre.m4: Ditto. * macros/misc.m4: New file, introducing a REGEXXER_PKG_PATH_PROG macro which can be used to look for executables that might live in subdirectories indicated by pkg-config output. * autogen.sh: Some minor shell coding-style improvements. * configure.ac: Invoke the new REGEXXER_PKG_PATH_PROG macro in order to look for gdk-pixbuf-csource. Use the new macro to look for gconftool-2 as well. (AC_CHECK_HEADERS): Remove the tests for sys/types.h, sys/stat.h, umask() and mode_t since they're no longer necessary. (PKG_CHECK_MODULES): Substitute the GTKMM prefix by PKG (I don't like MM_DEPS as introduced by Murray in HEAD.) Also, get rid of the libgnomevfsmm dependency. (REGEXXER_ENABLE_GCONFMM_VALUE_HACK): New preprocessor macro to be inserted into config.h. This isn't actually used yet, I'll get to that later. * regexxer.schemas: New file. * Makefile.am: Add rules taking care of the installation of the GConf schema file. (dist_schema_DATA): Add regexxer.schemas to the distribution. (dist_noinst_DATA): Ditto for macros/misc.m4. (DISTCHECK_CONFIGURE_FLAGS): Include --disable-schemas-install. * src/Makefile.am: Reflect the substitution of GTKMM by PKG made in configure.ac. (AM_CPPFLAGS): Use this variable in place of regexxer_CPPFLAGS, because executable-specific CFLAGS is not something regexxer ever intended to use. * src/main.cc: Get rid of the libgnomevfsmm dependency. For one thing, the code using it didn't actually work with remote URIs. For another, as of now there's no stable release of this library in sight, no to mention a widely distributed release. * src/fileio.cc (load_try_encoding): Comment-out the gnomevfs code and replace it with the original Glib::IOChannel code instead. (save_file): ditto. * src/filetree.cc (find_recursively): Comment-out and replace with the previous non-gnomevfs code. 2004-04-10 Murray Cumming * regexxer/Makefile.am: Put the mm libs and cflags before the pcre ones, because the mm ones are more likely to be in more than one prefix, to avoid undefined symbols when a -L command means we link to an older GTK+. This is a bit hacky, but I don't know a better solution - at least it will work on distros where everything is in the same prefix. * scripts/cxx.m4: Replace deprecated AC_HELP_STRING with AS_HELP_STRING. 2004-04-04 Murray Cumming * Ported to gtkmm 2.4 - mostly just use of libsigc++ 2 syntax, and not using the old Toolbar STL-style API. 0.6.0: 2003-12-07 Murray Cumming * src/configdata.cc: set_fallback_encoding_from_string(): Ignore empty value from GConf, so that the default fallback encoding is used. That is ISO-8859-15, also known as Latin 9, which seems to be commonly-used on Windows. * src/fileio.[h|cc]: Use gnome-vfsmm instead of Glib::IOChannel to read and write file contents, so we can use any URI. * src/filetree.[h|cc]: Likewise, use gnome-vfsmm instead of Glib::Dir to list the files. * configure.ac: Added pkg-config check for gnome-vfsmm. 2003-11-29 Murray Cumming * configure.ac: regexxer now depends on gconfmm. Removed the check for 2.2-specific features. * Removed all gtkmm 2.2-specific #ifdefs because 2.2 is everywhere now.. * src/configdata.[h|cc]: Changed the implemention to use GConfmm instead of the text file. 0.5.0: 2003-10-31 Murray Cumming * src/mainwindow.cc: Used larger HIG-like borders and spacings to make it look just a little more GNOME HIG compliant. 2003-10-29 Murray Cumming * I'm taking over maintainership until Daniel reappears. I hope that he does. * src/Makefile.am: Removed *DEPRECATED* defines so that it builds with GTK+ 2.3/2.4. These should only be active during maintainer mode if they are added back. 2003-02-06 Daniel Elstner * regexxer.desktop: Add Danish translation contributed by Morten Brix Petersen . Thanks! 2003-01-11 Daniel Elstner * configure.ac: Check for gtkmm >= 2.2.0 rather than 2.1.1. Note that gtkmm 2.2 is still optional, but this is likely to change after the regexxer 0.5 release. 2003-01-11 Daniel Elstner * src/filetree.cc (propagate_modified_change): Simplify. 2003-01-11 Daniel Elstner * src/signalutils.{cc,h} (AutoConnection): New utility class that breaks the previous connection on assignment, and also remembers the blocked state of the connection permanently. (ScopedBlock): Use Util::AutoConnection instead of SigC::Connection. * src/filetree.{cc,h}: Use AutoConnection to manage the connection handles of the currently selected buffer. (on_selection_changed): Thanks to AutoConnection, we can now extinguish a fair bit of error-prone code. 2003-01-01 Daniel Elstner * autogen.sh: Require automake >= 1.7. * configure.ac: ditto. 2003-01-01 Daniel Elstner * src/sharedptr.h (SharedPtr<>::swap): Implement. 2003-01-01 Daniel Elstner * src/mainwindow.cc (on_hide): For safety, transfer ownership of the preferences and about dialogs into local variables, rather than invoking hide() to delete them. That way delete won't be called before hide() actually returned. (on_about_dialog_hide): Don't use std::auto_ptr<>::reset() but transfer ownership into local variables. I had a look at the libstdc++-v3 headers and it gave me the creeps -- reset() deletes _before_ assigning the new pointer. (on_pref_dialog_hide): ditto. 2003-01-01 Daniel Elstner * src/filetree.{cc,h} (error_pixbuf_): Get rid of this silly cache, since it became useless a while ago. 2003-01-01 Daniel Elstner * src/aboutdialog.cc (SelectableLabel): Add accessibility hints. (ContributorBox): Likewise, and also improve the widget arrangement if the dialog gets resized. 2002-12-30 Daniel Elstner * src/mainwindow.{cc,h}: Get rid of the menubar_handle_ and toolbar_handle_ data members. We don't need to keep them around anymore since the config option to hide one or the other is gone. 2002-12-30 Daniel Elstner * src/aboutdialog.cc (SelectableLabel): New fancy experiment to make labels both selectable _and_ focusable, so that they end up in the Tab chain. * src/aboutdialog.cc src/imagebutton.cc src/prefdialog.cc: Don't show all children of custom "composite" widgets in the constructor. It doesn't make much sense since we call show_all() later on anyway. And making these "composite" widgets really independent components would require overriding both show_all_vfunc() and hide_all_vfunc(), which is currently not worth the effort. 2002-12-28 Daniel Elstner * pixmaps/regexxer.png: Replace with a much nicer icon stolen from http://jimmac.musichall.cz/ikony.php3 -- looks sweet! 2002-12-28 Daniel Elstner * configure.ac (PCRE_CHECK_VERSION): Require libpcre >= 3.9. It finally arrived in Debian unstable a while ago and there's at least one UTF-8 related bug in prior releases that could cause crashes. 2002-12-28 Daniel Elstner * src/pcreshell.cc (translate_to_char_offset): New function that translates the error offset returned by pcre_compile() to a character offset into the original regex. This became necessary since due to the recent introduction of escape_non_ascii(), and is more robust anyway. * src/mainwindow.cc (on_exec_search): Deal with character offsets instead of byte offsets. Also, set the regex entry's selection on the character where the error occurred. 2002-12-27 Daniel Elstner * src/statusline.{cc,h}: Use Gtk::RC::parse_string() and the appropriate RC style settings to reduce the height of the Stop button, instead of the insane set_size_request() hack. This way the label text gets properly aligned now. 2002-12-27 Daniel Elstner * src/stringutils.cc (scale_to_8bit): Don't try to round to the nearest value. This fixes a fun bug that caused the orange color of the current match to become slightly brighter on each config load/save cycle. 2002-12-27 Daniel Elstner * pixmaps/Makefile.am (stockimages.h): Beautify by printing the actual command line that is executed, rather than the shell code to build it. This is also what autoconf does in its rules. 2002-12-26 Daniel Elstner * regexxer.desktop: Add Comment[de] translation, and remove GNOME from Categories. Recent GNOME applications don't seem to specify this category anymore. 2002-12-26 Daniel Elstner * src/pcreshell.cc (escape_non_ascii): New function to work around a crash in libpcre when using literal UTF-8 in character classes. This still won't make it work, but prevents the crash and forces an error message if characters in classes are outside the Latin1 range. 2002-12-26 Daniel Elstner * configure.ac: Check for gtkmm >= 2.1.1 instead of the compile test based on Glib::set_application_name(). (Don't worry, gtkmm 2.1.x is not yet a requirement.) 2002-12-26 Daniel Elstner * src/prefdialog.cc: Don't #include GTK+ headers if gtkmm 2.2 API is available. (ColorLabel::on_expose_event): When building with gtkmm 2.2, use Gtk::Widget::get_style_property() instead of the ugly varargs function gtk_widget_style_get(). 2002-12-26 Daniel Elstner * src/prefdialog.cc (ColorSelectionButton::on_clicked): Convert the dialog window title to title case. 2002-12-25 Daniel Elstner * src/prefdialog.cc (ColorLabel::ColorLabel): Modify the whole Gtk::RcStyle in one go rather than setting the bg pixmap thrice. 2002-12-25 Daniel Elstner * src/configdata.{cc,h}: Remove config option "menutool_mode" because it's crack now that we have undo et al. Add config options "textview_font", "match_color" and "current_match_color". * src/filebuffer.{cc,h} (pango_context_changed): Assign default font to the error_message tag. ([gs]et_match_color): New accessors to tag colors. ([gs]et_current_color): ditto. * src/mainwindow.{cc,h} ([gs]et_menutool_mode): Get rid of these. (on_filetree_switch_buffer): No longer modify the TextView font globally since we set the tag now. (on_preferences): Handle the added config settings. (load_configuration): ditto (save_configuration): ditto. * src/prefdialog.{cc,h} (FontSelectionButton): New utility widget. (ColorSelectionButton): Another new utility widget. (PrefDialog): Revamp the preferences dialog. That is, add GUI for the new config settings and remove the old one. Also replace the radio buttons for selecting the toolbar style with an option menu. 2002-12-25 Daniel Elstner * src/stringutils.{cc,h} (contains_null): Remove. (color_to_string): Implement. (shell_pattern_to_regex): Handle alternative syntax '^' for negation of character classes properly. 2002-12-25 Daniel Elstner * src/miscutils.h (ScopedArray<>): New little utility template to manage a dynamically allocated array. * src/fileio.cc (load_iochannel): Ditch Glib::ScopedPtr<> (glibmm internal :) in favor of Util::ScopedArray<>. 2002-12-20 Daniel Elstner * src/fileio.cc (load_iochannel): Use std::memchr() rather than the silly Util::contains_null() utility function. 2002-12-20 Daniel Elstner * configure.ac: Put -I flags into CPPFLAGS instead of CXXFLAGS. * macros/pcre.m4 (PCRE_CHECK_UTF8): Likewise for CFLAGS. 2002-12-16 Daniel Elstner * macros/pcre.m4 (PCRE_CHECK_VERSION): Use the sed magic from autogen.sh to implement a proper version check. 2002-12-16 Daniel Elstner * autogen.sh: Implement some fancy sed magic to compare automake version numbers, in order to choose the one that suits us best. 2002-12-16 Daniel Elstner * src/mainwindow.cc (create_left_pane): Set the accessible name of the folder entry. (create_right_pane): Set the accessible name of the preview entry, but replace the accessible description with a tool tip. 2002-12-15 Daniel Elstner * src/filetree.cc (expand_and_select): Make use of Gtk::TreeView::expand_to_path() if available. 2002-12-15 Daniel Elstner * src/miscutils.{cc,h}: New files. Move Util::prior() and next() hitherto, and add Util::gtk_version_at_least() to do a runtime version check. * src/Makefile.am: Add miscutils.{cc,h}. * src/stringutils.h: Move prior() and next() into miscutils.h. * src/filebuffer.cc: #include "miscutils.h". * src/filetree.cc (expand_and_select): Use the lazy scrolling feature if GTK+ >= 2.1.4 is available at runtime. 2002-12-15 Daniel Elstner * src/filetree.cc (expand_and_select): Don't pass row_align to Gtk::TreeView::scroll_to_row() if compiling for gtkmm 2.2 since lazy scrolling has now been implemented. 2002-12-15 Daniel Elstner * autogen.sh: Enable Bourne shell posix mode if possible, and export WARNINGS=all in order to get auto* diagnostic messages. * src/Makefile.am: Replace deprecated variables INCLUDES and LIBS with regexxer_CPPFLAGS and regexxer_LDADD. 2002-12-15 Daniel Elstner * macros/cxx.m4: Get rid of all deprecated autoconf constructs. * macros/pcre.m4: ditto. 2002-12-15 Daniel Elstner * configure.ac: Replace the check for gtkmm >= 2.1.0 with a test for Glib::set_application_name(). This should be much safer. 2002-12-15 Daniel Elstner * src/main.cc (main): Use Glib::set_application_name() if building for gtkmm 2.1. 2002-12-14 Daniel Elstner * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): On make distcheck, pass --enable-warnings=hardcore to ./configure. 2002-12-14 Daniel Elstner * configure.ac (AM_INIT_AUTOMAKE): Require automake >= 1.6 and make use of the "check-news" option. * Makefile.am (EXTRA_DIST): Get rid of EXTRA_DIST and properly put the files into dist_noinst_SCRIPTS and dist_noinst_DATA. 2002-12-14 Daniel Elstner * autogen.sh: Delete all scripts and symbolic links that will be recreated by automake --add-missing. 2002-12-14 Daniel Elstner * regexxer.desktop: Set StartupNotify=true in order to take advantage of the startup notification feature in GNOME 2.1. 2002-12-14 Daniel Elstner * autogen.sh: Incorporate bits of the standard GNOME autogen.sh, and make use of aclocal-1.7 and automake-1.7 if available. * configure.ac: AC_PREREQ([2.53]) to make sure the Debian magic chooses the right autoconf version. (AM_CONFIG_HEADER): Replace with AC_CONFIG_HEADERS(). This could create a dependency on automake-1.7, don't know for sure. 2002-12-08 Daniel Elstner * src/imagebutton.{cc,h} (ImageButton): Add a 'name' argument to the ctor which is used to set the accessibility object's name. * src/controller.cc (create_action_area): Set accessibility names for all image-only buttons. 2002-12-08 Daniel Elstner * configure.ac: Check for gtkmm >= 2.1.0 and #define REGEXXER_HAVE_GTKMM_22 if available. * src/controller.cc: * src/mainwindow.cc: * src/statusline.cc: If building for gtkmm >= 2.1.0, make use of atkmm to set names and descriptions of several GUI elements. 2002-12-08 Daniel Elstner * pixmaps/Makefile.am (stockimages.h): Perfectionize so that it handles a case that actually never happens, but who knows who's going to copy'n'paste this stuff :P 2002-12-02 Daniel Elstner * pixmaps/Makefile.am: Use shell magic to generate the build list for gdk-pixbuf-csource. It's way cooler than doing it manually :) 2002-12-02 Daniel Elstner * src/mainwindow.cc (create_left_pane): Use 'd' instead of 'F' as mnemonic key for the folder button, because 'F' is already occupied by the file menu. 2002-12-01 Murray Cumming [ SF patch 646526, slightly modified ] * src/mainwindow.cc: Change the file pattern entry to a combo, with some commonly-used file extensions. 2002-12-02 Daniel Elstner * src/controller.cc (create_action_area): * src/mainwindow.cc (create_left_pane): Add preliminary support for accessibility using ATK. Unfortunately atkmm is badly broken in a way that prevents it from being used at all. And due to a missing reference in Gtk::Widget::get_accessible_vfunc() I can't even resort to the C interface for custom derived classes. Thus most of the code is enclosed in #if 0 / #endif at the moment. 2002-11-29 Daniel Elstner * src/filetree.cc (on_selection_changed): Ooops, forgot to disconnect() conn_undo_stack_push_. That means the mysterious one of the assertions is now fixed -- the remaining ones are expected :) 2002-11-29 Daniel Elstner * configure.ac (AC_INIT): Version 0.5. 2002-11-29 Daniel Elstner OK folks, this is the new undo system. It works, but don't rely too much on undo yet since there are still some issues to work out. Try stress testing the system a bit and you'll be able to trigger assertions, misbehaviour and all other kind of evil stuff. However, the framework is basically working and the remaining problems are going to be sorted out very soon. Happy testing! * src/undostack.{cc,h}: New files, implementing the core of the new undo system. Basically it's a simple undo stack using virtual methods for the implementation of undo actions. But the undo stack is itself an undo action, which allows for nested stacks. This functionality is necessary since the undo works globally on all files. * src/filebufferundo.{cc,h}: New files, defining the implementation of the FileBuffer undo actions. * src/fileshared.{cc,h}: Move parts of filebuffer.{cc,h} into these new files, in order to avoid circular dependencies and to reduce the length of single source files. * src/filetreeprivate.{cc,h}: Move the anonymous namespace parts and the nested classes of the FileTree implementation into separate files. filetreeprivate.h is included by filetree.cc only. * src/Makefile.am (regexxer_SOURCES): Add new source files. * src/filebuffer.{cc,h}: Heavily modify and enhance the code in order to support the new undo framework. * src/filetree.{cc,h}: ditto. * src/controller.{cc,h}: Add undo ControlItem and show menu/toolbar items for it. * src/mainwindow.{cc,h}: Add code to maintain the undo stack and connect the GUI bits. 2002-11-25 Daniel Elstner * src/signalutils.h (ScopedBlock): Move from filetree.cc hitherto. (ScopedConnection): ditto. * src/filetree.cc: Use the new signal stuff from namespace Util. 2002-11-25 Daniel Elstner * src/filebuffer.{cc,h} (signal_preview_line_changed): Use the new Util::QueuedSignal rather than queuing manually. 2002-11-25 Daniel Elstner * src/signalutils.{cc,h}: New files containing various sigc++ related utilities. For now, there's only Util::QueuedSignal, which implements a SigC::Signal0 that is emitted when the main loop is idle. * src/Makefile.am (regexxer_SOURCES): Add signalutils.{cc,h}. 2002-11-25 Daniel Elstner * src/filebuffer.{cc,h} (trigger_preview_line_changed): Rename to queue_preview_line_changed() because that's what it does. 2002-11-25 Daniel Elstner * src/filebuffer.cc (pango_context_changed): Ooops, I accidentally reversed the arguments to Gtk::IconSize::lookup(). Fixed. 2002-11-23 Daniel Elstner * src/filetree.{cc,h} (FileTree::ScopedBlockSorting): Introduce new utility class used to temporarily disable the column headers and to switch to the default sort column if the current one is the match count column. This is necessary because Gtk::TreeModel::foreach() doesn't like it at all if model rows are reordered underneath its feet. regexxer didn't handle that correctly until now, and the only reason this bug hasn't been observed before is #96647 :) 2002-11-23 Daniel Elstner * src/filetree.{cc,h} (FileTree::ErrorList): Rename to MessageList since it's not specifically intended for errors. Use MI to combine Util::SharedObject and std::list<> instead of making the std::list a data member. IS-A really makes sense here and this kind of class enhancement is what MI exists for, after all. 2002-11-22 Daniel Elstner * src/Makefile.am (DEFS): Don't use backslash quoting inside the double-quoted string. Rather, quote the outer pair of double- quotes with backslashes. I reckon it's more portable not to use backslash quoting inside double-quoted strings since most other packages seem to avoid it too. 2002-11-20 Daniel Elstner * configure.ac (AC_TYPE_MODE_T): Eeek, this macro makes use of a deprecated autoconf macro. Replace with AC_CHECK_TYPES([mode_t]). * src/configdata.cc: Do "typedef int mode_t" if necessary. 2002-11-20 Daniel Elstner * configure.ac: Check for mode_t too since we need it for umask(). You can never know. 2002-11-20 Daniel Elstner * configure.ac (AM_INIT_AUTOMAKE): Remove 'dist-bzip2' option since we don't distribute bzipped tarballs right now. 2002-11-20 Daniel Elstner * configure.ac: Get rid of AC_CANONICAL_{BUILD,HOST,TARGET}. These don't seem to be necessary anymore. 2002-11-20 Daniel Elstner * macros/cxx.m4: Use quadrigraphs to output characters like [ ]. * macros/pcre.m4: Add error checking at the autoconf level. 2002-11-19 Daniel Elstner * src/aboutdialog.cc: Set the default response. * src/prefdialog.cc: ditto. 2002-11-19 Daniel Elstner * src/main.cc (stock_icon_info): It's Gtk::ICON_SIZE_MENU, not Gtk::ICON_SIZE_SMALL_TOOLBAR. This glitch fortunately didn't have any real consequences since the icon size was wildcarded anyway. regexxer 0.4: 2002-11-18 Daniel Elstner * NEWS: Update. 2002-11-18 Daniel Elstner * src/configdata.{cc,h}: Generalize the enumeration handling in two new functions, enum_to_string() and enum_from_string(). 2002-11-18 Daniel Elstner * src/aboutdialog.cc: Refine the design a bit, and mention Ross Burton (Debian packager) as major contributor. 2002-11-18 Daniel Elstner * src/controller.cc (create_menubar): Don't use "f" as accelerator for "Move forward" because it's already occupied by the tree view search facility. 2002-11-18 Daniel Elstner * src/mainwindow.{cc,h}: Move the GUI stuff from the ctor into an auxilary method create_main_vbox(). Manually call accelerate() on the menu bar because otherwise the menu accelerators wouldn't be enabled if the menu bar is never shown due to user preference. 2002-11-18 Daniel Elstner * configure.ac (AC_INIT): Bump version to 0.4. 2002-11-18 Daniel Elstner * src/mainwindow.{cc,h}: Implement necessary bits to allow hiding menu bar or toolbar, and honor the menutool_mode config setting. Popup the new stand-alone about dialog on menubar/Help/Info. 2002-11-18 Daniel Elstner * src/prefdialog.{cc,h}: Remove "regexxer info" page. Split up configuration into "Look'n'feel" and "File access" pages. Add UI and class interface for the new menutool_mode config option. 2002-11-18 Daniel Elstner * src/aboutdialog.{cc,h}: New files, implementing stand-alone about dialog for regexxer. * src/Makefile.am: Add new files. 2002-11-18 Daniel Elstner * src/configdata.{cc,h}: Add support for menutool_mode config option, specifying whether to show menu bar, toolbar or both. 2002-11-18 Daniel Elstner * src/main.cc (regexxer_register_stock_items): Always set the intended icon size, but disable wildcarding for all but the last pixbuf in an icon set. 2002-11-17 Daniel Elstner * pixmaps/stock_save_all_16.png: New menu icon. * pixmaps/Makefile.am: Add new icon. * src/main.cc: Register new icon. 2002-11-17 Daniel Elstner * src/controller.cc (ControlItem::add_widget): Honor group_enabled_. 2002-11-17 Daniel Elstner * src/mainwindow.cc: Change default size of the window to 600x450 because the new menu bar takes up quite some space. 2002-11-17 Daniel Elstner * src/controller.cc (ControlItem::activate): Don't ignore the group_enabled_ flag. 2002-11-17 Daniel Elstner * src/controller.{cc,h} (create_menubar): Implement. * src/mainwindow.cc: Show the menu bar, and make both toolbar and menu bar detachable. 2002-11-17 Daniel Elstner * src/controller.{cc,h}: New files, implementing class Controller and class ControlItem. ControlItem maintains an arbitrary number of activation sources, and controls the sensitivity state of an arbitrary number of widgets too. Controller centralizes all of the ControlItems and provides create() functions for all pure control widgets in regexxer. Also, there's ControlGroup which can be used to set the sensitivity of several widgets at once. All this stuff became necessary due to the proposed addition of menus. Getting the sensitivity of all widgets right was already quite complex. After the integration of menus the old code would have reached a critical mass. * src/imagebutton.{cc,h}: New files, containing ImageButton and ImageLabelButton that were previously in mainwindow.cc. We need them in controller.cc now too. * src/Makefile.am (regexxer_SOURCES): Add new files. * src/mainwindow.{cc,h}: Integrate the new Controller concept and get rid of the obsolete cruft. We're now below 1000 lines again. 2002-11-16 Daniel Elstner * src/mainwindow.cc: Show tool tips for both find buttons too. 2002-11-16 Daniel Elstner * src/mainwindow.cc: Use sentence case for all tool tips, as suggested by Ross Burton. 2002-11-15 Daniel Elstner * src/sharedptr.cc: Remove already unused debug code. The reference counting is rock solid thanks to SharedPtr<>. 2002-11-15 Daniel Elstner * src/sharedptr.h (SharedObject): Remove the namespace prefix from the friend declaration. This will hopefully fix a compilation problem with GCC 2.95.x -- once again. 2002-11-14 Daniel Elstner * src/mainwindow.cc (on_busy_action_pulse): Simplify by reducing the amount of if-branches. 2002-11-13 Daniel Elstner * src/sharedptr.h: Reimplement the static member templates cast_static<>(), cast_dynamic<>() and cast_dynamic_throw<>() as free functions, and use the boost naming convention. * src/filetree.cc: Use the new boost-like cast functions. 2002-11-11 Daniel Elstner * regexxer.desktop: New desktop file, provided by Ross Burton. Thanks Ross! * Makefile.am: Distribute and install regexxer.desktop. 2002-11-11 Daniel Elstner * src/filetree.{cc,h} (find_files): Use std::string instead of Glib::ustring for 'dirname' and get rid of the call to Glib::filename_from_utf8(). This doesn't really belong here. * src/mainwindow.cc (on_find_files): Convert the directory name to filename encoding, and use the current directory as fallback if it's empty. 2002-11-11 Daniel Elstner * src/mainwindow.{cc,h} (button_find_matches_): Set this button insensitive unless there is at least one file to search in. Suggested by Murray Cumming . (button_find_files_): Likewise set this button insensitive if entry_pattern_ is empty. 2002-11-11 Daniel Elstner * src/filetree.cc (on_buffer_modified_changed): Work around a nasty gtkmm bug: Glib::SignalProxy seems to ignore the 'blocked' flag of the SigC::Connection object. I'll fix this later in gtkmm itself. 2002-11-11 Daniel Elstner * macros/pcre.m4 (PCRE_CHECK_UTF8): Mention libpcre's --enable-utf8 option in the error message. 2002-11-11 Daniel Elstner * src/filetree.{cc,h} (on_treestore_sort_column_changed): New signal handler, used to recalculate path_match_first_ and path_match_last_. This fixes a serious bug -- the code relies on the validity of this cached range. regexxer 0.3: 2002-11-10 Daniel Elstner * configure.ac (AC_INIT): Bump version to 0.3. 2002-11-10 Daniel Elstner * src/stringutils.cc (transform_pathname): Use byte-wise comparison because filenames should match exactly. The Glib::ustring collation methods depend on the user's locale and might even ignore case. 2002-11-10 Daniel Elstner * src/mainwindow.cc (on_preferences): Make this strongly exception safe, just to demonstrate how to use std::auto_ptr<> properly :) 2002-11-09 Daniel Elstner * src/mainwindow.cc (on_preferences): If the preferences dialog is already open, call present() instead of raise(). The former does a much better job of putting the window where the user can see it. 2002-11-09 Daniel Elstner * src/filetree.{cc,h} (find_recursively): Call increment_file_count() from here instead of letting the caller do it. (find_check_file): Simplify by using Gtk::TreeModel::Row directly. 2002-11-09 Daniel Elstner * src/filetree.cc (collatekey_sort_func): Use std::strcmp() instead of std::string::compare(), because libstdc++-v2 (which comes with GCC 2.95.x) is badly broken and doesn't support this particular overload of compare(). Darn. regexxer 0.2: 2002-11-08 Daniel Elstner * AUTHORS: Add myself ;) * NEWS: List major changes in 0.2. * README: Fix typos. 2002-11-08 Daniel Elstner * src/filetree.cc (load_file_with_fallback): Emit row_changed() whenever the value of fileinfo->load_failed changed, rather than only if the file seems to be binary. 2002-11-07 Daniel Elstner * src/mainwindow.{cc,h}: If there are any unsaved files on quit or when reloading the file tree, pop up a dialog asking for confirmation. 2002-11-07 Daniel Elstner * src/filetree.{cc,h}: Get rid of the code that expanded/collapsed directory nodes on row clicks and the activated signal. The GTK+ people persuaded me that the inconsistency is worse than the little annoyance of having to hit the expander arrow. 2002-11-07 Daniel Elstner * src/filetree.{cc,h} (on_row_activated): Override, in order to expand/collapse a directory node when the spacebar was pressed. 2002-11-07 Daniel Elstner * src/filetree.{cc,h} (on_button_release_event): Override, in order to expand a directory node when the user clicked anywhere inside the row. This might improve usability a bit. 2002-11-07 Daniel Elstner * src/filetree.cc: Make the column headers trigger sorting when clicked. Again use a default sort function in order to get three modes of sorting. That is, the default is ascending sort with directories first, but when clicking a column header no difference is made between files and directories. 2002-11-07 Daniel Elstner * src/filetree.{cc,h} (load_file_with_fallback): Ooops, I forgot that buffers are now freed whenever possible, thus we shouldn't just return even if fileinfo->load_failed has already been set. 2002-11-07 Daniel Elstner * src/filetree.{cc,h} (text_cell_data_func): Simplify. (load_file_with_fallback): Improve robustness of the code, and trigger row_changed() if load_failed has been set. For some reason it worked without this explicit emission, but it's better not to rely on that. 2002-11-06 Daniel Elstner * src/filetree.{cc,h}: Show an icon indicating whether the item is a file or directory in front of the filename. Check it out, this eye candy looks really nice. 2002-11-06 Daniel Elstner * src/fileio.cc (save_file): Get rid of the #96373 work-around. 2002-11-06 Daniel Elstner * configure.ac (PKG_CHECK_MODULES): Require gtk+-2.0 >= 2.0.6 in order to match the web page. (AC_INIT): Bump version to 0.2. Yay! 2002-11-06 Daniel Elstner * configure.ac (PKG_CHECK_MODULES): Require glib-2.0 >= 2.0.7. This is necessary due to GLib bug #91222 -- I don't want people thinking regexxer segfaulted randomly all the time because it were badly coded. 2002-11-06 Daniel Elstner * src/filetree.{cc,h} (collatekey_sort_func): Make this the sort function for mixed directory/file view. (collatekey_sort_func_dirs_first): Move the content of the former collatekey_sort_func() into here. (collatekey_sort_func_dirs_first_descending): Extra sort function which correctly reverses the meaning of the first byte in the key. This is for use with Gtk::SORT_DESCENDING. 2002-11-06 Daniel Elstner * src/filetree.{cc,h}: Speed up and simplify sorting by merging the directory/file information into the collate key (directories get a leading '0', files get a leading '1'). This is amazingly easy and not hackish in any way -- after all, this kind of pre- processing the strings is exactly what collate keys are for. 2002-11-05 Daniel Elstner * src/filebuffer.{cc,h} (is_freeable): New method that checks whether it's safe to unreference the buffer. This can be used to reduce the memory footprint. * src/filetree.{cc,h}: Unreference the text buffer whenever possible. For instance, we really don't need to keep a buffer in memory that has match_count == 0 and wasn't modified. Also fix propagation of signal_match_count_changed(). 2002-11-05 Daniel Elstner * src/filetree.cc (select_next_file): Re-add a missing "return true;" that got lost in a previous change. 2002-11-05 Daniel Elstner * src/fileio.{cc,h} (FileInfo): Split this data structure into DirInfo and FileInfo, with a common base class FileInfoBase. This should be cleaner than having data members that can be invalid. * src/filetree.{cc,h}: Use the new DirInfo and FileInfo structs. Propagate changes of a buffer's modified change to all parent nodes, and color them red too. Fix potential race conditions due to reassigment of blocked connections. 2002-11-05 Daniel Elstner * src/sharedptr.h (SharedPtr::cast_static): implement (cast_dynamic): implement (cast_dynamic_throw): implement. 2002-11-05 Daniel Elstner * src/filetree.{cc,h}: New files replacing filelist.{cc,h}. The files are now displayed in a directory tree which is much cooler. As a side effect, it's now way faster when searching thousands of files. * src/Makefile.am: s/filelist/filetree/ * configure.ac: Use src/pcreshell.cc as unique source file. * src/fileio.{cc,h} (FileInfo): Introduce a file_count member variable that became necessary to support subdirectories. * src/mainwindow.{cc,h}: Use the new FileTree widget. 2002-11-05 Daniel Elstner * src/mainwindow.cc: In on_find_files() and on_exec_search(), make sure the corresponding button is sensitive before starting the busy action. This is necessary since these callbacks are invoked from the entries' signal_activate() too. 2002-11-04 Daniel Elstner * src/pcreshell.{cc,h}: Minor code cleanup. Add a few assertions and a couple of comments. regexxer 0.1: 2002-11-03 Daniel Elstner * pixmaps/Makefile.am: s/noinst_DATA/dist_noinst_DATA/ so that the pixmap files are included in the distribution. 2002-11-03 Daniel Elstner * src/fileio.cc: Close and reopen the I/O channel when switching the encoding. Changing encodings on the fly doesn't seem to work with older GLib releases. 2002-11-03 Daniel Elstner * src/mainwindow.cc src/stringutils.cc: Be more tolerant about fucked up filenames. Still show a (hopefully) annoying warning message, though. 2002-11-03 Daniel Elstner * src/mainwindow.cc: Invoke file search respectively regex search on the entry widgets' signal_activate(). 2002-11-03 Daniel Elstner * src/stringutils.cc (apply_modifiers): Handle modifier sequences like "\u\L$2" correctly. Since it's not an recursive function the code got pretty messy. Needs to be refactored at some point. 2002-11-03 Daniel Elstner * src/configdata.cc: Use g_warning() instead of g_message(). These errors don't occur on a normal setup and should really go to stderr. 2002-11-03 Daniel Elstner * src/configdata.cc: Generalize the enum nick/value mapping code, and improve the error message strings. 2002-11-03 Daniel Elstner * src/mainwindow.cc (on_hide): hide() the preferences dialog instead of deleting it, so that on_pref_dialog_hide() is executed to save the configuration data. 2002-11-03 Daniel Elstner * src/configdata.{cc,h}: New files, implementing load/save of configuration data to a file. * src/Makefile.am: Add new files. * configure.ac: Check for umask() and its header files. * src/mainwindow.{cc,h}: Make use of the new code to load and save the configuration data. * src/stringutils.{cc,h} (trim_whitespace): New utility function. * src/prefdialog.cc (validate_encoding): Move to stringutils.{cc,h}. 2002-11-02 Daniel Elstner * src/prefdialog.{cc,h}: Prevent double emission of signal_pref_toolbar_style_changed(). 2002-10-31 Daniel Elstner * src/filelist.{cc,h} (find_files): Replace the pattern string argument with Pcre::Pattern& for consistency with find_matches(). * src/mainwindow.cc (on_find_files): Construct the Pcre::Pattern for use with find_files(). 2002-10-30 Daniel Elstner * src/filelist.{cc,h} (FileList::FindError): Store a list of strings instead of Glib::Error objects. We don't need the extra information from Glib::Error, and plain strings gives us more flexibility with regards to message strings. * src/filelist.cc (save_current_file): Report errors to the caller using FileList::FileError exceptions. * src/filelist.cc (save_all_files): ditto. * src/mainwindow.{cc,h}: Generalize FindErrorDialog into FileErrorDialog and use it to report file saving errors too. 2002-10-29 Daniel Elstner * src/filelist.{cc,h} (FileList::FindError): Explicitly implement copy ctor and assignment operator. * src/filelist.cc (on_buffer_match_count_changed): Clutter the code with assertions, just to be sure. 2002-10-28 Daniel Elstner * src/statusline.cc (CounterBox): Improve size calculation of the counter labels -- it no longer depends on '9' being the widest digit. * src/statusline.{cc,h} src/mainwindow.cc: Show the encoding of the currently displayed file in the statusbar. 2002-10-28 Daniel Elstner * src/filelist.{cc,h}: Collect file access errors during execution of find_files() and, when finished, return the list of errors via an exception to the caller. * src/mainwindow.cc (on_find_files): Show an error message dialog if the search pattern is invalid or if errors occurred during file search. 2002-10-28 Daniel Elstner * src/mainwindow.cc (on_exec_search): I changed my mind, there is absolutely no need to show off Util::next() here :) 2002-10-28 Daniel Elstner * src/stringutils.h: Introduce next() and prev() templates, shamelessly stolen from boost. * src/mainwindow.cc (on_exec_search): Use Util::next(). 2002-10-28 Daniel Elstner * src/mainwindow.cc (on_exec_search): If there was an error in the regex, move the Gtk::Entry cursor to the character reported by Pcre::Error::offset(). 2002-10-27 Daniel Elstner * src/stringutils.{cc,h} (int_to_string): New function. * src/mainwindow.cc (on_exec_search): Show an error dialog if there is an error in the regex. 2002-10-27 Daniel Elstner * src/mainwindow.cc (on_select_folder): Hide the file selection pane in the Gtk::FileSelection dialog, since we only need the directory part. 2002-10-27 Daniel Elstner * src/stringutils.{cc,h} src/prefdialog.cc: Get rid of ascii_toupper() and AsciiToupper because I just added the formerly missing Glib::Ascii::toupper() to glibmm :-P 2002-10-27 Daniel Elstner * src/stringutils.h (AsciiToupper): New unary predicate that forwards to ascii_toupper(). * src/prefdialog.cc (on_entry_fallback_activate): Use the AsciiToupper predicate so that the call can be inlined. 2002-10-27 Daniel Elstner * src/stringutils.{cc,h} (ascii_toupper): Make this utility function publically available. * src/prefdialog.cc (on_entry_fallback_activate): Convert the encoding name to upper case. 2002-10-27 Daniel Elstner * src/mainwindow.{cc,h}: Explicitely delete the preferences dialog on exit. Although this isn't really necessary, it does look neater if we have a lot of cleanup to do on exit. 2002-10-27 Daniel Elstner * src/filebuffer.cc (find_matches): Correctly forward one character rather than one byte after matching the empty string twice. Also, improve cancellation response by moving the signal_pulse() emission into the inner loop (shouldn't harm performance since we emit only once for 128 iterations anyway). 2002-10-26 Daniel Elstner * src/fileio.{cc,h} src/filelist.{cc,h}: Make the fallback encoding configureable, so that it can be changed from the preferences dialog. * src/prefdialog.{cc,h} src/mainwindow.cc: Honor the preference setting of the fallback encoding. 2002-10-26 Daniel Elstner * pixmaps/stock_menu_about.png: New image stolen from Gnome2. * pixmaps/Makefile.am src/main.cc: Register the new stock image. * src/prefdialog.{cc,h}: New files, implemening the preferences dialog. The about box is integrated as second notebook page, because I couldn't think of a better place to put it. * src/mainwindow.{cc,h}: Make the preferences tool button work. 2002-10-26 Daniel Elstner * src/main.cc: Set a global window icon list. * src/mainwindow.cc: Consider both the movement buttons and the replace buttons as part of the "action area". This fixes wrong sensitivity of the movement buttons during busy actions. 2002-10-26 Daniel Elstner * src/statusline.{cc,h}: Install an accelerator key (Escape) for the cancel button. 2002-10-26 Daniel Elstner * src/filelist.{cc,h} src/mainwindow.{cc,h}: Major cleanup of the busy action cancelation code. The new code is now centralized in class MainWindow, and has been merged with the progressbar pulse notification and busy GUI updating. * src/filebuffer.{cc,h}: Implement support for cancelation of busy actions such as find_matches(), using the new scheme described above. * src/statusline.{cc,h}: Add cancel button to the GUI. 2002-10-26 Daniel Elstner * src/filebuffer.cc (create_with_error_message): Improve message title: s/Load failed/Can't read file/ 2002-10-26 Daniel Elstner * src/filelist.cc src/mainwindow.cc: Make use of the progress bar pulse feature while globally replacing matches, too. 2002-10-26 Daniel Elstner * src/filebuffer.cc (create_with_error_message): Don't forget set_modified(false) after filling the buffer. 2002-10-26 Daniel Elstner * src/statusline.cc: Correctly handle signal_style_changed() from the labels rather than the container. * src/filebuffer.{cc,h} src/fileio.{cc,h} src/filelist.{cc,h}: Instead of printing error messages to the console, write the message to a text buffer. Use a dialog error stock image so that it looks good. * src/filebuffer.{cc,h} src/filelist.{cc,h} src/mainwindow.{cc,h}: In the match counter, display the number of matches per file rather than the overall match count. Also, remember this original match count and don't decrease it when removing matches. Make the match index counter work. 2002-10-25 Daniel Elstner * src/statusline.{cc,h} (CounterBox): New class encapsulating a single "index/count"-style counter, for use by class StatusLine. Further improve calculation of the label lengths. * src/filelist.{cc,h} src/mainwindow.{cc,h}: Add a file_index parameter to FileList::signal_switch_buffer() and display it in the status line. 2002-10-25 Daniel Elstner * src/filebuffer.{cc,h}: Implement support for matching empty strings, while emulating the behaviour of Perl's /g modifier. 2002-10-24 Daniel Elstner * src/statusline.{cc,h}: New files, implementing the status box at the bottom of the main window. * src/mainwindow.{cc,h} src/filelist.{cc,h}: Implement file and match counter using the new StatusLine object. * src/filelist.{cc,h}: Speed up sorting by defining a custom sort function that makes use of collate keys. 2002-10-24 Daniel Elstner * macros/cxx.m4: New file, implementing custom autoconf macros related to checking the C++ compiler/environment. (REGEXXER_CXX_HAS_STD_LOCALE): New m4 macro. (REGEXXER_ARG_ENABLE_WARNINGS): New m4 macro. * configure.ac: Make use of the new autoconf macros. * Makefile.am (EXTRA_DIST): Add macros/cxx.m4. 2002-10-21 Daniel Elstner * configure.ac: Require gtkmm-2.0 >= 2.0.0. 2002-10-21 Daniel Elstner * src/fileio.cc: Dump std::[io]fstream in favor of Glib::IOChannel. It's less code now and the error reporting should be better too. 2002-10-21 Daniel Elstner * src/fileio.{cc,h}: New files. * src/filelist.{cc,h}: Separate the load/save functionality into fileio.{cc,h} to improve modularity of the code. 2002-10-21 Daniel Elstner * src/filelist.{cc,h} (FileList::find_recursively): Move the file_test() code into a separate method find_check_file(), and improve the error handling. 2002-10-21 Daniel Elstner * src/filelist.{cc,h}: Cache the Gdk::Color object used for files which failed to load. * src/mainwindow.cc: Replace some unnecessary run-time checked casts with static ones. 2002-10-20 Daniel Elstner * src/mainwindow.cc (MainWindow::on_filelist_bound_state_changed): Don't forget to update the prev/next match buttons' sensitivity. 2002-10-20 Daniel Elstner * src/filelist.cc (FileList::find_files): Catch exceptions from Glib::Dir and Glib::file_test(). 2002-10-20 Daniel Elstner * src/stringutils.{cc,h} (Util::convert_to_ascii): New function which replaces all non-ASCII characters with '?'. This should be used for error messages when everything else failed. * src/filelist.cc: Use filename_to_utf8_fallback() in a few more places. Also, if the filename conversion fails ultimately show a warning and skip the file. 2002-10-20 Daniel Elstner * src/stringutils.{cc,h} (Util::filename_to_utf8_fallback): New wrapper function for Glib::filename_to_utf8() that works even if the user hasn't set G_BROKEN_FILENAMES correctly. In that case it shows a hopefully annoying g_warning(). * src/filelist.cc: Use Util::filename_to_utf8_fallback() where appropriate. * src/mainwindow.cc: ditto. 2002-10-20 Daniel Elstner * src/filelist.cc: Speed up find_files() by updating the GUI every 16 iterations rather than all the time. 2002-10-20 Daniel Elstner * src/mainwindow.{cc,h} src/filelist.{cc,h}: Implement "Save" and "Save all" functionality. Also, separate the file list boundary notification from signal_switch_buffer() -- should be a lot more robust now. 2002-10-20 Daniel Elstner * src/mainwindow.{cc,h} src/filelist.{cc,h}: Add "Save all" tool button and implement sensitivity setting for "Save" and "Save all". 2002-10-19 Daniel Elstner * pixmaps/stock_save_all_24.png: New file. * pixmaps/Makefile.am: Use gdk-pixbuf-csource to generate inline stock pixbufs. * configure.ac: Check for gdk-pixbuf-csource. * src/main.cc: Register new stock items for regexxer. 2002-10-18 Daniel Elstner * src/filelist.{cc,h}: Paint rows of modified files in red. 2002-10-18 Daniel Elstner * src/mainwindow.cc: Make the TextView non-editable if no file is loaded. 2002-10-18 Daniel Elstner * configure.ac: Require sigc++ >= 1.2.1 and gtkmm >= 1.3.27. 2002-10-16 Daniel Elstner * src/filebuffer.{cc,h} src/filelist.{cc,h} src/mainwindow.{cc,h}: Implement match substitution for the current file and all files, and get notification on match count changes working correctly. 2002-10-16 Daniel Elstner * src/Makefile.am (DEFS): Define all the *_DISABLE_DEPRECATED macros just to prove regexxer is legacy-free ;) 2002-10-16 Daniel Elstner * src/filebuffer.h (BoundState): Define operator|=() and friends. * src/filebuffer.cc: Use the new operator. 2002-10-16 Daniel Elstner Woohoo, first ChangeLog entry for regexxer! * virtually all files: Insert copyright notice and CVS Id tags.