(defconst riece-user-button-popup-menu
'("User"
+ ["Finger (WHOIS)" riece-user-button-finger]
["Start Private Conversation" riece-user-button-join-partner]
["Give Channel Operator Privileges" riece-user-button-set-operators]
- ["Allow To Speak" riece-user-button-set-speakers]
- ["Finger (WHOIS)" riece-user-button-finger])
+ ["Allow To Speak" riece-user-button-set-speakers])
"Menu for user buttons.")
(defvar help-echo-owns-message)
;; window, overlay, position.
(riece-format-identity
(if overlay
- (with-current-buffer (overlay-buffer overlay)
- (widget-value (widget-at (overlay-start overlay))))
+ (with-current-buffer (riece-overlay-buffer overlay)
+ (widget-value (widget-at (riece-overlay-start overlay))))
(widget-value widget/window))))))
(defun riece-button-switch-to-identity (widget &optional event)
(defun riece-user-button-set-operators ()
(interactive)
- (let (group)
+ (let (group users)
(if (riece-region-active-p)
(save-excursion
- (riece-button-map-identity-region
+ (riece-scan-property-region
+ 'riece-identity
(region-beginning) (region-end)
(lambda (start end)
(setq group (cons (get-text-property start 'riece-identity)
group)))))
(setq group (list (get-text-property (point) 'riece-identity))))
+ (setq users (riece-with-server-buffer
+ (riece-identity-server riece-current-channel)
+ (riece-channel-get-users (riece-identity-prefix
+ riece-current-channel))))
(if (setq group
(delq nil
(mapcar
(lambda (identity)
- (riece-with-server-buffer (riece-identity-server
- riece-current-channel)
- (if (and (member
- (riece-identity-prefix identity)
- (riece-channel-get-users
- (riece-identity-prefix
- riece-current-channel)))
- (not (member
- (riece-identity-prefix identity)
- (riece-channel-get-operators
- (riece-identity-prefix
- riece-current-channel)))))
- identity)))
+ (unless (memq ?o (cdr (riece-identity-assoc
+ (riece-identity-prefix identity)
+ users
+ t)))
+ identity))
group)))
(riece-command-set-operators (mapcar #'riece-identity-prefix group)))))
(defun riece-user-button-set-speakers ()
(interactive)
- (let (group)
+ (let (group users)
(if (riece-region-active-p)
(save-excursion
- (riece-button-map-identity-region
+ (riece-scan-property-region
+ 'riece-identity
(region-beginning) (region-end)
(lambda (start end)
(setq group (cons (get-text-property start 'riece-identity)
group)))))
(setq group (list (get-text-property (point) 'riece-identity))))
+ (setq users (riece-with-server-buffer
+ (riece-identity-server riece-current-channel)
+ (riece-channel-get-users (riece-identity-prefix
+ riece-current-channel))))
(if (setq group
(delq nil
(mapcar
(lambda (identity)
- (riece-with-server-buffer (riece-identity-server
- riece-current-channel)
- (if (and (member
- (riece-identity-prefix identity)
- (riece-channel-get-users
- (riece-identity-prefix
- riece-current-channel)))
- (not (member
- (riece-identity-prefix identity)
- (riece-channel-get-operators
- (riece-identity-prefix
- riece-current-channel))))
- (not (member
- (riece-identity-prefix identity)
- (riece-channel-get-speakers
- (riece-identity-prefix
- riece-current-channel)))))
- identity)))
+ (unless (memq ?v (cdr (riece-identity-assoc
+ (riece-identity-prefix identity)
+ users
+ t)))
+ identity))
group)))
(riece-command-set-speakers (mapcar #'riece-identity-prefix group)))))
(defun riece-user-button-finger ()
(interactive)
- (riece-command-finger
- (riece-identity-prefix (get-text-property (point) 'riece-identity))))
+ (riece-command-finger (get-text-property (point) 'riece-identity)))
(defun riece-make-identity-button-map ()
(let ((map (make-sparse-keymap)))
(define-key map [down-mouse-3] 'riece-identity-button-popup-menu)
map))
-(defun riece-button-map-identity-region (start end function)
- (catch 'done
- (while t
- ;; Search for the beginning of the button region.
- (unless (get-text-property start 'riece-identity)
- (setq start (next-single-property-change start 'riece-identity
- nil end)))
- (if (= start end)
- (throw 'done nil))
- ;; Search for the end of the button region.
- (let* ((identity (get-text-property start 'riece-identity))
- (button-end (next-single-property-change start 'riece-identity
- nil end)))
- (if (= button-end end)
- (throw 'done nil))
- (funcall function start button-end)
- (setq start button-end)))))
-
(defvar riece-identity-button-map)
(defun riece-button-add-identity-button (start end)
- (riece-button-map-identity-region
+ (riece-scan-property-region
+ 'riece-identity
start end
(lambda (start end)
(let ((inhibit-read-only t)
(list 'local-map riece-identity-button-map
'keymap riece-identity-button-map))))))
-(defun riece-button-update-channel-list-buffer ()
- (save-excursion
- (set-buffer riece-channel-list-buffer)
- (riece-button-add-identity-button (point-min) (point-max))))
-
-(defun riece-button-update-user-list-buffer ()
- (save-excursion
- (set-buffer riece-user-list-buffer)
- (riece-button-add-identity-button (point-min) (point-max))))
+(defun riece-button-update-buffer ()
+ (riece-button-add-identity-button (point-min) (point-max)))
(defun riece-button-requires ()
'(riece-highlight))
(defvar riece-user-list-mode-map)
(defvar riece-dialogue-mode-map)
(defun riece-button-insinuate ()
- (add-hook 'riece-update-buffer-functions
- 'riece-button-update-channel-list-buffer t)
- (add-hook 'riece-update-buffer-functions
- 'riece-button-update-user-list-buffer t)
(add-hook 'riece-channel-list-mode-hook
(lambda ()
(set-keymap-parent riece-channel-list-mode-map widget-keymap)
(set (make-local-variable 'riece-identity-button-map)
- (riece-make-identity-button-map))))
+ (riece-make-identity-button-map))
+ (add-hook 'riece-update-buffer-functions
+ 'riece-button-update-buffer t t)))
(add-hook 'riece-user-list-mode-hook
(lambda ()
(set-keymap-parent riece-user-list-mode-map widget-keymap)
(set (make-local-variable 'riece-identity-button-map)
- (riece-make-identity-button-map))))
+ (riece-make-identity-button-map))
+ (add-hook 'riece-update-buffer-functions
+ 'riece-button-update-buffer t t)))
(add-hook 'riece-dialogue-mode-hook
(lambda ()
(set-keymap-parent riece-dialogue-mode-map widget-keymap)