Homepage: http://github.com/rolandwalker/fixmee
Author: Roland Walker
Updated:
Quickly navigate to FIXME notices in code
Quickstart (require 'fixmee) (global-fixmee-mode 1) right-click on the word "fixme" in a comment ;; for `next-error' support M-x fixmee-view-listing RET Explanation Fixmee-mode tracks "fixme" notices in code comments, highlights them, ranks them by urgency, and lets you navigate to them quickly. A distinguishing feature of this library is that it tracks the urgency of each notice, allowing the user to jump directly to the most important problems. Urgency of "fixme" notices is indicated by repetitions of the final character. For example, one might write "FIXMEEEEEEEEE" for an important issue. The `fixmee-goto-nextmost-urgent' command will navigate to the longest notice first. To use fixmee-mode, add the following to your ~/.emacs (require 'fixmee) (global-fixmee-mode 1) Then, open some buffers and right-click on the word "fixme" in a comment or press C-c f or M-x fixmee RET or roll the mouse wheel when hovering over the text "fixm" in the modeline. or execute `fixmee-view-listing' to navigate using `next-error' conventions. Key Bindings The default key bindings are C-c f `fixmee-goto-nextmost-urgent' C-c F `fixmee-goto-prevmost-urgent' C-c v `fixmee-view-listing' M-n `fixmee-goto-next-by-position' ; only when the point is M-p `fixmee-goto-previous-by-position' ; inside a "fixme" notice To constrain the nextmost/prevmost-urgent commands to the current buffer only, use a universal prefix argument, eg C-u C-c f When the smartrep package is installed, the "C-c" prefix need not be used for consecutive fixmee-mode keyboard commands. Instead, just keep pressing "f" (or whichever key you set in customize). There is also a context menu and mouse-wheel bindings on the minor-mode lighter in the modeline: mouse-1 context menu wheel-down/up next/prev by urgency M-wheel-down/up next/prev by position Patterns The following fixme patterns are supported by default: @@@ XXX ; only this one is case-sensitive todo fixme See Also M-x customize-group RET fixmee RET M-x customize-group RET nav-flash RET Notes Currently, only open buffers are searched, not files or projects. Compatibility and Requirements GNU Emacs version 24.5-devel : not tested GNU Emacs version 24.4 : yes GNU Emacs version 24.3 : yes GNU Emacs version 23.3 : yes GNU Emacs version 22.2 : yes, with some limitations GNU Emacs version 21.x and lower : unknown Requires: button-lock.el tabulated-list.el (included with Emacs 24.x) Uses if present: smartrep.el, nav-flash.el, back-button.el, string-utils.el Bugs fixmee--listview-mode-map (the major-mode menu) does not work well as a context menu. - menu from major mode of selected window appears even when right-clicking in this window - mouse-event wrappers keep keyboard shortcuts from appearing in menu-bar - better to have a separate context menu attached to the entries, using a keymap text property When comment-start is defined, only the first notice on a line is lit up by button-lock, though fixmee-mode is aware of multiple notices on a line. This is worked around for the moment by stripping these cases from fixmee-notice-list. Better would be to add comment-sensitivity logic to button-lock, and remove the comment-matching section of the regexp passed to button-lock. Fixmee-maybe-turn-on gets called multiple times when a file is loaded. Fixmee-buffer-include-functions may not contain the function 'frame-bufs-associated-p, because a new buffer is not yet associated with the frame at the time the global mode check calls fixmee-maybe-turn-on. Bug in tabulated-list: position of point is not maintained when sort headers are clicked while a different window is selected. This package is generally incompatible with interactive modes such as `comint-mode' and derivatives, due conflicting uses of the rear-nonsticky text property. To change this, set customizable variable fixmee-rear-nonsticky. TODO Push mark for navigation which happens from the listview There is no need for fixmee--listview-mode to be an interactive command. Consider allowing all navigation commands to update the listview buffer (currently only next-error commands do so) Display fully fontified context lines in listview buffer - some lines have fontification, seemingly at random. Disabling whitespace trimming and excluded properties had no effect. Multi-line context in listview buffer - tabulated-list accepts newlines, but data then runs out of the column on the next line. Would need to pad to match column position. Better feedback messages for end-of-list and start-of-list. Bookmark integration? (implicit bookmarking on notices). Wrap/cycle options on navigation-by-position. How to get last-command when user does M-x? (smex is not helping here). (nth 0 command-history) ? Navigation can land on line near vertical edge of window - should respect user settings and scroll in as needed for context. Project support. Some kind of extra comment indicating a notice is to be ignored? Lead with a backwhack? License Simplified BSD License Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. This software is provided by Roland Walker "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall Roland Walker or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Roland Walker.