diff options
| author | Tom Tromey | 2013-06-13 11:29:06 -0600 |
|---|---|---|
| committer | Tom Tromey | 2013-06-13 11:29:06 -0600 |
| commit | 5ccb7e7b1ea2ca7f6e45d00d839e19f22cc961da (patch) | |
| tree | af9b79246f0b18d748c3e1c33b1bb1b33cf1fbe0 /lisp/progmodes | |
| parent | 313dfb6277b3e1ef28c7bb76e776f10168e3f0a3 (diff) | |
| parent | 94fa6ec7b306b47c251f7b8b67662598027a7ff3 (diff) | |
| download | emacs-5ccb7e7b1ea2ca7f6e45d00d839e19f22cc961da.tar.gz emacs-5ccb7e7b1ea2ca7f6e45d00d839e19f22cc961da.zip | |
merge from trunk
Diffstat (limited to 'lisp/progmodes')
| -rw-r--r-- | lisp/progmodes/cc-engine.el | 4 | ||||
| -rw-r--r-- | lisp/progmodes/cfengine.el | 10 | ||||
| -rw-r--r-- | lisp/progmodes/compile.el | 6 | ||||
| -rw-r--r-- | lisp/progmodes/octave.el | 155 | ||||
| -rw-r--r-- | lisp/progmodes/perl-mode.el | 49 | ||||
| -rw-r--r-- | lisp/progmodes/prog-mode.el | 119 | ||||
| -rw-r--r-- | lisp/progmodes/prolog.el | 44 |
7 files changed, 234 insertions, 153 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index b0c0bfd7bde..9077bdbb513 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el | |||
| @@ -9355,10 +9355,6 @@ comment at the start of cc-engine.el for more info." | |||
| 9355 | containing-sexp nil))) | 9355 | containing-sexp nil))) |
| 9356 | (setq lim (1+ containing-sexp)))) | 9356 | (setq lim (1+ containing-sexp)))) |
| 9357 | (setq lim (point-min))) | 9357 | (setq lim (point-min))) |
| 9358 | (when (c-beginning-of-macro) | ||
| 9359 | (goto-char indent-point) | ||
| 9360 | (let ((lim1 (c-determine-limit 2000))) | ||
| 9361 | (setq lim (max lim lim1)))) | ||
| 9362 | 9358 | ||
| 9363 | ;; If we're in a parenthesis list then ',' delimits the | 9359 | ;; If we're in a parenthesis list then ',' delimits the |
| 9364 | ;; "statements" rather than being an operator (with the | 9360 | ;; "statements" rather than being an operator (with the |
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el index 11eb0eeaf49..01b5faef5b3 100644 --- a/lisp/progmodes/cfengine.el +++ b/lisp/progmodes/cfengine.el | |||
| @@ -527,6 +527,11 @@ Intended as the value of `indent-line-function'." | |||
| 527 | ;; Doze path separators. | 527 | ;; Doze path separators. |
| 528 | (modify-syntax-entry ?\\ "." table)) | 528 | (modify-syntax-entry ?\\ "." table)) |
| 529 | 529 | ||
| 530 | (defconst cfengine3--prettify-symbols-alist | ||
| 531 | '(("->" . ?→) | ||
| 532 | ("=>" . ?⇒) | ||
| 533 | ("::" . ?∷))) | ||
| 534 | |||
| 530 | ;;;###autoload | 535 | ;;;###autoload |
| 531 | (define-derived-mode cfengine3-mode prog-mode "CFE3" | 536 | (define-derived-mode cfengine3-mode prog-mode "CFE3" |
| 532 | "Major mode for editing CFEngine3 input. | 537 | "Major mode for editing CFEngine3 input. |
| @@ -538,8 +543,11 @@ to the action header." | |||
| 538 | (cfengine-common-syntax cfengine3-mode-syntax-table) | 543 | (cfengine-common-syntax cfengine3-mode-syntax-table) |
| 539 | 544 | ||
| 540 | (set (make-local-variable 'indent-line-function) #'cfengine3-indent-line) | 545 | (set (make-local-variable 'indent-line-function) #'cfengine3-indent-line) |
| 546 | |||
| 541 | (setq font-lock-defaults | 547 | (setq font-lock-defaults |
| 542 | '(cfengine3-font-lock-keywords nil nil nil beginning-of-defun)) | 548 | '(cfengine3-font-lock-keywords |
| 549 | nil nil nil beginning-of-defun)) | ||
| 550 | (prog-prettify-install cfengine3--prettify-symbols-alist) | ||
| 543 | 551 | ||
| 544 | ;; Use defuns as the essential syntax block. | 552 | ;; Use defuns as the essential syntax block. |
| 545 | (set (make-local-variable 'beginning-of-defun-function) | 553 | (set (make-local-variable 'beginning-of-defun-function) |
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index d6f136ec92d..d9c482330cc 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el | |||
| @@ -1002,7 +1002,7 @@ POS and RES.") | |||
| 1002 | (let ((win (get-buffer-window buffer 0))) | 1002 | (let ((win (get-buffer-window buffer 0))) |
| 1003 | (if win (set-window-point win pos))) | 1003 | (if win (set-window-point win pos))) |
| 1004 | (if compilation-auto-jump-to-first-error | 1004 | (if compilation-auto-jump-to-first-error |
| 1005 | (compile-goto-error)))) | 1005 | (compile-goto-error nil t)))) |
| 1006 | 1006 | ||
| 1007 | ;; This function is the central driver, called when font-locking to gather | 1007 | ;; This function is the central driver, called when font-locking to gather |
| 1008 | ;; all information needed to later jump to corresponding source code. | 1008 | ;; all information needed to later jump to corresponding source code. |
| @@ -2317,7 +2317,7 @@ Prefix arg N says how many files to move backwards (or forwards, if negative)." | |||
| 2317 | 2317 | ||
| 2318 | (defalias 'compile-mouse-goto-error 'compile-goto-error) | 2318 | (defalias 'compile-mouse-goto-error 'compile-goto-error) |
| 2319 | 2319 | ||
| 2320 | (defun compile-goto-error (&optional event) | 2320 | (defun compile-goto-error (&optional event nomsg) |
| 2321 | "Visit the source for the error message at point. | 2321 | "Visit the source for the error message at point. |
| 2322 | Use this command in a compilation log buffer. Sets the mark at point there." | 2322 | Use this command in a compilation log buffer. Sets the mark at point there." |
| 2323 | (interactive (list last-input-event)) | 2323 | (interactive (list last-input-event)) |
| @@ -2328,7 +2328,7 @@ Use this command in a compilation log buffer. Sets the mark at point there." | |||
| 2328 | (if (get-text-property (point) 'compilation-directory) | 2328 | (if (get-text-property (point) 'compilation-directory) |
| 2329 | (dired-other-window | 2329 | (dired-other-window |
| 2330 | (car (get-text-property (point) 'compilation-directory))) | 2330 | (car (get-text-property (point) 'compilation-directory))) |
| 2331 | (push-mark) | 2331 | (push-mark nil nomsg) |
| 2332 | (setq compilation-current-error (point)) | 2332 | (setq compilation-current-error (point)) |
| 2333 | (next-error-internal))) | 2333 | (next-error-internal))) |
| 2334 | 2334 | ||
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index c6e19fe3a15..b1936467274 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el | |||
| @@ -89,7 +89,7 @@ Used in `octave-mode' and `inferior-octave-mode' buffers.") | |||
| 89 | 89 | ||
| 90 | (defvar octave-function-header-regexp | 90 | (defvar octave-function-header-regexp |
| 91 | (concat "^\\s-*\\_<\\(function\\)\\_>" | 91 | (concat "^\\s-*\\_<\\(function\\)\\_>" |
| 92 | "\\([^=;\n]*=[ \t]*\\|[ \t]*\\)\\(\\(?:\\w\\|\\s_\\)+\\)\\_>") | 92 | "\\([^=;(\n]*=[ \t]*\\|[ \t]*\\)\\(\\(?:\\w\\|\\s_\\)+\\)\\_>") |
| 93 | "Regexp to match an Octave function header. | 93 | "Regexp to match an Octave function header. |
| 94 | The string `function' and its name are given by the first and third | 94 | The string `function' and its name are given by the first and third |
| 95 | parenthetical grouping.") | 95 | parenthetical grouping.") |
| @@ -153,10 +153,10 @@ parenthetical grouping.") | |||
| 153 | 'eldoc-mode)) | 153 | 'eldoc-mode)) |
| 154 | :style toggle :selected (or eldoc-post-insert-mode eldoc-mode) | 154 | :style toggle :selected (or eldoc-post-insert-mode eldoc-mode) |
| 155 | :help "Display function signatures after typing `SPC' or `('"] | 155 | :help "Display function signatures after typing `SPC' or `('"] |
| 156 | ["Delimiter Matching" smie-highlight-matching-block-mode | 156 | ["Delimiter Matching" show-paren-mode |
| 157 | :style toggle :selected smie-highlight-matching-block-mode | 157 | :style toggle :selected show-paren-mode |
| 158 | :help "Highlight matched pairs such as `if ... end'" | 158 | :help "Highlight matched pairs such as `if ... end'" |
| 159 | :visible (fboundp 'smie-highlight-matching-block-mode)] | 159 | :visible (fboundp 'smie--matching-block-data)] |
| 160 | ["Auto Fill" auto-fill-mode | 160 | ["Auto Fill" auto-fill-mode |
| 161 | :style toggle :selected auto-fill-function | 161 | :style toggle :selected auto-fill-function |
| 162 | :help "Automatic line breaking"] | 162 | :help "Automatic line breaking"] |
| @@ -540,6 +540,7 @@ definitions can also be stored in files and used in batch mode." | |||
| 540 | ;; a ";" at those places where it's correct (i.e. outside of parens). | 540 | ;; a ";" at those places where it's correct (i.e. outside of parens). |
| 541 | (setq-local electric-layout-rules '((?\; . after))) | 541 | (setq-local electric-layout-rules '((?\; . after))) |
| 542 | 542 | ||
| 543 | (setq-local comment-use-global-state t) | ||
| 543 | (setq-local comment-start octave-comment-start) | 544 | (setq-local comment-start octave-comment-start) |
| 544 | (setq-local comment-end "") | 545 | (setq-local comment-end "") |
| 545 | (setq-local comment-start-skip octave-comment-start-skip) | 546 | (setq-local comment-start-skip octave-comment-start-skip) |
| @@ -563,6 +564,8 @@ definitions can also be stored in files and used in batch mode." | |||
| 563 | (setq-local imenu-generic-expression octave-mode-imenu-generic-expression) | 564 | (setq-local imenu-generic-expression octave-mode-imenu-generic-expression) |
| 564 | (setq-local imenu-case-fold-search nil) | 565 | (setq-local imenu-case-fold-search nil) |
| 565 | 566 | ||
| 567 | (setq-local add-log-current-defun-function #'octave-add-log-current-defun) | ||
| 568 | |||
| 566 | (add-hook 'completion-at-point-functions 'octave-completion-at-point nil t) | 569 | (add-hook 'completion-at-point-functions 'octave-completion-at-point nil t) |
| 567 | (add-hook 'before-save-hook 'octave-sync-function-file-names nil t) | 570 | (add-hook 'before-save-hook 'octave-sync-function-file-names nil t) |
| 568 | (setq-local beginning-of-defun-function 'octave-beginning-of-defun) | 571 | (setq-local beginning-of-defun-function 'octave-beginning-of-defun) |
| @@ -605,12 +608,13 @@ startup." | |||
| 605 | :group 'octave | 608 | :group 'octave |
| 606 | :version "24.4") | 609 | :version "24.4") |
| 607 | 610 | ||
| 608 | (defcustom inferior-octave-startup-args nil | 611 | (defcustom inferior-octave-startup-args '("-i" "--no-line-editing") |
| 609 | "List of command line arguments for the inferior Octave process. | 612 | "List of command line arguments for the inferior Octave process. |
| 610 | For example, for suppressing the startup message and using `traditional' | 613 | For example, for suppressing the startup message and using `traditional' |
| 611 | mode, set this to (\"-q\" \"--traditional\")." | 614 | mode, include \"-q\" and \"--traditional\"." |
| 612 | :type '(repeat string) | 615 | :type '(repeat string) |
| 613 | :group 'octave) | 616 | :group 'octave |
| 617 | :version "24.4") | ||
| 614 | 618 | ||
| 615 | (defcustom inferior-octave-mode-hook nil | 619 | (defcustom inferior-octave-mode-hook nil |
| 616 | "Hook to be run when Inferior Octave mode is started." | 620 | "Hook to be run when Inferior Octave mode is started." |
| @@ -664,6 +668,7 @@ in the Inferior Octave buffer.") | |||
| 664 | :abbrev-table octave-abbrev-table | 668 | :abbrev-table octave-abbrev-table |
| 665 | (setq comint-prompt-regexp inferior-octave-prompt) | 669 | (setq comint-prompt-regexp inferior-octave-prompt) |
| 666 | 670 | ||
| 671 | (setq-local comment-use-global-state t) | ||
| 667 | (setq-local comment-start octave-comment-start) | 672 | (setq-local comment-start octave-comment-start) |
| 668 | (setq-local comment-end "") | 673 | (setq-local comment-end "") |
| 669 | (setq comment-column 32) | 674 | (setq comment-column 32) |
| @@ -719,13 +724,13 @@ startup file, `~/.emacs-octave'." | |||
| 719 | (substring inferior-octave-buffer 1 -1) | 724 | (substring inferior-octave-buffer 1 -1) |
| 720 | inferior-octave-buffer | 725 | inferior-octave-buffer |
| 721 | inferior-octave-program | 726 | inferior-octave-program |
| 722 | (append (list "-i" "--no-line-editing") | 727 | (append |
| 723 | ;; --no-gui is introduced in Octave > 3.7 | 728 | inferior-octave-startup-args |
| 724 | (when (zerop (process-file inferior-octave-program | 729 | ;; --no-gui is introduced in Octave > 3.7 |
| 725 | nil nil nil | 730 | (and (not (member "--no-gui" inferior-octave-startup-args)) |
| 726 | "--no-gui" "--help")) | 731 | (zerop (process-file inferior-octave-program |
| 727 | (list "--no-gui")) | 732 | nil nil nil "--no-gui" "--help")) |
| 728 | inferior-octave-startup-args)))) | 733 | '("--no-gui")))))) |
| 729 | (set-process-filter proc 'inferior-octave-output-digest) | 734 | (set-process-filter proc 'inferior-octave-output-digest) |
| 730 | (setq inferior-octave-process proc | 735 | (setq inferior-octave-process proc |
| 731 | inferior-octave-output-list nil | 736 | inferior-octave-output-list nil |
| @@ -755,10 +760,10 @@ startup file, `~/.emacs-octave'." | |||
| 755 | (inferior-octave-send-list-and-digest (list "PS2\n")) | 760 | (inferior-octave-send-list-and-digest (list "PS2\n")) |
| 756 | (when (string-match "\\(PS2\\|ans\\) = *$" | 761 | (when (string-match "\\(PS2\\|ans\\) = *$" |
| 757 | (car inferior-octave-output-list)) | 762 | (car inferior-octave-output-list)) |
| 758 | (inferior-octave-send-list-and-digest (list "PS2 (\"> \");\n"))) | 763 | (inferior-octave-send-list-and-digest (list "PS2 ('> ');\n"))) |
| 759 | 764 | ||
| 760 | (inferior-octave-send-list-and-digest | 765 | (inferior-octave-send-list-and-digest |
| 761 | (list "disp(getenv(\"OCTAVE_SRCDIR\"))\n")) | 766 | (list "disp (getenv ('OCTAVE_SRCDIR'))\n")) |
| 762 | (process-put proc 'octave-srcdir | 767 | (process-put proc 'octave-srcdir |
| 763 | (unless (equal (car inferior-octave-output-list) "") | 768 | (unless (equal (car inferior-octave-output-list) "") |
| 764 | (car inferior-octave-output-list))) | 769 | (car inferior-octave-output-list))) |
| @@ -767,19 +772,19 @@ startup file, `~/.emacs-octave'." | |||
| 767 | (inferior-octave-send-list-and-digest | 772 | (inferior-octave-send-list-and-digest |
| 768 | (list "more off;\n" | 773 | (list "more off;\n" |
| 769 | (unless (equal inferior-octave-output-string ">> ") | 774 | (unless (equal inferior-octave-output-string ">> ") |
| 770 | "PS1 (\"\\\\s> \");\n") | 775 | "PS1 ('\\s> ');\n") |
| 771 | (when (and inferior-octave-startup-file | 776 | (when (and inferior-octave-startup-file |
| 772 | (file-exists-p inferior-octave-startup-file)) | 777 | (file-exists-p inferior-octave-startup-file)) |
| 773 | (format "source (\"%s\");\n" inferior-octave-startup-file)))) | 778 | (format "source ('%s');\n" inferior-octave-startup-file)))) |
| 774 | (when inferior-octave-output-list | 779 | (when inferior-octave-output-list |
| 775 | (insert-before-markers | 780 | (insert-before-markers |
| 776 | (mapconcat 'identity inferior-octave-output-list "\n"))) | 781 | (mapconcat 'identity inferior-octave-output-list "\n"))) |
| 777 | 782 | ||
| 778 | ;; And finally, everything is back to normal. | 783 | ;; And finally, everything is back to normal. |
| 779 | (set-process-filter proc 'comint-output-filter) | 784 | (set-process-filter proc 'comint-output-filter) |
| 780 | ;; Just in case, to be sure a cd in the startup file | 785 | ;; Just in case, to be sure a cd in the startup file won't have |
| 781 | ;; won't have detrimental effects. | 786 | ;; detrimental effects. |
| 782 | (inferior-octave-resync-dirs) | 787 | (with-demoted-errors (inferior-octave-resync-dirs)) |
| 783 | ;; Generate a proper prompt, which is critical to | 788 | ;; Generate a proper prompt, which is critical to |
| 784 | ;; `comint-history-isearch-backward-regexp'. Bug#14433. | 789 | ;; `comint-history-isearch-backward-regexp'. Bug#14433. |
| 785 | (comint-send-string proc "\n"))) | 790 | (comint-send-string proc "\n"))) |
| @@ -795,7 +800,7 @@ startup file, `~/.emacs-octave'." | |||
| 795 | (unless (and (equal (car cache) command) | 800 | (unless (and (equal (car cache) command) |
| 796 | (< (float-time) (+ 5 (cadr cache)))) | 801 | (< (float-time) (+ 5 (cadr cache)))) |
| 797 | (inferior-octave-send-list-and-digest | 802 | (inferior-octave-send-list-and-digest |
| 798 | (list (concat "completion_matches (\"" command "\");\n"))) | 803 | (list (format "completion_matches ('%s');\n" command))) |
| 799 | (setq cache (list command (float-time) | 804 | (setq cache (list command (float-time) |
| 800 | (delete-consecutive-dups | 805 | (delete-consecutive-dups |
| 801 | (sort inferior-octave-output-list 'string-lessp))))) | 806 | (sort inferior-octave-output-list 'string-lessp))))) |
| @@ -894,8 +899,8 @@ output is passed to the filter `inferior-octave-output-digest'." | |||
| 894 | "Tracks `cd' commands issued to the inferior Octave process. | 899 | "Tracks `cd' commands issued to the inferior Octave process. |
| 895 | Use \\[inferior-octave-resync-dirs] to resync if Emacs gets confused." | 900 | Use \\[inferior-octave-resync-dirs] to resync if Emacs gets confused." |
| 896 | (when inferior-octave-directory-tracker-resync | 901 | (when inferior-octave-directory-tracker-resync |
| 897 | (setq inferior-octave-directory-tracker-resync nil) | 902 | (or (inferior-octave-resync-dirs 'noerror) |
| 898 | (inferior-octave-resync-dirs)) | 903 | (setq inferior-octave-directory-tracker-resync nil))) |
| 899 | (cond | 904 | (cond |
| 900 | ((string-match "^[ \t]*cd[ \t;]*$" string) | 905 | ((string-match "^[ \t]*cd[ \t;]*$" string) |
| 901 | (cd "~")) | 906 | (cd "~")) |
| @@ -907,13 +912,17 @@ Use \\[inferior-octave-resync-dirs] to resync if Emacs gets confused." | |||
| 907 | (error-message-string err) | 912 | (error-message-string err) |
| 908 | (match-string 1 string))))))) | 913 | (match-string 1 string))))))) |
| 909 | 914 | ||
| 910 | (defun inferior-octave-resync-dirs () | 915 | (defun inferior-octave-resync-dirs (&optional noerror) |
| 911 | "Resync the buffer's idea of the current directory. | 916 | "Resync the buffer's idea of the current directory. |
| 912 | This command queries the inferior Octave process about its current | 917 | This command queries the inferior Octave process about its current |
| 913 | directory and makes this the current buffer's default directory." | 918 | directory and makes this the current buffer's default directory." |
| 914 | (interactive) | 919 | (interactive) |
| 915 | (inferior-octave-send-list-and-digest '("disp (pwd ())\n")) | 920 | (inferior-octave-send-list-and-digest '("disp (pwd ())\n")) |
| 916 | (cd (car inferior-octave-output-list))) | 921 | (condition-case err |
| 922 | (progn | ||
| 923 | (cd (car inferior-octave-output-list)) | ||
| 924 | t) | ||
| 925 | (error (unless noerror (signal (car err) (cdr err)))))) | ||
| 917 | 926 | ||
| 918 | (defcustom inferior-octave-minimal-columns 80 | 927 | (defcustom inferior-octave-minimal-columns 80 |
| 919 | "The minimal column width for the inferior Octave process." | 928 | "The minimal column width for the inferior Octave process." |
| @@ -931,7 +940,7 @@ directory and makes this the current buffer's default directory." | |||
| 931 | (when (and inferior-octave-process | 940 | (when (and inferior-octave-process |
| 932 | (process-live-p inferior-octave-process)) | 941 | (process-live-p inferior-octave-process)) |
| 933 | (inferior-octave-send-list-and-digest | 942 | (inferior-octave-send-list-and-digest |
| 934 | (list (format "putenv(\"COLUMNS\", \"%s\");\n" width))))))) | 943 | (list (format "putenv ('COLUMNS', '%s');\n" width))))))) |
| 935 | 944 | ||
| 936 | 945 | ||
| 937 | ;;; Miscellaneous useful functions | 946 | ;;; Miscellaneous useful functions |
| @@ -975,16 +984,17 @@ directory and makes this the current buffer's default directory." | |||
| 975 | 984 | ||
| 976 | (defun octave-goto-function-definition (fn) | 985 | (defun octave-goto-function-definition (fn) |
| 977 | "Go to the function definition of FN in current buffer." | 986 | "Go to the function definition of FN in current buffer." |
| 978 | (goto-char (point-min)) | ||
| 979 | (let ((search | 987 | (let ((search |
| 980 | (lambda (re sub) | 988 | (lambda (re sub) |
| 981 | (let (done) | 989 | (let ((orig (point)) found) |
| 982 | (while (and (not done) (re-search-forward re nil t)) | 990 | (goto-char (point-min)) |
| 991 | (while (and (not found) (re-search-forward re nil t)) | ||
| 983 | (when (and (equal (match-string sub) fn) | 992 | (when (and (equal (match-string sub) fn) |
| 984 | (not (nth 8 (syntax-ppss)))) | 993 | (not (nth 8 (syntax-ppss)))) |
| 985 | (setq done t))) | 994 | (setq found t))) |
| 986 | (or done (goto-char (point-min))))))) | 995 | (unless found (goto-char orig)) |
| 987 | (pcase (file-name-extension (buffer-file-name)) | 996 | found)))) |
| 997 | (pcase (and buffer-file-name (file-name-extension buffer-file-name)) | ||
| 988 | (`"cc" (funcall search | 998 | (`"cc" (funcall search |
| 989 | "\\_<DEFUN\\(?:_DLD\\)?\\s-*(\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)" 1)) | 999 | "\\_<DEFUN\\(?:_DLD\\)?\\s-*(\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)" 1)) |
| 990 | (t (funcall search octave-function-header-regexp 3))))) | 1000 | (t (funcall search octave-function-header-regexp 3))))) |
| @@ -1345,8 +1355,6 @@ The block marked is the one that contains point or follows point." | |||
| 1345 | (forward-line 1)))) | 1355 | (forward-line 1)))) |
| 1346 | t))) | 1356 | t))) |
| 1347 | 1357 | ||
| 1348 | ;;; Completions | ||
| 1349 | |||
| 1350 | (defun octave-completion-at-point () | 1358 | (defun octave-completion-at-point () |
| 1351 | "Find the text to complete and the corresponding table." | 1359 | "Find the text to complete and the corresponding table." |
| 1352 | (let* ((beg (save-excursion (skip-syntax-backward "w_") (point))) | 1360 | (let* ((beg (save-excursion (skip-syntax-backward "w_") (point))) |
| @@ -1363,6 +1371,16 @@ The block marked is the one that contains point or follows point." | |||
| 1363 | 1371 | ||
| 1364 | (define-obsolete-function-alias 'octave-complete-symbol | 1372 | (define-obsolete-function-alias 'octave-complete-symbol |
| 1365 | 'completion-at-point "24.1") | 1373 | 'completion-at-point "24.1") |
| 1374 | |||
| 1375 | (defun octave-add-log-current-defun () | ||
| 1376 | "A function for `add-log-current-defun-function' (which see)." | ||
| 1377 | (save-excursion | ||
| 1378 | (end-of-line) | ||
| 1379 | (and (beginning-of-defun) | ||
| 1380 | (re-search-forward octave-function-header-regexp | ||
| 1381 | (line-end-position) t) | ||
| 1382 | (match-string 3)))) | ||
| 1383 | |||
| 1366 | 1384 | ||
| 1367 | ;;; Electric characters && friends | 1385 | ;;; Electric characters && friends |
| 1368 | (define-skeleton octave-insert-defun | 1386 | (define-skeleton octave-insert-defun |
| @@ -1387,7 +1405,7 @@ entered without parens)." | |||
| 1387 | "function " > str \n | 1405 | "function " > str \n |
| 1388 | _ \n | 1406 | _ \n |
| 1389 | "endfunction" > \n) | 1407 | "endfunction" > \n) |
| 1390 | 1408 | ||
| 1391 | ;;; Communication with the inferior Octave process | 1409 | ;;; Communication with the inferior Octave process |
| 1392 | (defun octave-kill-process () | 1410 | (defun octave-kill-process () |
| 1393 | "Kill inferior Octave process and its buffer." | 1411 | "Kill inferior Octave process and its buffer." |
| @@ -1506,9 +1524,7 @@ code line." | |||
| 1506 | (defun octave-eldoc-function-signatures (fn) | 1524 | (defun octave-eldoc-function-signatures (fn) |
| 1507 | (unless (equal fn (car octave-eldoc-cache)) | 1525 | (unless (equal fn (car octave-eldoc-cache)) |
| 1508 | (inferior-octave-send-list-and-digest | 1526 | (inferior-octave-send-list-and-digest |
| 1509 | (list (format "\ | 1527 | (list (format "print_usage ('%s');\n" fn))) |
| 1510 | if ismember(exist(\"%s\"), [2 3 5 103]) print_usage(\"%s\") endif\n" | ||
| 1511 | fn fn))) | ||
| 1512 | (let (result) | 1528 | (let (result) |
| 1513 | (dolist (line inferior-octave-output-list) | 1529 | (dolist (line inferior-octave-output-list) |
| 1514 | (when (string-match | 1530 | (when (string-match |
| @@ -1605,20 +1621,11 @@ if ismember(exist(\"%s\"), [2 3 5 103]) print_usage(\"%s\") endif\n" | |||
| 1605 | (when (or help-xref-stack help-xref-forward-stack) | 1621 | (when (or help-xref-stack help-xref-forward-stack) |
| 1606 | (insert "\n")))) | 1622 | (insert "\n")))) |
| 1607 | 1623 | ||
| 1608 | (defvar octave-help-mode-finish-hook nil | ||
| 1609 | "Octave specific hook for `temp-buffer-show-hook'.") | ||
| 1610 | |||
| 1611 | (defun octave-help-mode-finish () | ||
| 1612 | (when (eq major-mode 'octave-help-mode) | ||
| 1613 | (run-hooks 'octave-help-mode-finish-hook))) | ||
| 1614 | |||
| 1615 | (add-hook 'temp-buffer-show-hook 'octave-help-mode-finish) | ||
| 1616 | |||
| 1617 | (defun octave-help (fn) | 1624 | (defun octave-help (fn) |
| 1618 | "Display the documentation of FN." | 1625 | "Display the documentation of FN." |
| 1619 | (interactive (list (octave-completing-read))) | 1626 | (interactive (list (octave-completing-read))) |
| 1620 | (inferior-octave-send-list-and-digest | 1627 | (inferior-octave-send-list-and-digest |
| 1621 | (list (format "help \"%s\"\n" fn))) | 1628 | (list (format "help ('%s');\n" fn))) |
| 1622 | (let ((lines inferior-octave-output-list) | 1629 | (let ((lines inferior-octave-output-list) |
| 1623 | (inhibit-read-only t)) | 1630 | (inhibit-read-only t)) |
| 1624 | (when (string-match "error: \\(.*\\)$" (car lines)) | 1631 | (when (string-match "error: \\(.*\\)$" (car lines)) |
| @@ -1654,12 +1661,15 @@ if ismember(exist(\"%s\"), [2 3 5 103]) print_usage(\"%s\") endif\n" | |||
| 1654 | (help-insert-xref-button (file-relative-name file dir) | 1661 | (help-insert-xref-button (file-relative-name file dir) |
| 1655 | 'octave-help-file fn) | 1662 | 'octave-help-file fn) |
| 1656 | (insert "'"))) | 1663 | (insert "'"))) |
| 1657 | ;; Make 'See also' clickable | 1664 | ;; Make 'See also' clickable. |
| 1658 | (with-syntax-table octave-mode-syntax-table | 1665 | (with-syntax-table octave-mode-syntax-table |
| 1659 | (when (re-search-forward "^\\s-*See also:" nil t) | 1666 | (when (re-search-forward "^\\s-*See also:" nil t) |
| 1660 | (let ((end (save-excursion (re-search-forward "^\\s-*$" nil t)))) | 1667 | (let ((end (save-excursion (re-search-forward "^\\s-*$" nil t)))) |
| 1661 | (while (re-search-forward "\\_<\\(?:\\sw\\|\\s_\\)+\\_>" end t) | 1668 | (while (re-search-forward |
| 1662 | (make-text-button (match-beginning 0) (match-end 0) | 1669 | ;; Match operators and symbols. |
| 1670 | "\\(?1:\\s.+?\\)\\(?:$\\|[,;]\\|\\s-\\)\\|\\_<\\(?1:\\(?:\\sw\\|\\s_\\)+\\)\\_>" | ||
| 1671 | end t) | ||
| 1672 | (make-text-button (match-beginning 1) (match-end 1) | ||
| 1663 | :type 'octave-help-function))))) | 1673 | :type 'octave-help-function))))) |
| 1664 | (octave-help-mode))))) | 1674 | (octave-help-mode))))) |
| 1665 | 1675 | ||
| @@ -1710,23 +1720,30 @@ If the environment variable OCTAVE_SRCDIR is set, it is searched first." | |||
| 1710 | Functions implemented in C++ can be found if | 1720 | Functions implemented in C++ can be found if |
| 1711 | `octave-source-directories' is set correctly." | 1721 | `octave-source-directories' is set correctly." |
| 1712 | (interactive (list (octave-completing-read))) | 1722 | (interactive (list (octave-completing-read))) |
| 1713 | (inferior-octave-send-list-and-digest | 1723 | (require 'etags) |
| 1714 | ;; help NAME is more verbose | 1724 | (let ((orig (point))) |
| 1715 | (list (format "\ | 1725 | (if (and (derived-mode-p 'octave-mode) |
| 1716 | if iskeyword(\"%s\") disp(\"`%s' is a keyword\") else which(\"%s\") endif\n" | 1726 | (octave-goto-function-definition fn)) |
| 1717 | fn fn fn))) | 1727 | (ring-insert find-tag-marker-ring (copy-marker orig)) |
| 1718 | (let* ((line (car inferior-octave-output-list)) | 1728 | (inferior-octave-send-list-and-digest |
| 1719 | (file (when (and line (string-match "from the file \\(.*\\)$" line)) | 1729 | ;; help NAME is more verbose |
| 1720 | (match-string 1 line)))) | 1730 | (list (format "\ |
| 1721 | (if (not file) | 1731 | if iskeyword('%s') disp('`%s'' is a keyword') else which('%s') endif\n" |
| 1722 | (user-error "%s" (or line (format "`%s' not found" fn))) | 1732 | fn fn fn))) |
| 1723 | (require 'etags) | 1733 | (let (line file) |
| 1724 | (ring-insert find-tag-marker-ring (point-marker)) | 1734 | ;; Skip garbage lines such as |
| 1725 | (setq file (funcall octave-find-definition-filename-function file)) | 1735 | ;; warning: fmincg.m: possible Matlab-style .... |
| 1726 | (when file | 1736 | (while (and (not file) (consp inferior-octave-output-list)) |
| 1727 | (find-file file) | 1737 | (setq line (pop inferior-octave-output-list)) |
| 1728 | (octave-goto-function-definition fn))))) | 1738 | (when (string-match "from the file \\(.*\\)$" line) |
| 1729 | 1739 | (setq file (match-string 1 line)))) | |
| 1740 | (if (not file) | ||
| 1741 | (user-error "%s" (or line (format "`%s' not found" fn))) | ||
| 1742 | (ring-insert find-tag-marker-ring (point-marker)) | ||
| 1743 | (setq file (funcall octave-find-definition-filename-function file)) | ||
| 1744 | (when file | ||
| 1745 | (find-file file) | ||
| 1746 | (octave-goto-function-definition fn))))))) | ||
| 1730 | 1747 | ||
| 1731 | (provide 'octave) | 1748 | (provide 'octave) |
| 1732 | ;;; octave.el ends here | 1749 | ;;; octave.el ends here |
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index 01ac8584e19..1d5052bede4 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el | |||
| @@ -158,44 +158,10 @@ | |||
| 158 | ;; Regexps updated with help from Tom Tromey <tromey@cambric.colorado.edu> and | 158 | ;; Regexps updated with help from Tom Tromey <tromey@cambric.colorado.edu> and |
| 159 | ;; Jim Campbell <jec@murzim.ca.boeing.com>. | 159 | ;; Jim Campbell <jec@murzim.ca.boeing.com>. |
| 160 | 160 | ||
| 161 | (defcustom perl-prettify-symbols t | ||
| 162 | "If non-nil, some symbols will be displayed using Unicode chars." | ||
| 163 | :version "24.4" | ||
| 164 | :type 'boolean) | ||
| 165 | |||
| 166 | (defconst perl--prettify-symbols-alist | 161 | (defconst perl--prettify-symbols-alist |
| 167 | '(;;("andalso" . ?∧) ("orelse" . ?∨) ("as" . ?≡)("not" . ?¬) | 162 | '(("->" . ?→) |
| 168 | ;;("div" . ?÷) ("*" . ?×) ("o" . ?○) | ||
| 169 | ("->" . ?→) | ||
| 170 | ("=>" . ?⇒) | 163 | ("=>" . ?⇒) |
| 171 | ;;("<-" . ?←) ("<>" . ?≠) (">=" . ?≥) ("<=" . ?≤) ("..." . ?⋯) | 164 | ("::" . ?∷))) |
| 172 | ("::" . ?∷) | ||
| 173 | )) | ||
| 174 | |||
| 175 | (defun perl--font-lock-compose-symbol () | ||
| 176 | "Compose a sequence of ascii chars into a symbol. | ||
| 177 | Regexp match data 0 points to the chars." | ||
| 178 | ;; Check that the chars should really be composed into a symbol. | ||
| 179 | (let* ((start (match-beginning 0)) | ||
| 180 | (end (match-end 0)) | ||
| 181 | (syntaxes (if (eq (char-syntax (char-after start)) ?w) | ||
| 182 | '(?w) '(?. ?\\)))) | ||
| 183 | (if (or (memq (char-syntax (or (char-before start) ?\ )) syntaxes) | ||
| 184 | (memq (char-syntax (or (char-after end) ?\ )) syntaxes) | ||
| 185 | (nth 8 (syntax-ppss))) | ||
| 186 | ;; No composition for you. Let's actually remove any composition | ||
| 187 | ;; we may have added earlier and which is now incorrect. | ||
| 188 | (remove-text-properties start end '(composition)) | ||
| 189 | ;; That's a symbol alright, so add the composition. | ||
| 190 | (compose-region start end (cdr (assoc (match-string 0) | ||
| 191 | perl--prettify-symbols-alist))))) | ||
| 192 | ;; Return nil because we're not adding any face property. | ||
| 193 | nil) | ||
| 194 | |||
| 195 | (defun perl--font-lock-symbols-keywords () | ||
| 196 | (when perl-prettify-symbols | ||
| 197 | `((,(regexp-opt (mapcar 'car perl--prettify-symbols-alist) t) | ||
| 198 | (0 (perl--font-lock-compose-symbol)))))) | ||
| 199 | 165 | ||
| 200 | (defconst perl-font-lock-keywords-1 | 166 | (defconst perl-font-lock-keywords-1 |
| 201 | '(;; What is this for? | 167 | '(;; What is this for? |
| @@ -243,8 +209,7 @@ Regexp match data 0 points to the chars." | |||
| 243 | ;; Fontify keywords with/and labels as we do in `c++-font-lock-keywords'. | 209 | ;; Fontify keywords with/and labels as we do in `c++-font-lock-keywords'. |
| 244 | ("\\<\\(continue\\|goto\\|last\\|next\\|redo\\)\\>[ \t]*\\(\\sw+\\)?" | 210 | ("\\<\\(continue\\|goto\\|last\\|next\\|redo\\)\\>[ \t]*\\(\\sw+\\)?" |
| 245 | (1 font-lock-keyword-face) (2 font-lock-constant-face nil t)) | 211 | (1 font-lock-keyword-face) (2 font-lock-constant-face nil t)) |
| 246 | ("^[ \t]*\\(\\sw+\\)[ \t]*:[^:]" 1 font-lock-constant-face) | 212 | ("^[ \t]*\\(\\sw+\\)[ \t]*:[^:]" 1 font-lock-constant-face))) |
| 247 | ,@(perl--font-lock-symbols-keywords))) | ||
| 248 | "Gaudy level highlighting for Perl mode.") | 213 | "Gaudy level highlighting for Perl mode.") |
| 249 | 214 | ||
| 250 | (defvar perl-font-lock-keywords perl-font-lock-keywords-1 | 215 | (defvar perl-font-lock-keywords perl-font-lock-keywords-1 |
| @@ -685,13 +650,15 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'." | |||
| 685 | (setq-local comment-start-skip "\\(^\\|\\s-\\);?#+ *") | 650 | (setq-local comment-start-skip "\\(^\\|\\s-\\);?#+ *") |
| 686 | (setq-local comment-indent-function #'perl-comment-indent) | 651 | (setq-local comment-indent-function #'perl-comment-indent) |
| 687 | (setq-local parse-sexp-ignore-comments t) | 652 | (setq-local parse-sexp-ignore-comments t) |
| 653 | |||
| 688 | ;; Tell font-lock.el how to handle Perl. | 654 | ;; Tell font-lock.el how to handle Perl. |
| 689 | (setq font-lock-defaults '((perl-font-lock-keywords | 655 | (setq font-lock-defaults '((perl-font-lock-keywords |
| 690 | perl-font-lock-keywords-1 | 656 | perl-font-lock-keywords-1 |
| 691 | perl-font-lock-keywords-2) | 657 | perl-font-lock-keywords-2) |
| 692 | nil nil ((?\_ . "w")) nil | 658 | nil nil ((?\_ . "w")) nil |
| 693 | (font-lock-syntactic-face-function | 659 | (font-lock-syntactic-face-function |
| 694 | . perl-font-lock-syntactic-face-function))) | 660 | . perl-font-lock-syntactic-face-function))) |
| 661 | (prog-prettify-install perl--prettify-symbols-alist) | ||
| 695 | (setq-local syntax-propertize-function #'perl-syntax-propertize-function) | 662 | (setq-local syntax-propertize-function #'perl-syntax-propertize-function) |
| 696 | (add-hook 'syntax-propertize-extend-region-functions | 663 | (add-hook 'syntax-propertize-extend-region-functions |
| 697 | #'syntax-propertize-multiline 'append 'local) | 664 | #'syntax-propertize-multiline 'append 'local) |
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el new file mode 100644 index 00000000000..e2700414636 --- /dev/null +++ b/lisp/progmodes/prog-mode.el | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | ;;; prog-mode.el --- Generic major mode for programming -*- lexical-binding: t -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2013 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Maintainer: FSF | ||
| 6 | ;; Keywords: internal | ||
| 7 | ;; Package: emacs | ||
| 8 | |||
| 9 | ;; This file is part of GNU Emacs. | ||
| 10 | |||
| 11 | ;; GNU Emacs is free software: you can redistribute it and/or modify | ||
| 12 | ;; it under the terms of the GNU General Public License as published by | ||
| 13 | ;; the Free Software Foundation, either version 3 of the License, or | ||
| 14 | ;; (at your option) any later version. | ||
| 15 | |||
| 16 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | ;; GNU General Public License for more details. | ||
| 20 | |||
| 21 | ;; You should have received a copy of the GNU General Public License | ||
| 22 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | ||
| 23 | |||
| 24 | ;;; Commentary: | ||
| 25 | |||
| 26 | ;; This major mode is mostly intended as a parent of other programming | ||
| 27 | ;; modes. All major modes for programming languages should derive from this | ||
| 28 | ;; mode so that users can put generic customization on prog-mode-hook. | ||
| 29 | |||
| 30 | ;;; Code: | ||
| 31 | |||
| 32 | (eval-when-compile (require 'cl-lib)) | ||
| 33 | |||
| 34 | (defgroup prog-mode nil | ||
| 35 | "Generic programming mode, from which others derive." | ||
| 36 | :group 'languages) | ||
| 37 | |||
| 38 | (defvar prog-mode-map | ||
| 39 | (let ((map (make-sparse-keymap))) | ||
| 40 | (define-key map [?\C-\M-q] 'prog-indent-sexp) | ||
| 41 | map) | ||
| 42 | "Keymap used for programming modes.") | ||
| 43 | |||
| 44 | (defun prog-indent-sexp (&optional defun) | ||
| 45 | "Indent the expression after point. | ||
| 46 | When interactively called with prefix, indent the enclosing defun | ||
| 47 | instead." | ||
| 48 | (interactive "P") | ||
| 49 | (save-excursion | ||
| 50 | (when defun | ||
| 51 | (end-of-line) | ||
| 52 | (beginning-of-defun)) | ||
| 53 | (let ((start (point)) | ||
| 54 | (end (progn (forward-sexp 1) (point)))) | ||
| 55 | (indent-region start end nil)))) | ||
| 56 | |||
| 57 | (defvar prog-prettify-symbols-alist nil) | ||
| 58 | |||
| 59 | (defcustom prog-prettify-symbols nil | ||
| 60 | "Whether symbols should be prettified. | ||
| 61 | When set to an alist in the form `((STRING . CHARACTER)...)' it | ||
| 62 | will augment the mode's native prettify alist." | ||
| 63 | :type '(choice | ||
| 64 | (const :tag "No thanks" nil) | ||
| 65 | (const :tag "Mode defaults" t) | ||
| 66 | (alist :tag "Mode defaults augmented with your own list" | ||
| 67 | :key-type string :value-type character)) | ||
| 68 | :version "24.4") | ||
| 69 | |||
| 70 | (defun prog--prettify-font-lock-compose-symbol (alist) | ||
| 71 | "Compose a sequence of ascii chars into a symbol. | ||
| 72 | Regexp match data 0 points to the chars." | ||
| 73 | ;; Check that the chars should really be composed into a symbol. | ||
| 74 | (let* ((start (match-beginning 0)) | ||
| 75 | (end (match-end 0)) | ||
| 76 | (syntaxes (if (eq (char-syntax (char-after start)) ?w) | ||
| 77 | '(?w) '(?. ?\\)))) | ||
| 78 | (if (or (memq (char-syntax (or (char-before start) ?\ )) syntaxes) | ||
| 79 | (memq (char-syntax (or (char-after end) ?\ )) syntaxes) | ||
| 80 | (nth 8 (syntax-ppss))) | ||
| 81 | ;; No composition for you. Let's actually remove any composition | ||
| 82 | ;; we may have added earlier and which is now incorrect. | ||
| 83 | (remove-text-properties start end '(composition)) | ||
| 84 | ;; That's a symbol alright, so add the composition. | ||
| 85 | (compose-region start end (cdr (assoc (match-string 0) alist))))) | ||
| 86 | ;; Return nil because we're not adding any face property. | ||
| 87 | nil) | ||
| 88 | |||
| 89 | (defun prog-prettify-font-lock-symbols-keywords () | ||
| 90 | (when prog-prettify-symbols | ||
| 91 | (let ((alist (append prog-prettify-symbols-alist | ||
| 92 | (if (listp prog-prettify-symbols) | ||
| 93 | prog-prettify-symbols | ||
| 94 | nil)))) | ||
| 95 | `((,(regexp-opt (mapcar 'car alist) t) | ||
| 96 | (0 (prog--prettify-font-lock-compose-symbol ',alist))))))) | ||
| 97 | |||
| 98 | (defun prog-prettify-install (alist) | ||
| 99 | "Install prog-mode support to prettify symbols according to ALIST. | ||
| 100 | |||
| 101 | ALIST is in the format `((STRING . CHARACTER)...)' like | ||
| 102 | `prog-prettify-symbols'. | ||
| 103 | |||
| 104 | Internally, `font-lock-add-keywords' is called." | ||
| 105 | (setq-local prog-prettify-symbols-alist alist) | ||
| 106 | (let ((keywords (prog-prettify-font-lock-symbols-keywords))) | ||
| 107 | (if keywords (font-lock-add-keywords nil keywords)))) | ||
| 108 | |||
| 109 | ;;;###autoload | ||
| 110 | (define-derived-mode prog-mode fundamental-mode "Prog" | ||
| 111 | "Major mode for editing programming language source code." | ||
| 112 | (set (make-local-variable 'require-final-newline) mode-require-final-newline) | ||
| 113 | (set (make-local-variable 'parse-sexp-ignore-comments) t) | ||
| 114 | ;; Any programming language is always written left to right. | ||
| 115 | (setq bidi-paragraph-direction 'left-to-right)) | ||
| 116 | |||
| 117 | (provide 'prog-mode) | ||
| 118 | |||
| 119 | ;;; prog-mode.el ends here | ||
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 63bd9258d69..0f3c1504ee9 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el | |||
| @@ -1149,11 +1149,7 @@ VERSION is of the format (Major . Minor)" | |||
| 1149 | (set (make-local-variable 'comment-start) "%") | 1149 | (set (make-local-variable 'comment-start) "%") |
| 1150 | (set (make-local-variable 'comment-end) "") | 1150 | (set (make-local-variable 'comment-end) "") |
| 1151 | (set (make-local-variable 'comment-add) 1) | 1151 | (set (make-local-variable 'comment-add) 1) |
| 1152 | (set (make-local-variable 'comment-start-skip) | 1152 | (set (make-local-variable 'comment-start-skip) "\\(?:/\\*+ *\\|%%+ *\\)") |
| 1153 | ;; This complex regexp makes sure that comments cannot start | ||
| 1154 | ;; inside quoted atoms or strings | ||
| 1155 | (format "^\\(\\(%s\\|%s\\|[^\n\'\"%%]\\)*\\)\\(/\\*+ *\\|%%+ *\\)" | ||
| 1156 | prolog-quoted-atom-regexp prolog-string-regexp)) | ||
| 1157 | (set (make-local-variable 'parens-require-spaces) nil) | 1153 | (set (make-local-variable 'parens-require-spaces) nil) |
| 1158 | ;; Initialize Prolog system specific variables | 1154 | ;; Initialize Prolog system specific variables |
| 1159 | (dolist (var '(prolog-keywords prolog-types prolog-mode-specificators | 1155 | (dolist (var '(prolog-keywords prolog-types prolog-mode-specificators |
| @@ -1739,8 +1735,7 @@ This function must be called from the source code buffer." | |||
| 1739 | (real-file buffer-file-name) | 1735 | (real-file buffer-file-name) |
| 1740 | (command-string (prolog-build-prolog-command compilep file | 1736 | (command-string (prolog-build-prolog-command compilep file |
| 1741 | real-file first-line)) | 1737 | real-file first-line)) |
| 1742 | (process (get-process "prolog")) | 1738 | (process (get-process "prolog"))) |
| 1743 | (old-filter (process-filter process))) | ||
| 1744 | (with-current-buffer buffer | 1739 | (with-current-buffer buffer |
| 1745 | (delete-region (point-min) (point-max)) | 1740 | (delete-region (point-min) (point-max)) |
| 1746 | ;; FIXME: Wasn't this supposed to use prolog-inferior-mode? | 1741 | ;; FIXME: Wasn't this supposed to use prolog-inferior-mode? |
| @@ -1759,8 +1754,7 @@ This function must be called from the source code buffer." | |||
| 1759 | 'prolog-parse-sicstus-compilation-errors)) | 1754 | 'prolog-parse-sicstus-compilation-errors)) |
| 1760 | (setq buffer-read-only nil) | 1755 | (setq buffer-read-only nil) |
| 1761 | (insert command-string "\n")) | 1756 | (insert command-string "\n")) |
| 1762 | (save-selected-window | 1757 | (display-buffer buffer) |
| 1763 | (pop-to-buffer buffer)) | ||
| 1764 | (setq prolog-process-flag t | 1758 | (setq prolog-process-flag t |
| 1765 | prolog-consult-compile-output "" | 1759 | prolog-consult-compile-output "" |
| 1766 | prolog-consult-compile-first-line (if first-line (1- first-line) 0) | 1760 | prolog-consult-compile-first-line (if first-line (1- first-line) 0) |
| @@ -1954,20 +1948,6 @@ If COMPILEP is non-nil, compile, otherwise consult." | |||
| 1954 | ;;------------------------------------------------------------------- | 1948 | ;;------------------------------------------------------------------- |
| 1955 | 1949 | ||
| 1956 | ;; Auxiliary functions | 1950 | ;; Auxiliary functions |
| 1957 | (defun prolog-make-keywords-regexp (keywords &optional protect) | ||
| 1958 | "Create regexp from the list of strings KEYWORDS. | ||
| 1959 | If PROTECT is non-nil, surround the result regexp by word breaks." | ||
| 1960 | (let ((regexp | ||
| 1961 | (if (fboundp 'regexp-opt) | ||
| 1962 | ;; Emacs 20 | ||
| 1963 | ;; Avoid compile warnings under earlier versions by using eval | ||
| 1964 | (eval '(regexp-opt keywords)) | ||
| 1965 | ;; Older Emacsen | ||
| 1966 | (concat (mapconcat 'regexp-quote keywords "\\|"))) | ||
| 1967 | )) | ||
| 1968 | (if protect | ||
| 1969 | (concat "\\<\\(" regexp "\\)\\>") | ||
| 1970 | regexp))) | ||
| 1971 | 1951 | ||
| 1972 | (defun prolog-font-lock-object-matcher (bound) | 1952 | (defun prolog-font-lock-object-matcher (bound) |
| 1973 | "Find SICStus objects method name for font lock. | 1953 | "Find SICStus objects method name for font lock. |
| @@ -2084,20 +2064,16 @@ Argument BOUND is a buffer position limiting searching." | |||
| 2084 | (if (eq prolog-system 'mercury) | 2064 | (if (eq prolog-system 'mercury) |
| 2085 | (concat | 2065 | (concat |
| 2086 | "\\<\\(" | 2066 | "\\<\\(" |
| 2087 | (prolog-make-keywords-regexp prolog-keywords-i) | 2067 | (regexp-opt prolog-keywords-i) |
| 2088 | "\\|" | 2068 | "\\|" |
| 2089 | (prolog-make-keywords-regexp | 2069 | (regexp-opt |
| 2090 | prolog-determinism-specificators-i) | 2070 | prolog-determinism-specificators-i) |
| 2091 | "\\)\\>") | 2071 | "\\)\\>") |
| 2092 | (concat | 2072 | (concat |
| 2093 | "^[?:]- *\\(" | 2073 | "^[?:]- *\\(" |
| 2094 | (prolog-make-keywords-regexp prolog-keywords-i) | 2074 | (regexp-opt prolog-keywords-i) |
| 2095 | "\\)\\>")) | 2075 | "\\)\\>")) |
| 2096 | 1 prolog-builtin-face)) | 2076 | 1 prolog-builtin-face)) |
| 2097 | (quoted_atom (list prolog-quoted-atom-regexp | ||
| 2098 | 2 'font-lock-string-face 'append)) | ||
| 2099 | (string (list prolog-string-regexp | ||
| 2100 | 1 'font-lock-string-face 'append)) | ||
| 2101 | ;; SICStus specific patterns | 2077 | ;; SICStus specific patterns |
| 2102 | (sicstus-object-methods | 2078 | (sicstus-object-methods |
| 2103 | (if (eq prolog-system 'sicstus) | 2079 | (if (eq prolog-system 'sicstus) |
| @@ -2107,17 +2083,17 @@ Argument BOUND is a buffer position limiting searching." | |||
| 2107 | (types | 2083 | (types |
| 2108 | (if (eq prolog-system 'mercury) | 2084 | (if (eq prolog-system 'mercury) |
| 2109 | (list | 2085 | (list |
| 2110 | (prolog-make-keywords-regexp prolog-types-i t) | 2086 | (regexp-opt prolog-types-i 'words) |
| 2111 | 0 'font-lock-type-face))) | 2087 | 0 'font-lock-type-face))) |
| 2112 | (modes | 2088 | (modes |
| 2113 | (if (eq prolog-system 'mercury) | 2089 | (if (eq prolog-system 'mercury) |
| 2114 | (list | 2090 | (list |
| 2115 | (prolog-make-keywords-regexp prolog-mode-specificators-i t) | 2091 | (regexp-opt prolog-mode-specificators-i 'words) |
| 2116 | 0 'font-lock-constant-face))) | 2092 | 0 'font-lock-constant-face))) |
| 2117 | (directives | 2093 | (directives |
| 2118 | (if (eq prolog-system 'mercury) | 2094 | (if (eq prolog-system 'mercury) |
| 2119 | (list | 2095 | (list |
| 2120 | (prolog-make-keywords-regexp prolog-directives-i t) | 2096 | (regexp-opt prolog-directives-i 'words) |
| 2121 | 0 'prolog-warning-face))) | 2097 | 0 'prolog-warning-face))) |
| 2122 | ;; Inferior mode specific patterns | 2098 | ;; Inferior mode specific patterns |
| 2123 | (prompt | 2099 | (prompt |
| @@ -2211,8 +2187,6 @@ Argument BOUND is a buffer position limiting searching." | |||
| 2211 | (list | 2187 | (list |
| 2212 | head-predicates | 2188 | head-predicates |
| 2213 | head-predicates-1 | 2189 | head-predicates-1 |
| 2214 | quoted_atom | ||
| 2215 | string | ||
| 2216 | variables | 2190 | variables |
| 2217 | important-elements | 2191 | important-elements |
| 2218 | important-elements-1 | 2192 | important-elements-1 |