Mercurial > emacs
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 |
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 | 2 |
74442 | 3 ;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, |
100908 | 4 ;; 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
14169 | 5 |
45078 | 6 ;; Maintainer: FSF |
11684 | 7 ;; Keywords: comm, frames |
8 | |
9 ;; This file is part of GNU Emacs. | |
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 | 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 | 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/>. |
11684 | 23 |
24 ;;; Commentary: | |
25 | |
14169 | 26 ;; This is a multi-user talk package that runs in Emacs. |
27 ;; Use talk-connect to bring a new person into the conversation. | |
11684 | 28 |
29 ;;; Code: | |
30 | |
31 (defvar talk-display-alist nil | |
32 "Alist of displays on which Emacs talk is now running. | |
33 Each element has the form (DISPLAY FRAME BUFFER).") | |
34 | |
35 ;;;###autoload | |
36 (defun talk-connect (display) | |
37 "Connect to display DISPLAY for the Emacs talk group." | |
38 (interactive "sTalk to display: ") | |
39 ;; Make sure we have an entry for the current display. | |
40 (let ((mydisp (cdr (assq 'display (frame-parameters (selected-frame)))))) | |
41 (talk-add-display mydisp)) | |
42 ;; Make sure we have an entry for the specified display. | |
43 (talk-add-display display) | |
44 ;; Add the new buffers to all talk frames. | |
45 (talk-update-buffers)) | |
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 | 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 | 78 (defun talk-disconnect () |
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 | 81 (let* ((mydisp (cdr (assq 'display (frame-parameters (selected-frame))))) |
82 (elt (assoc mydisp talk-display-alist))) | |
83 (delete-frame (nth 1 elt)) | |
84 (kill-buffer (nth 2 elt)) | |
85 (setq talk-display-alist (delq elt talk-display-alist)) | |
86 (talk-update-buffers))) | |
87 | |
88 (defun talk-update-buffers () | |
89 "Update all the talk frames so that each shows all the talk buffers." | |
90 (let ((tail talk-display-alist)) | |
91 (while tail | |
92 (let ((frame (nth 1 (car tail))) | |
93 (this-buffer (nth 2 (car tail))) | |
94 (buffers | |
95 (mapcar (function (lambda (elt) (nth 2 elt))) | |
96 talk-display-alist))) | |
97 ;; Put this display's own talk buffer | |
98 ;; at the front of the list. | |
99 (setq buffers (cons this-buffer (delq this-buffer buffers))) | |
100 (talk-split-up-frame frame buffers)) | |
101 (setq tail (cdr tail))))) | |
102 | |
103 (defun talk-split-up-frame (frame buffers) | |
104 "Split FRAME into equal-sized windows displaying the buffers in BUFFERS. | |
105 Select the first of these windows, displaying the first of the buffers." | |
106 (let ((lines-per-buffer (/ (frame-height frame) (length buffers))) | |
107 (old-frame (selected-frame))) | |
108 (unwind-protect | |
109 (progn | |
110 (select-frame frame) | |
111 (select-window (frame-first-window frame)) | |
112 (delete-other-windows) | |
113 (while (progn | |
114 (switch-to-buffer (car buffers)) | |
115 (setq buffers (cdr buffers))) | |
116 (split-window-vertically lines-per-buffer) | |
117 (other-window 1)) | |
118 (select-window (frame-first-window frame))) | |
119 (select-frame old-frame)))) | |
120 | |
18383 | 121 (provide 'talk) |
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 | 124 ;;; talk.el ends here |