Mercurial > emacs
view lisp/gnus/earcon.el @ 92870:8f17f65dd575
* textmodes/org.el (org-ctrl-c-star): Implement a missing branch
in the decision tree.
(org-select-remember-template): Cleaned the code.
(org-prepare-dblock): Added the extra :content parameter.
(org-write-agenda): New output type ".ics" files.
(org-write-agenda): Call `org-icalendar-verify-function', both for
time stamps and for TODO entries.
(org-agenda-collect-markers, org-create-marker-find-array)
(org-check-agenda-marker-table): New functions.
(org-agenda-marker-table): New variable.
(org-export-as-html): Revert the change that killed the html
buffer. Side effects first need to be studied carefully.
(org-get-tags-at): Fix the structure of the condition-case
statement.
(org-ts-regexp0, org-repeat-re, org-display-custom-time)
(org-timestamp-change): Fix regulear expressions to swallow the
extra character for repeat-shift control.
(org-auto-repeat-maybe): Implement the new repeater mechanisms.
(org-get-legal-level): Aliased to `org-get-valid-level'.
(org-dblock-write:clocktable): Added a :link parameter, linking
headlines to their location in the Org agenda files.
(org-get-tags-at): Bugfix: prevent `org-back-to-heading' from
throwing an error when getting tags before headlines.
(org-timestamp-change, org-modify-ts-extra)
(org-ts-regexp1): Fix timestamp editing.
(org-agenda-custom-commands-local-options): New constant.
(org-agenda-custom-commands): Use
`org-agenda-custom-commands-local-options' to improve customize
type. "htmlize": Removed hack to fix face problem with htmlize,
it no longer seem necessary.
(org-follow-link-hook): New hook.
(org-agenda-custom-commands): Added "Component" as a tag for each
item in a command serie.
(org-open-at-point): Run `org-follow-link-hook'.
(org-agenda-schedule): Bugfix: don't display marker type when it
is `nil'.
(org-store-link): org-irc required.
(org-set-regexps-and-options): Parse the new logging options.
(org-extract-log-state-settings): New function.
(org-todo): Handle the new ways of recording state change stuff.
(org-local-logging): New function.
(org-columns-open-link): Fixed bug with opening link in column
view.
(org-local-logging): New function
(org-todo): Make sure that LOGGING properties are honoured.
(org-todo-keywords): Improve docstring.
(org-startup-options): Cleanup startup options.
(org-set-regexps-and-options): Process the "!" markers.
(org-todo): Respect the new logging stuff.
(org-log-note-how): New variable.
(org-add-log-maybe): New parameter HOW that defines how logging
should be done and also overrides PURPOSE. Add a docstring.
(org-add-log-note): Check if we really need to ask for a note.
(org-get-current-options): Digest the new keyword.
(org-agenda-reset-markers): Renamed from
`org-agenda-maybe-reset-markers'. FORCE argument removed.
(org-diary, org-agenda-quit, org-prepare-agenda): Call the renamed
function, without force argument.
(org-buffer-property-keys): Bind local variables s and p.
(org-make-tags-matcher): Allow "" to match an empty or
non-existent property value.
(org-export-as-html): Join unsorted lists when they directly
follow each other. Such lists may be created by headlines that
are converted to lists.
(org-nofm-to-completion): New function.
(org-export-as-html): Use :html-extension instead of
org-export-html-extension.
(org-store-link): Support for links from `rmail-summary-mode'.
(org-columns-new, org-complete, org-set-property): Set the
`include-columns' argument in the call to
`org-buffer-property-keys'.
(org-buffer-property-keys): New argument `include-columns', to
include properties expected by any of the COLUMS formats in the
current buffer.
(org-cleaned-string-for-export): Get rid of drawers first, so that
they will be removed also in the text before the first headline.
(org-clock-report): Show the clocktable when found.
(org-refile): Fix positioning bug when `org-reverse-note-order' is
nil.
(org-version): With prefix argument, insert `org-version' at
point.
(org-agenda-goto): Recenter the window after finding the target
location, to make sure the correct position will be displayed.
(org-agenda-get-deadlines): Don't scale priority with the warning
period.
(org-insert-heading): Don't break line in the middle of the line.
(org-agenda-get-deadlines): Allow `org-deadline-warning-days' to
be 0.
(org-update-checkbox-count): Revamped to deal with hierarchical
beckboxes. This was a patch from Miguel A. Figueroa-Villanueva.
(org-remove-timestamp-with-keyword): New function.
(org-schedule, org-deadline): Use
`org-remove-timestamp-with-keyword' to make sure all such time
stamps are removed.
(org-mode): Support for `align'.
(org-agenda-get-deadlines): Make sure priorities increase as the
due date approaches and is passed.
(org-remember-apply-template): Fixed problem with tags that
contain "_" or "@".
(org-make-link-regexps): Improve the regular expression for plain
links.
(org-agenda-get-closed): List each clocking entry.
(org-set-tags): Only tabify before tags if indent-tabs-mode is t.
(org-special-ctrl-k): New option.
(org-kill-line): New function.
(org-archive-all-done): Fixed incorrect number of stars in regexp.
(org-refile-get-location): New function.
(org-refile-goto-last-stored): New function.
(org-global-tags-completion-table): Add the value of org-tag-alist
in each buffer, to make sure that also unused tags will be
available for completion.
(org-columns-edit-value)
(org-columns-next-allowed-value): Only update if not in agenda.
(org-clocktable-steps): New function.
(org-dblock-write:clocktable): Call `org-clocktable-steps'.
(org-archive-subtree): Add the outline tree context as a property.
(org-closest-date): New optional argument `prefer'.
(org-goto-auto-isearch): New option.
(org-goto-map, org-get-location): Implement auto-isearch.
(org-goto-local-auto-isearch-map): New variable.
(org-goto-local-search-forward-headings)
(org-goto-local-auto-isearch): New functions
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Thu, 13 Mar 2008 08:54:11 +0000 |
parents | 1cb31606209f |
children | 606f2d163a64 1e3a407766b9 |
line wrap: on
line source
;;; earcon.el --- Sound effects for messages ;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Steven L. Baur <steve@miranova.com> ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; This file provides access to sound effects in Gnus. ;;; Code: (eval-when-compile (require 'cl)) (require 'gnus) (require 'gnus-audio) (require 'gnus-art) (defgroup earcon nil "Turn ** sounds ** into noise." :group 'gnus-visual) (defcustom earcon-prefix "**" "*String denoting the start of an earcon." :type 'string :group 'earcon) (defcustom earcon-suffix "**" "String denoting the end of an earcon." :type 'string :group 'earcon) (defcustom earcon-regexp-alist '(("boring" 1 "Boring.au") ("evil[ \t]+laugh" 1 "Evil_Laugh.au") ("gag\\|puke" 1 "Puke.au") ("snicker" 1 "Snicker.au") ("meow" 1 "catmeow.wav") ("sob\\|boohoo" 1 "cry.wav") ("drum[ \t]*roll" 1 "drumroll.au") ("blast" 1 "explosion.au") ("flush\\|plonk!*" 1 "flush.au") ("kiss" 1 "kiss.wav") ("tee[ \t]*hee" 1 "laugh.au") ("shoot" 1 "shotgun.wav") ("yawn" 1 "snore.wav") ("cackle" 1 "witch.au") ("yell\\|roar" 1 "yell2.au") ("whoop-de-doo" 1 "whistle.au")) "*A list of regexps to map earcons to real sounds." :type '(repeat (list regexp (integer :tag "Match") (string :tag "Sound"))) :group 'earcon) (defvar earcon-button-marker-list nil) (make-variable-buffer-local 'earcon-button-marker-list) ;;; FIXME!! clone of code from gnus-vis.el FIXME!! (defun earcon-article-push-button (event) "Check text under the mouse pointer for a callback function. If the text under the mouse pointer has a `earcon-callback' property, call it with the value of the `earcon-data' text property." (interactive "e") (set-buffer (window-buffer (posn-window (event-start event)))) (let* ((pos (posn-point (event-start event))) (data (get-text-property pos 'earcon-data)) (fun (get-text-property pos 'earcon-callback))) (if fun (funcall fun data)))) (defun earcon-article-press-button () "Check text at point for a callback function. If the text at point has a `earcon-callback' property, call it with the value of the `earcon-data' text property." (interactive) (let* ((data (get-text-property (point) 'earcon-data)) (fun (get-text-property (point) 'earcon-callback))) (if fun (funcall fun data)))) (defun earcon-article-prev-button (n) "Move point to N buttons backward. If N is negative, move forward instead." (interactive "p") (earcon-article-next-button (- n))) (defun earcon-article-next-button (n) "Move point to N buttons forward. If N is negative, move backward instead." (interactive "p") (let ((function (if (< n 0) 'previous-single-property-change 'next-single-property-change)) (inhibit-point-motion-hooks t) (backward (< n 0)) (limit (if (< n 0) (point-min) (point-max)))) (setq n (abs n)) (while (and (not (= limit (point))) (> n 0)) ;; Skip past the current button. (when (get-text-property (point) 'earcon-callback) (goto-char (funcall function (point) 'earcon-callback nil limit))) ;; Go to the next (or previous) button. (gnus-goto-char (funcall function (point) 'earcon-callback nil limit)) ;; Put point at the start of the button. (when (and backward (not (get-text-property (point) 'earcon-callback))) (goto-char (funcall function (point) 'earcon-callback nil limit))) ;; Skip past intangible buttons. (when (get-text-property (point) 'intangible) (incf n)) (decf n)) (unless (zerop n) (gnus-message 5 "No more buttons")) n)) (defun earcon-article-add-button (from to fun &optional data) "Create a button between FROM and TO with callback FUN and data DATA." (and (boundp gnus-article-button-face) gnus-article-button-face (gnus-overlay-put (gnus-make-overlay from to) 'face gnus-article-button-face)) (gnus-add-text-properties from to (nconc (and gnus-article-mouse-face (list gnus-mouse-face-prop gnus-article-mouse-face)) (list 'gnus-callback fun) (and data (list 'gnus-data data))))) (defun earcon-button-entry () ;; Return the first entry in `gnus-button-alist' matching this place. (let ((alist earcon-regexp-alist) (case-fold-search t) (entry nil)) (while alist (setq entry (pop alist)) (if (looking-at (car entry)) (setq alist nil) (setq entry nil))) entry)) (defun earcon-button-push (marker) ;; Push button starting at MARKER. (save-excursion (set-buffer gnus-article-buffer) (goto-char marker) (let* ((entry (earcon-button-entry)) (inhibit-point-motion-hooks t) (fun 'gnus-audio-play) (args (list (nth 2 entry)))) (cond ((fboundp fun) (apply fun args)) ((and (boundp fun) (fboundp (symbol-value fun))) (apply (symbol-value fun) args)) (t (gnus-message 1 "You must define `%S' to use this button" (cons fun args))))))) ;;; FIXME!! clone of code from gnus-vis.el FIXME!! ;;;###interactive (defun earcon-region (beg end) "Play Sounds in the region between point and mark." (interactive "r") (earcon-buffer (current-buffer) beg end)) ;;;###interactive (defun earcon-buffer (&optional buffer st nd) (interactive) (save-excursion ;; clear old markers. (if (boundp 'earcon-button-marker-list) (while earcon-button-marker-list (set-marker (pop earcon-button-marker-list) nil)) (setq earcon-button-marker-list nil)) (and buffer (set-buffer buffer)) (let ((buffer-read-only nil) (inhibit-point-motion-hooks t) (case-fold-search t) (alist earcon-regexp-alist) beg entry regexp) (goto-char (point-min)) (setq beg (point)) (while (setq entry (pop alist)) (setq regexp (concat (regexp-quote earcon-prefix) ".*\\(" (car entry) "\\).*" (regexp-quote earcon-suffix))) (goto-char beg) (while (re-search-forward regexp nil t) (let* ((start (and entry (match-beginning 1))) (end (and entry (match-end 1))) (from (match-beginning 1))) (earcon-article-add-button start end 'earcon-button-push (car (push (set-marker (make-marker) from) earcon-button-marker-list))) (gnus-audio-play (caddr entry)))))))) ;;;###autoload (defun gnus-earcon-display () "Play sounds in message buffers." (interactive) (save-excursion (set-buffer gnus-article-buffer) (goto-char (point-min)) ;; Skip headers (unless (search-forward "\n\n" nil t) (goto-char (point-max))) (sit-for 0) (earcon-buffer (current-buffer) (point)))) ;;;*** (provide 'earcon) (run-hooks 'earcon-load-hook) ;;; arch-tag: 844dfeea-980c-4ed0-907f-a30bf139691c ;;; earcon.el ends here