Mercurial > emacs
annotate lisp/shadowfile.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 | a9dc0e7c3f2b |
children | bd2966850aac |
rev | line source |
---|---|
36041 | 1 ;;; shadowfile.el --- automatic file copying |
5119 | 2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64091
diff
changeset
|
3 ;; Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004, |
100908 | 4 ;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
13337 | 5 |
25278 | 6 ;; Author: Boris Goldowsky <boris@gnu.org> |
36041 | 7 ;; Keywords: comm files |
13337 | 8 |
9 ;; This file is part of GNU Emacs. | |
5119 | 10 |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
13337 | 12 ;; 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:
93975
diff
changeset
|
13 ;; 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:
93975
diff
changeset
|
14 ;; (at your option) any later version. |
13337 | 15 |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; 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:
93975
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
14169 | 23 |
36041 | 24 ;;; Commentary: |
5119 | 25 |
14169 | 26 ;; This package helps you to keep identical copies of files in more than one |
27 ;; place - possibly on different machines. When you save a file, it checks | |
28 ;; whether it is on the list of files with "shadows", and if so, it tries to | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
29 ;; copy it when you exit Emacs (or use the shadow-copy-files command). |
5119 | 30 |
14169 | 31 ;; Installation & Use: |
32 | |
36041 | 33 ;; Add clusters (if necessary) and file groups with shadow-define-cluster, |
14169 | 34 ;; shadow-define-literal-group, and shadow-define-regexp-group (see the |
36041 | 35 ;; documentation for these functions for information on how and when to use |
36 ;; them). After doing this once, everything should be automatic. | |
5119 | 37 |
14169 | 38 ;; The lists of clusters and shadows are saved in a file called .shadows, |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
39 ;; so that they can be remembered from one Emacs session to another, even |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
40 ;; (as much as possible) if the Emacs session terminates abnormally. The |
14169 | 41 ;; files needing to be copied are stored in .shadow_todo; if a file cannot |
42 ;; be copied for any reason, it will stay on the list to be tried again | |
43 ;; next time. The .shadows file should itself have shadows on all your | |
44 ;; accounts so that the information in it is consistent everywhere, but | |
45 ;; .shadow_todo is local information and should have no shadows. | |
46 | |
47 ;; If you do not want to copy a particular file, you can answer "no" and | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
48 ;; be asked again next time you hit C-x 4 s or exit Emacs. If you do not |
14169 | 49 ;; want to be asked again, use shadow-cancel, and you will not be asked |
50 ;; until you change the file and save it again. If you do not want to | |
51 ;; shadow that file ever again, you can edit it out of the .shadows | |
52 ;; buffer. Anytime you edit the .shadows buffer, you must type M-x | |
53 ;; shadow-read-files to load in the new information, or your changes will | |
54 ;; be overwritten! | |
5119 | 55 |
14169 | 56 ;; Bugs & Warnings: |
57 ;; | |
58 ;; - It is bad to have two emacses both running shadowfile at the same | |
59 ;; time. It tries to detect this condition, but is not always successful. | |
60 ;; | |
61 ;; - You have to be careful not to edit a file in two locations | |
62 ;; before shadowfile has had a chance to copy it; otherwise | |
63 ;; "updating shadows" will overwrite one of the changed versions. | |
64 ;; | |
65 ;; - It ought to check modification times of both files to make sure | |
66 ;; it is doing the right thing. This will have to wait until | |
67 ;; file-newer-than-file-p works between machines. | |
68 ;; | |
69 ;; - It will not make directories for you, it just fails to copy files | |
70 ;; that belong in non-existent directories. | |
71 ;; | |
25278 | 72 ;; Please report any bugs to me (boris@gnu.org). Also let me know |
14169 | 73 ;; if you have suggestions or would like to be informed of updates. |
5119 | 74 |
36041 | 75 |
5119 | 76 ;;; Code: |
77 | |
78 (require 'ange-ftp) | |
79 | |
80 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
81 ;;; Variables | |
82 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
83 | |
21088 | 84 (defgroup shadow nil |
85 "Automatic file copying when saving a file." | |
86 :prefix "shadow-" | |
36041 | 87 :link '(emacs-commentary-link "shadowfile") |
21088 | 88 :group 'files) |
89 | |
90 (defcustom shadow-noquery nil | |
100171 | 91 "If t, always copy shadow files without asking. |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
92 If nil \(the default), always ask. If not nil and not t, ask only if there |
21088 | 93 is no buffer currently visiting the file." |
22598
dcb17af08ae0
(shadow-noquery): Use `other' widget type.
Andreas Schwab <schwab@suse.de>
parents:
21408
diff
changeset
|
94 :type '(choice (const t) (const nil) (other :tag "Ask if no buffer" maybe)) |
21088 | 95 :group 'shadow) |
5119 | 96 |
21088 | 97 (defcustom shadow-inhibit-message nil |
100171 | 98 "If non-nil, do not display a message when a file needs copying." |
21088 | 99 :type 'boolean |
100 :group 'shadow) | |
5119 | 101 |
21088 | 102 (defcustom shadow-inhibit-overload nil |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
103 "If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs]. |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
104 Normally it overloads the function `save-buffers-kill-emacs' to check for |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
105 files that have been changed and need to be copied to other systems." |
21088 | 106 :type 'boolean |
107 :group 'shadow) | |
5119 | 108 |
21088 | 109 (defcustom shadow-info-file nil |
36041 | 110 "File to keep shadow information in. |
111 The `shadow-info-file' should be shadowed to all your accounts to | |
21088 | 112 ensure consistency. Default: ~/.shadows" |
113 :type '(choice (const nil) file) | |
114 :group 'shadow) | |
5119 | 115 |
21088 | 116 (defcustom shadow-todo-file nil |
5119 | 117 "File to store the list of uncopied shadows in. |
118 This means that if a remote system is down, or for any reason you cannot or | |
36041 | 119 decide not to copy your shadow files at the end of one Emacs session, it will |
120 remember and ask you again in your next Emacs session. | |
5119 | 121 This file must NOT be shadowed to any other system, it is host-specific. |
21088 | 122 Default: ~/.shadow_todo" |
123 :type '(choice (const nil) file) | |
124 :group 'shadow) | |
125 | |
5119 | 126 |
127 ;;; The following two variables should in most cases initialize themselves | |
128 ;;; correctly. They are provided as variables in case the defaults are wrong | |
129 ;;; on your machine \(and for efficiency). | |
130 | |
131 (defvar shadow-system-name (system-name) | |
132 "The complete hostname of this machine.") | |
133 | |
134 (defvar shadow-homedir nil | |
135 "Your home directory on this machine.") | |
136 | |
137 ;;; | |
138 ;;; Internal variables whose values are stored in the info and todo files: | |
139 ;;; | |
140 | |
141 (defvar shadow-clusters nil | |
36041 | 142 "List of host clusters \(see `shadow-define-cluster').") |
5119 | 143 |
144 (defvar shadow-literal-groups nil | |
145 "List of files that are shared between hosts. | |
146 This list contains shadow structures with literal filenames, created by | |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
147 `shadow-define-literal-group'.") |
5119 | 148 |
149 (defvar shadow-regexp-groups nil | |
150 "List of file types that are shared between hosts. | |
36041 | 151 This list contains shadow structures with regexps matching filenames, |
152 created by `shadow-define-regexp-group'.") | |
5119 | 153 |
154 ;;; | |
155 ;;; Other internal variables: | |
156 ;;; | |
157 | |
158 (defvar shadow-files-to-copy nil) ; List of files that need to | |
159 ; be copied to remote hosts. | |
160 | |
161 (defvar shadow-hashtable nil) ; for speed | |
162 | |
163 (defvar shadow-info-buffer nil) ; buf visiting shadow-info-file | |
164 (defvar shadow-todo-buffer nil) ; buf visiting shadow-todo-file | |
165 | |
166 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
167 ;;; Syntactic sugar; General list and string manipulation | |
168 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
169 | |
170 (defun shadow-union (a b) | |
36041 | 171 "Add members of list A to list B if not equal to items already in B." |
5119 | 172 (if (null a) |
173 b | |
174 (if (member (car a) b) | |
175 (shadow-union (cdr a) b) | |
176 (shadow-union (cdr a) (cons (car a) b))))) | |
177 | |
178 (defun shadow-find (func list) | |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
179 "If FUNC applied to some element of LIST is non-nil, return first such element." |
5119 | 180 (while (and list (not (funcall func (car list)))) |
181 (setq list (cdr list))) | |
182 (car list)) | |
183 | |
184 (defun shadow-remove-if (func list) | |
185 "Remove elements satisfying FUNC from LIST. | |
186 Nondestructive; actually returns a copy of the list with the elements removed." | |
187 (if list | |
188 (if (funcall func (car list)) | |
189 (shadow-remove-if func (cdr list)) | |
190 (cons (car list) (shadow-remove-if func (cdr list)))) | |
191 nil)) | |
192 | |
193 (defun shadow-regexp-superquote (string) | |
36041 | 194 "Like `regexp-quote', but includes the ^ and $. |
195 This makes sure regexp matches nothing but STRING." | |
5119 | 196 (concat "^" (regexp-quote string) "$")) |
197 | |
198 (defun shadow-suffix (prefix string) | |
199 "If PREFIX begins STRING, return the rest. | |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
200 Return value is non-nil if PREFIX and STRING are `string=' up to the length of |
5119 | 201 PREFIX." |
202 (let ((lp (length prefix)) | |
203 (ls (length string))) | |
204 (if (and (>= ls lp) | |
205 (string= prefix (substring string 0 lp))) | |
206 (substring string lp)))) | |
207 | |
208 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
209 ;;; Clusters and sites | |
210 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
211 | |
212 ;;; I use the term `site' to refer to a string which may be the name of a | |
213 ;;; cluster or a literal hostname. All user-level commands should accept | |
214 ;;; either. | |
215 | |
216 (defun shadow-make-cluster (name primary regexp) | |
36041 | 217 "Create a shadow cluster. |
218 It is called NAME, uses the PRIMARY hostname and REGEXP matching all | |
219 hosts in the cluster. The variable `shadow-clusters' associates the | |
220 names of clusters to these structures. This function is for program | |
221 use: to create clusters interactively, use `shadow-define-cluster' | |
222 instead." | |
5119 | 223 (list name primary regexp)) |
224 | |
225 (defmacro shadow-cluster-name (cluster) | |
226 "Return the name of the CLUSTER." | |
227 (list 'elt cluster 0)) | |
228 | |
229 (defmacro shadow-cluster-primary (cluster) | |
230 "Return the primary hostname of a CLUSTER." | |
231 (list 'elt cluster 1)) | |
232 | |
233 (defmacro shadow-cluster-regexp (cluster) | |
234 "Return the regexp matching hosts in a CLUSTER." | |
235 (list 'elt cluster 2)) | |
236 | |
237 (defun shadow-set-cluster (name primary regexp) | |
36041 | 238 "Put cluster NAME on the list of clusters. |
239 Replace old definition, if any. PRIMARY and REGEXP are the | |
5119 | 240 information defining the cluster. For interactive use, call |
36041 | 241 `shadow-define-cluster' instead." |
5119 | 242 (let ((rest (shadow-remove-if |
243 (function (lambda (x) (equal name (car x)))) | |
244 shadow-clusters))) | |
36041 | 245 (setq shadow-clusters |
5119 | 246 (cons (shadow-make-cluster name primary regexp) |
247 rest)))) | |
248 | |
249 (defmacro shadow-get-cluster (name) | |
250 "Return cluster named NAME, or nil." | |
251 (list 'assoc name 'shadow-clusters)) | |
252 | |
253 (defun shadow-site-primary (site) | |
254 "If SITE is a cluster, return primary host, otherwise return SITE." | |
255 (let ((c (shadow-get-cluster site))) | |
256 (if c | |
257 (shadow-cluster-primary c) | |
258 site))) | |
259 | |
260 ;;; SITES | |
261 | |
262 (defun shadow-site-cluster (site) | |
36041 | 263 "Given a SITE \(hostname or cluster name), return cluster it is in, or nil." |
5119 | 264 (or (assoc site shadow-clusters) |
265 (shadow-find | |
266 (function (lambda (x) | |
267 (string-match (shadow-cluster-regexp x) | |
268 site))) | |
269 shadow-clusters))) | |
270 | |
271 (defun shadow-read-site () | |
272 "Read a cluster name or hostname from the minibuffer." | |
273 (let ((ans (completing-read "Host or cluster name [RET when done]: " | |
274 shadow-clusters))) | |
275 (if (equal "" ans) | |
276 nil | |
277 ans))) | |
278 | |
279 (defun shadow-site-match (site1 site2) | |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
280 "Non-nil if SITE1 is or includes SITE2. |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
281 Each may be a host or cluster name; if they are clusters, regexp of SITE1 will |
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
282 be matched against the primary of SITE2." |
5119 | 283 (or (string-equal site1 site2) ; quick check |
284 (let* ((cluster1 (shadow-get-cluster site1)) | |
285 (primary2 (shadow-site-primary site2))) | |
286 (if cluster1 | |
287 (string-match (shadow-cluster-regexp cluster1) primary2) | |
288 (string-equal site1 primary2))))) | |
289 | |
290 (defun shadow-get-user (site) | |
36041 | 291 "Return the default username for a SITE." |
5119 | 292 (ange-ftp-get-user (shadow-site-primary site))) |
293 | |
294 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
295 ;;; Filename manipulation | |
296 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
297 | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
298 (defun shadow-parse-fullname (fullname) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
299 "Parse FULLNAME into \(site user path) list. |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
300 Leave it alone if it already is one. Return nil if the argument is |
36041 | 301 not a full ange-ftp pathname." |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
302 (if (listp fullname) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
303 fullname |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
304 (ange-ftp-ftp-name fullname))) |
5119 | 305 |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
306 (defun shadow-parse-name (name) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
307 "Parse any NAME into \(site user name) list. |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
308 Argument can be a simple name, full ange-ftp name, or already a hup list." |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
309 (or (shadow-parse-fullname name) |
5119 | 310 (list shadow-system-name |
311 (user-login-name) | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
312 name))) |
5119 | 313 |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
314 (defsubst shadow-make-fullname (host user name) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
315 "Make an ange-ftp style fullname out of HOST, USER (optional), and NAME. |
5119 | 316 This is probably not as general as it ought to be." |
36041 | 317 (concat "/" |
5119 | 318 (if user (concat user "@")) |
319 host ":" | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
320 name)) |
5119 | 321 |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
322 (defun shadow-replace-name-component (fullname newname) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
323 "Return FULLNAME with the name component changed to NEWNAME." |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
324 (let ((hup (shadow-parse-fullname fullname))) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
325 (shadow-make-fullname (nth 0 hup) (nth 1 hup) newname))) |
5119 | 326 |
327 (defun shadow-local-file (file) | |
36041 | 328 "If FILE is at this site, remove /user@host part. |
329 If refers to a different system or a different user on this system, | |
330 return nil." | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
331 (let ((hup (shadow-parse-fullname file))) |
5119 | 332 (cond ((null hup) file) |
333 ((and (shadow-site-match (nth 0 hup) shadow-system-name) | |
334 (string-equal (nth 1 hup) (user-login-name))) | |
335 (nth 2 hup)) | |
336 (t nil)))) | |
337 | |
338 (defun shadow-expand-cluster-in-file-name (file) | |
36041 | 339 "If hostname part of FILE is a cluster, expand it to cluster's primary hostname. |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
340 Will return the name bare if it is a local file." |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
341 (let ((hup (shadow-parse-name file)) |
5119 | 342 cluster) |
343 (cond ((null hup) file) | |
344 ((shadow-local-file hup)) | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
345 ((shadow-make-fullname (shadow-site-primary (nth 0 hup)) |
5119 | 346 (nth 1 hup) |
347 (nth 2 hup)))))) | |
348 | |
349 (defun shadow-expand-file-name (file &optional default) | |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
350 "Expand file name and get FILE's true name." |
5119 | 351 (file-truename (expand-file-name file default))) |
352 | |
353 (defun shadow-contract-file-name (file) | |
36041 | 354 "Simplify FILE. |
355 Do so by replacing (when possible) home directory with ~, and hostname | |
356 with cluster name that includes it. Filename should be absolute and | |
357 true." | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
358 (let* ((hup (shadow-parse-name file)) |
5119 | 359 (homedir (if (shadow-local-file hup) |
360 shadow-homedir | |
361 (file-name-as-directory | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
362 (nth 2 (shadow-parse-fullname |
5119 | 363 (expand-file-name |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
364 (shadow-make-fullname |
5119 | 365 (nth 0 hup) (nth 1 hup) "~"))))))) |
366 (suffix (shadow-suffix homedir (nth 2 hup))) | |
367 (cluster (shadow-site-cluster (nth 0 hup)))) | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
368 (shadow-make-fullname |
5119 | 369 (if cluster |
370 (shadow-cluster-name cluster) | |
371 (nth 0 hup)) | |
372 (nth 1 hup) | |
36041 | 373 (if suffix |
5119 | 374 (concat "~/" suffix) |
375 (nth 2 hup))))) | |
376 | |
377 (defun shadow-same-site (pattern file) | |
378 "True if the site of PATTERN and of FILE are on the same site. | |
379 If usernames are supplied, they must also match exactly. PATTERN and FILE may | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
380 be lists of host, user, name, or ange-ftp file names. FILE may also be just a |
5119 | 381 local filename." |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
382 (let ((pattern-sup (shadow-parse-fullname pattern)) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
383 (file-sup (shadow-parse-name file))) |
5119 | 384 (and |
385 (shadow-site-match (nth 0 pattern-sup) (nth 0 file-sup)) | |
386 (or (null (nth 1 pattern-sup)) | |
387 (string-equal (nth 1 pattern-sup) (nth 1 file-sup)))))) | |
388 | |
389 (defun shadow-file-match (pattern file &optional regexp) | |
36041 | 390 "Return t if PATTERN matches FILE. |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
391 If REGEXP is supplied and non-nil, the file part of the pattern is a regular |
5119 | 392 expression, otherwise it must match exactly. The sites and usernames must |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
393 match---see `shadow-same-site'. The pattern must be in full ange-ftp format, |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
394 but the file can be any valid filename. This function does not do any |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
395 filename expansion or contraction, you must do that yourself first." |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
396 (let* ((pattern-sup (shadow-parse-fullname pattern)) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
397 (file-sup (shadow-parse-name file))) |
5119 | 398 (and (shadow-same-site pattern-sup file-sup) |
36041 | 399 (if regexp |
5119 | 400 (string-match (nth 2 pattern-sup) (nth 2 file-sup)) |
401 (string-equal (nth 2 pattern-sup) (nth 2 file-sup)))))) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43971
diff
changeset
|
402 |
5119 | 403 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
404 ;;; User-level Commands | |
405 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
406 | |
36041 | 407 ;;;###autoload |
5119 | 408 (defun shadow-define-cluster (name) |
36041 | 409 "Edit \(or create) the definition of a cluster NAME. |
5119 | 410 This is a group of hosts that share directories, so that copying to or from |
411 one of them is sufficient to update the file on all of them. Clusters are | |
412 defined by a name, the network address of a primary host \(the one we copy | |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
413 files to), and a regular expression that matches the hostnames of all the |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
414 sites in the cluster." |
5119 | 415 (interactive (list (completing-read "Cluster name: " shadow-clusters () ()))) |
416 (let* ((old (shadow-get-cluster name)) | |
417 (primary (read-string "Primary host: " | |
36041 | 418 (if old (shadow-cluster-primary old) |
5119 | 419 name))) |
420 (regexp (let (try-regexp) | |
421 (while (not | |
36041 | 422 (string-match |
5119 | 423 (setq try-regexp |
36041 | 424 (read-string |
5119 | 425 "Regexp matching all host names: " |
426 (if old (shadow-cluster-regexp old) | |
427 (shadow-regexp-superquote primary)))) | |
428 primary)) | |
429 (message "Regexp doesn't include the primary host!") | |
430 (sit-for 2)) | |
431 try-regexp)) | |
36041 | 432 ; (username (read-no-blanks-input |
65680
ed770a0a7846
2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents:
64762
diff
changeset
|
433 ; (format "Username (default %s): " |
5119 | 434 ; (shadow-get-user primary)) |
435 ; (if old (or (shadow-cluster-username old) "") | |
436 ; (user-login-name)))) | |
437 ) | |
438 ; (if (string-equal "" username) (setq username nil)) | |
439 (shadow-set-cluster name primary regexp))) | |
440 | |
36041 | 441 ;;;###autoload |
5119 | 442 (defun shadow-define-literal-group () |
443 "Declare a single file to be shared between sites. | |
444 It may have different filenames on each site. When this file is edited, the | |
445 new version will be copied to each of the other locations. Sites can be | |
36041 | 446 specific hostnames, or names of clusters \(see `shadow-define-cluster')." |
5119 | 447 (interactive) |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
448 (let* ((hup (shadow-parse-fullname |
5119 | 449 (shadow-contract-file-name (buffer-file-name)))) |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
450 (name (nth 2 hup)) |
5119 | 451 user site group) |
452 (while (setq site (shadow-read-site)) | |
65680
ed770a0a7846
2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents:
64762
diff
changeset
|
453 (setq user (read-string (format "Username (default %s): " |
5119 | 454 (shadow-get-user site))) |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
455 name (read-string "Filename: " name)) |
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
456 (setq group (cons (shadow-make-fullname site |
5119 | 457 (if (string-equal "" user) |
458 (shadow-get-user site) | |
459 user) | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
460 name) |
5119 | 461 group))) |
462 (setq shadow-literal-groups (cons group shadow-literal-groups))) | |
463 (shadow-write-info-file)) | |
464 | |
36041 | 465 ;;;###autoload |
5119 | 466 (defun shadow-define-regexp-group () |
467 "Make each of a group of files be shared between hosts. | |
468 Prompts for regular expression; files matching this are shared between a list | |
36041 | 469 of sites, which are also prompted for. The filenames must be identical on all |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
470 hosts \(if they aren't, use `shadow-define-literal-group' instead of this |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
471 function). Each site can be either a hostname or the name of a cluster \(see |
36041 | 472 `shadow-define-cluster')." |
5119 | 473 (interactive) |
36041 | 474 (let ((regexp (read-string |
475 "Filename regexp: " | |
5119 | 476 (if (buffer-file-name) |
477 (shadow-regexp-superquote | |
478 (nth 2 | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
479 (shadow-parse-name |
5119 | 480 (shadow-contract-file-name |
481 (buffer-file-name)))))))) | |
482 site sites usernames) | |
483 (while (setq site (shadow-read-site)) | |
484 (setq sites (cons site sites)) | |
36041 | 485 (setq usernames |
5119 | 486 (cons (read-string (format "Username for %s: " site) |
487 (shadow-get-user site)) | |
488 usernames))) | |
36041 | 489 (setq shadow-regexp-groups |
5119 | 490 (cons (shadow-make-group regexp sites usernames) |
491 shadow-regexp-groups)) | |
492 (shadow-write-info-file))) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43971
diff
changeset
|
493 |
5119 | 494 (defun shadow-shadows () |
495 ;; Mostly for debugging. | |
496 "Interactive function to display shadows of a buffer." | |
497 (interactive) | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
498 (let ((msg (mapconcat #'cdr (shadow-shadows-of (buffer-file-name)) " "))) |
14349
96692e2ba103
(shadow-shadows, shadow-add-to-todo): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
499 (message "%s" |
36041 | 500 (if (zerop (length msg)) |
5119 | 501 "No shadows." |
502 msg)))) | |
503 | |
504 (defun shadow-copy-files (&optional arg) | |
505 "Copy all pending shadow files. | |
506 With prefix argument, copy all pending files without query. | |
36041 | 507 Pending copies are stored in variable `shadow-files-to-copy', and in |
508 `shadow-todo-file' if necessary. This function is invoked by | |
509 `shadow-save-buffers-kill-emacs', so it is not usually necessary to | |
5119 | 510 call it manually." |
511 (interactive "P") | |
57748
a5bb249b0f3b
(shadow-copy-files): Use interactive-p
Richard M. Stallman <rms@gnu.org>
parents:
57544
diff
changeset
|
512 (if (not shadow-files-to-copy) |
a5bb249b0f3b
(shadow-copy-files): Use interactive-p
Richard M. Stallman <rms@gnu.org>
parents:
57544
diff
changeset
|
513 (if (interactive-p) |
a5bb249b0f3b
(shadow-copy-files): Use interactive-p
Richard M. Stallman <rms@gnu.org>
parents:
57544
diff
changeset
|
514 (message "No files need to be shadowed.")) |
5119 | 515 (save-excursion |
516 (map-y-or-n-p (function | |
517 (lambda (pair) | |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
518 (or arg shadow-noquery |
5119 | 519 (format "Copy shadow file %s? " (cdr pair))))) |
520 (function shadow-copy-file) | |
521 shadow-files-to-copy | |
522 '("shadow" "shadows" "copy")) | |
523 (shadow-write-todo-file t)))) | |
524 | |
525 (defun shadow-cancel () | |
526 "Cancel the instruction to copy some files. | |
527 Prompts for which copy operations to cancel. You will not be asked to copy | |
528 them again, unless you make more changes to the files. To cancel a shadow | |
36041 | 529 permanently, remove the group from `shadow-literal-groups' or |
530 `shadow-regexp-groups'." | |
5119 | 531 (interactive) |
532 (map-y-or-n-p (function (lambda (pair) | |
36041 | 533 (format "Cancel copying %s to %s? " |
5119 | 534 (car pair) (cdr pair)))) |
36041 | 535 (function (lambda (pair) |
5119 | 536 (shadow-remove-from-todo pair))) |
537 shadow-files-to-copy | |
538 '("shadow" "shadows" "cancel copy")) | |
36041 | 539 (message "There are %d shadows to be updated." |
14349
96692e2ba103
(shadow-shadows, shadow-add-to-todo): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
540 (length shadow-files-to-copy)) |
5119 | 541 (shadow-write-todo-file)) |
542 | |
543 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
544 ;;; Internal functions | |
545 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
546 | |
547 (defun shadow-make-group (regexp sites usernames) | |
36041 | 548 "Make a description of a file group--- |
5119 | 549 actually a list of regexp ange-ftp file names---from REGEXP \(name of file to |
550 be shadowed), list of SITES, and corresponding list of USERNAMES for each | |
551 site." | |
552 (if sites | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
553 (cons (shadow-make-fullname (car sites) (car usernames) regexp) |
5119 | 554 (shadow-make-group regexp (cdr sites) (cdr usernames))) |
555 nil)) | |
556 | |
557 (defun shadow-copy-file (s) | |
558 "Copy one shadow file." | |
36041 | 559 (let* ((buffer |
560 (cond ((get-file-buffer | |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
561 (abbreviate-file-name (shadow-expand-file-name (car s))))) |
5119 | 562 ((not (file-readable-p (car s))) |
563 (if (y-or-n-p | |
36041 | 564 (format "Cannot find file %s--cancel copy request? " |
5119 | 565 (car s))) |
566 (shadow-remove-from-todo s)) | |
567 nil) | |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
568 ((or (eq t shadow-noquery) |
36041 | 569 (y-or-n-p |
570 (format "No buffer for %s -- update shadow anyway? " | |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
571 (car s)))) |
5119 | 572 (find-file-noselect (car s))))) |
573 (to (shadow-expand-cluster-in-file-name (cdr s)))) | |
27685 | 574 (when buffer |
5119 | 575 (set-buffer buffer) |
95366
52e3cee99f90
* progmodes/flymake.el (flymake-save-buffer-in-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94678
diff
changeset
|
576 (condition-case i |
100645
4caea5d62b15
(shadow-copy-file): Handle buffer-swapped-with.
Richard M. Stallman <rms@gnu.org>
parents:
100171
diff
changeset
|
577 (progn |
100680
10bc85aa8a95
(shadow-copy-file): Revert previous change.
Richard M. Stallman <rms@gnu.org>
parents:
100645
diff
changeset
|
578 (write-region nil nil to) |
95366
52e3cee99f90
* progmodes/flymake.el (flymake-save-buffer-in-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94678
diff
changeset
|
579 (shadow-remove-from-todo s)) |
52e3cee99f90
* progmodes/flymake.el (flymake-save-buffer-in-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94678
diff
changeset
|
580 (error (message "Shadow %s not updated!" (cdr s))))))) |
5119 | 581 |
582 (defun shadow-shadows-of (file) | |
36041 | 583 "Return copy operations needed to update FILE. |
584 Filename should have clusters expanded, but otherwise can have any format. | |
5119 | 585 Return value is a list of dotted pairs like \(from . to), where from |
586 and to are absolute file names." | |
587 (or (symbol-value (intern-soft file shadow-hashtable)) | |
588 (let* ((absolute-file (shadow-expand-file-name | |
589 (or (shadow-local-file file) file) | |
590 shadow-homedir)) | |
591 (canonical-file (shadow-contract-file-name absolute-file)) | |
36041 | 592 (shadows |
5119 | 593 (mapcar (function (lambda (shadow) |
594 (cons absolute-file shadow))) | |
595 (append | |
596 (shadow-shadows-of-1 | |
597 canonical-file shadow-literal-groups nil) | |
598 (shadow-shadows-of-1 | |
599 canonical-file shadow-regexp-groups t))))) | |
600 (set (intern file shadow-hashtable) shadows)))) | |
601 | |
602 (defun shadow-shadows-of-1 (file groups regexp) | |
36041 | 603 "Return list of FILE's shadows in GROUPS. |
604 Consider them as regular expressions if third arg REGEXP is true." | |
5119 | 605 (if groups |
606 (let ((nonmatching | |
36041 | 607 (shadow-remove-if |
5119 | 608 (function (lambda (x) (shadow-file-match x file regexp))) |
609 (car groups)))) | |
610 (append (cond ((equal nonmatching (car groups)) nil) | |
36041 | 611 (regexp |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
612 (let ((realname (nth 2 (shadow-parse-fullname file)))) |
36041 | 613 (mapcar |
614 (function | |
615 (lambda (x) | |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
616 (shadow-replace-name-component x realname))) |
5119 | 617 nonmatching))) |
618 (t nonmatching)) | |
619 (shadow-shadows-of-1 file (cdr groups) regexp))))) | |
620 | |
621 (defun shadow-add-to-todo () | |
36041 | 622 "If current buffer has shadows, add them to the list needing to be copied." |
623 (let ((shadows (shadow-shadows-of | |
624 (shadow-expand-file-name | |
5119 | 625 (buffer-file-name (current-buffer)))))) |
27685 | 626 (when shadows |
5119 | 627 (setq shadow-files-to-copy |
628 (shadow-union shadows shadow-files-to-copy)) | |
27685 | 629 (when (not shadow-inhibit-message) |
14349
96692e2ba103
(shadow-shadows, shadow-add-to-todo): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
630 (message "%s" (substitute-command-keys |
96692e2ba103
(shadow-shadows, shadow-add-to-todo): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
631 "Use \\[shadow-copy-files] to update shadows.")) |
5119 | 632 (sit-for 1)) |
633 (shadow-write-todo-file))) | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
634 nil) ; Return nil for write-file-functions |
5119 | 635 |
636 (defun shadow-remove-from-todo (pair) | |
36041 | 637 "Remove PAIR from `shadow-files-to-copy'. |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
638 PAIR must be `eq' to one of the elements of that list." |
36041 | 639 (setq shadow-files-to-copy |
5119 | 640 (shadow-remove-if (function (lambda (s) (eq s pair))) |
641 shadow-files-to-copy))) | |
642 | |
643 (defun shadow-read-files () | |
36041 | 644 "Visit and load `shadow-info-file' and `shadow-todo-file'. |
645 Thus restores shadowfile's state from your last Emacs session. | |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
646 Return t unless files were locked; then return nil." |
5119 | 647 (interactive) |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
648 (if (and (fboundp 'file-locked-p) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
649 (or (stringp (file-locked-p shadow-info-file)) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
650 (stringp (file-locked-p shadow-todo-file)))) |
5119 | 651 (progn |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
652 (message "Shadowfile is running in another Emacs; can't have two.") |
5119 | 653 (beep) |
654 (sit-for 3) | |
655 nil) | |
656 (save-excursion | |
27685 | 657 (when shadow-info-file |
5119 | 658 (set-buffer (setq shadow-info-buffer |
659 (find-file-noselect shadow-info-file))) | |
27685 | 660 (when (and (not (buffer-modified-p)) |
661 (file-newer-than-file-p (make-auto-save-file-name) | |
662 shadow-info-file)) | |
5119 | 663 (erase-buffer) |
36041 | 664 (message "Data recovered from %s." |
5119 | 665 (car (insert-file-contents (make-auto-save-file-name)))) |
666 (sit-for 1)) | |
62459
b89461946700
Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
57748
diff
changeset
|
667 (eval-buffer)) |
27685 | 668 (when shadow-todo-file |
36041 | 669 (set-buffer (setq shadow-todo-buffer |
5119 | 670 (find-file-noselect shadow-todo-file))) |
27685 | 671 (when (and (not (buffer-modified-p)) |
672 (file-newer-than-file-p (make-auto-save-file-name) | |
673 shadow-todo-file)) | |
5119 | 674 (erase-buffer) |
36041 | 675 (message "Data recovered from %s." |
5119 | 676 (car (insert-file-contents (make-auto-save-file-name)))) |
677 (sit-for 1)) | |
62459
b89461946700
Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents:
57748
diff
changeset
|
678 (eval-buffer nil)) |
5119 | 679 (shadow-invalidate-hashtable)) |
680 t)) | |
681 | |
682 (defun shadow-write-info-file () | |
36041 | 683 "Write out information to `shadow-info-file'. |
684 Also clear `shadow-hashtable', since when there are new shadows | |
685 defined, the old hashtable info is invalid." | |
5119 | 686 (shadow-invalidate-hashtable) |
687 (if shadow-info-file | |
688 (save-excursion | |
689 (if (not shadow-info-buffer) | |
690 (setq shadow-info-buffer (find-file-noselect shadow-info-file))) | |
691 (set-buffer shadow-info-buffer) | |
692 (delete-region (point-min) (point-max)) | |
693 (shadow-insert-var 'shadow-clusters) | |
694 (shadow-insert-var 'shadow-literal-groups) | |
695 (shadow-insert-var 'shadow-regexp-groups)))) | |
696 | |
697 (defun shadow-write-todo-file (&optional save) | |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
698 "Write out information to `shadow-todo-file'. |
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
699 With non-nil argument also saves the buffer." |
5119 | 700 (save-excursion |
701 (if (not shadow-todo-buffer) | |
702 (setq shadow-todo-buffer (find-file-noselect shadow-todo-file))) | |
703 (set-buffer shadow-todo-buffer) | |
704 (delete-region (point-min) (point-max)) | |
705 (shadow-insert-var 'shadow-files-to-copy) | |
706 (if save (shadow-save-todo-file)))) | |
707 | |
708 (defun shadow-save-todo-file () | |
709 (if (and shadow-todo-buffer (buffer-modified-p shadow-todo-buffer)) | |
710 (save-excursion | |
711 (set-buffer shadow-todo-buffer) | |
36041 | 712 (condition-case nil ; have to continue even in case of |
5119 | 713 (basic-save-buffer) ; error, otherwise kill-emacs might |
714 (error ; not work! | |
715 (message "WARNING: Can't save shadow todo file; it is locked!") | |
716 (sit-for 1)))))) | |
717 | |
718 (defun shadow-invalidate-hashtable () | |
719 (setq shadow-hashtable (make-vector 37 0))) | |
720 | |
721 (defun shadow-insert-var (variable) | |
79278
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
722 "Build a `setq' to restore VARIABLE. |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
723 Prettily insert a `setq' command which, when later evaluated, |
15ad52029dc2
(shadow-inhibit-overload, shadow-remove-from-todo, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
724 will restore VARIABLE to its current setting. |
73749
0ccca06d2010
(shadow-define-regexp-group, shadow-literal-groups, shadow-insert-var):
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
725 VARIABLE must be the name of a variable whose value is a list." |
5119 | 726 (let ((standard-output (current-buffer))) |
727 (insert (format "(setq %s" variable)) | |
728 (cond ((consp (eval variable)) | |
36041 | 729 (insert "\n '(") |
5119 | 730 (prin1 (car (eval variable))) |
731 (let ((rest (cdr (eval variable)))) | |
732 (while rest | |
733 (insert "\n ") | |
734 (prin1 (car rest)) | |
735 (setq rest (cdr rest))) | |
736 (insert "))\n\n"))) | |
737 (t (insert " ") | |
738 (prin1 (eval variable)) | |
739 (insert ")\n\n"))))) | |
740 | |
741 (defun shadow-save-buffers-kill-emacs (&optional arg) | |
742 "Offer to save each buffer and copy shadows, then kill this Emacs process. | |
743 With prefix arg, silently save all file-visiting buffers, then kill. | |
744 | |
745 Extended by shadowfile to automatically save `shadow-todo-file' and | |
746 look for files that have been changed and need to be copied to other systems." | |
747 ;; This function is necessary because we need to get control and save | |
748 ;; the todo file /after/ saving other files, but /before/ the warning | |
749 ;; message about unsaved buffers (because it can get modified by the | |
750 ;; action of saving other buffers). `kill-emacs-hook' is no good | |
751 ;; because it is not called at the correct time, and also because it is | |
752 ;; called when the terminal is disconnected and we cannot ask whether | |
753 ;; to copy files. | |
754 (interactive "P") | |
755 (shadow-save-todo-file) | |
756 (save-some-buffers arg t) | |
757 (shadow-copy-files) | |
758 (shadow-save-todo-file) | |
759 (and (or (not (memq t (mapcar (function | |
760 (lambda (buf) (and (buffer-file-name buf) | |
761 (buffer-modified-p buf)))) | |
762 (buffer-list)))) | |
763 (yes-or-no-p "Modified buffers exist; exit anyway? ")) | |
764 (or (not (fboundp 'process-list)) | |
97142 | 765 ;; process-list is not defined on MSDOS. |
5119 | 766 (let ((processes (process-list)) |
767 active) | |
768 (while processes | |
43971 | 769 (and (memq (process-status (car processes)) '(run stop open listen)) |
770 (process-query-on-exit-flag (car processes)) | |
5119 | 771 (setq active t)) |
772 (setq processes (cdr processes))) | |
773 (or (not active) | |
774 (yes-or-no-p "Active processes exist; kill them and exit anyway? ")))) | |
775 (kill-emacs))) | |
776 | |
777 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
36041 | 778 ;;; Lucid Emacs compatibility |
5119 | 779 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
780 | |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
781 ;; This is on hold until someone tells me about a working version of |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
782 ;; map-ynp for Lucid Emacs. |
5119 | 783 |
27685 | 784 ;(when (string-match "Lucid" emacs-version) |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
785 ; (require 'symlink-fix) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
786 ; (require 'ange-ftp) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
787 ; (require 'map-ynp) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
788 ; (if (not (fboundp 'file-truename)) |
36041 | 789 ; (fset 'shadow-expand-file-name |
5288
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
790 ; (symbol-function 'symlink-expand-file-name))) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
791 ; (if (not (fboundp 'ange-ftp-ftp-name)) |
c32c5d1aa89d
(shadow-noquery): Use it.
Richard M. Stallman <rms@gnu.org>
parents:
5119
diff
changeset
|
792 ; (fset 'ange-ftp-ftp-name |
50426
23d82f089582
(shadow-parse-fullname): Renamed from shadow-parse-fullpath.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
793 ; (symbol-function 'ange-ftp-ftp-name)))) |
5119 | 794 |
795 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
796 ;;; Hook us up | |
797 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
798 | |
36041 | 799 ;;;###autoload |
5119 | 800 (defun shadow-initialize () |
36041 | 801 "Set up file shadowing." |
802 (interactive) | |
5119 | 803 (if (null shadow-homedir) |
804 (setq shadow-homedir | |
805 (file-name-as-directory (shadow-expand-file-name "~")))) | |
806 (if (null shadow-info-file) | |
36041 | 807 (setq shadow-info-file |
98867
6e47884b9b26
(shadow-initialize) <shadow-info-file, shadow-todo-file>: Run file names
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
808 (shadow-expand-file-name (convert-standard-filename "~/.shadows")))) |
5119 | 809 (if (null shadow-todo-file) |
36041 | 810 (setq shadow-todo-file |
98867
6e47884b9b26
(shadow-initialize) <shadow-info-file, shadow-todo-file>: Run file names
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
811 (shadow-expand-file-name |
6e47884b9b26
(shadow-initialize) <shadow-info-file, shadow-todo-file>: Run file names
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
812 (convert-standard-filename "~/.shadow_todo")))) |
5119 | 813 (if (not (shadow-read-files)) |
814 (progn | |
815 (message "Shadowfile information files not found - aborting") | |
816 (beep) | |
817 (sit-for 3)) | |
27685 | 818 (when (and (not shadow-inhibit-overload) |
819 (not (fboundp 'shadow-orig-save-buffers-kill-emacs))) | |
36041 | 820 (defalias 'shadow-orig-save-buffers-kill-emacs |
821 (symbol-function 'save-buffers-kill-emacs)) | |
822 (defalias 'save-buffers-kill-emacs 'shadow-save-buffers-kill-emacs)) | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
823 (add-hook 'write-file-functions 'shadow-add-to-todo) |
5119 | 824 (define-key ctl-x-4-map "s" 'shadow-copy-files))) |
825 | |
85828
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
826 (defun shadowfile-unload-function () |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
827 (substitute-key-definition 'shadow-copy-files nil ctl-x-4-map) |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
828 (when (fboundp 'shadow-orig-save-buffers-kill-emacs) |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
829 (fset 'save-buffers-kill-emacs |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
830 (symbol-function 'shadow-orig-save-buffers-kill-emacs))) |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
831 ;; continue standard unloading |
04fb80d58b60
(shadow-join): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
78492
diff
changeset
|
832 nil) |
57544
9eb4eed0a14c
(shadowfile-unload-hook): Set as variable w/ add-hook.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
833 |
36041 | 834 (provide 'shadowfile) |
835 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
836 ;; arch-tag: e2f4cdd7-2bab-4def-9130-9e69b412b79e |
5119 | 837 ;;; shadowfile.el ends here |