diff options
| author | Joakim Verona | 2013-04-17 08:30:36 +0200 |
|---|---|---|
| committer | Joakim Verona | 2013-04-17 08:30:36 +0200 |
| commit | 86dfe9dc6768ae0e932b4a29ce7da5ceb613855a (patch) | |
| tree | 8a835d1e7115fc80ca68738f64a9559b5a4115bc /lisp | |
| parent | 70766401dd70a2b8ee380f4304f94c989a5a15f1 (diff) | |
| parent | 083850a6a195c5d536bd4cd344b5917b225597cc (diff) | |
| download | emacs-86dfe9dc6768ae0e932b4a29ce7da5ceb613855a.tar.gz emacs-86dfe9dc6768ae0e932b4a29ce7da5ceb613855a.zip | |
auto upstream
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 46 | ||||
| -rw-r--r-- | lisp/abbrev.el | 42 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/gnus/shr.el | 17 | ||||
| -rw-r--r-- | lisp/progmodes/gdb-mi.el | 18 | ||||
| -rw-r--r-- | lisp/progmodes/octave-mod.el | 7 | ||||
| -rw-r--r-- | lisp/progmodes/python.el | 100 | ||||
| -rw-r--r-- | lisp/vc/vc-hg.el | 2 |
8 files changed, 192 insertions, 47 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f62dff32008..11666c60c74 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,49 @@ | |||
| 1 | 2013-04-17 Fabián Ezequiel Gallina <fgallina@gnu.org> | ||
| 2 | |||
| 3 | New defun movement commands. | ||
| 4 | * progmodes/python.el (python-nav--syntactically) | ||
| 5 | (python-nav--forward-defun, python-nav-backward-defun) | ||
| 6 | (python-nav-forward-defun): New functions. | ||
| 7 | |||
| 8 | 2013-04-17 Fabián Ezequiel Gallina <fgallina@gnu.org> | ||
| 9 | |||
| 10 | * progmodes/python.el (python-syntax--context-compiler-macro): New defun. | ||
| 11 | (python-syntax-context): Use named compiler-macro for backwards | ||
| 12 | compatibility with Emacs 24.x. | ||
| 13 | |||
| 14 | 2013-04-17 Leo Liu <sdl.web@gmail.com> | ||
| 15 | |||
| 16 | * progmodes/octave-mod.el (octave-mode-map): Fix key binding to | ||
| 17 | octave-hide-process-buffer. | ||
| 18 | |||
| 19 | 2013-04-17 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 20 | |||
| 21 | * vc/vc-hg.el (vc-hg-annotate-re): Disallow ": " in file names | ||
| 22 | (bug#14216). | ||
| 23 | |||
| 24 | 2013-04-17 Jean-Philippe Gravel <jpgravel@gmail.com> | ||
| 25 | |||
| 26 | * progmodes/gdb-mi.el (gdbmi-bnf-incomplete-record-result): | ||
| 27 | Fix adjustment of offset when receiving incomplete responses from GDB | ||
| 28 | (bug#14129). | ||
| 29 | |||
| 30 | 2013-04-16 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 31 | |||
| 32 | * progmodes/python.el (python-mode-skeleton-abbrev-table): Rename from | ||
| 33 | python-mode-abbrev-table. | ||
| 34 | (python-skeleton-define): Adjust accordingly. | ||
| 35 | (python-mode-abbrev-table): New table that inherits from it so that | ||
| 36 | python-skeleton-autoinsert does not affect non-skeleton abbrevs. | ||
| 37 | |||
| 38 | * abbrev.el (abbrev--symbol): New function, extracted from abbrev-symbol. | ||
| 39 | (abbrev-symbol): Use it. | ||
| 40 | (abbrev--before-point): Use it since we already handle inheritance. | ||
| 41 | |||
| 42 | 2013-04-16 Leo Liu <sdl.web@gmail.com> | ||
| 43 | |||
| 44 | * progmodes/octave-mod.el (octave-mode-map): Remove redundant key | ||
| 45 | binding to info-lookup-symbol. | ||
| 46 | |||
| 1 | 2013-04-16 Juanma Barranquero <lekktu@gmail.com> | 47 | 2013-04-16 Juanma Barranquero <lekktu@gmail.com> |
| 2 | 48 | ||
| 3 | * minibuffer.el (completion--twq-all): | 49 | * minibuffer.el (completion--twq-all): |
diff --git a/lisp/abbrev.el b/lisp/abbrev.el index bd09653103f..cc7ebe489f7 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el | |||
| @@ -669,6 +669,26 @@ either a single abbrev table or a list of abbrev tables." | |||
| 669 | tables)))) | 669 | tables)))) |
| 670 | 670 | ||
| 671 | 671 | ||
| 672 | (defun abbrev--symbol (abbrev table) | ||
| 673 | "Return the symbol representing abbrev named ABBREV in TABLE. | ||
| 674 | This symbol's name is ABBREV, but it is not the canonical symbol of that name; | ||
| 675 | it is interned in the abbrev-table TABLE rather than the normal obarray. | ||
| 676 | The value is nil if that abbrev is not defined." | ||
| 677 | (let* ((case-fold (not (abbrev-table-get table :case-fixed))) | ||
| 678 | ;; In case the table doesn't set :case-fixed but some of the | ||
| 679 | ;; abbrevs do, we have to be careful. | ||
| 680 | (sym | ||
| 681 | ;; First try without case-folding. | ||
| 682 | (or (intern-soft abbrev table) | ||
| 683 | (when case-fold | ||
| 684 | ;; We didn't find any abbrev, try case-folding. | ||
| 685 | (let ((sym (intern-soft (downcase abbrev) table))) | ||
| 686 | ;; Only use it if it doesn't require :case-fixed. | ||
| 687 | (and sym (not (abbrev-get sym :case-fixed)) | ||
| 688 | sym)))))) | ||
| 689 | (if (symbol-value sym) | ||
| 690 | sym))) | ||
| 691 | |||
| 672 | (defun abbrev-symbol (abbrev &optional table) | 692 | (defun abbrev-symbol (abbrev &optional table) |
| 673 | "Return the symbol representing abbrev named ABBREV. | 693 | "Return the symbol representing abbrev named ABBREV. |
| 674 | This symbol's name is ABBREV, but it is not the canonical symbol of that name; | 694 | This symbol's name is ABBREV, but it is not the canonical symbol of that name; |
| @@ -678,23 +698,11 @@ Optional second arg TABLE is abbrev table to look it up in. | |||
| 678 | The default is to try buffer's mode-specific abbrev table, then global table." | 698 | The default is to try buffer's mode-specific abbrev table, then global table." |
| 679 | (let ((tables (abbrev--active-tables table)) | 699 | (let ((tables (abbrev--active-tables table)) |
| 680 | sym) | 700 | sym) |
| 681 | (while (and tables (not (symbol-value sym))) | 701 | (while (and tables (not sym)) |
| 682 | (let* ((table (pop tables)) | 702 | (let* ((table (pop tables))) |
| 683 | (case-fold (not (abbrev-table-get table :case-fixed)))) | ||
| 684 | (setq tables (append (abbrev-table-get table :parents) tables)) | 703 | (setq tables (append (abbrev-table-get table :parents) tables)) |
| 685 | ;; In case the table doesn't set :case-fixed but some of the | 704 | (setq sym (abbrev--symbol abbrev table)))) |
| 686 | ;; abbrevs do, we have to be careful. | 705 | sym)) |
| 687 | (setq sym | ||
| 688 | ;; First try without case-folding. | ||
| 689 | (or (intern-soft abbrev table) | ||
| 690 | (when case-fold | ||
| 691 | ;; We didn't find any abbrev, try case-folding. | ||
| 692 | (let ((sym (intern-soft (downcase abbrev) table))) | ||
| 693 | ;; Only use it if it doesn't require :case-fixed. | ||
| 694 | (and sym (not (abbrev-get sym :case-fixed)) | ||
| 695 | sym))))))) | ||
| 696 | (if (symbol-value sym) | ||
| 697 | sym))) | ||
| 698 | 706 | ||
| 699 | 707 | ||
| 700 | (defun abbrev-expansion (abbrev &optional table) | 708 | (defun abbrev-expansion (abbrev &optional table) |
| @@ -748,7 +756,7 @@ then ABBREV is looked up in that table only." | |||
| 748 | (setq start (match-beginning 1)) | 756 | (setq start (match-beginning 1)) |
| 749 | (setq end (match-end 1))))) | 757 | (setq end (match-end 1))))) |
| 750 | (setq name (buffer-substring start end)) | 758 | (setq name (buffer-substring start end)) |
| 751 | (let ((abbrev (abbrev-symbol name table))) | 759 | (let ((abbrev (abbrev--symbol name table))) |
| 752 | (when abbrev | 760 | (when abbrev |
| 753 | (setq enable-fun (abbrev-get abbrev :enable-function)) | 761 | (setq enable-fun (abbrev-get abbrev :enable-function)) |
| 754 | (and (or (not enable-fun) (funcall enable-fun)) | 762 | (and (or (not enable-fun) (funcall enable-fun)) |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index cc7897accb6..144b6482b9d 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2013-04-16 David Edmondson <dme@dme.org> | ||
| 2 | |||
| 3 | Support <img src="data:...">. | ||
| 4 | |||
| 5 | * shr.el (shr-image-from-data): New function. | ||
| 6 | (shr-tag-img): Use it. | ||
| 7 | |||
| 1 | 2013-04-14 Andrew Cohen <cohen@bu.edu> | 8 | 2013-04-14 Andrew Cohen <cohen@bu.edu> |
| 2 | 9 | ||
| 3 | * nnir.el (nnir-request-set-mark): Make sure we are in the right | 10 | * nnir.el (nnir-request-set-mark): Make sure we are in the right |
diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el index 5df5297ba8a..293ba2445e9 100644 --- a/lisp/gnus/shr.el +++ b/lisp/gnus/shr.el | |||
| @@ -593,6 +593,17 @@ size, and full-buffer size." | |||
| 593 | (put-text-property start (point) type value)))))))))) | 593 | (put-text-property start (point) type value)))))))))) |
| 594 | (kill-buffer image-buffer))) | 594 | (kill-buffer image-buffer))) |
| 595 | 595 | ||
| 596 | (defun shr-image-from-data (data) | ||
| 597 | "Return an image from the data: URI content DATA." | ||
| 598 | (when (string-match | ||
| 599 | "\\(\\([^/;,]+\\(/[^;,]+\\)?\\)\\(;[^;,]+\\)*\\)?,\\(.*\\)" | ||
| 600 | data) | ||
| 601 | (let ((param (match-string 4 data)) | ||
| 602 | (payload (url-unhex-string (match-string 5 data)))) | ||
| 603 | (when (string-match "^.*\\(;[ \t]*base64\\)$" param) | ||
| 604 | (setq payload (base64-decode-string payload))) | ||
| 605 | payload))) | ||
| 606 | |||
| 596 | (defun shr-put-image (data alt &optional flags) | 607 | (defun shr-put-image (data alt &optional flags) |
| 597 | "Put image DATA with a string ALT. Return image." | 608 | "Put image DATA with a string ALT. Return image." |
| 598 | (if (display-graphic-p) | 609 | (if (display-graphic-p) |
| @@ -983,6 +994,12 @@ ones, in case fg and bg are nil." | |||
| 983 | ;; Ignore zero-sized or single-pixel images. | 994 | ;; Ignore zero-sized or single-pixel images. |
| 984 | ) | 995 | ) |
| 985 | ((and (not shr-inhibit-images) | 996 | ((and (not shr-inhibit-images) |
| 997 | (string-match "\\`data:" url)) | ||
| 998 | (let ((image (shr-image-from-data (substring url (match-end 0))))) | ||
| 999 | (if image | ||
| 1000 | (funcall shr-put-image-function image alt) | ||
| 1001 | (insert alt)))) | ||
| 1002 | ((and (not shr-inhibit-images) | ||
| 986 | (string-match "\\`cid:" url)) | 1003 | (string-match "\\`cid:" url)) |
| 987 | (let ((url (substring url (match-end 0))) | 1004 | (let ((url (substring url (match-end 0))) |
| 988 | image) | 1005 | image) |
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 8ba2822c3a3..f5e1abdd546 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el | |||
| @@ -2149,19 +2149,23 @@ the end of the current result or async record is reached." | |||
| 2149 | ;; Search the data stream for the end of the current record: | 2149 | ;; Search the data stream for the end of the current record: |
| 2150 | (let* ((newline-pos (string-match "\n" gud-marker-acc gdbmi-bnf-offset)) | 2150 | (let* ((newline-pos (string-match "\n" gud-marker-acc gdbmi-bnf-offset)) |
| 2151 | (is-progressive (equal (cdr class-command) 'progressive)) | 2151 | (is-progressive (equal (cdr class-command) 'progressive)) |
| 2152 | (is-complete (not (null newline-pos))) | 2152 | (is-complete (not (null newline-pos))) |
| 2153 | result-str) | 2153 | result-str) |
| 2154 | |||
| 2155 | (when gdbmi-debug-mode | ||
| 2156 | (message "gdbmi-bnf-incomplete-record-result: %s" | ||
| 2157 | (substring gud-marker-acc gdbmi-bnf-offset newline-pos))) | ||
| 2154 | 2158 | ||
| 2155 | ;; Update the gdbmi-bnf-offset only if the current chunk of data can | 2159 | ;; Update the gdbmi-bnf-offset only if the current chunk of data can |
| 2156 | ;; be processed by the class-command handler: | 2160 | ;; be processed by the class-command handler: |
| 2157 | (when (or is-complete is-progressive) | 2161 | (when (or is-complete is-progressive) |
| 2158 | (setq result-str | 2162 | (setq result-str |
| 2159 | (substring gud-marker-acc gdbmi-bnf-offset newline-pos)) | 2163 | (substring gud-marker-acc gdbmi-bnf-offset newline-pos)) |
| 2160 | (setq gdbmi-bnf-offset (+ 1 newline-pos))) | ||
| 2161 | 2164 | ||
| 2162 | (if gdbmi-debug-mode | 2165 | ;; Move gdbmi-bnf-offset past the end of the chunk. |
| 2163 | (message "gdbmi-bnf-incomplete-record-result: %s" | 2166 | (setq gdbmi-bnf-offset (+ gdbmi-bnf-offset (length result-str))) |
| 2164 | (substring gud-marker-acc gdbmi-bnf-offset newline-pos))) | 2167 | (when newline-pos |
| 2168 | (setq gdbmi-bnf-offset (1+ gdbmi-bnf-offset)))) | ||
| 2165 | 2169 | ||
| 2166 | ;; Update the parsing state before invoking the handler in class-command | 2170 | ;; Update the parsing state before invoking the handler in class-command |
| 2167 | ;; to make sure it's not left in an invalid state if the handler was | 2171 | ;; to make sure it's not left in an invalid state if the handler was |
diff --git a/lisp/progmodes/octave-mod.el b/lisp/progmodes/octave-mod.el index 806afe5a537..4683186e603 100644 --- a/lisp/progmodes/octave-mod.el +++ b/lisp/progmodes/octave-mod.el | |||
| @@ -223,22 +223,19 @@ parenthetical grouping.") | |||
| 223 | (define-key map "\C-c]" 'smie-close-block) | 223 | (define-key map "\C-c]" 'smie-close-block) |
| 224 | (define-key map "\C-c/" 'smie-close-block) | 224 | (define-key map "\C-c/" 'smie-close-block) |
| 225 | (define-key map "\C-c\C-f" 'octave-insert-defun) | 225 | (define-key map "\C-c\C-f" 'octave-insert-defun) |
| 226 | ;; FIXME: free C-h so it can do the describe-prefix-bindings. | ||
| 227 | (define-key map "\C-c\C-h" 'info-lookup-symbol) | ||
| 228 | (define-key map "\C-c\C-il" 'octave-send-line) | 226 | (define-key map "\C-c\C-il" 'octave-send-line) |
| 229 | (define-key map "\C-c\C-ib" 'octave-send-block) | 227 | (define-key map "\C-c\C-ib" 'octave-send-block) |
| 230 | (define-key map "\C-c\C-if" 'octave-send-defun) | 228 | (define-key map "\C-c\C-if" 'octave-send-defun) |
| 231 | (define-key map "\C-c\C-ir" 'octave-send-region) | 229 | (define-key map "\C-c\C-ir" 'octave-send-region) |
| 232 | (define-key map "\C-c\C-is" 'octave-show-process-buffer) | 230 | (define-key map "\C-c\C-is" 'octave-show-process-buffer) |
| 233 | (define-key map "\C-c\C-ih" 'octave-hide-process-buffer) | 231 | (define-key map "\C-c\C-iq" 'octave-hide-process-buffer) |
| 234 | (define-key map "\C-c\C-ik" 'octave-kill-process) | 232 | (define-key map "\C-c\C-ik" 'octave-kill-process) |
| 235 | (define-key map "\C-c\C-i\C-l" 'octave-send-line) | 233 | (define-key map "\C-c\C-i\C-l" 'octave-send-line) |
| 236 | (define-key map "\C-c\C-i\C-b" 'octave-send-block) | 234 | (define-key map "\C-c\C-i\C-b" 'octave-send-block) |
| 237 | (define-key map "\C-c\C-i\C-f" 'octave-send-defun) | 235 | (define-key map "\C-c\C-i\C-f" 'octave-send-defun) |
| 238 | (define-key map "\C-c\C-i\C-r" 'octave-send-region) | 236 | (define-key map "\C-c\C-i\C-r" 'octave-send-region) |
| 239 | (define-key map "\C-c\C-i\C-s" 'octave-show-process-buffer) | 237 | (define-key map "\C-c\C-i\C-s" 'octave-show-process-buffer) |
| 240 | ;; FIXME: free C-h so it can do the describe-prefix-bindings. | 238 | (define-key map "\C-c\C-i\C-q" 'octave-hide-process-buffer) |
| 241 | (define-key map "\C-c\C-i\C-h" 'octave-hide-process-buffer) | ||
| 242 | (define-key map "\C-c\C-i\C-k" 'octave-kill-process) | 239 | (define-key map "\C-c\C-i\C-k" 'octave-kill-process) |
| 243 | map) | 240 | map) |
| 244 | "Keymap used in Octave mode.") | 241 | "Keymap used in Octave mode.") |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index d1009534e49..1d7cf02ca5a 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -368,22 +368,24 @@ This variant of `rx' supports common python named REGEXPS." | |||
| 368 | 368 | ||
| 369 | ;;; Font-lock and syntax | 369 | ;;; Font-lock and syntax |
| 370 | 370 | ||
| 371 | (eval-when-compile | ||
| 372 | (defun python-syntax--context-compiler-macro (form type &optional syntax-ppss) | ||
| 373 | (pcase type | ||
| 374 | (`'comment | ||
| 375 | `(let ((ppss (or ,syntax-ppss (syntax-ppss)))) | ||
| 376 | (and (nth 4 ppss) (nth 8 ppss)))) | ||
| 377 | (`'string | ||
| 378 | `(let ((ppss (or ,syntax-ppss (syntax-ppss)))) | ||
| 379 | (and (nth 3 ppss) (nth 8 ppss)))) | ||
| 380 | (`'paren | ||
| 381 | `(nth 1 (or ,syntax-ppss (syntax-ppss)))) | ||
| 382 | (_ form)))) | ||
| 383 | |||
| 371 | (defun python-syntax-context (type &optional syntax-ppss) | 384 | (defun python-syntax-context (type &optional syntax-ppss) |
| 372 | "Return non-nil if point is on TYPE using SYNTAX-PPSS. | 385 | "Return non-nil if point is on TYPE using SYNTAX-PPSS. |
| 373 | TYPE can be `comment', `string' or `paren'. It returns the start | 386 | TYPE can be `comment', `string' or `paren'. It returns the start |
| 374 | character address of the specified TYPE." | 387 | character address of the specified TYPE." |
| 375 | (declare (compiler-macro | 388 | (declare (compiler-macro python-syntax--context-compiler-macro)) |
| 376 | (lambda (form) | ||
| 377 | (pcase type | ||
| 378 | (`'comment | ||
| 379 | `(let ((ppss (or ,syntax-ppss (syntax-ppss)))) | ||
| 380 | (and (nth 4 ppss) (nth 8 ppss)))) | ||
| 381 | (`'string | ||
| 382 | `(let ((ppss (or ,syntax-ppss (syntax-ppss)))) | ||
| 383 | (and (nth 3 ppss) (nth 8 ppss)))) | ||
| 384 | (`'paren | ||
| 385 | `(nth 1 (or ,syntax-ppss (syntax-ppss)))) | ||
| 386 | (_ form))))) | ||
| 387 | (let ((ppss (or syntax-ppss (syntax-ppss)))) | 389 | (let ((ppss (or syntax-ppss (syntax-ppss)))) |
| 388 | (pcase type | 390 | (pcase type |
| 389 | (`comment (and (nth 4 ppss) (nth 8 ppss))) | 391 | (`comment (and (nth 4 ppss) (nth 8 ppss))) |
| @@ -1190,6 +1192,66 @@ Returns nil if point is not in a def or class." | |||
| 1190 | ;; Ensure point moves forward. | 1192 | ;; Ensure point moves forward. |
| 1191 | (and (> beg-pos (point)) (goto-char beg-pos))))) | 1193 | (and (> beg-pos (point)) (goto-char beg-pos))))) |
| 1192 | 1194 | ||
| 1195 | (defun python-nav--syntactically (fn poscompfn &optional pos) | ||
| 1196 | "Move to point using FN ignoring non-code or paren context. | ||
| 1197 | FN must take no arguments and could be used to set match-data. | ||
| 1198 | POSCOMPFN is a two arguments function used to compare current and | ||
| 1199 | previous point after it is moved using FN, this is normally a | ||
| 1200 | less-than or greater-than comparison. Optional argument POS is | ||
| 1201 | internally used in recursive calls and should not be explicitly | ||
| 1202 | passed." | ||
| 1203 | (let* ((newpos | ||
| 1204 | (and (funcall fn) | ||
| 1205 | (save-match-data | ||
| 1206 | (and | ||
| 1207 | (not (python-syntax-context-type)) | ||
| 1208 | (point-marker))))) | ||
| 1209 | (current-match-data (match-data))) | ||
| 1210 | (cond ((or (and (not pos) newpos) | ||
| 1211 | (and pos newpos (funcall poscompfn newpos pos))) | ||
| 1212 | (set-match-data current-match-data) | ||
| 1213 | (point-marker)) | ||
| 1214 | ((and (not pos) (not newpos)) nil) | ||
| 1215 | (t (python-nav--syntactically | ||
| 1216 | fn poscompfn (point-marker)))))) | ||
| 1217 | |||
| 1218 | (defun python-nav--forward-defun (arg) | ||
| 1219 | "Internal implementation of python-nav-{backward,forward}-defun. | ||
| 1220 | Uses ARG to define which function to call, and how many times | ||
| 1221 | repeat it." | ||
| 1222 | (let ((found)) | ||
| 1223 | (while (and (> arg 0) | ||
| 1224 | (setq found | ||
| 1225 | (python-nav--syntactically | ||
| 1226 | (lambda () | ||
| 1227 | (re-search-forward | ||
| 1228 | python-nav-beginning-of-defun-regexp nil t)) | ||
| 1229 | '>))) | ||
| 1230 | (setq arg (1- arg))) | ||
| 1231 | (while (and (< arg 0) | ||
| 1232 | (setq found | ||
| 1233 | (python-nav--syntactically | ||
| 1234 | (lambda () | ||
| 1235 | (re-search-backward | ||
| 1236 | python-nav-beginning-of-defun-regexp nil t)) | ||
| 1237 | '<))) | ||
| 1238 | (setq arg (1+ arg))) | ||
| 1239 | found)) | ||
| 1240 | |||
| 1241 | (defun python-nav-backward-defun (&optional arg) | ||
| 1242 | "Navigate to closer defun backward ARG times. | ||
| 1243 | Unlikely `python-nav-beginning-of-defun' this doesn't care about | ||
| 1244 | nested definitions." | ||
| 1245 | (interactive "^p") | ||
| 1246 | (python-nav--forward-defun (- (or arg 1)))) | ||
| 1247 | |||
| 1248 | (defun python-nav-forward-defun (&optional arg) | ||
| 1249 | "Navigate to closer defun forward ARG times. | ||
| 1250 | Unlikely `python-nav-beginning-of-defun' this doesn't care about | ||
| 1251 | nested definitions." | ||
| 1252 | (interactive "^p") | ||
| 1253 | (python-nav--forward-defun (or arg 1))) | ||
| 1254 | |||
| 1193 | (defun python-nav-beginning-of-statement () | 1255 | (defun python-nav-beginning-of-statement () |
| 1194 | "Move to start of current statement." | 1256 | "Move to start of current statement." |
| 1195 | (interactive "^") | 1257 | (interactive "^") |
| @@ -2654,8 +2716,8 @@ the if condition." | |||
| 2654 | (defvar python-skeleton-available '() | 2716 | (defvar python-skeleton-available '() |
| 2655 | "Internal list of available skeletons.") | 2717 | "Internal list of available skeletons.") |
| 2656 | 2718 | ||
| 2657 | (define-abbrev-table 'python-mode-abbrev-table () | 2719 | (define-abbrev-table 'python-mode-skeleton-abbrev-table () |
| 2658 | "Abbrev table for Python mode." | 2720 | "Abbrev table for Python mode skeletons." |
| 2659 | :case-fixed t | 2721 | :case-fixed t |
| 2660 | ;; Allow / inside abbrevs. | 2722 | ;; Allow / inside abbrevs. |
| 2661 | :regexp "\\(?:^\\|[^/]\\)\\<\\([[:word:]/]+\\)\\W*" | 2723 | :regexp "\\(?:^\\|[^/]\\)\\<\\([[:word:]/]+\\)\\W*" |
| @@ -2668,13 +2730,13 @@ the if condition." | |||
| 2668 | (defmacro python-skeleton-define (name doc &rest skel) | 2730 | (defmacro python-skeleton-define (name doc &rest skel) |
| 2669 | "Define a `python-mode' skeleton using NAME DOC and SKEL. | 2731 | "Define a `python-mode' skeleton using NAME DOC and SKEL. |
| 2670 | The skeleton will be bound to python-skeleton-NAME and will | 2732 | The skeleton will be bound to python-skeleton-NAME and will |
| 2671 | be added to `python-mode-abbrev-table'." | 2733 | be added to `python-mode-skeleton-abbrev-table'." |
| 2672 | (declare (indent 2)) | 2734 | (declare (indent 2)) |
| 2673 | (let* ((name (symbol-name name)) | 2735 | (let* ((name (symbol-name name)) |
| 2674 | (function-name (intern (concat "python-skeleton-" name)))) | 2736 | (function-name (intern (concat "python-skeleton-" name)))) |
| 2675 | `(progn | 2737 | `(progn |
| 2676 | (define-abbrev python-mode-abbrev-table ,name "" ',function-name | 2738 | (define-abbrev python-mode-skeleton-abbrev-table |
| 2677 | :system t) | 2739 | ,name "" ',function-name :system t) |
| 2678 | (setq python-skeleton-available | 2740 | (setq python-skeleton-available |
| 2679 | (cons ',function-name python-skeleton-available)) | 2741 | (cons ',function-name python-skeleton-available)) |
| 2680 | (define-skeleton ,function-name | 2742 | (define-skeleton ,function-name |
| @@ -2682,6 +2744,10 @@ be added to `python-mode-abbrev-table'." | |||
| 2682 | (format "Insert %s statement." name)) | 2744 | (format "Insert %s statement." name)) |
| 2683 | ,@skel)))) | 2745 | ,@skel)))) |
| 2684 | 2746 | ||
| 2747 | (define-abbrev-table 'python-mode-abbrev-table () | ||
| 2748 | "Abbrev table for Python mode." | ||
| 2749 | :parents (list python-mode-skeleton-abbrev-table)) | ||
| 2750 | |||
| 2685 | (defmacro python-define-auxiliary-skeleton (name doc &optional &rest skel) | 2751 | (defmacro python-define-auxiliary-skeleton (name doc &optional &rest skel) |
| 2686 | "Define a `python-mode' auxiliary skeleton using NAME DOC and SKEL. | 2752 | "Define a `python-mode' auxiliary skeleton using NAME DOC and SKEL. |
| 2687 | The skeleton will be bound to python-skeleton-NAME." | 2753 | The skeleton will be bound to python-skeleton-NAME." |
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index f39ef568e8b..033e78c20cd 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el | |||
| @@ -357,7 +357,7 @@ Optional arg REVISION is a revision to annotate from." | |||
| 357 | ;;215 Wed Jun 20 21:22:58 2007 -0700 foo.c: CONTENTS | 357 | ;;215 Wed Jun 20 21:22:58 2007 -0700 foo.c: CONTENTS |
| 358 | ;; i.e. VERSION_NUMBER DATE FILENAME: CONTENTS | 358 | ;; i.e. VERSION_NUMBER DATE FILENAME: CONTENTS |
| 359 | (defconst vc-hg-annotate-re | 359 | (defconst vc-hg-annotate-re |
| 360 | "^[ \t]*\\([0-9]+\\) \\(.\\{30\\}\\)\\(?:\\(: \\)\\|\\(?: +\\(.+\\): \\)\\)") | 360 | "^[ \t]*\\([0-9]+\\) \\(.\\{30\\}\\)\\(?:\\(: \\)\\|\\(?: +\\([^:\n]+\\(?::\\(?:[^: \n][^:\n]*\\)?\\)*\\): \\)\\)") |
| 361 | 361 | ||
| 362 | (defun vc-hg-annotate-time () | 362 | (defun vc-hg-annotate-time () |
| 363 | (when (looking-at vc-hg-annotate-re) | 363 | (when (looking-at vc-hg-annotate-re) |