Mercurial > emacs
comparison lisp/calc/calc-aent.el @ 110162:6ea012a6203d
* lisp/calc/calc-aent.el (calcAlg-blink-matching-check): New fun, to replace
calcAlg-blink-matching-open.
(calc-alg-ent-map, calc-alg-ent-esc-map): Initialize in the declaration.
(calc-do-alg-entry): Only touch the part of the keymap that varies.
Use the new blink-matching-check-function.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 03 Sep 2010 13:26:08 +0200 |
parents | d150a25a0eb9 |
children | 417b1e4d63cd |
comparison
equal
deleted
inserted
replaced
110161:eb977e012180 | 110162:6ea012a6203d |
---|---|
313 (setq alg-exp (cdr alg-exp) | 313 (setq alg-exp (cdr alg-exp) |
314 nvals (cdr nvals) | 314 nvals (cdr nvals) |
315 calc-dollar-used 0))) | 315 calc-dollar-used 0))) |
316 (calc-handle-whys)))) | 316 (calc-handle-whys)))) |
317 | 317 |
318 (defvar calc-alg-ent-map nil | 318 (defvar calc-alg-ent-map |
319 (let ((map (make-sparse-keymap))) | |
320 (set-keymap-parent map minibuffer-local-map) | |
321 (define-key map "'" 'calcAlg-previous) | |
322 (define-key map "`" 'calcAlg-edit) | |
323 (define-key map "\C-m" 'calcAlg-enter) | |
324 (define-key map "\C-j" 'calcAlg-enter) | |
325 map) | |
319 "The keymap used for algebraic entry.") | 326 "The keymap used for algebraic entry.") |
320 | 327 |
321 (defvar calc-alg-ent-esc-map nil | 328 (defvar calc-alg-ent-esc-map |
329 (let ((map (make-keymap)) | |
330 (i 33)) | |
331 (set-keymap-parent map esc-map) | |
332 (while (< i 127) | |
333 (define-key map (vector i) 'calcAlg-escape) | |
334 (setq i (1+ i))) | |
335 map) | |
322 "The keymap used for escapes in algebraic entry.") | 336 "The keymap used for escapes in algebraic entry.") |
323 | 337 |
324 (defvar calc-alg-exp) | 338 (defvar calc-alg-exp) |
325 | 339 |
326 ;;;###autoload | 340 ;;;###autoload |
327 (defun calc-do-alg-entry (&optional initial prompt no-normalize history) | 341 (defun calc-do-alg-entry (&optional initial prompt no-normalize history) |
328 (let* ((calc-buffer (current-buffer)) | 342 (let* ((calc-buffer (current-buffer)) |
329 (blink-paren-function 'calcAlg-blink-matching-open) | 343 (blink-matching-check-function 'calcAlg-blink-matching-check) |
330 (calc-alg-exp 'error)) | 344 (calc-alg-exp 'error)) |
331 (unless calc-alg-ent-map | |
332 (setq calc-alg-ent-map (copy-keymap minibuffer-local-map)) | |
333 (define-key calc-alg-ent-map "'" 'calcAlg-previous) | |
334 (define-key calc-alg-ent-map "`" 'calcAlg-edit) | |
335 (define-key calc-alg-ent-map "\C-m" 'calcAlg-enter) | |
336 (define-key calc-alg-ent-map "\C-j" 'calcAlg-enter) | |
337 (let ((i 33)) | |
338 (setq calc-alg-ent-esc-map (copy-keymap esc-map)) | |
339 (while (< i 127) | |
340 (aset (nth 1 calc-alg-ent-esc-map) i 'calcAlg-escape) | |
341 (setq i (1+ i))))) | |
342 (define-key calc-alg-ent-map "\e" nil) | 345 (define-key calc-alg-ent-map "\e" nil) |
343 (if (eq calc-algebraic-mode 'total) | 346 (if (eq calc-algebraic-mode 'total) |
344 (define-key calc-alg-ent-map "\e" calc-alg-ent-esc-map) | 347 (define-key calc-alg-ent-map "\e" calc-alg-ent-esc-map) |
345 (define-key calc-alg-ent-map "\e+" 'calcAlg-plus-minus) | 348 (define-key calc-alg-ent-map "\e+" 'calcAlg-plus-minus) |
346 (define-key calc-alg-ent-map "\em" 'calcAlg-mod) | 349 (define-key calc-alg-ent-map "\em" 'calcAlg-mod) |
428 (setq calc-alg-exp (if (calc-minibuffer-contains "\\` *\\[ *\\'") | 431 (setq calc-alg-exp (if (calc-minibuffer-contains "\\` *\\[ *\\'") |
429 '((incomplete vec)) | 432 '((incomplete vec)) |
430 exp)) | 433 exp)) |
431 (exit-minibuffer)))) | 434 (exit-minibuffer)))) |
432 | 435 |
433 (defun calcAlg-blink-matching-open () | 436 (defun calcAlg-blink-matching-check (leftpt rightpt) |
434 (let ((rightpt (point)) | 437 (let ((rightchar (char-before rightpt)) |
435 (leftpt nil) | 438 (leftchar (if leftpt (char-after leftpt)))) |
436 (rightchar (preceding-char)) | |
437 leftchar | |
438 rightsyntax | |
439 leftsyntax) | |
440 (save-excursion | |
441 (condition-case () | |
442 (setq leftpt (scan-sexps rightpt -1) | |
443 leftchar (char-after leftpt)) | |
444 (error nil))) | |
445 (if (and leftpt | 439 (if (and leftpt |
446 (or (and (= rightchar ?\)) | 440 (or (and (= rightchar ?\)) |
447 (= leftchar ?\[)) | 441 (= leftchar ?\[)) |
448 (and (= rightchar ?\]) | 442 (and (= rightchar ?\]) |
449 (= leftchar ?\())) | 443 (= leftchar ?\())) |
450 (save-excursion | 444 (save-excursion |
451 (goto-char leftpt) | 445 (goto-char leftpt) |
452 (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)"))) | 446 (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)"))) |
453 (let ((leftsaved (aref (syntax-table) leftchar)) | 447 ;; [2..5) perfectly valid! |
454 (rightsaved (aref (syntax-table) rightchar))) | 448 nil |
455 (unwind-protect | 449 (blink-matching-check-mismatch leftpt rightpt)))) |
456 (progn | |
457 (cond ((= leftchar ?\[) | |
458 (aset (syntax-table) leftchar (cons 4 ?\))) | |
459 (aset (syntax-table) rightchar (cons 5 ?\[))) | |
460 (t | |
461 (aset (syntax-table) leftchar (cons 4 ?\])) | |
462 (aset (syntax-table) rightchar (cons 5 ?\()))) | |
463 (blink-matching-open)) | |
464 (aset (syntax-table) leftchar leftsaved) | |
465 (aset (syntax-table) rightchar rightsaved))) | |
466 (blink-matching-open)))) | |
467 | 450 |
468 ;;;###autoload | 451 ;;;###autoload |
469 (defun calc-alg-digit-entry () | 452 (defun calc-alg-digit-entry () |
470 (calc-alg-entry | 453 (calc-alg-entry |
471 (cond ((eq last-command-event ?e) | 454 (cond ((eq last-command-event ?e) |