Changeset 6702


Ignore:
Timestamp:
Jun 12, 2007, 12:42:36 PM (17 years ago)
Author:
Gary Byers
Message:

New self-insert; echo-area stuff.


File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ide-1.0/ccl/hemlock/src/interp.lisp

    r6656 r6702  
    423423
    424424
     425(defvar *self-insert-command* nil)
     426
     427(defun self-insert-command ()
     428  (or *self-insert-command*
     429      (setq *self-insert-command* (getstring "Self Insert" *command-names*))))
     430
    425431   
    426432;;; %COMMAND-LOOP  --  Internal
     
    450456        (let* ((temporary-object-pool (allocate-temporary-object-pool)))
    451457          (unwind-protect
    452                (progn
    453                  (unless (eq *current-buffer* *echo-area-buffer*)
    454                    (unless (or (zerop (length cmd))
    455                                (not (value hemlock::key-echo-delay)))
    456                      (editor-sleep (value hemlock::key-echo-delay))
    457                      (unless (listen-editor-input *editor-input*)
    458                        (clear-echo-area)
    459                        (dotimes (i (length cmd))
    460                          (hemlock-ext:print-pretty-key (aref cmd i) *echo-area-stream*)
    461                          (write-char #\space *echo-area-stream*)))))
    462                  (vector-push-extend (get-key-event *editor-input*) cmd)
    463                  (multiple-value-bind (trans-result prefix-p)
    464                      (translate-key cmd trans)
    465                    (multiple-value-bind (res t-bindings)
    466                        (get-current-binding trans-result)
    467                      (etypecase res
    468                        (command
    469                         (let ((punt t))
    470                           (unless (eq *current-buffer* *echo-area-buffer*)
    471                             (clear-echo-area))
    472                           (catch 'command-loop-catcher
    473                             (let* ((doc (buffer-document *current-buffer*)))
    474                               (unwind-protect
    475                                    (progn
    476                                      (when doc (hi::document-begin-editing doc))
    477                                      (dolist (c t-bindings)
    478                                        (funcall *invoke-hook* c *prefix-argument*))
    479                                      (funcall *invoke-hook* res *prefix-argument*)
    480                                      (setf punt nil))
    481                                 (when doc (hi::document-end-editing doc)))))
    482                           (when punt (invoke-hook hemlock::command-abort-hook)))
    483                         (if *command-type-set*
    484                           (setq *command-type-set* nil)
    485                           (setq *last-command-type* nil))
    486                         (if *prefix-argument-supplied*
    487                           (setq *prefix-argument-supplied* nil)
    488                           (setq *prefix-argument* nil))
    489                         (setf (fill-pointer cmd) 0))
    490                        (null
    491                         (unless prefix-p
    492                           (beep)
    493                           (setq *prefix-argument* nil)
    494                           (setf (fill-pointer cmd) 0)))
    495                        (hash-table)))))
    496             (free-temporary-objects temporary-object-pool)))))))
     458               (multiple-value-bind (key self-insert)
     459                   (get-key-event *editor-input*)
     460                 (progn
     461                   (unless (eq *current-buffer* *echo-area-buffer*)
     462                     (when (buffer-modified *echo-area-buffer*)
     463                       (clear-echo-area))
     464                     (unless (or (zerop (length cmd))
     465                                 (not (value hemlock::key-echo-delay)))
     466                       (editor-sleep (value hemlock::key-echo-delay))
     467                       (unless (listen-editor-input *editor-input*)
     468                         (clear-echo-area)
     469                         (dotimes (i (length cmd))
     470                           (hemlock-ext:print-pretty-key (aref cmd i) *echo-area-stream*)
     471                           (write-char #\space *echo-area-stream*)))))
     472                   (vector-push-extend key cmd)
     473                   (multiple-value-bind (trans-result prefix-p)
     474                       (unless self-insert (translate-key cmd trans))
     475                     (multiple-value-bind (res t-bindings)
     476                         (if self-insert
     477                           (self-insert-command)
     478                           (get-current-binding trans-result))
     479                       (etypecase res
     480                         (command
     481                          (let ((punt t))
     482                            (catch 'command-loop-catcher
     483                              (let* ((doc (buffer-document *current-buffer*)))
     484                                (unwind-protect
     485                                     (progn
     486                                       (when doc (hi::document-begin-editing doc))
     487                                       (dolist (c t-bindings)
     488                                         (funcall *invoke-hook* c *prefix-argument*))
     489                                       (funcall *invoke-hook* res *prefix-argument*)
     490                                       (setf punt nil))
     491                                  (when doc (hi::document-end-editing doc)))))
     492                            (when punt (invoke-hook hemlock::command-abort-hook)))
     493                          (if *command-type-set*
     494                            (setq *command-type-set* nil)
     495                            (setq *last-command-type* nil))
     496                          (if *prefix-argument-supplied*
     497                            (setq *prefix-argument-supplied* nil)
     498                            (setq *prefix-argument* nil))
     499                          (setf (fill-pointer cmd) 0))
     500                         (null
     501                          (unless prefix-p
     502                            (beep)
     503                            (setq *prefix-argument* nil)
     504                            (setf (fill-pointer cmd) 0)))
     505                         (hash-table)))))
     506                 (free-temporary-objects temporary-object-pool))))))))
    497507
    498508
Note: See TracChangeset for help on using the changeset viewer.