annotate lisp/newcomment.el @ 104164:ac1a55cc2c38

2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-create-formula-image): Remove the -E option for dvipng. * org-exp.el (org-default-export-plist): Respect #+BIND. (org-export-confirm-letbind): New function. * org.el (org-paste-subtree): Test the kill ring entry if it is going to be used. (org-copy-subtree): Use `org-forward-same-level'. (org-forward-same-level): Respect the `invisibe-ok' arg for back-to-heading. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-table-map-tables): Make sure cursor is back at table beginning after funcall. * org-agenda.el (org-agenda-bulk-action): Make sure parents are handled before children, and do not error if an entry is not found, probably because it hase been remove when the parent was archived or refiled. * org.el (org-ido-completing-read): Accept straight lists for completion as well as alists. * org-timer.el (org-timer-cancel-timers): Renamed from `org-timer-cancel-timers'. * org.el (org-cycle-internal-local): Fix problem with finding next invisible line. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-list-send-list): Call `org-list-goto-true-beginning' instead of `org-list-find-true-beginning', which does not exist. * org-timer.el (org-timer-reset-timers): Use `mapc'. (org-timer-set-timer): Do not assign to heading. * org-id.el (org-id-open): Quote function name. * org-macs.el (org-unmodified): Turn off recording undo information while running inside the macro. * org-table.el (org-table-export): Also work in file-less buffers. * org.el (org-startup-indented): New option. (org-startup-options): Add new options indent and noindent. (org-unfontify-region): Remove line-prefix and wrap-prefix properties. (org-after-demote-entry-hook, org-after-promote-entry-hook): New hooks. (org-promote, org-demote): Run the new hooks. * org-table.el (org-table-align): Replace leading \n as well. * org-exp.el (org-export-push-to-kill-ring): Remove `line-prefix' and `line-wrap' text properties. * org-compat.el (org-kill-new): New function. * org-agenda.el (org-format-agenda-item): Remove `line-prefix' and `line-wrap' text properties. * org-indent.el: New file. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-provide-todo-statistics): Tweak docstring. * org-id.el (org-id-open): Honor `org-link-frame-setup'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-as-org): Insert the "-source" string before the extension. * org.el (org-read-date): Make sure the calendar is in the current frame. (org-set-emph-re): Remove the ? from the post-match. (org-emphasis-regexp-components): Add backslash to the postmatch class. (org-set-font-lock-defaults): Write \n instead of \xa, and make it optional so that also lines at the end of the buffers will still be matched as headlines. * org-table.el (org-table-error-on-row-ref-crossing-hline): Variable made obsolete. (org-table-relative-ref-may-cross-hline): New option. (org-table-find-row-type): Honow the new option `org-table-relative-ref-may-cross-hline'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-cut-region, org-table-copy-region): Work on single field if no active region. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-make-header): Only insert title if one is defined. * org.el (org-make-options-regexp): Allow empty values. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-cycle-internal-local): Improved version of finding next visible line. (org-cycle-hide-drawers): Only hide drawers if this is really necessary. (outline-end-of-subtree): Make `outline-end-of-subtree' use the org-version of this function in Org-mode. We use advice to implement this change, so that future changes to this function in outline.el wil be handled properly. (org-forward-same-level, org-backward-same-level): New commands. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-remove-empty-overlays-at) (org-clean-visibility-after-subtree-move): New functons. (org-move-subtree-down): Simplify cleanup of display. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-mac-message.el (org-mac-message-get-links): Improve docstring. Make argument SELECT-OR-FLAGGED optional, default to "s". Fix the return value. (org-mac-message-insert-flagged): Simplify. * org.el (org-refile-get-location): Tamper with refile history o that history contains compete matches instead of the entered string. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-store-link): Never store a link to an inline task. * org-footnote.el (org-footnote-goto-local-insertion-point): Skip inline tasks when positioning footnotes. * org.el (org-refile): Remove the END line when archiving an inline task that does have an END line. * org-archive.el (org-archive-subtree): Remove the END line when archiving an inline task that does have an END line. * org-macs.el (org-with-limited-levels): New macro. (org-get-limited-outline-regexp): New function. * org-exp.el (org-export-format-source-code-or-example): Fix bug that did not enumerate first line. (org-export-mark-radio-links): Skip matches in links. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-activate-plain-links): Make single-match. (org-adapt-indentation): Fix docstring. * org-macs.el (org-unmodified): Turn of modification hooks while running this macro. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-adapt-indentation): Slightly improve the docstring. (org-occur): Sends an error when the user inputs an empty string. (org-priority): Bugfix: the tag alignement should happen within save-excursion. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-make-link-regexps): Don't exclude parentheses from `org-plain-link-re' (org-cycle-internal-local): When locally cycling, switch directly from CHILDREN to FOLDED if there is no subtree (org-cycle): Update the docstring to document the new behavior of `org-cycle-internal-local'. 2009-08-06 Nicolas Goaziou <n.goaziou@neuf.fr> (tiny change) * org-clock.el (org-clock-in): Bugfix: recognize timestamps with an abbreviated format for days. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-protocol.el (org-protocol-default-template-key): New option. * org.el (org-refile): Bugfix: save-excursion before reading the refile target, otherwise cursor moves might confuse `org-refile'. * org.el (org-toggle-heading): Bugfix: correctly convert list items before the first headline. * org.el (org-provide-todo-statistics): Allow a list of TODO keywords to compute statistics against headlines containing a keyword from this list. (org-update-parent-todo-statistics): Possibly use the new allowed value of `org-provide-todo-statistics'. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-timer.el: Add autoload cookie. * org.el (org-occur-link-in-agenda-files): New function. * org-timer.el (org-timer-last-timer): New variable. * org-agenda.el (org-agenda-mode-map): New key for org-timer-set-timer called from the agenda. * org.el (org-mode-map): New key for org-timer-set-timer. * org-timer.el (org-timer-reset-timers) (org-timer-show-remaining-time, org-timer-set-timer): New functions. * org-clock.el (org-show-notification): Update the docstring. * org.el (org-provide-todo-statistics): Allow new value 'all-headlines for this option, which includes entries with no TODO keywords in the todo statistics. (org-update-parent-todo-statistics): Possibly use the new 'all-headline value from `org-provide-todo-statistics'. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-clock.el (org-dblock-write:clocktable): Add a new option :timestamp which allows display of timestamps in clock reports. * org.el (org-mode-map): Define new key `C-c C-*': convert a plain list to a subtree, preserving the structure of the list. (org-set-emph-re): Make the last element optional in the regexp. This regexp now matches an emphasized string at the end of a line. * org-list.el (org-list-goto-true-beginning) (org-list-make-subtree, org-list-make-subtrees): New functions. * org.el (org-eval-in-calendar): Select the right frame. (org-save-frame-excursion): Remove this macro. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-list.el (org-list-beginning-re): Bugfix: don't use * when trying to find the beginning of a list. * org-exp.el (org-get-file-contents): Use a new argument: markup. When present, tell org-get-file-contents not to protect org-like lines. * org-id.el (org-id-uuid-program): New option to set the name of the uuidgen program. (org-id-method): Use `org-id-uuid-program'. (org-id-new): Use `org-id-uuid-program'. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-exp.el (org-export-number-lines): Allow whitespace in code references. Allow the -r switch to remove the references in the source code even when the lines are not numbered: the labels can be explicit enough. * org.el (org-fontify-whole-heading-line): New option. (org-set-font-lock-defaults): Use the new option. * org-clock.el (org-show-notification-handler): New option. (org-show-notification): Use the new option. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-eval-in-calendar): Fix a bug about calendar navigation when `calendar-setup' value is 'calendar-only. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (orgstruct++-mode): Fix typo in docstring. (org-insert-link): Clean up: (or (...)) => (...) (org-insert-link): Use TAB for stored links completion. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-get-refile-targets): Fix bug: don't ignore case when building the list of targets. * org-remember.el (org-remember-delete-empty-lines-at-end): New option. (org-remember-handler): Use the new option. 2009-08-06 James TD Smith <ahktenzero@mohorovi.cc> * org.el (org-tags-sort-function): New option for sorting tags. (org-set-tags): Use the new option to sort tags. * org-plot.el (org-plot/gnuplot): Run with an idle timer to avoid premature deletion of the data when using org-plot in a script. 2009-08-06 Bastien Guerry <bzg@altern.org> * org-clock.el (org-clock-in-prepare-hook): New hook. (org-clock-in): Use this new hook. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-special-ctrl-a/e): Explicitely bind the value 'reversed for this option to the "true line boundary first" behavior. (org-tags-match-list-sublevels): Document the 'indented value for this variable. * org-latex.el (org-export-latex-first-lines): Fix problem with publishing the region. * org-exp.el (org-export-format-source-code-or-example): Fix bad line numbering when exporting examples in HTML. 2009-08-06 James TD Smith <ahktenzero@mohorovi.cc> * org-colview.el (org-format-time-period): Formats a time in fractional days as days, hours, mins, seconds. (org-columns-display-here): Add special handling for SINCE and SINCE_IA to format for display. * org.el (org-time-since): Add a function to get the time since an org timestamp. (org-entry-properties): Add two new special properties: SINCE and SINCE_IA. These give the time since any active or inactive timestamp in an entry. (org-special-properties): Add SINCE, SINCE_IA. (org-tags-sort-function): Add custom declaration for tags sorting function. (org-set-tags): Sort tags if org-tags-sort-function is set 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-goto): Find hidden headlines as well. * org.el (org-narrow-to-subtree): Find hidden headlines as well. * org-plot.el (org-plot/add-options-to-plist): Add timeind option. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-remove-all-timestamps): New function. (org-publish-all): Remove all timestamp files if `org-publish-all' is called with a prefix argument. * org-list.el (org-indent-item): Fix typo. (org-item-indent-positions): Normalize ordered bullet. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-macs.el (org-set-local): Make a local variable, do not make the variable buffer-local! * org-latex.el (org-export-as-latex): Call `org-install-letbind'. * org-exp.el (org-infile-export-plist): Read BIND lines. (org-install-letbind): New function. (org-export-as-org, org-export-preprocess-string): Call `org-install-letbind'. * org-list.el (org-list-demote-modify-bullet): New option. (org-first-list-item-p): Save point. (org-fix-bullet-type): New optional argument FORCE-BULLET. (org-indent-item): Honor `org-list-demote-modify-bullet'. (org-item-indent-positions): Return bullet types along with indentation. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-show-entry): Hide drawers. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-footnote.el (org-footnote-auto-adjust): New option. (org-footnote-auto-adjust-maybe): New function. (org-footnote-new, org-footnote-delete): Call `org-footnote-auto-adjust-maybe'. * org.el (org-startup-options): Add new footnote-related keywords. * org-publish.el (org-publish-timestamp-filename): Additional arguments PUB-DIR and PUB-FUNC, which are included in the hash. (org-publish-needed-p): Additional arguments PUB-DIR PUB-FUNC TRUE-PUB-DIR. Pass them through to `org-publish-timestamp-filename'. (org-publish-update-timestamp): Additional arguments PUB-DIR and PUB-FUNC, which are included in the hash. (org-publish-file): Delay timestamp test until the publishing function is known. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-bulk-action): Add scheduling and setting the deadline. * org.el (org-read-date-final-answer): New variable. (org-read-date): Store the final answer string, including the date from the calendar, for reuse by agenda bulk commands. * org-publish.el (org-publish-attachment): Fix publishing of attachments. * org-latex.el (org-export-latex-quotation-marks): Fix export of quotation makrs in parenthesis. (org-remove-initial-hash): New function. (org-export-latex-preprocess): Fix bug with infinite loop if environment is not properly closed. * org-table.el (org-table-get-remote-range): Find #+TBLNAME also when indented. * org.el (org-fontify-meta-lines-and-blocks): Make #+TBLNAME highlight also when indented. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-footnote.el (org-footnote-renumber-fn:N): New command. (org-footnote-action): Offer renumbering. * org.el (org-cycle): Honor the `integrate' value of org-cycle-include-plain-lists'. * org-list.el (org-cycle-include-plain-lists): New allowed value `internal'. Improve the docstring. * org.el (org-set-autofill-regexps): Improve the paragraph-start regexp to work better with LaTeX commands. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-inline-image-extensions): Add ps and eps extensions. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-write-agenda): Make sure org-icalendar is loaded. * org.el (org-map-entries): No longer force `org-tags-match-list-sublevels' to t during a todo-only tags search. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-low-levels): Allow user-defined environment. (org-export-latex-subcontent): Handle user-defined environment. * org-agenda.el (org-agenda-view-mode-dispatch): Add more keys to the View dispatcher. * org.el (org-hide-block-toggle): Use `org-make-overlay' instead of `make-overlay'. * org-latex.el (org-export-as-pdf): Protect match data during call to shell-quote-argument. * org-agenda.el (org-agenda-mode-map): Modify bulk action keys. (org-agenda-view-mode-dispatch): New function. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-mode): Reset list of marks. (org-agenda-mode-map): Define new keys for refile and bulk action. (org-agenda-menu): Add menu itesm for refile and bulk action. (org-agenda-refile): New function. (org-agenda-set-tags): Optional arguments TAG and ONOFF. (org-agenda-marked-entries): New variable. (org-agenda-bulk-select, org-agenda-remove-bulk-action-overlays) (org-agenda-remove-all-bulk-action-marks) (org-agenda-bulk-action): New functions/commands. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-get-file-contents): Protect org-like lines in included files. (org-export-format-source-code-or-example): Remove newlines. * org-latex.el (org-export-latex-links): Check for no-description marking. * org-exp.el (org-export-preprocess-apply-macros): Switch macro argument separator back to comma. (org-export-normalize-links): Mark links without description. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-infile-export-plist): Fix bug in macro processing. * org-agenda.el (org-agenda-clock-out): Update line after clocking out. (org-agenda-highlight-todo): Fix bug with highlighting. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-font-lock-defaults): Adapt formatting to capture new alignment strings. * org-table.el (orgtbl-self-insert-command): Add yas/expand to command list. (org-table-align): Check for forced align type. * org.el (org-self-insert-command): Add yas/expand to command list. * org-clock.el (org-clock-in-hook): New hook. (org-clock-in): Run `org-clock-in-hook. (org-clock-out-hook): New hook. (org-clock-out): Run `org-clock-out-hook. (org-clock-cancel-hook): New hook. (org-clock-cancel): Run `org-clock-cancel-hook. (org-clock-goto-hook): New hook. (org-clock-goto): Run `org-clock-goto-hook. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-store-link): Better default description for link to Org-mode headline. * org-exp.el (org-export-generic): Autoload the generic exporter function. (org-export): Implement the `g' key for the generic exporter. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (orgtbl-setup): Add a binding for `S-iso-lefttab', and for zbacktab'. * org-exp.el (org-infile-export-plist): Get macros also from #+SETUPFILE. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-colview.el (org-columns-capture-view): Protect vertical bars in column values. (org-columns-capture-view): Exclude comment and archived trees. * org-colview-xemacs.el (org-columns-capture-view): Protect vertical bars in column values. (org-columns-capture-view): Exclude comment and archived trees. * org.el (org-quote-vert): New function. * org-latex.el (org-export-latex-verbatim-wrap): New option. * org-exp.el (org-export-format-source-code-or-example): Use `org-export-latex-verbatim-wrap'. * org.el (org-clone-subtree-with-time-shift): Also shift inactive time stamps. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp-blocks.el: New file. * org-remember.el (org-remember-templates): Allow the headline element to be a function. (org-remember-apply-template): If the headline is a function, call it to get the true function. * org-clock.el (org-clock-menu): New function. (org-clock-update-mode-line): Update help string. (org-clock-modify-effort-estimate): New function. (org-clock-mark-default-task): New function. * org.el (org-hh:mm-string-to-minutes): Also take just a number of minutes as input. (org-org-menu): Add new clocking stuff. (org-clock-is-active): New function. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-open-non-existing-files): Improve docstring. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-icalendar.el (org-icalendar-include-bbdb-anniversaries): New option. (org-export-icalendar): Call `org-bbdb-anniv-export-ical'. * org-bbdb.el (org-bbdb-anniv-export-ical): New function. * org-list.el (org-get-checkbox-statistics-face): Use the new faces. * org-faces.el (org-checkbox-statistics-todo) (org-checkbox-statistics-done): New faces. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-use-verb): New variable. (org-export-latex-emph-format): Prefer \texttt over \verb when org-export-latex-use-verb is set. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-remember.el (org-remember-handler): Abort remember if the buffer is empty. * org-exp.el (org-export-format-source-code-or-example): Run `org-src-mode-hook'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-indent-line-function): Fix indentation of +#end lines. 2009-08-06 Tassilo Horn <tassilo@member.fsf.org> * org-gnus.el (org-gnus-store-link): Require message.el in org-gnus-store-link. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-src.el: New file, split out of org.el * org-macs.el (org-replace-match-keep-properties): New function. * org-exp.el (org-export-mark-blockquote-verse-center): Better preprocessing of center and quote and verse blocks. * org-list.el (org-list-end): Respect the stored "original" indentation when determining the end of the list. * org-exp.el (org-export-replace-src-segments-and-examples): Remember indentation correctly. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-update-mode-line): Apply face org-mode-line-clock. * org-faces.el (org-mode-line-clock): New face. 2009-08-06 Tassilo Horn <tassilo@member.fsf.org> * org-gnus.el (org-gnus-store-link): Fix bug where `org-gnus-store-link' used wrong subject when called in an article buffer. Patch provided by fengli AT gmail DOT com. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Remember the original indentation of source code snippets and examples. * org-latex.el (org-export-as-latex): Relocate the table of contents. * org.el (org-ctrl-c-ctrl-c): Update clock lines. * org-agenda.el (org-run-agenda-series): Scope global options also when creating the agenda buffer. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-adapt-indentation): Improve documentation. (org-insert-property-drawer): Respect org-adapt-indentation when inserting the drawer. (org-remove-flyspell-overlays-in): New function. (org-do-emphasis-faces, org-activate-plain-links) (org-activate-code, org-fontify-meta-lines-and-blocks) (org-activate-angle-links, org-activate-footnote-links) (org-activate-bracket-links, org-activate-dates) (org-activate-target-links, org-activate-tags): Remove flyspell overlays. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-edit-src-save): New function. * org-clock.el (org-clock-out-switch-to-state): New option. (org-clock-out): Honor `org-clock-out-switch-to-state'. * org-compat.el (org-compatible-face): Improve macro. * org.el (org-global-properties-fixed): Add default for CLOCK_MODELINE_TOTAL. * org-clock.el (org-clock-sum): Accept lists and strigs as tstart andd tend. (org-clock-sum-current-item): Optional argument TSTART, pass it to org-clock-sum. (org-clock-get-sum-start): New function. * org.el (org-startup-options): New keywords blockhide and blockshow. (org-mode): Add new invisibility spec. (org-set-startup-visibility): Hide block on startup if so desired. (org-hide-block-startup): New option. (org-block-regexp): New constant. (org-hide-block-overlays): New variable. (org-block-map, org-hide-block-toggle-all, org-hide-block-all) (org-show-block-all, org-hide-block-toggle-maybe) (org-hide-block-toggle): New functions. (org-edit-src-exit): Do not quote lines starting with # and no + behind it. (org-auto-repeat-maybe): Add LAST_REPEAT properter for a repeating entry. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-buffer-property-keys): Add Effort property for completion. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-sum-current-item): Fix positioning bug when retrieving total clocked time in the subtree. * org.el (org-quoting-blocks): New variable. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-store-formulas) (org-table-get-stored-formulas, org-table-fix-formulas) (org-table-edit-formulas, orgtbl-ctrl-c-ctrl-c) (orgtbl-gather-send-defs): Allow indented #+TBLFM line. * org.el (org-fontify-meta-lines, org-ctrl-c-ctrl-c): Allow indented #+TBLFM line. * org-footnote.el (org-footnote-goto-local-insertion-point): Allow indented #+TBLFM line. * org-colview.el (org-dblock-write:columnview): Allow indented #+TBLFM line. * org-colview-xemacs.el (org-dblock-write:columnview): Allow indented #+TBLFM line. * org-clock.el (org-dblock-write:clocktable): Allow indented #+TBLFM line. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Make editing indented blocks work correctly. * org.el (org-edit-src-nindent): New variable. (org-edit-src-code, org-edit-fixed-width-region) (org-edit-src-find-region-and-lang, org-edit-src-exit): Make editing indented blocks work correctly. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-replace-src-segments-and-examples): FInd indented blocks. (org-export-format-source-code-or-example): Fix indentation of blocks. (org-export-remove-indentation): New function. (org-export-select-backend-specific-text): Allow backend-specific code to be indented. (org-export-mark-blockquote-verse-center): Allow markers to be indented. * org.el (org-fontify-meta-lines): New function. (org-set-font-lock-defaults): Call the new fontification function. * org-faces.el (org-meta-line): New face (org-block): New face. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-treat-insert-todo-heading-as-state-change) (org-treat-S-cursor-todo-selection-as-state-change): New variables. (org-insert-todo-heading): Honor `org-treat-insert-todo-heading-as-state-change'. (org-shiftright, org-shiftleft): Honor `org-treat-S-cursor-todo-selection-as-state-change'. (org-inhibit-logging): New variable. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-remove-subtree-entries-from-agenda): Reduce range for marker position checking. * org-latex.el (org-export-latex-first-lines): Fix bug when exporting a region. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-push-to-kill-ring): Protect using x-set-selection, because that does not always work. * org-agenda.el (org-agenda-list): Apply the new face `org-agenda-date-today'. * org-faces.el (org-agenda-date-today): New face. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-to-appt): Turn off restriction when creating appointments. * org-latex.el (org-export-latex-low-levels): Fix customization type. * org.el (org-priority, org-shiftup, org-shiftdown): Disable priority commands. * org-agenda.el (org-agenda-priority): Disable priority commands. * org.el (org-enable-priority-commands): New option. * org-colview-xemacs.el (org-columns-compute) (org-columns-number-to-string): Fix problems with empty fields. * org-colview.el (org-columns-compute) (org-columns-number-to-string): Fix problems with empty fields. * org-exp.el (org-export-push-to-kill-ring): New function. (org-export-copy-to-kill-ring): New option. * org-latex.el (org-export-as-latex): Call `org-export-push-to-kill-ring'. * org-exp.el (org-export-show-temporary-export-buffer): New option. * org-latex.el (org-export-as-latex): Use `org-export-show-temporary-export-buffer'. * org-exp.el (org-export-show-temporary-export-buffer): New option. (org-export-push-to-kill-ring): New function. * org-colview.el (org-columns-compile-map): New variable. (org-columns-new, org-columns-compute) (org-columns-number-to-string, org-columns-uncompile-format) (org-columns-compile-format): Implement new operators. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-plist-vars): Add :xml-declaration. * org-list.el (org-update-checkbox-count): Make property dependent. * org.el (org-hierarchical-todo-statistics): New option. (org-update-parent-todo-statistics): Modified to handle recursive statistics. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish): Make this function behave correctly in interactive use when called with a prefix argument. * org.el (org-todo-statistics-hook): New hook. (org-update-parent-todo-statistics): Use new hook. (org-log-into-drawer): New function. (org-add-log-setup): Use the new `org-log-into-drawer' function to determine if we should be logging into a drawer. (org-log-into-drawer): Update docstring. (org-default-properties): Add LOG_INTO_DRAWER as a property. * org-list.el (org-checkbox-statistics-hook): New hook. (org-update-checkbox-count-maybe): Use new hook. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-edit-src-code, org-edit-fixed-width-region): Use a better bufer-generating mechanism. (org-edit-src-find-buffer): New function. * org-icalendar.el (org-print-icalendar-entries): Don't check for archive tag, this is already done by `org-agenda-skip'. data while constructing lost of tags. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-preprocess-apply-macros): Use semicolon as argument separator in macros. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-after-sorting-entries-or-items-hook): New hook. (org-sort-entries-or-items): Run the new hook. (org-after-refile-insert-hook): New hook. (org-refile): Run `org-after-refile-insert-hook'. * org-agenda.el (org-agenda-get-progress): Never take time of day from headline when displaying progress. * org-latex.el (org-export-latex-complex-heading-re): New variable. (org-export-as-latex): Force the correct regexp in the preprocessor buffer. (org-export-latex-set-initial-vars): Set `org-export-latex-complex-heading-re'. * org-agenda.el (org-agenda-start-with-log-mode): New option. (org-agenda-mode): Use `org-agenda-start-with-log-mode'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-tables-centered): New option. (org-export-latex-tables): Use `org-export-latex-tables-centered'. * org-exp.el (org-export-as-org): New command. (org-export-as-org): New command. * org-publish.el (org-publish-org-to-org): New function. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-yank): Just call `org-yank-generic'. (org-yank-generic): New function, containing the formaer functionality of `org-yank'. * org-latex.el (org-export-latex-not-done-keywords) (org-export-latex-done-keywords): New variables. (org-export-latex-todo-keyword-markup): New option. (org-export-latex-set-initial-vars): Remember the TODO keywords. (org-export-latex-keywords-maybe): Apply the TODO markup. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-infile-export-plist): Add more default macros. (org-export-preprocess-apply-macros): Process macro arguments. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-icalendar.el (org-icalendar-include-todo): New allowedvalue `unblocked'. (org-print-icalendar-entries): Respect the new value of `org-icalendar-include-todo'. * org.el (org-link-try-special-completion) (org-file-complete-link): New functions. (org-insert-link): Add special completion support for some link types. * org-bbdb.el (org-bbdb-complete-link): New function. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-update-checkbox-count): Allow recursive statistics. (org-hierarchical-checkbox-statistics): New option. * org.el (org-cycle): Remove erraneous space character. * org-icalendar.el (org-icalendar-timezone): Initialize from environment. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-autoload): Fix autoloading of ascii export functions. (org-modules): Add org-special-blocks. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-icalendar.el (org-start-icalendar-file): Use the new option. (org-ical-timezone): New option. * org-exp.el (org-export-get-coderef-format): Use the description is present. * org.el (org-sort-entries-or-items): Improve docstring, and make better implementation for time sorting. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-edit-src-persistent-message): New option. (org-edit-src-code, org-edit-fixed-width-region): Use the new option. * org-clock.el (org-clock-insert-selection-line): Fix prefious patch. * org.el (org-edit-src-code, org-edit-fixed-width-region): Use separate buffer instead of indirect buffer to edit source code. (org-edit-src-exit): Make this function work with the new setup. * org-clock.el (org-clock-insert-selection-line): Make sure tasks are properly fontified before shown in the selection menu. * org.el (org-fontify-like-in-org-mode): New function. * org-latex.el (org-export-latex-links): Use the property list to retrieve the default image attributes. * org-exp.el (org-export-plist-vars): Add a new option. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export, org-export-visible): Support ASCII export to buffer (org-export-normalize-links): Do not protect the description if it is explicitly given. * org-list.el (org-reset-checkbox-state-subtree): Moved here from org-checklist.el. (org-reset-checkbox-state-subtree): Call `org-reset-checkbox-state-subtree'. * org-remember.el (org-select-remember-template): For the selection of a valid template. * org-latex.el (org-export-region-as-latex): Supply the force-no-subtree argument. (org-export-as-latex): Provide better limits when exporting the first line. When exporting to string, we still want the first lines. (org-export-latex-first-lines): New argument END, to force the end of the region. (org-export-region-as-latex): Use the property list. (org-export-as-latex): * org-colview-xemacs.el (org-columns-remove-overlays) (org-columns): Fix call to `local-variable-p'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-after-blockquotes-hook): New hook. (org-export-latex-preprocess): Run the new hook. * org-exp.el (org-export-preprocess-after-blockquote-hook): New hook. (org-export-preprocess-string): Run the new hook. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-macs.el (org-check-external-command): New defsubst. * org.el (org-mode-map): New key for reload. (org-format-latex): Better error message when external programs are not available. * org-agenda.el (org-agenda-mode-map): Bind `org-reload'. * org.el (org-sort-entries-or-items): Explicit sorting function for priorities, needed for XEmacs compatibility. * org-remember.el (org-remember-apply-template): Improve auto-save behavior. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-preprocess): Also protect environments ending in a star. * org-list.el (org-at-item-p): Fix regular expression. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-end-of-subtree): Improve speed. * org-agenda.el (org-agenda-get-timestamps) (org-agenda-get-progress, org-agenda-get-deadlines) (org-agenda-get-scheduled, org-agenda-get-blocks): Optimizations, in particular, wait as long as possible to collect the tags. (org-stuck-projects): Improve docstring. * org.el (org-store-link): No errors when getting custom id before first headline. (org-get-tags-at): Use `org-up-heading-safe' when getting tags. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-prepare-agenda-buffers): Catch a throw to nextfile. * org-protocol.el: Remove dependency on url.el. (org-protocol-unhex-compound, org-protocol-open-source): Remove dependency on url.el. * org-latex.el (org-export-as-pdf): Use `org-latex-to-pdf-process'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-latex-to-pdf-process): New option. * org-agenda.el (org-agenda-skip-additional-timestamps-same-entry): New option. (org-agenda-get-timestamps): Honor `org-agenda-skip-additional-timestamps-same-entry'. * org-clock.el (org-clock-goto-may-find-recent-task): New option. (org-clock-goto): Find recent task only if `org-clock-goto-may-find-recent-task' allows it. * org-exp.el (org-export-remove-or-extract-drawers): Handle empty drawers, and drawers that are missing the :END: line. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-goto): Go to recently clocked task if no clock is running. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-update-parent-todo-statistics): Check for STATISTICS_FROM property. * org-list.el (org-update-checkbox-count): Check for STATISTICS_FROM property. * org.el (org-tab-first-hook) (org-tab-after-check-for-table-hook) (org-tab-after-check-for-cycling-hook): New hooks. (org-cycle-internal-global, org-cycle-internal-local): New functions, split out from `org-cycle'. (org-cycle): Call the new hooks. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-preprocess-string): Reset the list of preferred targets for each run of the preprocessor. * org.el (org-refile-target-verify-function): Improve documentation. (org-get-refile-targets): Respect point being moved by the verification function. * org-latex.el (org-export-latex-timestamp-keyword-markup): New option. (org-export-latex-keywords): Use new option. * org.el (org-rear-nonsticky-at): New defsubst. (org-activate-plain-links, org-activate-angle-links) (org-activate-footnote-links, org-activate-bracket-links) (org-activate-dates, org-activate-target-links) (org-activate-tags): Place the rear-nonsticky properties at the correct location. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-protocol.el (server-edit): Declare `server-edit'. (org-protocol-unhex-string, org-protocol-unhex-compound): New functions. (org-protocol-check-filename-for-protocol): Call `server-edit'. * org.el (org-default-properties): New default properteis for completion. * org-exp.el (org-export-add-subtree-options): Add new properties for subtree export. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-id.el (org-id-get-with-outline-path-completion): Turn off org-refile-target-verify-function for the duration of the command. * org.el (org-link-to-org-use-id): New possible value `create-if-interactive-and-no-custom-id'. (org-store-link): Use custom IDs. (org-link-search): Find custom ID properties from #link. (org-default-properties): Add CUSTOM_ID for property completion. (org-refile-target-verify-function): New option. (org-goto): Turn off org-refile-target-verify-function for the duration of the command. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-preferred-target-alist): New variable. (org-export-define-heading-targets): Find the new CUSTOM_ID property. (org-export-target-internal-links): Target the custom ids when possible. * org-latex.el (org-export-latex-preprocess): Better regexp for matching latex macros with arguments. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-remember.el (org-remember-handler): Allow filing to non-org files. 2009-08-06 Magnus Henoch <magnus.henoch@gmail.com> * org-table.el (org-table-fix-formulas): Do not change references to remote tables. (org-table-get-remote-range): Convert standard coordinates to RC format. * org-latex.el (org-export-latex-keywords): Fix regexp bug. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-sha1-string): Function removed. * org.el (org-refile-allow-creating-parent-nodes): New option. (org-refile-get-location): New argument NEW-NODES. (org-refile): Call `org-refile-get-location' with the new argument. (org-refile-get-location): Arrange for adding a new child. (org-refile-new-child): New function. * org-clock.el: Fix a number of docstrings. (org-clock-find-position): New argument FIND-UNCLOSED to make the function find an unclosed clock in the entry. (org-clock-in): Call `org-clock-find-position' with the new argument if we might be resuming a clock. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-display-custom-times): New variable. (org-export-latex-timestamp-markup): New option. (org-export-latex-set-initial-vars): Remember the local value of `org-display-custom-times'. (org-export-latex-content): Process time stamps. (org-export-latex-time-stamps): New function. * org-macs.el (org-maybe-intangible): Add intangible property again to invisible text. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-default-export-plist): Handle undefined variables. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-sort-entries-or-items): Match TODO keywrds case-sensitively, when sorting. (org-priority): Do not match TODO keywords with wrong case. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-todo): Honor the NOBLOCKING property. * org-agenda.el (org-agenda-dim-blocked-tasks): Honor the NOBLOCKING property. * org.el (org-scan-tags): Fix bug in tag scanner 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-modules): Mark obsolete packages. * org-html.el: New file, split out from org-exp.el. * org-icalendar.el: New file, split out from org-exp.el. * org-xoxo.el: New file, split out from org-exp.el. * org-ascii.el: New file, split out from org-exp.el. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-find-library-name): New function. * org.el (org-pre-cycle-hook): New hook. (org-cycle): Call the new hook in appropriate places. (org-reload): Only reload files that have been loaded before. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-font-lock-defaults): Enforxe space or line end after todo keyword. (org-todo): When changing TODO state, do matching case-sensitively. (org-map-continue-from): New variable. (org-scan-tags): Respect values in `org-map-continue-from'. (org-reload): Make XEmacs compatible. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-protocol.el (org-protocol-flatten-greedy): New function. (org-protocol-flatten): New function. * org.el (org-open-link-from-string): Pass reference buffer to `org-open-at-point'. (org-open-at-point): New optional argument `reference-buffer'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-scan-tags): Make tag scan find headline in first line, 2nd attempt. (org-get-refile-targets): Add the naked file name. (org-refile): Store as top-level entry when only file name was given. * org-agenda.el (org-agenda-get-progress): Fix regexp bug. * org.el (org-block-todo-from-children-or-siblings-or-parent): Renamed from org-block-todo-from-children-or-siblings, and enhanced to look for the parent's status as well. * org-agenda.el (org-agenda-log-mode-add-notes): New option. (org-agenda-get-progress): Add first notes line to log entry if so desired. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-cleanup-fancy-diary-hook): New hook. (org-agenda-cleanup-fancy-diary): Call the new hook. * org-remember.el (org-remember-apply-template): Take the default for the annotation from the :annotation property. * org-mac-message.el (org-mac-message-get-link): Remove the quotes. (org-mac-message-get-link): Return the result. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-refile-get-location): Add file name only if not already included in outline path. * org-faces.el (org-n-level-faces): Fix customization type from number to integer. * org-exp.el (org-export-headline-levels): Fix customization type from number to integer. * org-agenda.el (org-agenda-confirm-kill) (org-agenda-custom-commands-local-options) (org-timeline-show-empty-dates, org-agenda-ndays) (org-agenda-start-on-weekday, org-scheduled-past-days): Fix customization type from number to integer. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-protocol.el: Declare some functions. * org-agenda.el (org-agenda-compare-effort): Honor `org-sort-agenda-noeffort-is-high'. (org-agenda-filter-by-tag, org-agenda-filter-make-matcher) (org-agenda-compare-effort): Implement the "?" operator for finding entries without effort setting. * org.el (org-extract-attributes-from-string): New function. * org-exp.el (org-export-splice-attributes): New function. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-mouse.el: XEmacs compatibility fixes * org.el (org-modules): Add org-inlinetasks.el (org-cycle): Implement limiting level on cycling. (org-move-subtree-down): Fix bug with swapping subtrees at end of buffer. * org-inlinetask.el: New file. * org-protocol.el: New file. * org.el (org-emphasis-regexp-components): Allow braces in emphasis pre and post match. * org-footnote.el (org-footnote-normalize): When only dorting, do not insert inline notes at the end. * org.el (org-require-autoloaded-modules): Add org-docbook.el. * org-docbook.el: New file. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-reftex-citation): New command. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-cmp-user-defined): New option. (org-sorting-choice, org-agenda-sorting-strategy): Add the new sorting options. (org-entries-lessp): Apply the new sorting option. * org.el (org-block-todo-from-children-or-siblings): Fix bug in blocker code, when an older sibling has children. * org-mac-message.el (org-mac-message-get-link): Improve getting links from multiple selected messages. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-remember.el (org-remember-finalize): Do not set buffer file name to nil. (org-remember-handler): Mark buffer as unmodified. (org-remember-handler): Delete backup file and show message about remaining backup files. (org-remember-auto-remove-backup-files): New option. * org.el (org-store-link): Use buffer name as link description in w3-mode buffers. (org-ido-switchb): Fix argument bug for completion. * org-remember.el (org-remember-apply-template): Set local variable `auto-save-visited-file-name' instead of global one. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-get-todos): Fix bug with match-data. (org-agenda-get-todos): Mark file tags as inherited. (org-agenda-list): Always search diary lines for a time. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-feed.el: New file. * org-exp.el (org-export-as-html): Close local lists depending on indentation, also when starting a table. * org-remember.el (org-remember-backup-directory) (org-remember-backup-name): New internal variable. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-out-if-current): Make buffer detection work in indirect buffers as well. * org.el (org-emphasis-regexp-components): Add the exxclamation mark to the post-emphasis characters. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-read-date-minibiffer-septup-hook): New hook. (org-read-date): Run the new hook. * org-mac-message.el (org-mac-flagged-mail): New group. (org-mac-mail-account): New variable. (org-mac-create-flagged-mail, org-mac-insert-flagged-mail): New commands. * org-remember.el (org-remember-backup-directory): New variable. (org-remember-apply-template): Write file to backup directory. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-mouse.el (org-mouse-todo-menu): New function. (org-mouse-todo-keywords): Function removed. (org-mouse-context-menu): Use `org-mouse-todo-menu'. * org-table.el (org-table-beginning-of-field) (org-table-end-of-field): New commands (org-table-previous-field, org-table-beginning-of-field): Better error messages. (orgtbl-setup): Include `M-a' and `M-e'. * org.el (org-backward-sentence, org-forward-sentence): New commands. * org-colview.el (org-colview-initial-truncate-line-value): New variable. (org-columns-remove-overlays): Restore the value of `truncate-lines'. (org-columns): Remember the value of `truncate-lines'. * org-colview-xemacs.el (org-colview-initial-truncate-line-value): New variable. (org-columns-remove-overlays): Restore the value of `truncate-lines'. (org-columns): Remember the value of `truncate-lines'. * org.el (org-columns-skip-arrchived-trees): New option. * org-agenda.el (org-agenda-export-html-style): Define color for org-agenda-done face. (org-search-view, org-agenda-get-todos, org-agenda-get-progress) (org-agenda-get-deadlines, org-agenda-get-scheduled): Use new face. * org.el (org-scan-tags): Use the new face. * org-faces.el (org-agenda-done): New face. * org.el (org-scan-tags): Test the value org `org-tags-match-list-sublevels'. (org-tags-match-list-sublevels): New allowed value: indented. * org-latex.el (org-export-latex-make-header): Apply macros in header. * org-exp.el (org-export-apply-macros-in-string): New function. * org-latex.el (org-export-latex-list-parameters): Fix bug with the definition of a checked box. * org-clock.el (org-clock-find-position): Fix drawer indentations. * org-latex.el (org-export-latex-low-levels): More options for how to process lower levels in LaTeX. (org-export-latex-subcontent): Better treatment for lists as a means of publishing lower levels. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-font-lock-defaults): Use new checkbox face. * org-faces.el (org-checkbox): New face. * org-exp.el (org-export-html-preprocess): Only create LaTeX fragement images if there is an export file. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-stuck-projects): Document that the subtree of projects that are not stuck will now be searched for stuck sub-projects. (org-agenda-skip-entry-when-regexp-matches) (org-agenda-skip-entry-when-regexp-matches-in-subtree): New functions. (org-agenda-list-stuck-projects): Use `org-agenda-skip-entry-when-regexp-matches-in-subtree'. * org-latex.el (org-export-latex-preprocess): Improve export of verses. * org-exp.el (org-export-as-html): Implement centering as a div rather than a paragraph. Do a better job with line-end in verse environments. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-open-at-point): Fix tags searches by mouse click. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-preprocess): Implement the centering markup. * org-exp.el (org-export-mark-blockquote-verse-center): Renamed from `org-export-mark-blockquote-and-verse'. (org-export-as-html): Implement the centering markup. * org-latex.el (org-export-latex-tables): Fix vertical lines in tables. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-read-date-history): New variable. (org-read-date): Use new history variable. (org-toggle-heading): Fix bug when used before first headline. (org-store-log-note): Remove drawer if empty while note is aborted. (org-remove-empty-drawer-at): New function. (org-check-after-date): New command. (org-sparse-tree): New sparse tree command "a". * org-exp.el (org-export-as-ascii): Improve export of plain lists. 2009-08-06 Bastien Guerry <bzg@altern.org> * org.el (org-toggle-fixed-width-section): Bug fix: insert a column and a space, not only a column. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-emphasis-alist): Better defaults for verbose emphasis. (org-export-latex-emph-format): New function. (org-export-latex-fontify): Call `org-export-latex-emph-format'. * org-agenda.el (org-agenda-menu): Add new commands to menu. (org-agenda-do-date-later, org-agenda-do-date-earlier) (org-agenda-date-later-minutes, org-agenda-date-earlier-minutes) (org-agenda-date-later-hours, org-agenda-date-earlier-hours): New commands. * org.el (org-timestamp-change): Move end-time along with start time. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-target-internal-links) (org-export-as-html): Protect links specified as #name. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-clone-subtree-with-time-shift): New command. * org-latex.el (org-export-latex-special-chars) (org-export-latex-treat-sub-super-char): Fix subscript export. * org-exp.el (org-create-multibrace-regexp): Do not add backslashes to the class. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-colview.el (org-columns-map): Better functions for moving up and down a row, even if `truncate-line' is nil. * org.el (org-insert-todo-heading): Make sure the keyword is inserted at the correct position. * org-publish.el (org-publish-project-alist) (org-publish-projects, org-publish-org-index): Change default anme for the index of file names to "sitemap.org". * org-latex.el (org-export-latex-tables): Use `org-split-string', for Emacs 21 compatibility. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-log-mode-items): Improve docstring. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-page-description) (org-export-page-keywords): New variables. (org-export-plist-vars): Add entries for :keywords and :description. (org-infile-export-plist): Parse for new keywords. (org-get-current-options): Add new keywords (org-export-as-html): Publish description and keywords. * org-agenda.el (org-agenda-add-entry-text-descriptive-links): New option. (org-agenda-add-entry-text): Honor `org-agenda-add-entry-text-descriptive-links'. * org-latex.el (org-export-latex-preprocess): Make all external preprocess functions use a PARAMETER arg. * org-exp.el (org-export-preprocess-string) (org-export-select-backend-specific-text) (org-export-format-source-code-or-example) (org-format-org-table-html): Support docbook export. (org-export-preprocess-string): Make all external preprocess functions use a PARAMETER arg. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-html-style-include-scripts): New option. (org-export-plist-vars): Add new option `org-export-html-style-include-scripts'. (org-export-as-html): Honor new option `org-export-html-style-include-scripts'. (org-export-html-scripts, org-export-html-style-default): Fix xml issues with the Safari browser. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-attachment): Only copy file when the directories differ. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clocktable-steps): Use inactive time stamps for clocktable steps. * org.el (org-additional-option-like-keywords): Add two more keywords. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Mark temporary buffer unmodified, so that it will be killed even if mode like message mode has decided to assign a file name. * org.el (org-scan-tags): Improve tag inheritance. (org-scan-tags, org-make-tags-matcher): Make tag comparison case-sensitive. (org-scan-tags): Use the internal tags list instead of creating it from scratch. (org-trust-scanner-tags, org-scanner-tags): New variables. (org-scan-tags): Set `org-scanner-tags'. (org-get-tags-at): Take advantage of `org-trust-scanner-tags'. (org-map-entries): Document the possible speedup using scanner tags. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-add-planning-info): Fix bug with looking for keyword only at column 0. * org-agenda.el (org-agenda-custom-commands-local-options): Add option for tags filter preset. (org-prepare-agenda): Store filter preset as a property on the filter variable. (org-finalize-agenda): Call the filter, if there is a preset. (org-agenda-filter-by-tag): Filter again after clearing the filter, when there still is a preset. (org-agenda-filter-make-matcher, org-agenda-set-mode-name): Include the preset filter. (org-agenda-redo): Apply the filter again, also the preset filter. * org-exp.el (org-export-as-html): Use IDs in the correct way. * org.el (org-uuidgen-p): New funtion. * org-agenda.el (org-agenda-fontify-priorities): New default value `cookies'. (org-agenda-fontify-priorities): Renamed from org-fontify-priorities. * org.el (org-set-font-lock-defaults): Call `org-font-lock-add-priority-faces'. (org-font-lock-add-priority-faces): New function. * org-faces.el: (org-set-tag-faces): New option. (org-priority-faces): New variable. * org-exp.el (org-export-as-html): Add a "content" div around the entire content of the body tag. (org-export-html-get-bibliography): New function. (org-export-html-validation-link): New variable. (org-export-as-html): Add validation link to exported page. * org.el (org-match-sparse-tree): Renamed from `org-tags-sparse-tree'. (org-tags-sparse-tree): New alias. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-get-valid-level): Catch the case where the level change is nil. * org-clock.el (org-clock-find-position): Better indentation of new clock drawers. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-quit): Delete window only when the frame-setup was not `current-window'. * org.el (org-tag-persistent-alist): New option. (org-startup-options): Add keyword `noptag'. (org-fast-todo-selection): Handle :newline correctly. (org-set-tags): Handle :newline correctly. (org-fast-tag-selection): Handle :newline correctly. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-as-ascii): Reverse link buffer before outputting it. (org-export-ascii-push-links): Fix bug with pussing links into the export buffer. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-archive.el (org-archive-subtree): Do not add 1 to level if pasting at top level. * org-bbdb.el: Improve documentation. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-insert-item): Only consider insert empty lines is `org-empty-line-terminates-plain-lists' is not nil. * org.el (org-blank-before-new-entry): Mention the dependence on `org-empty-line-terminates-plain-lists' in the docstring. * org-publish.el (org-publish-get-project-from-filename): New optional argument UP. Only find the top project if UP is set. (org-publish-current-project): Find the top encloding project. * org-agenda.el (org-agenda-before-write-hook) (org-agenda-add-entry-text-maxlines): New options. (org-write-agenda): Run the new hook in the temporary buffer. (org-agenda-add-entry-text): New function. (org-write-agenda): Implement PDF export, using ps2pdf. * org.el (org-global-properties-fixed, org-global-properties): Improve documentation string. * org-exp.el (org-export-ascii-links-to-notes): New option. (org-export-as-ascii): Handle links better. (org-export-ascii-wrap, org-export-ascii-push-links): New functions. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda): Make prefix arg optional. (org-agenda-search-headline-for-time): New option. (org-format-agenda-item): Honor `org-agenda-search-headline-for-time'. * org-table.el (orgtbl-self-insert-command): Cluster undo for 20 characters. * org.el (org-self-insert-cluster-for-undo): New option. (org-self-insert-command): Cluster undo for 20 characters. (org-self-insert-command-undo-counter): New variable. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-as-html): Fix problem with closing colone example. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-as-latex) (org-export-latex-first-lines): Avoid modification flag when adding or removing text properties. (org-export-latex-fontify): Catch error when org-emph-alist has entries that are not defined for LaTeX export. * org-export-latex.el: renamed to org-latex.el * org-latex.el: renamed from org-export-latex.el * org.el (orgstruct++-mode): New function. (turn-on-orgstruct++): Call `orgstruct++-mode'. (org-context-p): Allow detecting item context after the first line of an item. (orgstruct-make-binding): Detect if item-body context should be seen. (orgstruct-is-++): New variable. (org-add-planning-info): Catch the case when there is no planning info yet and the call does not want to add anything, only maybe tries to remove something. (org-special-ctrl-a/e): All value to be a cons cell with separate settings for `C-a. and `C-e'. (org-beginning-of-line, org-end-of-line): Honor separate values for `C-a' and `C-e'. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-reload): New command. 2009-08-06 Carsten Dominik <carsten.dominik@gmail.com> * org.texi (Publishing action): Improve documentation of file names when publishing to the source directory. (Clean view): Document `org-indent-mode'. (Clocking work time): Add documentation for the new :timetamp option when creating a clock report. (Paragraphs): Fix many typos. (Plain lists): Remove duplicate explanation about the `C-c *' command. (Literal examples): Update to reflect the new behavior of the -n -r -k switches when exporting source code examples. (Structure editing): Add information about `C-c *', converting a plain list into a list of Org items. (Remember): Small rephrasing of the paragraph describing remember.el. Also mentioned that remember.el is part of Emacs 23, not Emacs 22. (Clocking work time): Add documentation about displaying the current clocking time against the effort estimate. Also add a footnote about using `org-clock-in-prepare-hook' to add an effort estimate on the fly, just before clocking it. (Footnotes): Document automatic renumbering and sorting. (Agenda commands): Document new bulk commands. (Plain lists): Document new behavior of `org-cycle-include-plain-lists'. Hyphenation only in TeX. (Clocking work time): Document the key to update effort estimates. (Clocking work time): Document the clock time display. (Structure editing, TODO basics): Document new variables. (Column attributes): Document new colciew operators. (Publishing options): Document :xml-declaration. (Tracking TODO state changes): Document the LOG_INTO_DRAWER property. (Literal examples): Document the new implementation for editing source code. (Publishing action): Mention the new publishing function, to publish an Org source file. (Publishing links): Mention how to link to an Org source file. (Macro replacement): Document new macros. (Handling links): Document type-specific completion when inserting links. (Structure editing, Plain lists): Improve documentation on sorting. (Internal links): Document custom ids for links. (Handling links): Document custom ids for links. (CSS support): Document new class. (Refiling notes): Document the possibility to create new nodes during refiling. (Agenda commands): Document the "?" operator to find tasks without effort setting. (Exporting agenda information): Section moved. (RSS Feeds): New section. (Built-in table editor): Document M-e and M-a navigate inside table field. (Stuck projects): Docment that projects identified as un-stuck will still be searchd for stuck sub-projects. (Paragraphs): Document centering. (Creating timestamps, Agenda commands): Document new behavior when changing time stamps. (Structure editing): Document the new command `org-clone-subtree-with-time-shift'. (Publishing): Refresh this chapter. (Export options, Export options, In-buffer settings): Document the new keywords. (Matching tags and properties): Collect all documentation about tags/property matches here. (Setting tags): Document `org-tag-persistent-alist'. (Weekly/daily agenda): New section. (Orgstruct mode): Describe `orgstruct++-mode'. (Drawers): Mention the LOGBOOK drawer. (Export options, Sectioning structure): Document the #+LEATEX_HEADER in-buffer setting. (Bugs): Section removed. (Hooks): New section. (Add-on packages): Moved here from old location. (Context-sensitive commands): New section. (Setting tags): Document newline option. (Global TODO list, Matching tags and properties): Mention more variables. (Checkboxes): Update to changed command behavior.
author Carsten Dominik <dominik@science.uva.nl>
date Thu, 06 Aug 2009 09:14:10 +0000
parents 0d056af7a0af
children bd2966850aac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; newcomment.el --- (un)comment regions of buffers
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74239
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100486
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
6 ;; Author: code extracted from Emacs-20's simple.el
64861
7a8556a71193 Address change.
Richard M. Stallman <rms@gnu.org>
parents: 64762
diff changeset
7 ;; Maintainer: Stefan Monnier <monnier@iro.umontreal.ca>
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; Keywords: comment uncomment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
10 ;; This file is part of GNU Emacs.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
15 ;; (at your option) any later version.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
16
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; GNU General Public License for more details.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
21
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;;; Commentary:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
27 ;; A replacement for simple.el's comment-related functions.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;;; Bugs:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
31 ;; - boxed comments in Perl are not properly uncommented because they are
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
32 ;; uncommented one-line at a time.
41689
4e6f73fdeab0 New bug.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41286
diff changeset
33 ;; - nested comments in sgml-mode are not properly quoted.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
34 ;; - single-char nestable comment-start can only do the "\\s<+" stuff
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
35 ;; if the corresponding closing marker happens to be right.
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
36 ;; - uncomment-region with a numeric argument can render multichar
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
37 ;; comment markers invalid.
29119
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
38 ;; - comment-indent or comment-region when called inside a comment
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
39 ;; will happily break the surrounding comment.
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
40 ;; - comment-quote-nested will not (un)quote properly all nested comment
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
41 ;; markers if there are more than just comment-start and comment-end.
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
42 ;; For example, in Pascal where {...*) and (*...} are possible.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 ;;; Todo:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
46 ;; - rebox.el-style refill.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
47 ;; - quantized steps in comment-alignment.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
48 ;; - try to align tail comments.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
49 ;; - check what c-comment-line-break-function has to say.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
50 ;; - spill auto-fill of comments onto the end of the next line.
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
51 ;; - uncomment-region with a consp (for blocks) or somehow make the
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
52 ;; deletion of continuation markers less dangerous.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
53 ;; - drop block-comment-<foo> unless it's really used.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
54 ;; - uncomment-region on a subpart of a comment.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
55 ;; - support gnu-style "multi-line with space in continue".
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
56 ;; - somehow allow comment-dwim to use the region even if transient-mark-mode
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
57 ;; is not turned on.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
32014
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
59 ;; - when auto-filling a comment, try to move the comment to the left
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
60 ;; rather than break it (if possible).
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
61 ;; - sometimes default the comment-column to the same
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
62 ;; one used on the preceding line(s).
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
63
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 ;;; Code:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
66 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
67 (defalias 'indent-for-comment 'comment-indent)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
68 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
69 (defalias 'set-comment-column 'comment-set-column)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
70 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
71 (defalias 'kill-comment 'comment-kill)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
72 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
73 (defalias 'indent-new-comment-line 'comment-indent-new-line)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
75 (defgroup comment nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
76 "Indenting and filling of comments."
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
77 :prefix "comment-"
29760
c2940b6e267e (comment) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 29409
diff changeset
78 :version "21.1"
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
79 :group 'fill)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
80
50640
8ec8f6706902 (comment-use-syntax): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 49768
diff changeset
81 ;; Autoload this to avoid warnings, since some major modes define it.
8ec8f6706902 (comment-use-syntax): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 49768
diff changeset
82 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
83 (defvar comment-use-syntax 'undecided
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
84 "Non-nil if syntax-tables can be used instead of regexps.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
85 Can also be `undecided' which means that a somewhat expensive test will
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
86 be used to try to determine whether syntax-tables should be trusted
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
87 to understand comments or not in the given buffer.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
88 Major modes should set this variable.")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
89
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
90 (defcustom comment-fill-column nil
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
91 "Column to use for `comment-indent'. If nil, use `fill-column' instead."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
92 :type '(choice (const nil) integer)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
93 :group 'comment)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
94
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
95 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 (defcustom comment-column 32
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
97 "Column to indent right-margin comments to.
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
98 Each mode may establish a different default value for this variable; you
44455
8a30d8f66e1a (comment-column): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43689
diff changeset
99 can set the value for a particular mode using that mode's hook.
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
100 Comments might be indented to a different value in order not to go beyond
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
101 `comment-fill-column' or in order to align them with surrounding comments."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
102 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
103 :group 'comment)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 (make-variable-buffer-local 'comment-column)
70590
63b772bfba93 Move `safe-local-variable' declarations to the respective files.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 70139
diff changeset
105 ;;;###autoload(put 'comment-column 'safe-local-variable 'integerp)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
107 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
108 (defvar comment-start nil
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
109 "*String to insert to start a new comment, or nil if no comment syntax.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
110 ;;;###autoload(put 'comment-start 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
112 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
113 (defvar comment-start-skip nil
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 "*Regexp to match the start of a comment plus everything up to its body.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 If there are any \\(...\\) pairs, the comment delimiter text is held to begin
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
116 at the place matched by the close of the first pair.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
117 ;;;###autoload(put 'comment-start-skip 'safe-local-variable 'string-or-null-p)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
118
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
119 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
120 (defvar comment-end-skip nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
121 "Regexp to match the end of a comment plus everything up to its body.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
122 ;;;###autoload(put 'comment-end-skip 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
124 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
125 (defvar comment-end ""
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 "*String to insert to end a new comment.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
127 Should be an empty string if comments are terminated by end-of-line.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
128 ;;;###autoload(put 'comment-end 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
130 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
131 (defvar comment-indent-function 'comment-indent-default
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132 "Function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 This function is called with no args with point at the beginning of
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
134 the comment's starting delimiter and should return either the desired
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
135 column indentation or nil.
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
136 If nil is returned, indentation is delegated to `indent-according-to-mode'.")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
138 ;;;###autoload
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
139 (defvar comment-insert-comment-function nil
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
140 "Function to insert a comment when a line doesn't contain one.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
141 The function has no args.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
142
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
143 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
144 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
145
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
146 (defvar comment-region-function 'comment-region-default
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
147 "Function to comment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
148 Its args are the same as those of `comment-region', but BEG and END are
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
149 guaranteed to be correctly ordered. It is called within `save-excursion'.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
150
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
151 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
152 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
153
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
154 (defvar uncomment-region-function 'uncomment-region-default
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
155 "Function to uncomment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
156 Its args are the same as those of `uncomment-region', but BEG and END are
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
157 guaranteed to be correctly ordered. It is called within `save-excursion'.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
158
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
159 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
160 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
161
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
162 ;; ?? never set
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
163 (defvar block-comment-start nil)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
164 (defvar block-comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
166 (defvar comment-quote-nested t
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
167 "Non-nil if nested comments should be quoted.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
168 This should be locally set by each major mode if needed.")
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
169
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
170 (defvar comment-continue nil
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
171 "Continuation string to insert for multiline comments.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
172 This string will be added at the beginning of each line except the very
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
173 first one when commenting a region with a commenting style that allows
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
174 comments to span several lines.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
175 It should generally have the same length as `comment-start' in order to
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
176 preserve indentation.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
177 If it is nil a value will be automatically derived from `comment-start'
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
178 by replacing its first character with a space.")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
179
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
180 (defvar comment-add 0
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
181 "How many more comment chars should be inserted by `comment-region'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
182 This determines the default value of the numeric argument of `comment-region'.
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
183 The `plain' comment style doubles this value.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
184
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
185 This should generally stay 0, except for a few modes like Lisp where
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
186 it is 1 so that regions are commented with two or three semi-colons.")
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
187
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
188 (defconst comment-styles
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
189 '((plain . (nil nil nil nil))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
190 (indent . (nil nil nil t))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
191 (indent-or-triple
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
192 . (nil nil nil multi-char))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
193 (aligned . (nil t nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
194 (multi-line . (t nil nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
195 (extra-line . (t nil t t))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
196 (box . (nil t t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
197 (box-multi . (t t t t)))
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
198 "Comment region styles of the form (STYLE . (MULTI ALIGN EXTRA INDENT)).
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
199 STYLE should be a mnemonic symbol.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
200 MULTI specifies that comments are allowed to span multiple lines.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
201 ALIGN specifies that the `comment-end' markers should be aligned.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
202 EXTRA specifies that an extra line should be used before and after the
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
203 region to comment (to put the `comment-end' and `comment-start').
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
204 INDENT specifies that the `comment-start' markers should not be put at the
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
205 left margin but at the current indentation of the region to comment.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
206 If INDENT is `multi-char', that means indent multi-character
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
207 comment starters, but not one-character comment starters.")
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
208
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
209 ;;;###autoload
100486
1043d1f4aa3e (comment-style): Default to `indent'. (Bug#1589)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
210 (defcustom comment-style 'indent
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
211 "Style to be used for `comment-region'.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
212 See `comment-styles' for a list of available styles."
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
213 :type (if (boundp 'comment-styles)
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
214 `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
215 comment-styles))
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
216 'symbol)
100486
1043d1f4aa3e (comment-style): Default to `indent'. (Bug#1589)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
217 :version "23.1"
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
218 :group 'comment)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
219
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
220 ;;;###autoload
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
221 (defcustom comment-padding " "
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
222 "Padding string that `comment-region' puts between comment chars and text.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
223 Can also be an integer which will be automatically turned into a string
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
224 of the corresponding number of spaces.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
225
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
226 Extra spacing between the comment characters and the comment text
41286
6b56e476153d (comment-column, comment-style, comment-multi-line)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41253
diff changeset
227 makes the comment easier to read. Default is 1. nil means 0."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
228 :type '(choice string integer (const nil))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
229 :group 'comment)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
230
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
231 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
232 (defcustom comment-multi-line nil
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
233 "Non-nil means `comment-indent-new-line' continues comments.
57281
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
234 That is, it inserts no new terminator or starter.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
235 This affects `auto-fill-mode', which is the main reason to
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
236 customize this variable.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
237
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
238 It also affects \\[indent-new-comment-line]. However, if you want this
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
239 behavior for explicit filling, you might as well use \\[newline-and-indent]."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
240 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
241 :group 'comment)
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
242
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
243 (defcustom comment-empty-lines nil
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
244 "If nil, `comment-region' does not comment out empty lines.
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
245 If t, it always comments out empty lines.
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
246 If `eol' it only comments out empty lines if comments are
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
247 terminated by the end of line (i.e. `comment-end' is empty)."
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
248 :type '(choice (const :tag "Never" nil)
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
249 (const :tag "Always" t)
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
250 (const :tag "EOl-terminated" 'eol))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
251 :group 'comment)
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
252
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
253 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
254 ;;;; Helpers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
255 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
256
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
257 (defun comment-string-strip (str beforep afterp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
258 "Strip STR of any leading (if BEFOREP) and/or trailing (if AFTERP) space."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
259 (string-match (concat "\\`" (if beforep "\\s-*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
260 "\\(.*?\\)" (if afterp "\\s-*\n?")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
261 "\\'") str)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
262 (match-string 1 str))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
263
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
264 (defun comment-string-reverse (s)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
265 "Return the mirror image of string S, without any trailing space."
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
266 (comment-string-strip (concat (nreverse (string-to-list s))) nil t))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
267
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
268 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
269 (defun comment-normalize-vars (&optional noerror)
50845
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
270 "Check and setup the variables needed by other commenting functions.
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
271 Functions autoloaded from newcomment.el, being entry points, should call
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
272 this function before any other, so the rest of the code can assume that
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
273 the variables are properly set."
53164
2ea1aaf0d7db (comment-normalize-vars): Initialize properly if comment-start was nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52931
diff changeset
274 (unless (and (not comment-start) noerror)
2ea1aaf0d7db (comment-normalize-vars): Initialize properly if comment-start was nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52931
diff changeset
275 (unless comment-start
54279
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
276 (let ((cs (read-string "No comment syntax is defined. Use: ")))
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
277 (if (zerop (length cs))
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
278 (error "No comment syntax defined")
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
279 (set (make-local-variable 'comment-start) cs))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
280 ;; comment-use-syntax
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
281 (when (eq comment-use-syntax 'undecided)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
282 (set (make-local-variable 'comment-use-syntax)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
283 (let ((st (syntax-table))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
284 (cs comment-start)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
285 (ce (if (string= "" comment-end) "\n" comment-end)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
286 ;; Try to skip over a comment using forward-comment
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
287 ;; to see if the syntax tables properly recognize it.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
288 (with-temp-buffer
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
289 (set-syntax-table st)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
290 (insert cs " hello " ce)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
291 (goto-char (point-min))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
292 (and (forward-comment 1) (eobp))))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
293 ;; comment-padding
41021
c07719cfdfcd (comment-normalize-vars): Handle a nil comment-padding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39864
diff changeset
294 (unless comment-padding (setq comment-padding 0))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
295 (when (integerp comment-padding)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
296 (setq comment-padding (make-string comment-padding ? )))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
297 ;; comment markers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
298 ;;(setq comment-start (comment-string-strip comment-start t nil))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
299 ;;(setq comment-end (comment-string-strip comment-end nil t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
300 ;; comment-continue
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
301 (unless (or comment-continue (string= comment-end ""))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
302 (set (make-local-variable 'comment-continue)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
303 (concat (if (string-match "\\S-\\S-" comment-start) " " "|")
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
304 (substring comment-start 1)))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
305 ;; Hasn't been necessary yet.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
306 ;; (unless (string-match comment-start-skip comment-continue)
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
307 ;; (kill-local-variable 'comment-continue))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
308 )
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
309 ;; comment-skip regexps
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
310 (unless (and comment-start-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
311 ;; In case comment-start has changed since last time.
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
312 (string-match comment-start-skip comment-start))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
313 (set (make-local-variable 'comment-start-skip)
50673
4b5928c8d588 (comment-normalize-vars): Fix regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50640
diff changeset
314 (concat "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\)\\(\\s<+\\|"
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
315 (regexp-quote (comment-string-strip comment-start t t))
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
316 ;; Let's not allow any \s- but only [ \t] since \n
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
317 ;; might be both a comment-end marker and \s-.
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
318 "+\\)[ \t]*")))
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
319 (unless (and comment-end-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
320 ;; In case comment-end has changed since last time.
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
321 (string-match comment-end-skip comment-end))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
322 (let ((ce (if (string= "" comment-end) "\n"
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
323 (comment-string-strip comment-end t t))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
324 (set (make-local-variable 'comment-end-skip)
39486
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
325 ;; We use [ \t] rather than \s- because we don't want to
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
326 ;; remove ^L in C mode when uncommenting.
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
327 (concat "[ \t]*\\(\\s>" (if comment-quote-nested "" "+")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
328 "\\|" (regexp-quote (substring ce 0 1))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
329 (if (and comment-quote-nested (<= (length ce) 1)) "" "+")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
330 (regexp-quote (substring ce 1))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
331 "\\)"))))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
332
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
333 (defun comment-quote-re (str unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
334 (concat (regexp-quote (substring str 0 1))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
335 "\\\\" (if unp "+" "*")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
336 (regexp-quote (substring str 1))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
337
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
338 (defun comment-quote-nested (cs ce unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
339 "Quote or unquote nested comments.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
340 If UNP is non-nil, unquote nested comment markers."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
341 (setq cs (comment-string-strip cs t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
342 (setq ce (comment-string-strip ce t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
343 (when (and comment-quote-nested (> (length ce) 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
344 (let ((re (concat (comment-quote-re ce unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
345 "\\|" (comment-quote-re cs unp))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
346 (goto-char (point-min))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
347 (while (re-search-forward re nil t)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
348 (goto-char (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
349 (forward-char 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
350 (if unp (delete-char 1) (insert "\\"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
351 (when (= (length ce) 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
352 ;; If the comment-end is a single char, adding a \ after that
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
353 ;; "first" char won't deactivate it, so we turn such a CE
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
354 ;; into !CS. I.e. for pascal, we turn } into !{
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
355 (if (not unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
356 (when (string= (match-string 0) ce)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
357 (replace-match (concat "!" cs) t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
358 (when (and (< (point-min) (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
359 (string= (buffer-substring (1- (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
360 (1- (match-end 0)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
361 (concat "!" cs)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
362 (backward-char 2)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
363 (delete-char (- (match-end 0) (match-beginning 0)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
364 (insert ce))))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
365
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
366 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
367 ;;;; Navigation
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
368 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
369
54314
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
370 (defvar comment-use-global-state nil
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
371 "Non-nil means that the global syntactic context is used.
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
372 More specifically, it means that `syntax-ppss' is used to find out whether
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
373 point is within a string or not. Major modes whose syntax is faithfully
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
374 described by the syntax-tables can set this to non-nil so comment markers
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
375 in strings will not confuse Emacs.")
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
376
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
377 (defun comment-search-forward (limit &optional noerror)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
378 "Find a comment start between point and LIMIT.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
379 Moves point to inside the comment and returns the position of the
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
380 comment-starter. If no comment is found, moves point to LIMIT
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
381 and raises an error or returns nil if NOERROR is non-nil."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
382 (if (not comment-use-syntax)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
383 (if (re-search-forward comment-start-skip limit noerror)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
384 (or (match-end 1) (match-beginning 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
385 (goto-char limit)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
386 (unless noerror (error "No comment")))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
387 (let* ((pt (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
388 ;; Assume (at first) that pt is outside of any string.
54314
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
389 (s (parse-partial-sexp pt (or limit (point-max)) nil nil
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
390 (if comment-use-global-state (syntax-ppss pt))
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
391 t)))
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
392 (when (and (nth 8 s) (nth 3 s) (not comment-use-global-state))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
393 ;; The search ended at eol inside a string. Try to see if it
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
394 ;; works better when we assume that pt is inside a string.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
395 (setq s (parse-partial-sexp
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
396 pt (or limit (point-max)) nil nil
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
397 (list nil nil nil (nth 3 s) nil nil nil nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
398 t)))
76879
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
399 (if (or (not (and (nth 8 s) (not (nth 3 s))))
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
400 ;; Make sure the comment starts after PT.
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
401 (< (nth 8 s) pt))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
402 (unless noerror (error "No comment"))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
403 ;; We found the comment.
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
404 (let ((pos (point))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
405 (start (nth 8 s))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
406 (bol (line-beginning-position))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
407 (end nil))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
408 (while (and (null end) (>= (point) bol))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
409 (if (looking-at comment-start-skip)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
410 (setq end (min (or limit (point-max)) (match-end 0)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
411 (backward-char)))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
412 (goto-char (or end pos))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
413 start)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
414
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
415 (defun comment-search-backward (&optional limit noerror)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
416 "Find a comment start between LIMIT and point.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
417 Moves point to inside the comment and returns the position of the
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
418 comment-starter. If no comment is found, moves point to LIMIT
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
419 and raises an error or returns nil if NOERROR is non-nil."
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
420 ;; FIXME: If a comment-start appears inside a comment, we may erroneously
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
421 ;; stop there. This can be rather bad in general, but since
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
422 ;; comment-search-backward is only used to find the comment-column (in
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
423 ;; comment-set-column) and to find the comment-start string (via
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
424 ;; comment-beginning) in indent-new-comment-line, it should be harmless.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
425 (if (not (re-search-backward comment-start-skip limit t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
426 (unless noerror (error "No comment"))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
427 (beginning-of-line)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
428 (let* ((end (match-end 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
429 (cs (comment-search-forward end t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
430 (pt (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
431 (if (not cs)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
432 (progn (beginning-of-line)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
433 (comment-search-backward limit noerror))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
434 (while (progn (goto-char cs)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
435 (comment-forward)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
436 (and (< (point) end)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
437 (setq cs (comment-search-forward end t))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
438 (setq pt (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
439 (goto-char pt)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
440 cs))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
441
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
442 (defun comment-beginning ()
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
443 "Find the beginning of the enclosing comment.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
444 Returns nil if not inside a comment, else moves point and returns
57301
800ede9cd8e3 comment-beginning: doc-fix and don't choke on unset comment-end-skip when at beginning of comment
Daniel Pfeiffer <occitan@esperanto.org>
parents: 57281
diff changeset
445 the same as `comment-search-backward'."
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
446 ;; HACK ATTACK!
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
447 ;; We should really test `in-string-p' but that can be expensive.
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
448 (unless (eq (get-text-property (point) 'face) 'font-lock-string-face)
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
449 (let ((pt (point))
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
450 (cs (comment-search-backward nil t)))
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
451 (when cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
452 (if (save-excursion
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
453 (goto-char cs)
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
454 (and
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
455 ;; For modes where comment-start and comment-end are the same,
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
456 ;; the search above may have found a `ce' rather than a `cs'.
57301
800ede9cd8e3 comment-beginning: doc-fix and don't choke on unset comment-end-skip when at beginning of comment
Daniel Pfeiffer <occitan@esperanto.org>
parents: 57281
diff changeset
457 (or (if comment-end-skip (not (looking-at comment-end-skip)))
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
458 ;; Maybe font-lock knows that it's a `cs'?
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
459 (eq (get-text-property (match-end 0) 'face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
460 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
461 (unless (eq (get-text-property (point) 'face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
462 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
463 ;; Let's assume it's a `cs' if we're on the same line.
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
464 (>= (line-end-position) pt)))
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
465 ;; Make sure that PT is not past the end of the comment.
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
466 (if (comment-forward 1) (> (point) pt) (eobp))))
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
467 cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
468 (goto-char pt)
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
469 nil)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
470
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
471 (defun comment-forward (&optional n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
472 "Skip forward over N comments.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
473 Just like `forward-comment' but only for positive N
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
474 and can use regexps instead of syntax."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
475 (setq n (or n 1))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
476 (if (< n 0) (error "No comment-backward")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
477 (if comment-use-syntax (forward-comment n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
478 (while (> n 0)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
479 (setq n
43689
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
480 (if (or (forward-comment 1)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
481 (and (looking-at comment-start-skip)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
482 (goto-char (match-end 0))
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
483 (re-search-forward comment-end-skip nil 'move)))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
484 (1- n) -1)))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
485 (= n 0))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
486
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
487 (defun comment-enter-backward ()
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
488 "Move from the end of a comment to the end of its content.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
489 Point is assumed to be just at the end of a comment."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
490 (if (bolp)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
491 ;; comment-end = ""
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
492 (progn (backward-char) (skip-syntax-backward " "))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
493 (cond
93622
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
494 ((save-excursion
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
495 (save-restriction
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
496 (narrow-to-region (line-beginning-position) (point))
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
497 (goto-char (point-min))
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
498 (re-search-forward (concat comment-end-skip "\\'") nil t)))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
499 (goto-char (match-beginning 0)))
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
500 ;; comment-end-skip not found probably because it was not set
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
501 ;; right. Since \\s> should catch the single-char case, let's
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
502 ;; check that we're looking at a two-char comment ender.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
503 ((not (or (<= (- (point-max) (line-beginning-position)) 1)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
504 (zerop (logand (car (syntax-after (- (point) 1)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
505 ;; Here we take advantage of the fact that
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
506 ;; the syntax class " " is encoded to 0,
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
507 ;; so " 4" gives us just the 4 bit.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
508 (car (string-to-syntax " 4"))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
509 (zerop (logand (car (syntax-after (- (point) 2)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
510 (car (string-to-syntax " 3"))))))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
511 (backward-char 2)
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
512 (skip-chars-backward (string (char-after)))
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
513 (skip-syntax-backward " "))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
514 ;; No clue what's going on: maybe we're really not right after the
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
515 ;; end of a comment. Maybe we're at the "end" because of EOB rather
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
516 ;; than because of a marker.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
517 (t (skip-syntax-backward " ")))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
518
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
519 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
520 ;;;; Commands
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
521 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
522
32307
c3058f7483c4 (comment-indent-default): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32186
diff changeset
523 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
524 (defun comment-indent-default ()
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
525 "Default for `comment-indent-function'."
33468
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
526 (if (and (looking-at "\\s<\\s<\\(\\s<\\)?")
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
527 (or (match-end 1) (/= (current-column) (current-indentation))))
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
528 0
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
529 (when (or (/= (current-column) (current-indentation))
63829
5448f90c05f7 (comment-indent-default): Don't get fooled by an early end of buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62531
diff changeset
530 (and (> comment-add 0) (looking-at "\\s<\\(\\S<\\|\\'\\)")))
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
531 comment-column)))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
532
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
533 (defun comment-choose-indent (&optional indent)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
534 "Choose the indentation to use for a right-hand-side comment.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
535 The criteria are (in this order):
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
536 - try to keep the comment's text within `comment-fill-column'.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
537 - try to align with surrounding comments.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
538 - prefer INDENT (or `comment-column' if nil).
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
539 Point is expected to be at the start of the comment."
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
540 (unless indent (setq indent comment-column))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
541 ;; Avoid moving comments past the fill-column.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
542 (let ((max (+ (current-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
543 (- (or comment-fill-column fill-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
544 (save-excursion (end-of-line) (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
545 (other nil)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
546 (min (save-excursion (skip-chars-backward " \t")
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
547 (1+ (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
548 ;; Fix up the range.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
549 (if (< max min) (setq max min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
550 ;; Don't move past the fill column.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
551 (if (<= max indent) (setq indent max))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
552 ;; We can choose anywhere between min..max.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
553 ;; Let's try to align to a comment on the previous line.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
554 (save-excursion
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
555 (when (and (zerop (forward-line -1))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
556 (setq other (comment-search-forward
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
557 (line-end-position) t)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
558 (goto-char other) (setq other (current-column))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
559 (if (and other (<= other max) (>= other min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
560 ;; There is a comment and it's in the range: bingo!
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
561 other
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
562 ;; Can't align to a previous comment: let's try to align to comments
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
563 ;; on the following lines, then. These have not been re-indented yet,
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
564 ;; so we can't directly align ourselves with them. All we do is to try
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
565 ;; and choose an indentation point with which they will be able to
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
566 ;; align themselves.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
567 (save-excursion
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
568 (while (and (zerop (forward-line 1))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
569 (setq other (comment-search-forward
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
570 (line-end-position) t)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
571 (goto-char other)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
572 (let ((omax (+ (current-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
573 (- (or comment-fill-column fill-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
574 (save-excursion (end-of-line) (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
575 (omin (save-excursion (skip-chars-backward " \t")
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
576 (1+ (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
577 (if (and (>= omax min) (<= omin max))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
578 (progn (setq min (max omin min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
579 (setq max (min omax max)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
580 ;; Can't align with this anyway, so exit the loop.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
581 (goto-char (point-max))))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
582 ;; Return the closest point to indent within min..max.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
583 (max min (min max indent)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
584
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
585 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
586 (defun comment-indent (&optional continue)
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
587 "Indent this line's comment to `comment-column', or insert an empty comment.
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
588 If CONTINUE is non-nil, use the `comment-continue' markers if any."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
589 (interactive "*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
590 (comment-normalize-vars)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
591 (let* ((empty (save-excursion (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
592 (looking-at "[ \t]*$")))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
593 (starter (or (and continue comment-continue)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
594 (and empty block-comment-start) comment-start))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
595 (ender (or (and continue comment-continue "")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
596 (and empty block-comment-end) comment-end)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
597 (unless starter (error "No comment syntax defined"))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
598 (beginning-of-line)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
599 (let* ((eolpos (line-end-position))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
600 (begpos (comment-search-forward eolpos t))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
601 cpos indent)
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
602 (if (and comment-insert-comment-function (not begpos))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
603 ;; If no comment and c-i-c-f is set, let it do everything.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
604 (funcall comment-insert-comment-function)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
605 ;; An existing comment?
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
606 (if begpos
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
607 (progn
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
608 (if (and (not (looking-at "[\t\n ]"))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
609 (looking-at comment-end-skip))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
610 ;; The comment is empty and we have skipped all its space
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
611 ;; and landed right before the comment-ender:
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
612 ;; Go back to the middle of the space.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
613 (forward-char (/ (skip-chars-backward " \t") -2)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
614 (setq cpos (point-marker)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
615 ;; If none, insert one.
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
616 (save-excursion
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
617 ;; Some `comment-indent-function's insist on not moving
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
618 ;; comments that are in column 0, so we first go to the
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
619 ;; likely target column.
39079
fc69197cb76d (comment-indent): Don't insert a fixed number of spaces.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39078
diff changeset
620 (indent-to comment-column)
49768
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
621 ;; Ensure there's a space before the comment for things
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
622 ;; like sh where it matters (as well as being neater).
74239
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
623 (unless (memq (char-before) '(nil ?\n ?\t ?\s))
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
624 (insert ?\s))
50929
068965f379b3 (comment-indent): Be more careful when inserting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50845
diff changeset
625 (setq begpos (point))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
626 (insert starter)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
627 (setq cpos (point-marker))
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
628 (insert ender)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
629 (goto-char begpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
630 ;; Compute desired indent.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
631 (setq indent (save-excursion (funcall comment-indent-function)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
632 ;; If `indent' is nil and there's code before the comment, we can't
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
633 ;; use `indent-according-to-mode', so we default to comment-column.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
634 (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
635 (setq indent comment-column))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
636 (if (not indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
637 ;; comment-indent-function refuses: delegate to line-indent.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
638 (indent-according-to-mode)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
639 ;; If the comment is at the right of code, adjust the indentation.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
640 (unless (save-excursion (skip-chars-backward " \t") (bolp))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
641 (setq indent (comment-choose-indent indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
642 ;; Update INDENT to leave at least one space
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
643 ;; after other nonwhite text on the line.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
644 (save-excursion
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
645 (skip-chars-backward " \t")
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
646 (unless (bolp)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
647 (setq indent (max indent (1+ (current-column))))))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
648 ;; If that's different from comment's current position, change it.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
649 (unless (= (current-column) indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
650 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
651 (indent-to indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
652 (goto-char cpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
653 (set-marker cpos nil)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
654
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
655 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
656 (defun comment-set-column (arg)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
657 "Set the comment column based on point.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
658 With no ARG, set the comment column to the current column.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
659 With just minus as arg, kill any comment on this line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
660 With any other arg, set comment column to indentation of the previous comment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
661 and then align or create a comment on this line at that column."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
662 (interactive "P")
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
663 (cond
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
664 ((eq arg '-) (comment-kill nil))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
665 (arg
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
666 (comment-normalize-vars)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
667 (save-excursion
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
668 (beginning-of-line)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
669 (comment-search-backward)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
670 (beginning-of-line)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
671 (goto-char (comment-search-forward (line-end-position)))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
672 (setq comment-column (current-column))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
673 (message "Comment column set to %d" comment-column))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
674 (comment-indent))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
675 (t (setq comment-column (current-column))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
676 (message "Comment column set to %d" comment-column))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
677
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
678 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
679 (defun comment-kill (arg)
80271
f74b83c18a6a (comment-kill): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
680 "Kill the first comment on this line, if any.
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
681 With prefix ARG, kill comments on that many lines starting with this one."
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
682 (interactive "P")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
683 (comment-normalize-vars)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
684 (dotimes (_ (prefix-numeric-value arg))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
685 (save-excursion
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
686 (beginning-of-line)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
687 (let ((cs (comment-search-forward (line-end-position) t)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
688 (when cs
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
689 (goto-char cs)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
690 (skip-syntax-backward " ")
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
691 (setq cs (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
692 (comment-forward)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
693 (kill-region cs (if (bolp) (1- (point)) (point)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
694 (indent-according-to-mode))))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
695 (if arg (forward-line 1))))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
696
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
697 (defun comment-padright (str &optional n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
698 "Construct a string composed of STR plus `comment-padding'.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
699 It also adds N copies of the last non-whitespace chars of STR.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
700 If STR already contains padding, the corresponding amount is
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
701 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
702 N defaults to 0.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
703 If N is `re', a regexp is returned instead, that would match
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
704 the string for any N."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
705 (setq n (or n 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
706 (when (and (stringp str) (not (string= "" str)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
707 ;; Separate the actual string from any leading/trailing padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
708 (string-match "\\`\\s-*\\(.*?\\)\\s-*\\'" str)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
709 (let ((s (match-string 1 str)) ;actual string
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
710 (lpad (substring str 0 (match-beginning 1))) ;left padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
711 (rpad (concat (substring str (match-end 1)) ;original right padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
712 (substring comment-padding ;additional right padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
713 (min (- (match-end 0) (match-end 1))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
714 (length comment-padding)))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
715 ;; We can only duplicate C if the comment-end has multiple chars
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
716 ;; or if comments can be nested, else the comment-end `}' would
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
717 ;; be turned into `}}}' where only the first ends the comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
718 ;; and the rest becomes bogus junk.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
719 (multi (not (and comment-quote-nested
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
720 ;; comment-end is a single char
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
721 (string-match "\\`\\s-*\\S-\\s-*\\'" comment-end)))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
722 (if (not (symbolp n))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
723 (concat lpad s (when multi (make-string n (aref str (1- (match-end 1))))) rpad)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
724 ;; construct a regexp that would match anything from just S
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
725 ;; to any possible output of this function for any N.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
726 (concat (mapconcat (lambda (c) (concat (regexp-quote (string c)) "?"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
727 lpad "") ;padding is not required
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
728 (regexp-quote s)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
729 (when multi "+") ;the last char of S might be repeated
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
730 (mapconcat (lambda (c) (concat (regexp-quote (string c)) "?"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
731 rpad "")))))) ;padding is not required
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
732
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
733 (defun comment-padleft (str &optional n)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
734 "Construct a string composed of `comment-padding' plus STR.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
735 It also adds N copies of the first non-whitespace chars of STR.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
736 If STR already contains padding, the corresponding amount is
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
737 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
738 N defaults to 0.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
739 If N is `re', a regexp is returned instead, that would match
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
740 the string for any N."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
741 (setq n (or n 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
742 (when (and (stringp str) (not (string= "" str)))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
743 ;; Only separate the left pad because we assume there is no right pad.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
744 (string-match "\\`\\s-*" str)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
745 (let ((s (substring str (match-end 0)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
746 (pad (concat (substring comment-padding
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
747 (min (- (match-end 0) (match-beginning 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
748 (length comment-padding)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
749 (match-string 0 str)))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
750 (c (aref str (match-end 0))) ;the first non-space char of STR
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
751 ;; We can only duplicate C if the comment-end has multiple chars
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
752 ;; or if comments can be nested, else the comment-end `}' would
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
753 ;; be turned into `}}}' where only the first ends the comment
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
754 ;; and the rest becomes bogus junk.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
755 (multi (not (and comment-quote-nested
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
756 ;; comment-end is a single char
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
757 (string-match "\\`\\s-*\\S-\\s-*\\'" comment-end)))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
758 (if (not (symbolp n))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
759 (concat pad (when multi (make-string n c)) s)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
760 ;; Construct a regexp that would match anything from just S
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
761 ;; to any possible output of this function for any N.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
762 ;; We match any number of leading spaces because this regexp will
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
763 ;; be used for uncommenting where we might want to remove
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
764 ;; uncomment markers with arbitrary leading space (because
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
765 ;; they were aligned).
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
766 (concat "\\s-*"
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
767 (if multi (concat (regexp-quote (string c)) "*"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
768 (regexp-quote s))))))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
769
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
770 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
771 (defun uncomment-region (beg end &optional arg)
47370
408ecff0939b (uncomment-region): Be more careful with `='.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47212
diff changeset
772 "Uncomment each line in the BEG .. END region.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
773 The numeric prefix ARG can specify a number of chars to remove from the
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
774 comment markers."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
775 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
776 (comment-normalize-vars)
53988
043054d4d662 (uncomment-region): Allow eob as comment end.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53976
diff changeset
777 (when (> beg end) (setq beg (prog1 end (setq end beg))))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
778 ;; Bind `comment-use-global-state' to nil. While uncommenting a region
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
779 ;; (which works a line at a time), a comment can appear to be
56915
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
780 ;; included in a mult-line string, but it is actually not.
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
781 (let ((comment-use-global-state nil))
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
782 (save-excursion
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
783 (funcall uncomment-region-function beg end arg))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
784
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
785 (defun uncomment-region-default (beg end &optional arg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
786 "Uncomment each line in the BEG .. END region.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
787 The numeric prefix ARG can specify a number of chars to remove from the
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
788 comment markers."
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
789 (goto-char beg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
790 (setq end (copy-marker end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
791 (let* ((numarg (prefix-numeric-value arg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
792 (ccs comment-continue)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
793 (srei (comment-padright ccs 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
794 (csre (comment-padright comment-start 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
795 (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
796 spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
797 (while (and (< (point) end)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
798 (setq spt (comment-search-forward end t)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
799 (let ((ipt (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
800 ;; Find the end of the comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
801 (ept (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
802 (goto-char spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
803 (unless (or (comment-forward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
804 ;; Allow non-terminated comments.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
805 (eobp))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
806 (error "Can't find the comment end"))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
807 (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
808 (box nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
809 (box-equal nil)) ;Whether we might be using `=' for boxes.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
810 (save-restriction
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
811 (narrow-to-region spt ept)
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
812
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
813 ;; Remove the comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
814 (goto-char ipt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
815 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
816 ;; A box-comment starts with a looong comment-start marker.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
817 (when (and (or (and (= (- (point) (point-min)) 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
818 (setq box-equal t)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
819 (looking-at "=\\{7\\}")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
820 (not (eq (char-before (point-max)) ?\n))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
821 (skip-chars-forward "="))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
822 (> (- (point) (point-min) (length comment-start)) 7))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
823 (> (count-lines (point-min) (point-max)) 2))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
824 (setq box t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
825 ;; Skip the padding. Padding can come from comment-padding and/or
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
826 ;; from comment-start, so we first check comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
827 (if (or (save-excursion (goto-char (point-min)) (looking-at csre))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
828 (looking-at (regexp-quote comment-padding)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
829 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
830 (when (and sre (looking-at (concat "\\s-*\n\\s-*" srei)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
831 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
832 (if (null arg) (delete-region (point-min) (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
833 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
834 (delete-char (- numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
835 (unless (or (bobp)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
836 (save-excursion (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
837 (looking-at comment-start-skip)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
838 ;; If there's something left but it doesn't look like
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
839 ;; a comment-start any more, just remove it.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
840 (delete-region (point-min) (point))))
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
841
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
842 ;; Remove the end-comment (and leading padding and such).
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
843 (goto-char (point-max)) (comment-enter-backward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
844 ;; Check for special `=' used sometimes in comment-box.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
845 (when (and box-equal (not (eq (char-before (point-max)) ?\n)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
846 (let ((pos (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
847 ;; skip `=' but only if there are at least 7.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
848 (when (> (skip-chars-backward "=") -7) (goto-char pos))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
849 (unless (looking-at "\\(\n\\|\\s-\\)*\\'")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
850 (when (and (bolp) (not (bobp))) (backward-char))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
851 (if (null arg) (delete-region (point) (point-max))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
852 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
853 (delete-char numarg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
854 (unless (or (eobp) (looking-at comment-end-skip))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
855 ;; If there's something left but it doesn't look like
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
856 ;; a comment-end any more, just remove it.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
857 (delete-region (point) (point-max)))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
858
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
859 ;; Unquote any nested end-comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
860 (comment-quote-nested comment-start comment-end t)
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
861
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
862 ;; Eliminate continuation markers as well.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
863 (when sre
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
864 (let* ((cce (comment-string-reverse (or comment-continue
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
865 comment-start)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
866 (erei (and box (comment-padleft cce 're)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
867 (ere (and erei (concat "\\(" erei "\\)\\s-*$"))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
868 (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
869 (while (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
870 (if (and ere (re-search-forward
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
871 ere (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
872 (replace-match "" t t nil (if (match-end 2) 2 1))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
873 (setq ere nil))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
874 (forward-line 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
875 (re-search-forward sre (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
876 (replace-match "" t t nil (if (match-end 2) 2 1)))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
877 ;; Go to the end for the next comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
878 (goto-char (point-max))))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
879 (set-marker end nil))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
880
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
881 (defun comment-make-extra-lines (cs ce ccs cce min-indent max-indent &optional block)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
882 "Make the leading and trailing extra lines.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
883 This is used for `extra-line' style (or `box' style if BLOCK is specified)."
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
884 (let ((eindent 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
885 (if (not block)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
886 ;; Try to match CS and CE's content so they align aesthetically.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
887 (progn
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
888 (setq ce (comment-string-strip ce t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
889 (when (string-match "\\(.+\\).*\n\\(.*?\\)\\1" (concat ce "\n" cs))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
890 (setq eindent
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
891 (max (- (match-end 2) (match-beginning 2) (match-beginning 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
892 0))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
893 ;; box comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
894 (let* ((width (- max-indent min-indent))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
895 (s (concat cs "a=m" cce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
896 (e (concat ccs "a=m" ce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
897 (c (if (string-match ".*\\S-\\S-" cs)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
898 (aref cs (1- (match-end 0)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
899 (if (and (equal comment-end "") (string-match ".*\\S-" cs))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
900 (aref cs (1- (match-end 0))) ?=)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
901 (re "\\s-*a=m\\s-*")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
902 (_ (string-match re s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
903 (lcs (length cs))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
904 (fill
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
905 (make-string (+ width (- (match-end 0)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
906 (match-beginning 0) lcs 3)) c)))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
907 (setq cs (replace-match fill t t s))
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
908 (when (and (not (string-match comment-start-skip cs))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
909 (string-match "a=m" s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
910 ;; The whitespace around CS cannot be ignored: put it back.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
911 (setq re "a=m")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
912 (setq fill (make-string (- width lcs) c))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
913 (setq cs (replace-match fill t t s)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
914 (string-match re e)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
915 (setq ce (replace-match fill t t e))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
916 (cons (concat cs "\n" (make-string min-indent ? ) ccs)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
917 (concat cce "\n" (make-string (+ min-indent eindent) ? ) ce))))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
918
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
919 (defmacro comment-with-narrowing (beg end &rest body)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
920 "Execute BODY with BEG..END narrowing.
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
921 Space is added (and then removed) at the beginning for the text's
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
922 indentation to be kept as it was before narrowing."
47467
c5035e184eba (comment-with-narrowing): Use the `declare' thingy.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47400
diff changeset
923 (declare (debug t) (indent 2))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
924 (let ((bindent (make-symbol "bindent")))
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
925 `(let ((,bindent (save-excursion (goto-char ,beg) (current-column))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
926 (save-restriction
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
927 (narrow-to-region ,beg ,end)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
928 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
929 (insert (make-string ,bindent ? ))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
930 (prog1
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
931 (progn ,@body)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
932 ;; remove the bindent
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
933 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
934 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
935 (when (looking-at " *")
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
936 (let ((n (min (- (match-end 0) (match-beginning 0)) ,bindent)))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
937 (delete-char n)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
938 (setq ,bindent (- ,bindent n))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
939 (end-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
940 (let ((e (point)))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
941 (beginning-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
942 (while (and (> ,bindent 0) (re-search-forward " *" e t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
943 (let ((n (min ,bindent (- (match-end 0) (match-beginning 0) 1))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
944 (goto-char (match-beginning 0))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
945 (delete-char n)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
946 (setq ,bindent (- ,bindent n)))))))))))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
947
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
948 ;; Compute the number of extra comment starter characters
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
949 ;; (extra semicolons in Lisp mode, extra stars in C mode, etc.)
84625
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
950 ;; If ARG is non-nil, just follow ARG.
84679
a5c8194cf0e8 (comment-add): If EXTRA, double `comment-add' value.
Richard M. Stallman <rms@gnu.org>
parents: 84625
diff changeset
951 ;; If the comment-starter is multi-char, just follow ARG.
a5c8194cf0e8 (comment-add): If EXTRA, double `comment-add' value.
Richard M. Stallman <rms@gnu.org>
parents: 84625
diff changeset
952 ;; Otherwise obey comment-add, and double it if EXTRA is non-nil.
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
953 (defun comment-add (arg)
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
954 (if (and (null arg) (= (string-match "[ \t]*\\'" comment-start) 1))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
955 (* comment-add 1)
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
956 (1- (prefix-numeric-value arg))))
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
957
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
958 (defun comment-region-internal (beg end cs ce
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
959 &optional ccs cce block lines indent)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
960 "Comment region BEG .. END.
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
961 CS and CE are the comment start string and comment end string,
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
962 respectively. CCS and CCE are the comment continuation strings
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
963 for the start and end of lines, respectively (default to CS and CE).
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
964 BLOCK indicates that end of lines should be marked with either CCE,
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
965 CE or CS \(if CE is empty) and that those markers should be aligned.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
966 LINES indicates that an extra lines will be used at the beginning
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
967 and end of the region for CE and CS.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
968 INDENT indicates to put CS and CCS at the current indentation of
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
969 the region rather than at left margin."
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
970 ;;(assert (< beg end))
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
971 (let ((no-empty (not (or (eq comment-empty-lines t)
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
972 (and comment-empty-lines (zerop (length ce))))))
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
973 ce-sanitized)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
974 ;; Sanitize CE and CCE.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
975 (if (and (stringp ce) (string= "" ce)) (setq ce nil))
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
976 (setq ce-sanitized ce)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
977 (if (and (stringp cce) (string= "" cce)) (setq cce nil))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
978 ;; If CE is empty, multiline cannot be used.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
979 (unless ce (setq ccs nil cce nil))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
980 ;; Should we mark empty lines as well ?
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
981 (if (or ccs block lines) (setq no-empty nil))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
982 ;; Make sure we have end-markers for BLOCK mode.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
983 (when block (unless ce (setq ce (comment-string-reverse cs))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
984 ;; If BLOCK is not requested, we don't need CCE.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
985 (unless block (setq cce nil))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
986 ;; Continuation defaults to the same as CS and CE.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
987 (unless ccs (setq ccs cs cce ce))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
988
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
989 (save-excursion
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
990 (goto-char end)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
991 ;; If the end is not at the end of a line and the comment-end
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
992 ;; is implicit (i.e. a newline), explicitly insert a newline.
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
993 (unless (or ce-sanitized (eolp)) (insert "\n") (indent-according-to-mode))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
994 (comment-with-narrowing beg end
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
995 (let ((min-indent (point-max))
39864
71f93e410115 (comment-region-internal): Don't rebind
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39761
diff changeset
996 (max-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
997 (goto-char (point-min))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
998 ;; Quote any nested comment marker
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
999 (comment-quote-nested comment-start comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1000
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1001 ;; Loop over all lines to find the needed indentations.
29066
720287a2312f (comment-region-internal): Go back to BEG after quoting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29037
diff changeset
1002 (goto-char (point-min))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1003 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1004 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1005 (unless (looking-at "[ \t]*$")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1006 (setq min-indent (min min-indent (current-indentation))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1007 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1008 (setq max-indent (max max-indent (current-column)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1009 (not (or (eobp) (progn (forward-line) nil)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1010
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1011 (setq max-indent
66712
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1012 (+ max-indent (max (length cs) (length ccs))
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1013 ;; Inserting ccs can change max-indent by (1- tab-width)
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1014 ;; but only if there are TABs in the boxed text, of course.
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1015 (if (save-excursion (goto-char beg)
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1016 (search-forward "\t" end t))
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1017 (1- tab-width) 0)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1018 (unless indent (setq min-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1019
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
1020 ;; make the leading and trailing lines if requested
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1021 (when lines
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1022 (let ((csce
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1023 (comment-make-extra-lines
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1024 cs ce ccs cce min-indent max-indent block)))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1025 (setq cs (car csce))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1026 (setq ce (cdr csce))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1027
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1028 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1029 ;; Loop over all lines from BEG to END.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1030 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1031 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1032 (unless (and no-empty (looking-at "[ \t]*$"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1033 (move-to-column min-indent t)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1034 (insert cs) (setq cs ccs) ;switch to CCS after the first line
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1035 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1036 (if (eobp) (setq cce ce))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1037 (when cce
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1038 (when block (move-to-column max-indent t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1039 (insert cce)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1040 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1041 (not (or (eobp) (progn (forward-line) nil))))))))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1042
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1043 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1044 (defun comment-region (beg end &optional arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1045 "Comment or uncomment each line in the region.
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
1046 With just \\[universal-argument] prefix arg, uncomment each line in region BEG .. END.
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
1047 Numeric prefix ARG means use ARG comment characters.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1048 If ARG is negative, delete that many comment characters instead.
103292
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1049
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1050 The strings used as comment starts are built from `comment-start'
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1051 and `comment-padding'; the strings used as comment ends are built
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1052 from `comment-end' and `comment-padding'.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1053
103292
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1054 By default, the `comment-start' markers are inserted at the
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1055 current indentation of the region, and comments are terminated on
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1056 each line (even for syntaxes in which newline does not end the
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1057 comment and blank lines do not get comments). This can be
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1058 changed with `comment-style'."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1059 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1060 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1061 (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1062 (save-excursion
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1063 ;; FIXME: maybe we should call uncomment depending on ARG.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1064 (funcall comment-region-function beg end arg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1065
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1066 (defun comment-region-default (beg end &optional arg)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1067 (let* ((numarg (prefix-numeric-value arg))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1068 (style (cdr (assoc comment-style comment-styles)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1069 (lines (nth 2 style))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1070 (block (nth 1 style))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1071 (multi (nth 0 style)))
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
1072
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
1073 ;; We use `chars' instead of `syntax' because `\n' might be
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1074 ;; of end-comment syntax rather than of whitespace syntax.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1075 ;; sanitize BEG and END
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1076 (goto-char beg) (skip-chars-forward " \t\n\r") (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1077 (setq beg (max beg (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1078 (goto-char end) (skip-chars-backward " \t\n\r") (end-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1079 (setq end (min end (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1080 (if (>= beg end) (error "Nothing to comment"))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1081
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1082 ;; sanitize LINES
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1083 (setq lines
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1084 (and
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1085 lines ;; multi
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1086 (progn (goto-char beg) (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1087 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1088 (>= (point) beg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1089 (progn (goto-char end) (end-of-line) (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1090 (<= (point) end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1091 (or block (not (string= "" comment-end)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1092 (or block (progn (goto-char beg) (search-forward "\n" end t)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1093
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1094 ;; don't add end-markers just because the user asked for `block'
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1095 (unless (or lines (string= "" comment-end)) (setq block nil))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1096
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1097 (cond
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1098 ((consp arg) (uncomment-region beg end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1099 ((< numarg 0) (uncomment-region beg end (- numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1100 (t
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1101 (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1))
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1102 indent triple)
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1103 (if (eq (nth 3 style) 'multi-char)
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1104 (save-excursion
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1105 (goto-char beg)
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1106 (setq indent multi-char
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1107 ;; Triple if we will put the comment starter at the margin
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1108 ;; and the first line of the region isn't indented
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1109 ;; at least two spaces.
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1110 triple (and (not multi-char) (looking-at "\t\\| "))))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1111 (setq indent (nth 3 style)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1112
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1113 ;; In Lisp and similar modes with one-character comment starters,
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1114 ;; double it by default if `comment-add' says so.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1115 ;; If it isn't indented, triple it.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1116 (if (and (null arg) (not multi-char))
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1117 (setq numarg (* comment-add (if triple 2 1)))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1118 (setq numarg (1- (prefix-numeric-value arg))))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1119
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1120 (comment-region-internal
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1121 beg end
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1122 (let ((s (comment-padright comment-start numarg)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1123 (if (string-match comment-start-skip s) s
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1124 (comment-padright comment-start)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1125 (let ((s (comment-padleft comment-end numarg)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1126 (and s (if (string-match comment-end-skip s) s
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1127 (comment-padright comment-end))))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1128 (if multi (comment-padright comment-continue numarg))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1129 (if multi
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1130 (comment-padleft (comment-string-reverse comment-continue) numarg))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1131 block
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1132 lines
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1133 indent))))))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1134
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1135 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1136 (defun comment-box (beg end &optional arg)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
1137 "Comment out the BEG .. END region, putting it inside a box.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1138 The numeric prefix ARG specifies how many characters to add to begin- and
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1139 end- comment markers additionally to what `comment-add' already specifies."
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1140 (interactive "*r\np")
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1141 (comment-normalize-vars)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1142 (let ((comment-style (if (cadr (assoc comment-style comment-styles))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1143 'box-multi 'box)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1144 (comment-region beg end (+ comment-add arg))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1145
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1146
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1147 ;;;###autoload
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1148 (defun comment-or-uncomment-region (beg end &optional arg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1149 "Call `comment-region', unless the region only consists of comments,
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1150 in which case call `uncomment-region'. If a prefix arg is given, it
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1151 is passed on to the respective function."
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1152 (interactive "*r\nP")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
1153 (comment-normalize-vars)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1154 (funcall (if (save-excursion ;; check for already commented region
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1155 (goto-char beg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1156 (comment-forward (point-max))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1157 (<= end (point)))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1158 'uncomment-region 'comment-region)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1159 beg end arg))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1160
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1161 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1162 (defun comment-dwim (arg)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1163 "Call the comment command you want (Do What I Mean).
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1164 If the region is active and `transient-mark-mode' is on, call
34301
7ab80112df37 Fix copyright years.
Dave Love <fx@gnu.org>
parents: 33980
diff changeset
1165 `comment-region' (unless it only consists of comments, in which
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1166 case it calls `uncomment-region').
85905
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1167 Else, if the current line is empty, call `comment-insert-comment-function'
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1168 if it is defined, otherwise insert a comment and indent it.
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1169 Else if a prefix ARG is specified, call `comment-kill'.
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1170 Else, call `comment-indent'.
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1171 You can configure `comment-style' to change the way regions are commented."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1172 (interactive "*P")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1173 (comment-normalize-vars)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1174 (if (and mark-active transient-mark-mode)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1175 (comment-or-uncomment-region (region-beginning) (region-end) arg)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1176 (if (save-excursion (beginning-of-line) (not (looking-at "\\s-*$")))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1177 ;; FIXME: If there's no comment to kill on this line and ARG is
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1178 ;; specified, calling comment-kill is not very clever.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1179 (if arg (comment-kill (and (integerp arg) arg)) (comment-indent))
85905
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1180 ;; Inserting a comment on a blank line. comment-indent calls
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1181 ;; c-i-c-f if needed in the non-blank case.
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1182 (if comment-insert-comment-function
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1183 (funcall comment-insert-comment-function)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1184 (let ((add (comment-add arg)))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1185 ;; Some modes insist on keeping column 0 comment in column 0
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1186 ;; so we need to move away from it before inserting the comment.
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1187 (indent-according-to-mode)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1188 (insert (comment-padright comment-start add))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1189 (save-excursion
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1190 (unless (string= "" comment-end)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1191 (insert (comment-padleft comment-end add)))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1192 (indent-according-to-mode)))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1193
57526
d0bca414ad07 (comment-auto-fill-only-comments): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 57301
diff changeset
1194 ;;;###autoload
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1195 (defcustom comment-auto-fill-only-comments nil
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1196 "Non-nil means to only auto-fill inside comments.
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1197 This has no effect in modes that do not define a comment syntax."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1198 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1199 :group 'comment)
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1200
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1201 (defun comment-valid-prefix-p (prefix compos)
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1202 "Check that the adaptive-fill-prefix is consistent with the context.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1203 PREFIX is the prefix (presumably guessed by `adaptive-fill-mode').
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1204 COMPOS is the position of the beginning of the comment we're in, or nil
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1205 if we're not inside a comment."
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1206 ;; This consistency checking is mostly needed to workaround the limitation
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1207 ;; of auto-fill-mode whose paragraph-determination doesn't pay attention
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1208 ;; to comment boundaries.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1209 (if (null compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1210 ;; We're not inside a comment: the prefix shouldn't match
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1211 ;; a comment-starter.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1212 (not (and comment-start comment-start-skip
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1213 (string-match comment-start-skip prefix)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1214 (or
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1215 ;; Accept any prefix if the current comment is not EOL-terminated.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1216 (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1217 ;; Accept any prefix that starts with the same comment-start marker
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1218 ;; as the current one.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1219 (when (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1220 prefix)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1221 (let ((prefix-com (comment-string-strip (match-string 0 prefix) nil t)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1222 (string-match "\\`[ \t]*" prefix-com)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1223 (let* ((prefix-space (match-string 0 prefix-com))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1224 (prefix-indent (string-width prefix-space))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1225 (prefix-comstart (substring prefix-com (match-end 0))))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1226 (save-excursion
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1227 (goto-char compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1228 ;; The comstart marker is the same.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1229 (and (looking-at (regexp-quote prefix-comstart))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1230 ;; The indentation as well.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1231 (or (= prefix-indent
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1232 (- (current-column) (current-left-margin)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1233 ;; Check the indentation in two different ways, just
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1234 ;; to try and avoid most of the potential funny cases.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1235 (equal prefix-space
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1236 (buffer-substring (point)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1237 (progn (move-to-left-margin)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1238 (point)))))))))))))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1239
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1240
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1241 ;;;###autoload
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1242 (defun comment-indent-new-line (&optional soft)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1243 "Break line at point and indent, continuing comment if within one.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1244 This indents the body of the continued comment
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1245 under the previous comment line.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1246
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1247 This command is intended for styles where you write a comment per line,
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1248 starting a new comment (and terminating it if necessary) on each line.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1249 If you want to continue one comment across several lines, use \\[newline-and-indent].
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1250
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1251 If a fill column is specified, it overrides the use of the comment column
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1252 or comment indentation.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1253
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1254 The inserted newline is marked hard if variable `use-hard-newlines' is true,
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1255 unless optional argument SOFT is non-nil."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1256 (interactive)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1257 (comment-normalize-vars t)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1258 (let (compos comin)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1259 ;; If we are not inside a comment and we only auto-fill comments,
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1260 ;; don't do anything (unless no comment syntax is defined).
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1261 (unless (and comment-start
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1262 comment-auto-fill-only-comments
41286
6b56e476153d (comment-column, comment-style, comment-multi-line)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41253
diff changeset
1263 (not (interactive-p))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1264 (not (save-excursion
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1265 (prog1 (setq compos (comment-beginning))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1266 (setq comin (point))))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1267
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1268 ;; Now we know we should auto-fill.
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1269 ;; Insert the newline before removing empty space so that markers
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1270 ;; get preserved better.
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1271 (if soft (insert-and-inherit ?\n) (newline 1))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1272 (save-excursion (forward-char -1) (delete-horizontal-space))
34459
1007fb1b5df9 (comment-indent-new-line): Use delete-horizontal-space
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34301
diff changeset
1273 (delete-horizontal-space)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1274
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1275 (if (and fill-prefix (not adaptive-fill-mode))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1276 ;; Blindly trust a non-adaptive fill-prefix.
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1277 (progn
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1278 (indent-to-left-margin)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1279 (insert-before-markers-and-inherit fill-prefix))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1280
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1281 ;; If necessary check whether we're inside a comment.
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1282 (unless (or compos (null comment-start))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1283 (save-excursion
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1284 (backward-char)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1285 (setq compos (comment-beginning))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1286 (setq comin (point))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1287
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1288 (cond
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1289 ;; If there's an adaptive prefix, use it unless we're inside
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1290 ;; a comment and the prefix is not a comment starter.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1291 ((and fill-prefix
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1292 (comment-valid-prefix-p fill-prefix compos))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1293 (indent-to-left-margin)
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1294 (insert-and-inherit fill-prefix))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1295 ;; If we're not inside a comment, just try to indent.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1296 ((not compos) (indent-according-to-mode))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1297 (t
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1298 (let* ((comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1299 ;; The continuation indentation should be somewhere between
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1300 ;; the current line's indentation (plus 2 for good measure)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1301 ;; and the current comment's indentation, with a preference
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1302 ;; for comment-column.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1303 (save-excursion
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1304 ;; FIXME: use prev line's info rather than first line's.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1305 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1306 (min (current-column) (max comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1307 (+ 2 (current-indentation))))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1308 (comstart (buffer-substring compos comin))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1309 (normalp
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1310 (string-match (regexp-quote (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1311 comment-start t t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1312 comstart))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1313 (comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1314 (if normalp comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1315 ;; The comment starter is not the normal comment-start
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1316 ;; so we can't just use comment-end.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1317 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1318 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1319 (if (not (comment-forward)) comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1320 (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1321 (buffer-substring
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1322 (save-excursion (comment-enter-backward) (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1323 (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1324 nil t)))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1325 (comment-start comstart)
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1326 (continuep (or comment-multi-line
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1327 (cadr (assoc comment-style comment-styles))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1328 ;; Force comment-continue to be recreated from comment-start.
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
1329 ;; FIXME: wrong if comment-continue was set explicitly!
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1330 ;; FIXME: use prev line's continuation if available.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1331 (comment-continue nil))
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1332 (if (and comment-multi-line (> (length comment-end) 0))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1333 (indent-according-to-mode)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1334 (insert-and-inherit ?\n)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1335 (forward-char -1)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1336 (comment-indent continuep)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1337 (save-excursion
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1338 (let ((pt (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1339 (end-of-line)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1340 (let ((comend (buffer-substring pt (point))))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1341 ;; The 1+ is to make sure we delete the \n inserted above.
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1342 (delete-region pt (1+ (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1343 (end-of-line 0)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1344 (insert comend))))))))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1345
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1346 (provide 'newcomment)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1347
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1348 ;; arch-tag: 01e3320a-00c8-44ea-a696-8f8e7354c858
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1349 ;;; newcomment.el ends here