-;;; make-mode.el --- makefile editing commands for Emacs
+;;; make-mode.el --- makefile editing commands for Emacs -*- lexical-binding:t -*-
;; Copyright (C) 1992, 1994, 1999-2011 Free Software Foundation, Inc.
(defun makefile-make-font-lock-keywords (var keywords space
&optional negation
- &rest font-lock-keywords)
+ &rest fl-keywords)
`(;; Do macro assignments. These get the "variable-name" face.
(,makefile-macroassign-regex
(1 font-lock-variable-name-face)
;; They can make a tab fail to be effective.
("^\\( +\\)\t" 1 makefile-space)))
- ,@font-lock-keywords
+ ,@fl-keywords
;; Do dependencies.
(makefile-match-dependency
'("^[ \t]*\\.for[ \t].+[ \t]\\(in\\)\\>" 1 font-lock-keyword-face)))
(defconst makefile-imake-font-lock-keywords
- (append
+ (append
(makefile-make-font-lock-keywords
makefile-var-use-regex
makefile-statements
;; should return an exit status of zero if the target `foo' is
;; up to date and a nonzero exit status otherwise.
;; Many makes can do this although the docs/manpages do not mention
-;; it. Try it with your favourite one. GNU make, System V make, and
+;; it. Try it with your favorite one. GNU make, System V make, and
;; Dennis Vadura's DMake have no problems.
;; Set the variable `makefile-brave-make' to the name of the
;; make utility that does this on your system.
(define-key map "\C-c\C-m\C-p" 'makefile-makepp-mode)
(define-key map "\M-p" 'makefile-previous-dependency)
(define-key map "\M-n" 'makefile-next-dependency)
- (define-key map "\e\t" 'makefile-complete)
+ (define-key map "\e\t" 'completion-at-point)
;; Make menus.
(define-key map [menu-bar makefile-mode]
'(menu-item "Find Targets and Macros" makefile-pickup-everything
:help "Notice names of all macros and targets in Makefile"))
(define-key map [menu-bar makefile-mode complete]
- '(menu-item "Complete Target or Macro" makefile-complete
+ '(menu-item "Complete Target or Macro" completion-at-point
:help "Perform completion on Makefile construct preceding point"))
(define-key map [menu-bar makefile-mode backslash]
'(menu-item "Backslash Region" makefile-backslash-region
List of special targets. You will be offered to complete
on one of those in the minibuffer whenever you enter a `.'.
at the beginning of a line in Makefile mode."
+ (add-hook 'completion-at-point-functions
+ #'makefile-completions-at-point nil t)
(add-hook 'write-file-functions
'makefile-warn-suspicious-lines nil t)
(add-hook 'write-file-functions
;;; Completion.
-(defun makefile-complete ()
- "Perform completion on Makefile construct preceding point.
-Can complete variable and target names.
-The context determines which are considered."
- (interactive)
+(defun makefile-completions-at-point ()
(let* ((beg (save-excursion
(skip-chars-backward "^$(){}:#= \t\n")
(point)))
- (try (buffer-substring beg (point)))
(paren nil)
(do-macros
(save-excursion
;; Preceding "$(" or "${" means macros only.
((and (memq pc '(?\{ ?\())
(progn
- (setq paren (if (eq paren ?\{) ?\} ?\)))
+ (setq paren (if (eq pc ?\{) ?\} ?\)))
(backward-char)
(= (preceding-char) ?$)))
t)))))
-
- (table (apply-partially 'completion-table-with-terminator
- (cond
- (do-macros (or paren ""))
- ((save-excursion (goto-char beg) (bolp)) ":")
- (t " "))
- (append (if do-macros
- '()
- makefile-target-table)
- makefile-macro-table))))
- (completion-in-region beg (point) table)))
-
+ (suffix (cond
+ (do-macros (if paren (string paren)))
+ ((save-excursion (goto-char beg) (bolp)) ":")
+ (t " "))))
+ (list beg (point)
+ (append (if do-macros '() makefile-target-table)
+ makefile-macro-table)
+ :exit-function
+ (if suffix
+ (lambda (_s finished)
+ (when (memq finished '(sole finished))
+ (if (looking-at (regexp-quote suffix))
+ (goto-char (match-end 0))
+ (insert suffix))))))))
+
+(define-obsolete-function-alias 'makefile-complete 'completion-at-point "24.1")
\f
;; Backslashification. Stolen from cc-mode.el.
;; Filling
-(defun makefile-fill-paragraph (arg)
+(defun makefile-fill-paragraph (_arg)
;; Fill comments, backslashed lines, and variable definitions
;; specially.
(save-excursion
((or (eq (char-before (line-end-position 1)) ?\\)
(eq (char-before (line-end-position 0)) ?\\))
;; A backslash region. Find beginning and end, remove
- ;; backslashes, fill, and then reapply backslahes.
+ ;; backslashes, fill, and then reapply backslashes.
(end-of-line)
(let ((beginning
(save-excursion
;;; Utility functions
;;; ------------------------------------------------------------
-(defun makefile-match-function-end (end)
+(defun makefile-match-function-end (_end)
"To be called as an anchored matcher by font-lock.
The anchor must have matched the opening parens in the first group."
(let ((s (match-string-no-properties 1)))