erc-menu.el 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. ;; erc-menu.el -- Menu-bar definitions for ERC
  2. ;; Copyright (C) 2001-2002, 2004-2017 Free Software Foundation, Inc.
  3. ;; Author: Mario Lang <mlang@delysid.org>
  4. ;; Maintainer: emacs-devel@gnu.org
  5. ;; Keywords: comm, processes, menu
  6. ;; This file is part of GNU Emacs.
  7. ;; GNU Emacs is free software: you can redistribute it and/or modify
  8. ;; it under the terms of the GNU General Public License as published by
  9. ;; the Free Software Foundation, either version 3 of the License, or
  10. ;; (at your option) any later version.
  11. ;; GNU Emacs is distributed in the hope that it will be useful,
  12. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. ;; GNU General Public License for more details.
  15. ;; You should have received a copy of the GNU General Public License
  16. ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
  17. ;;; Commentary:
  18. ;; Loading this file defines a menu for ERC.
  19. ;;; Code:
  20. (require 'erc)
  21. (require 'easymenu)
  22. (defgroup erc-menu nil
  23. "ERC menu support."
  24. :group 'erc)
  25. (defvar erc-menu-definition
  26. (list "ERC"
  27. ["Connect to server..." erc t]
  28. ["Disconnect from server..." erc-quit-server erc-server-connected]
  29. "-"
  30. ["List channels..." erc-list-channels
  31. (and erc-server-connected (fboundp 'erc-list-channels))]
  32. ["Join channel..." erc-join-channel erc-server-connected]
  33. ["Start a query..." erc-cmd-QUERY erc-server-connected]
  34. ["Input action..." erc-input-action (erc-default-target)]
  35. "-"
  36. (list
  37. "Current channel"
  38. ["List users in channel" erc-channel-names erc-channel-users]
  39. ["List channel operators" erc-cmd-OPS erc-channel-users]
  40. ["Set topic..." erc-set-topic
  41. (and (and (erc-default-target) (not (erc-query-buffer-p)))
  42. (or (not (member "t" erc-channel-modes))
  43. (erc-channel-user-op-p (erc-current-nick))))]
  44. (list "Channel modes"
  45. ["Change mode..." erc-insert-mode-command
  46. (erc-channel-user-op-p (erc-current-nick))]
  47. ["No external send" (erc-toggle-channel-mode "n")
  48. :active (erc-channel-user-op-p (erc-current-nick))
  49. :style toggle :selected (member "n" erc-channel-modes)]
  50. ["Topic set by channel operator" (erc-toggle-channel-mode "t")
  51. :style toggle :selected (member "t" erc-channel-modes)
  52. :active (erc-channel-user-op-p (erc-current-nick))]
  53. ["Invite only" (erc-toggle-channel-mode "i")
  54. :style toggle :selected (member "i" erc-channel-modes)
  55. :active (erc-channel-user-op-p (erc-current-nick))]
  56. ["Private" (erc-toggle-channel-mode "p")
  57. :style toggle :selected (member "p" erc-channel-modes)
  58. :active (erc-channel-user-op-p (erc-current-nick))]
  59. ["Secret" (erc-toggle-channel-mode "s")
  60. :style toggle :selected (member "s" erc-channel-modes)
  61. :active (erc-channel-user-op-p (erc-current-nick))]
  62. ["Moderated" (erc-toggle-channel-mode "m")
  63. :style toggle :selected (member "m" erc-channel-modes)
  64. :active (erc-channel-user-op-p (erc-current-nick))]
  65. ["Set a limit..." erc-set-channel-limit
  66. (erc-channel-user-op-p (erc-current-nick))]
  67. ["Set a key..." erc-set-channel-key
  68. (erc-channel-user-op-p (erc-current-nick))])
  69. ["Leave this channel..." erc-part-from-channel erc-channel-users])
  70. "-"
  71. (list "Pals, fools and other keywords"
  72. ["Add pal..." erc-add-pal]
  73. ["Delete pal..." erc-delete-pal]
  74. ["Add fool..." erc-add-fool]
  75. ["Delete fool..." erc-delete-fool]
  76. ["Add keyword..." erc-add-keyword]
  77. ["Delete keyword..." erc-delete-keyword]
  78. ["Add dangerous host..." erc-add-dangerous-host]
  79. ["Delete dangerous host..." erc-delete-dangerous-host])
  80. "-"
  81. (list "IRC services"
  82. ["Identify to NickServ..." erc-nickserv-identify
  83. (and erc-server-connected (functionp 'erc-nickserv-identify))])
  84. "-"
  85. ["Save buffer in log" erc-save-buffer-in-logs
  86. (fboundp 'erc-save-buffer-in-logs)]
  87. ["Truncate buffer" erc-truncate-buffer (fboundp 'erc-truncate-buffer)]
  88. "-"
  89. ["Customize ERC" (customize-group 'erc) t]
  90. ["Enable/Disable ERC Modules" (customize-variable 'erc-modules) t]
  91. ["Show ERC version" erc-version t])
  92. "ERC menu definition.")
  93. (defvar erc-menu-defined nil
  94. "Internal variable used to keep track of whether we've defined the
  95. ERC menu yet.")
  96. ;;;###autoload (autoload 'erc-menu-mode "erc-menu" nil t)
  97. (define-erc-module menu nil
  98. "Enable a menu in ERC buffers."
  99. ((unless erc-menu-defined
  100. ;; make sure the menu only gets defined once, since Emacs 22
  101. ;; activates it immediately
  102. (easy-menu-define erc-menu erc-mode-map "ERC menu" erc-menu-definition)
  103. (setq erc-menu-defined t))
  104. (if (featurep 'xemacs)
  105. (progn
  106. ;; the menu isn't automatically added to the menu bar in
  107. ;; XEmacs
  108. (add-hook 'erc-mode-hook 'erc-menu-add)
  109. (dolist (buffer (erc-buffer-list))
  110. (with-current-buffer buffer (erc-menu-add))))
  111. (erc-menu-add)))
  112. ((if (featurep 'xemacs)
  113. (progn
  114. (remove-hook 'erc-mode-hook 'erc-menu-add)
  115. (dolist (buffer (erc-buffer-list))
  116. (with-current-buffer buffer (erc-menu-remove))))
  117. (erc-menu-remove)
  118. ;; `easy-menu-remove' is a no-op in Emacs 22
  119. (message "You might have to restart Emacs to remove the ERC menu"))))
  120. ;; silence byte-compiler warning
  121. (defvar erc-menu)
  122. (defun erc-menu-add ()
  123. "Add the ERC menu to the current buffer."
  124. (easy-menu-add erc-menu erc-mode-map))
  125. (defun erc-menu-remove ()
  126. "Remove the ERC menu from the current buffer."
  127. (easy-menu-remove erc-menu))
  128. (provide 'erc-menu)
  129. ;;; erc-menu.el ends here
  130. ;;
  131. ;; Local Variables:
  132. ;; indent-tabs-mode: t
  133. ;; tab-width: 8
  134. ;; End: