mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
739e3dbe05
* lisp/allout.el (allout-abbreviate-flattened-numbering) (allout-mode-deactivate-hook): * lisp/ansi-color.el (ansi-color-unfontify-region): * lisp/auth-source.el (auth-source-hide-passwords) (auth-source-user-or-password) (auth-source-forget-user-or-password): * lisp/cedet/data-debug.el (data-debug-map): * lisp/cedet/semantic/grammar.el (semantic-grammar-syntax-table) (semantic-grammar-map): * lisp/chistory.el (command-history-map): * lisp/comint.el (comint-dynamic-complete) (comint-dynamic-complete-as-filename) (comint-dynamic-simple-complete): * lisp/dired-x.el (read-filename-at-point) (dired-x-submit-report): * lisp/dos-fns.el (register-name-alist, make-register) (register-value, set-register-value, intdos, mode25, mode4350): * lisp/emacs-lisp/bytecomp.el (byte-compile-disable-print-circle): * lisp/emacs-lisp/chart.el (chart-map): * lisp/emacs-lisp/package.el (package-menu-view-commentary): * lisp/emacs-lock.el (toggle-emacs-lock, emacs-lock-from-exiting): * lisp/erc/erc.el (erc-complete-word): * lisp/eshell/em-cmpl.el (eshell-cmpl-suffix-list): * lisp/eshell/esh-util.el (eshell-for): * lisp/files.el (inhibit-first-line-modes-regexps) (inhibit-first-line-modes-suffixes): * lisp/gnus/gnus-msg.el (gnus-outgoing-message-group) (gnus-debug-files, gnus-debug-exclude-variables): * lisp/gnus/gnus-registry.el (gnus-registry-user-format-function-M): * lisp/gnus/gnus.el (gnus-local-domain, gnus-carpal): * lisp/gnus/nnimap.el (nnimap-split-rule): * lisp/iimage.el (turn-on-iimage-mode): * lisp/image.el (image-extension-data, image-library-alist): * lisp/mail/emacsbug.el (report-emacs-bug-pretest-address): * lisp/mail/mail-utils.el (rmail-dont-reply-to): * lisp/mail/mailalias.el (mail-complete-function) (mail-completion-at-point-function): * lisp/mail/rmail.el (rmail-dont-reply-to-names) (rmail-default-dont-reply-to-names): * lisp/mail/sendmail.el (mail-mailer-swallows-blank-line) (mail-sent-via): * lisp/menu-bar.el (menu-bar-kill-ring-save): * lisp/minibuffer.el (completion-annotate-function) (minibuffer-local-filename-must-match-map): * lisp/msb.el (msb-after-load-hooks): * lisp/obsolete/eieio-compat.el (eieio-defmethod) (eieio-defgeneric): * lisp/obsolete/info-edit.el (Info-edit-map): * lisp/obsolete/starttls.el (starttls-any-program-available): * lisp/progmodes/cfengine.el (cfengine-mode-abbrevs): * lisp/progmodes/cwarn.el (turn-on-cwarn-mode): * lisp/progmodes/make-mode.el (makefile-complete): * lisp/progmodes/meta-mode.el (meta-complete-symbol) (meta-mode-map): * lisp/progmodes/pascal.el (pascal-toggle-completions) (pascal-last-completions, pascal-show-completions): * lisp/progmodes/prolog.el (prolog-char-quote-workaround): * lisp/progmodes/which-func.el (which-func-mode): [FUNCTION] * lisp/simple.el (count-lines-region, minibuffer-completing-symbol): * lisp/speedbar.el (speedbar-syntax-table, speedbar-key-map): * lisp/strokes.el (strokes-report-bug): * lisp/subr.el (condition-case-no-debug): * lisp/term/ns-win.el (ns-alternatives-map) (ns-store-cut-buffer-internal): * lisp/term/w32-win.el (w32-default-color-map): * lisp/term/x-win.el (x-cut-buffer-or-selection-value): * lisp/textmodes/bibtex.el (bibtex-complete) (bibtex-entry-field-alist): * lisp/textmodes/reftex-index.el (reftex-index-map) (reftex-index-phrases-map): * lisp/textmodes/reftex-sel.el (reftex-select-label-map) (reftex-select-bib-map): * lisp/textmodes/reftex-toc.el (reftex-toc-map): * lisp/textmodes/rst.el (rst-block-face, rst-external-face) (rst-definition-face, rst-directive-face, rst-comment-face) (rst-emphasis1-face, rst-emphasis2-face, rst-literal-face) (rst-reference-face): * lisp/vc/vc-hooks.el (vc-toggle-read-only): * lisp/view.el (view-return-to-alist) (view-return-to-alist-update): Remove many functions and variables obsolete since 24.1. * lisp/textmodes/bibtex.el (bibtex-entry-alist): Don't use above removed variable 'bibtex-entry-field-alist'. * lisp/cedet/data-debug.el (data-debug-edebug-expr) (data-debug-eval-expression): * lisp/emacs-lisp/trace.el (trace--read-args): * lisp/files-x.el (read-file-local-variable-value): * lisp/simple.el (read--expression): Don't use above removed variable 'minibuffer-completing-symbol'. * lisp/textmodes/rst.el (rst-font-lock-keywords): Don't use above removed variables. * src/w32fns.c (Fw32_default_color_map): Delete obsolete function. (syms_of_w32fns): Delete defsubr for above defun. * src/keyboard.c (syms_of_keyboard) <Vdeferred_action_list> <Vdeferred_action_function>: Delete DEFVARs. <Qdeferred_action_function>: Delete DEFSYM. (syms_of_keyboard_for_pdumper): Adjust for above change. (command_loop_1): Don't run deferred-action-function hook. * lisp/subr.el (deferred-action-list, deferred-action-function): Delete obsoletion statements. * lisp/emacs-lisp/ert-x.el (ert-simulate-command): Don't run 'deferred-action-list' hook. * doc/lispref/hooks.texi (Standard Hooks): Delete 'deferred-action-function'. * lisp/emacs-lisp/lisp.el (field-complete): * lisp/eshell/em-cmpl.el (eshell-cmpl-initialize): * lisp/gnus/gnus-msg.el (gnus-inews-insert-gcc): * lisp/gnus/nnmail.el (nnmail-fancy-expiry-target): * lisp/mail/mail-utils.el (mail-dont-reply-to): * lisp/mail/sendmail.el (sendmail-send-it): * lisp/mail/smtpmail.el (smtpmail-send-it): * lisp/minibuffer.el (minibuffer-completion-help): * lisp/progmodes/python.el: Don't use above removed items. * lisp/emacs-lisp/eieio-core.el: * lisp/mail/mailalias.el (mail-complete-alist): Doc fixes; don't refer to above removed items. ; * etc/NEWS: List removed items.
145 lines
4.8 KiB
EmacsLisp
145 lines
4.8 KiB
EmacsLisp
;;; iimage.el --- Inline image minor mode. -*- lexical-binding: t -*-
|
|
|
|
;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
|
|
|
|
;; Author: KOSEKI Yoshinori <kose@meadowy.org>
|
|
;; Maintainer: emacs-devel@gnu.org
|
|
;; Keywords: multimedia
|
|
|
|
;; 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 <https://www.gnu.org/licenses/>.
|
|
|
|
;;; Commentary:
|
|
|
|
;; Iimage is a minor mode that displays images, when image-filename
|
|
;; exists in the buffer.
|
|
;;
|
|
;; ** Display images in *Info* buffer.
|
|
;;
|
|
;; (add-hook 'info-mode-hook 'iimage-mode)
|
|
;;
|
|
;; .texinfo: @file{file://foo.png}
|
|
;; .info: `file://foo.png'
|
|
;;
|
|
;; ** Display images in Wiki buffer.
|
|
;;
|
|
;; (add-hook 'wiki-mode-hook 'iimage-mode)
|
|
;;
|
|
;; wiki-file: [[foo.png]]
|
|
|
|
;;; Code:
|
|
|
|
(eval-when-compile
|
|
(require 'image-file))
|
|
|
|
(defgroup iimage nil
|
|
"Support for inline images."
|
|
:version "22.1"
|
|
:group 'image)
|
|
|
|
(defcustom iimage-mode-image-search-path nil
|
|
"List of directories to search for image files for `iimage-mode'."
|
|
:type '(choice (const nil) (repeat directory)))
|
|
|
|
(defvar iimage-mode-image-filename-regex
|
|
(concat "[-+./_0-9a-zA-Z]+\\."
|
|
(regexp-opt (nconc (mapcar #'upcase
|
|
image-file-name-extensions)
|
|
image-file-name-extensions)
|
|
t)))
|
|
|
|
(defcustom iimage-mode-image-regex-alist
|
|
`((,(concat "\\(`?file://\\|\\[\\[\\|<\\|`\\)?"
|
|
"\\(" iimage-mode-image-filename-regex "\\)"
|
|
"\\(\\]\\]\\|>\\|'\\)?") . 2))
|
|
"Alist of filename REGEXP vs NUM.
|
|
Each element looks like (REGEXP . NUM).
|
|
NUM specifies which parenthesized expression in the regexp.
|
|
|
|
Examples of image filename patterns to match:
|
|
file://foo.png
|
|
\\=`file://foo.png\\='
|
|
\\[\\[foo.gif]]
|
|
<foo.png>
|
|
foo.JPG"
|
|
:type '(alist :key-type regexp :value-type integer))
|
|
|
|
(defvar-keymap iimage-mode-map
|
|
:doc "Keymap used in `iimage-mode'."
|
|
"C-l" #'iimage-recenter)
|
|
|
|
(defun iimage-recenter (&optional arg)
|
|
"Re-draw images and recenter."
|
|
(interactive "P")
|
|
(iimage-mode-buffer nil)
|
|
(iimage-mode-buffer t)
|
|
(recenter-top-bottom arg))
|
|
|
|
(defun turn-off-iimage-mode ()
|
|
"Unconditionally turn off iimage mode."
|
|
(interactive)
|
|
(iimage-mode 0))
|
|
|
|
(defun iimage-modification-hook (beg end)
|
|
"Remove display property if a display region is modified."
|
|
;;(debug-print "ii1 begin %d, end %d\n" beg end)
|
|
(let ((inhibit-modification-hooks t)
|
|
(beg (previous-single-property-change end 'display
|
|
nil (line-beginning-position)))
|
|
(end (next-single-property-change beg 'display
|
|
nil (line-end-position))))
|
|
(when (and beg end (plist-get (text-properties-at beg) 'display))
|
|
;;(debug-print "ii2 begin %d, end %d\n" beg end)
|
|
(remove-text-properties beg end
|
|
'(display nil modification-hooks nil)))))
|
|
|
|
(defun iimage-mode-buffer (arg)
|
|
"Display images if ARG is non-nil, undisplay them otherwise."
|
|
(let ((image-path (cons default-directory iimage-mode-image-search-path))
|
|
(edges (window-inside-pixel-edges (get-buffer-window)))
|
|
file)
|
|
(with-silent-modifications
|
|
(save-excursion
|
|
(goto-char (point-min))
|
|
(dolist (pair iimage-mode-image-regex-alist)
|
|
(while (re-search-forward (car pair) nil t)
|
|
(when (and (setq file (match-string (cdr pair)))
|
|
(setq file (locate-file file image-path)))
|
|
;; FIXME: we don't mark our images, so we can't reliably
|
|
;; remove them either (we may leave some of ours, and we
|
|
;; may remove other packages's display properties).
|
|
(if arg
|
|
(add-text-properties
|
|
(match-beginning 0) (match-end 0)
|
|
`(display
|
|
,(create-image file nil nil
|
|
:max-width (- (nth 2 edges) (nth 0 edges))
|
|
:max-height (- (nth 3 edges) (nth 1 edges)))
|
|
keymap ,image-map
|
|
modification-hooks
|
|
(iimage-modification-hook)))
|
|
(remove-list-of-text-properties
|
|
(match-beginning 0) (match-end 0)
|
|
'(display modification-hooks))))))))))
|
|
|
|
;;;###autoload
|
|
(define-minor-mode iimage-mode nil
|
|
:group 'iimage :lighter " iImg" :keymap iimage-mode-map
|
|
(iimage-mode-buffer iimage-mode))
|
|
|
|
(provide 'iimage)
|
|
|
|
;;; iimage.el ends here
|