Gnus development mailing list
 help / color / mirror / Atom feed
From: Kai Grossjohann <grossjohann@charly.informatik.uni-dortmund.de>
Subject: New version of message-tab
Date: 09 Aug 1996 19:42:21 +0200	[thread overview]
Message-ID: <vafn3044fpe.fsf@ls6.informatik.uni-dortmund.de> (raw)

Hi all,

there is message-tab which I like a lot, but I also think it could be
more general.  So I tried to hack up something useful.

You can set a variable message-x-body-function to a function that TAB
should execute when point is in the body of a message.

You can set an alist message-x-completion-alist which tells for each
header which function should be invoked when TAB is typed.  As I use
bbdb, the default says to invoke bbdb-complete-name in To and Cc
headers.  Also, message-expand-group is invoked in a Newsgroups
header.

Be careful: the header values are NOT strings, comparison is done
using `equal'.  Therefore, "to\\|cc" refers to a very strange header,
not to both the To and Cc headers!

How do you like this?  Could this be added to Gnus?  Or is it in Red
Gnus already, in which case I apologize.

This is v\bve\ber\bry\by ugly code; I don't know why it works, either ;-)

regards,
kai
-- 
What's a signature?

;; message-x.el -- customizable completion in message headers
;; Kai Grossjohann <grossjohann@ls6.informatik.uni-dortmund.de>
;;  9 Aug 96

(require 'message)

(defvar message-x-body-function 'indent-relative
  "message-x-tab executes this if point is in the body of a message.")

(defvar message-x-completion-alist
  '(("to" . bbdb-complete-name)
    ("cc" . bbdb-complete-name)
    ("newsgroups" . message-expand-group))
  "Table telling which completion function message-x-tab should invoke.
Lookup in the table is done with `equal' comparison of the header.")

(defun message-x-in-header-p ()
  "Returns t iff point is in the header section."
  (save-excursion
    (let ((p (point)))
      (beginning-of-buffer)
      (and (re-search-forward (concat "^"
				      (regexp-quote mail-header-separator)
				      "$"))
	   (progn (beginning-of-line) t)
	   (< p (point))))))
	  

(defun message-x-which-header ()
  "Returns the header we're currently in.  Returns nil if not in a header.
Example: returns \"to\" if we're in the \"to\" header right now."
  (and (message-x-in-header-p)
       (save-excursion
	 (beginning-of-line)
	 (while (looking-at "^[ \t]+") (forward-line -1))
	 (looking-at "\\([^:]+\\):")
	 (downcase (buffer-substring-no-properties (match-beginning 1)
						   (match-end 1))))))

(defun message-x-tab ()
  "Does completion based on header currently in or executes a default
function in the body."
  (interactive)
  (let ((header (assoc (message-x-which-header)
		       message-x-completion-alist)))
    (funcall
     (if header (cdr header) message-x-body-function))))

(define-key message-mode-map "\t" 'message-x-tab)

(provide 'message-x)
;; message-x.el ends here


             reply	other threads:[~1996-08-09 17:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-08-09 17:42 Kai Grossjohann [this message]
1996-08-09 17:44 ` Kai Grossjohann
1996-08-28  6:50 ` Lars Magne Ingebrigtsen
1996-08-28 22:48   ` Paul Franklin
1996-09-25 13:53   ` Kai Grossjohann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vafn3044fpe.fsf@ls6.informatik.uni-dortmund.de \
    --to=grossjohann@charly.informatik.uni-dortmund.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).