Mercurial > emacs
view lisp/tool-bar.el @ 110523:a5ad4f188e19
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 18 Sep 2010 22:49:54 -0400 |
parents | 1d1d5d9bd884 |
children | 4d8277a44bb4 376148b31b5e |
line wrap: on
line source
;;; tool-bar.el --- setting up the tool bar ;; ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; ;; Author: Dave Love <fx@gnu.org> ;; Keywords: mouse frames ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; Provides `tool-bar-mode' to control display of the tool-bar and ;; bindings for the global tool bar with convenience functions ;; `tool-bar-add-item' and `tool-bar-add-item-from-menu'. ;; The normal global binding for [tool-bar] (below) uses the value of ;; `tool-bar-map' as the actual keymap to define the tool bar. Modes ;; may either bind items under the [tool-bar] prefix key of the local ;; map to add to the global bar or may set `tool-bar-map' ;; buffer-locally to override it. (Some items are removed from the ;; global bar in modes which have `special' as their `mode-class' ;; property.) ;; Todo: Somehow make tool bars easily customizable by the naive? ;;; Code: ;; The autoload cookie doesn't work when preloading. ;; Deleting it means invoking this command won't work ;; when you are on a tty. I hope that won't cause too much trouble -- rms. (define-minor-mode tool-bar-mode "Toggle use of the tool bar. With numeric ARG, display the tool bar if and only if ARG is positive. See `tool-bar-add-item' and `tool-bar-add-item-from-menu' for conveniently adding tool bar items." :init-value nil :global t :group 'mouse :group 'frames (if tool-bar-mode (progn ;; Make one tool-bar-line for any - including non-graphical - ;; terminal, see Bug#1754. If this causes problems, we should ;; handle the problem in `modify-frame-parameters' or do not ;; call `modify-all-frames-parameters' when toggling the tool ;; bar off either. (modify-all-frames-parameters (list (cons 'tool-bar-lines 1))) (if (= 1 (length (default-value 'tool-bar-map))) ; not yet setup (tool-bar-setup))) (modify-all-frames-parameters (list (cons 'tool-bar-lines 0))))) ;;;###autoload ;; Used in the Show/Hide menu, to have the toggle reflect the current frame. (defun toggle-tool-bar-mode-from-frame (&optional arg) "Toggle tool bar on or off, based on the status of the current frame. See `tool-bar-mode' for more information." (interactive (list (or current-prefix-arg 'toggle))) (if (eq arg 'toggle) (tool-bar-mode (if (> (frame-parameter nil 'tool-bar-lines) 0) 0 1)) (tool-bar-mode arg))) ;;;###autoload ;; We want to pretend the toolbar by standard is on, as this will make ;; customize consider disabling the toolbar a customization, and save ;; that. We could do this for real by setting :init-value above, but ;; that would turn on the toolbar in MS Windows where it is currently ;; useless, and it would overwrite disabling the tool bar from X ;; resources. If anyone want to implement this in a cleaner way, ;; please do so. ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-21. (put 'tool-bar-mode 'standard-value '(t)) (defvar tool-bar-map (make-sparse-keymap) "Keymap for the tool bar. Define this locally to override the global tool bar.") (global-set-key [tool-bar] `(menu-item ,(purecopy "tool bar") ignore :filter tool-bar-make-keymap)) (declare-function image-mask-p "image.c" (spec &optional frame)) (defconst tool-bar-keymap-cache (make-hash-table :weakness t :test 'equal)) (defun tool-bar-make-keymap (&optional ignore) "Generate an actual keymap from `tool-bar-map'. Its main job is to figure out which images to use based on the display's color capability and based on the available image libraries." (let ((key (cons (frame-terminal) tool-bar-map))) (or (gethash key tool-bar-keymap-cache) (puthash key (tool-bar-make-keymap-1) tool-bar-keymap-cache)))) (defun tool-bar-make-keymap-1 () "Generate an actual keymap from `tool-bar-map', without caching." (mapcar (lambda (bind) (let (image-exp plist) (when (and (eq (car-safe (cdr-safe bind)) 'menu-item) ;; For the format of menu-items, see node ;; `Extended Menu Items' in the Elisp manual. (setq plist (nthcdr (if (consp (nth 4 bind)) 5 4) bind)) (setq image-exp (plist-get plist :image)) (consp image-exp) (not (eq (car image-exp) 'image)) (fboundp (car image-exp))) (if (not (display-images-p)) (setq bind nil) (let ((image (eval image-exp))) (unless (and image (image-mask-p image)) (setq image (append image '(:mask heuristic)))) (setq bind (copy-sequence bind) plist (nthcdr (if (consp (nth 4 bind)) 5 4) bind)) (plist-put plist :image image)))) bind)) tool-bar-map)) ;;;###autoload (defun tool-bar-add-item (icon def key &rest props) "Add an item to the tool bar. ICON names the image, DEF is the key definition and KEY is a symbol for the fake function key in the menu keymap. Remaining arguments PROPS are additional items to add to the menu item specification. See Info node `(elisp)Tool Bar'. Items are added from left to right. ICON is the base name of a file containing the image to use. The function will first try to use low-color/ICON.xpm if `display-color-cells' is less or equal to 256, then ICON.xpm, then ICON.pbm, and finally ICON.xbm, using `find-image'. Use this function only to make bindings in the global value of `tool-bar-map'. To define items in any other map, use `tool-bar-local-item'." (apply 'tool-bar-local-item icon def key tool-bar-map props)) ;;;###autoload (defun tool-bar-local-item (icon def key map &rest props) "Add an item to the tool bar in map MAP. ICON names the image, DEF is the key definition and KEY is a symbol for the fake function key in the menu keymap. Remaining arguments PROPS are additional items to add to the menu item specification. See Info node `(elisp)Tool Bar'. Items are added from left to right. ICON is the base name of a file containing the image to use. The function will first try to use low-color/ICON.xpm if `display-color-cells' is less or equal to 256, then ICON.xpm, then ICON.pbm, and finally ICON.xbm, using `find-image'." (let* ((fg (face-attribute 'tool-bar :foreground)) (bg (face-attribute 'tool-bar :background)) (colors (nconc (if (eq fg 'unspecified) nil (list :foreground fg)) (if (eq bg 'unspecified) nil (list :background bg)))) (xpm-spec (list :type 'xpm :file (concat icon ".xpm"))) (xpm-lo-spec (list :type 'xpm :file (concat "low-color/" icon ".xpm"))) (pbm-spec (append (list :type 'pbm :file (concat icon ".pbm")) colors)) (xbm-spec (append (list :type 'xbm :file (concat icon ".xbm")) colors)) (image-exp `(find-image (cond ((not (display-color-p)) ',(list pbm-spec xbm-spec xpm-lo-spec xpm-spec)) ((< (display-color-cells) 256) ',(list xpm-lo-spec xpm-spec pbm-spec xbm-spec)) (t ',(list xpm-spec pbm-spec xbm-spec)))))) (define-key-after map (vector key) `(menu-item ,(symbol-name key) ,def :image ,image-exp ,@props)))) ;;;###autoload (defun tool-bar-add-item-from-menu (command icon &optional map &rest props) "Define tool bar binding for COMMAND in keymap MAP using the given ICON. This makes a binding for COMMAND in `tool-bar-map', copying its binding from the menu bar in MAP (which defaults to `global-map'), but modifies the binding by adding an image specification for ICON. It finds ICON just like `tool-bar-add-item'. PROPS are additional properties to add to the binding. MAP must contain appropriate binding for `[menu-bar]' which holds a keymap. Use this function only to make bindings in the global value of `tool-bar-map'. To define items in any other map, use `tool-bar-local-item-from-menu'." (apply 'tool-bar-local-item-from-menu command icon (default-value 'tool-bar-map) map props)) ;;;###autoload (defun tool-bar-local-item-from-menu (command icon in-map &optional from-map &rest props) "Define local tool bar binding for COMMAND using the given ICON. This makes a binding for COMMAND in IN-MAP, copying its binding from the menu bar in FROM-MAP (which defaults to `global-map'), but modifies the binding by adding an image specification for ICON. It finds ICON just like `tool-bar-add-item'. PROPS are additional properties to add to the binding. FROM-MAP must contain appropriate binding for `[menu-bar]' which holds a keymap." (unless from-map (setq from-map global-map)) (let* ((menu-bar-map (lookup-key from-map [menu-bar])) (keys (where-is-internal command menu-bar-map)) (fg (face-attribute 'tool-bar :foreground)) (bg (face-attribute 'tool-bar :background)) (colors (nconc (if (eq fg 'unspecified) nil (list :foreground fg)) (if (eq bg 'unspecified) nil (list :background bg)))) (xpm-spec (list :type 'xpm :file (concat icon ".xpm"))) (xpm-lo-spec (list :type 'xpm :file (concat "low-color/" icon ".xpm"))) (pbm-spec (append (list :type 'pbm :file (concat icon ".pbm")) colors)) (xbm-spec (append (list :type 'xbm :file (concat icon ".xbm")) colors)) (image-exp `(find-image (cond ((not (display-color-p)) ',(list pbm-spec xbm-spec xpm-lo-spec xpm-spec)) ((< (display-color-cells) 256) ',(list xpm-lo-spec xpm-spec pbm-spec xbm-spec)) (t ',(list xpm-spec pbm-spec xbm-spec))))) submap key) ;; We'll pick up the last valid entry in the list of keys if ;; there's more than one. (dolist (k keys) ;; We're looking for a binding of the command in a submap of ;; the menu bar map, so the key sequence must be two or more ;; long. (if (and (vectorp k) (> (length k) 1)) (let ((m (lookup-key menu-bar-map (substring k 0 -1))) ;; Last element in the bound key sequence: (kk (aref k (1- (length k))))) (if (and (keymapp m) (symbolp kk)) (setq submap m key kk))))) (when (and (symbolp submap) (boundp submap)) (setq submap (eval submap))) (let ((defn (assq key (cdr submap)))) (if (eq (cadr defn) 'menu-item) (define-key-after in-map (vector key) (append (cdr defn) (list :image image-exp) props)) (setq defn (cdr defn)) (define-key-after in-map (vector key) (let ((rest (cdr defn))) ;; If the rest of the definition starts ;; with a list of menu cache info, get rid of that. (if (and (consp rest) (consp (car rest))) (setq rest (cdr rest))) (append `(menu-item ,(car defn) ,rest) (list :image image-exp) props))))))) ;;; Set up some global items. Additions/deletions up for grabs. (defun tool-bar-setup () ;; People say it's bad to have EXIT on the tool bar, since users ;; might inadvertently click that button. ;;(tool-bar-add-item-from-menu 'save-buffers-kill-emacs "exit") (tool-bar-add-item-from-menu 'find-file "new") (tool-bar-add-item-from-menu 'menu-find-file-existing "open") (tool-bar-add-item-from-menu 'dired "diropen") (tool-bar-add-item-from-menu 'kill-this-buffer "close") (tool-bar-add-item-from-menu 'save-buffer "save" nil :visible '(or buffer-file-name (not (eq 'special (get major-mode 'mode-class))))) (tool-bar-add-item-from-menu 'write-file "saveas" nil :visible '(or buffer-file-name (not (eq 'special (get major-mode 'mode-class))))) (tool-bar-add-item-from-menu 'undo "undo" nil :visible '(not (eq 'special (get major-mode 'mode-class)))) (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [cut]) "cut" nil :visible '(not (eq 'special (get major-mode 'mode-class)))) (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [copy]) "copy") (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [paste]) "paste" nil :visible '(not (eq 'special (get major-mode 'mode-class)))) (tool-bar-add-item-from-menu 'nonincremental-search-forward "search") ;;(tool-bar-add-item-from-menu 'ispell-buffer "spell") ;; There's no icon appropriate for News and we need a command rather ;; than a lambda for Read Mail. ;;(tool-bar-add-item-from-menu 'compose-mail "mail/compose") (tool-bar-add-item-from-menu 'print-buffer "print") ;; tool-bar-add-item-from-menu itself operates on ;; (default-value 'tool-bar-map), but when we don't use that function, ;; we must explicitly operate on the default value. (let ((tool-bar-map (default-value 'tool-bar-map))) (tool-bar-add-item "preferences" 'customize 'customize :help "Edit preferences (customize)") (tool-bar-add-item "help" (lambda () (interactive) (popup-menu menu-bar-help-menu)) 'help :help "Pop up the Help menu"))) (provide 'tool-bar) ;; arch-tag: 15f30f0a-d0d7-4d50-bbb7-f48fd0c8582f ;;; tool-bar.el ends here