annotate lisp/talk.el @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents a9dc0e7c3f2b
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 18383
diff changeset
1 ;;; talk.el --- allow several users to talk to each other through Emacs
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
3 ;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005,
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 94904
diff changeset
4 ;; 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12461
diff changeset
5
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38414
diff changeset
6 ;; Maintainer: FSF
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: comm, frames
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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.
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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/>.
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12461
diff changeset
26 ;; This is a multi-user talk package that runs in Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12461
diff changeset
27 ;; Use talk-connect to bring a new person into the conversation.
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;; Code:
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 (defvar talk-display-alist nil
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 "Alist of displays on which Emacs talk is now running.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 Each element has the form (DISPLAY FRAME BUFFER).")
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;;###autoload
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 (defun talk-connect (display)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 "Connect to display DISPLAY for the Emacs talk group."
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 (interactive "sTalk to display: ")
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; Make sure we have an entry for the current display.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 (let ((mydisp (cdr (assq 'display (frame-parameters (selected-frame))))))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 (talk-add-display mydisp))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; Make sure we have an entry for the specified display.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 (talk-add-display display)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; Add the new buffers to all talk frames.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 (talk-update-buffers))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
82997
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
47 ;;;###autoload
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
48 (defun talk ()
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
49 "Connect to the Emacs talk group from the current X display or tty frame."
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
50 (interactive)
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
51 (let ((type (frame-live-p (selected-frame)))
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
52 (display (frame-terminal (selected-frame))))
94904
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
53 (if (or (eq type t) (eq type 'x))
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
54 (talk-add-display
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
55 (terminal-name (frame-terminal (selected-frame))))
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
56 (error "Unknown frame type")))
82997
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
57 (talk-update-buffers))
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
58
94904
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
59 (defun talk-add-display (display)
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
60 (let* ((elt (assoc display talk-display-alist))
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
61 (name (concat "*talk-" display "*"))
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
62 frame buffer)
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
63 (if (and elt (frame-live-p (nth 1 elt)))
c71ea3609cd7 (talk): Simplify. Pass display arg to talk-add-display as a string.
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
64 (setq frame (nth 1 elt))
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
65 (setq frame (make-frame-on-display display (list (cons 'name name)))))
12461
578abe49e2d3 (talk-disconnect): Make it interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11684
diff changeset
66 (if (not (and elt (buffer-name (get-buffer (setq buffer (nth 2 elt))))))
578abe49e2d3 (talk-disconnect): Make it interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11684
diff changeset
67 (setq buffer (get-buffer-create name)))
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
68 (add-to-list 'delete-frame-functions 'talk-handle-delete-frame)
12461
578abe49e2d3 (talk-disconnect): Make it interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11684
diff changeset
69 (setq talk-display-alist
578abe49e2d3 (talk-disconnect): Make it interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11684
diff changeset
70 (cons (list display frame buffer) (delq elt talk-display-alist)))))
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
72 (defun talk-handle-delete-frame (frame)
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
73 (dolist (d talk-display-alist)
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
74 (when (eq (nth 1 d) frame)
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
75 (setq talk-display-alist (delq d talk-display-alist))
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82999
diff changeset
76 (talk-update-buffers))))
82997
af2d6b850383 Added multi-tty support for talk.el.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
77
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 (defun talk-disconnect ()
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 "Disconnect this display from the Emacs talk group."
12461
578abe49e2d3 (talk-disconnect): Make it interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11684
diff changeset
80 (interactive)
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 (let* ((mydisp (cdr (assq 'display (frame-parameters (selected-frame)))))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 (elt (assoc mydisp talk-display-alist)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 (delete-frame (nth 1 elt))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 (kill-buffer (nth 2 elt))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (setq talk-display-alist (delq elt talk-display-alist))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 (talk-update-buffers)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 (defun talk-update-buffers ()
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 "Update all the talk frames so that each shows all the talk buffers."
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 (let ((tail talk-display-alist))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 (while tail
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (let ((frame (nth 1 (car tail)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (this-buffer (nth 2 (car tail)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (buffers
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 (mapcar (function (lambda (elt) (nth 2 elt)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 talk-display-alist)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; Put this display's own talk buffer
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;; at the front of the list.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 (setq buffers (cons this-buffer (delq this-buffer buffers)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 (talk-split-up-frame frame buffers))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 (setq tail (cdr tail)))))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 (defun talk-split-up-frame (frame buffers)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 "Split FRAME into equal-sized windows displaying the buffers in BUFFERS.
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 Select the first of these windows, displaying the first of the buffers."
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 (let ((lines-per-buffer (/ (frame-height frame) (length buffers)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 (old-frame (selected-frame)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (unwind-protect
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (progn
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 (select-frame frame)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (select-window (frame-first-window frame))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 (delete-other-windows)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (while (progn
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (switch-to-buffer (car buffers))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (setq buffers (cdr buffers)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (split-window-vertically lines-per-buffer)
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (other-window 1))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (select-window (frame-first-window frame)))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 (select-frame old-frame))))
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
121 (provide 'talk)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
122
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
123 ;; arch-tag: 7ab0ad88-1788-4886-a44c-ae685e6f8a1a
11684
b59ad1e42981 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;;; talk.el ends here