diff options
author | Noah Friedman <[email protected]> | 1995-02-28 09:51:49 +0000 |
---|---|---|
committer | Noah Friedman <[email protected]> | 1995-02-28 09:51:49 +0000 |
commit | 2601d12ed96cef83ff4bf57fa63e126fcc1aee19 (patch) | |
tree | 4d6eac221eb53b389ea2a31432643d202da9f441 | |
parent | c480b1f738fdd1b89785bfa6cff72400dbb08b6c (diff) |
(rlogin-carriage-filter): Don't assume region is narrowed to most recent
output.
-rw-r--r-- | lisp/rlogin.el | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/lisp/rlogin.el b/lisp/rlogin.el index f012e0a9fe..bef1ecbbd1 100644 --- a/lisp/rlogin.el +++ b/lisp/rlogin.el @@ -49,8 +49,8 @@ "*Hooks to run after setting current buffer to rlogin-mode.") (defvar rlogin-process-connection-type nil - "*If non-`nil', use a pty for the local rlogin process. -If `nil', use a pipe (if pipes are supported on the local system). + "*If non-`nil', use a pty for the local rlogin process. +If `nil', use a pipe (if pipes are supported on the local system). Generally it is better not to waste ptys on systems which have a static number of them. On the other hand, some implementations of `rlogin' assume @@ -87,7 +87,7 @@ this variable is set from that.") ;; Initialize rlogin mode map. (defvar rlogin-mode-map '()) -(cond +(cond ((null rlogin-mode-map) (setq rlogin-mode-map (if (consp shell-mode-map) (cons 'keymap shell-mode-map) @@ -111,7 +111,7 @@ If a prefix argument is given and the buffer *rlogin-HOST* already exists, a new buffer with a different connection will be made. The variable `rlogin-program' contains the name of the actual program to -run. It can be a relative or absolute path. +run. It can be a relative or absolute path. The variable `rlogin-explicit-args' is a list of arguments to give to the rlogin when starting. They are added after any arguments given in @@ -172,7 +172,7 @@ variable." ;; buffer from a previous exited process. (set-marker (process-mark proc) (point-max)) (rlogin-mode) - + ;; comint-output-filter-functions is just like a hook, except that the ;; functions in that list are passed arguments. add-hook serves well ;; enough for modifying it. @@ -188,7 +188,7 @@ variable." ;; Do this here, rather than calling the tracking mode function, to ;; avoid a gratuitous resync check; the default should be the ;; user's home directory, be it local or remote. - (setq comint-file-name-prefix + (setq comint-file-name-prefix (concat "/" rlogin-remote-user "@" rlogin-host ":")) (cd-absolute comint-file-name-prefix)) ((null rlogin-directory-tracking-mode)) @@ -196,7 +196,7 @@ variable." (cd-absolute (concat comint-file-name-prefix "~/")))))))) (defun rlogin-mode () - "Set major-mode for rlogin sessions. + "Set major-mode for rlogin sessions. If `rlogin-mode-hook' is set, run it." (interactive) (kill-all-local-variables) @@ -218,7 +218,7 @@ ange-ftp. If called as a function, give it no argument. If called with a negative prefix argument, disable directory tracking entirely. -If called with a positive, numeric prefix argument, e.g. +If called with a positive, numeric prefix argument, e.g. ``\\[universal-argument] 1 M-x rlogin-directory-tracking-mode\'', then do directory tracking but assume the remote filesystem is the same as the local system. This only works in general if the remote machine and the @@ -229,7 +229,7 @@ local one share the same directories (through NFS)." (consp prefix)) (setq rlogin-directory-tracking-mode t) (setq shell-dirtrack-p t) - (setq comint-file-name-prefix + (setq comint-file-name-prefix (concat "/" rlogin-remote-user "@" rlogin-host ":"))) ((< prefix 0) (setq rlogin-directory-tracking-mode nil) @@ -238,7 +238,7 @@ local one share the same directories (through NFS)." (setq rlogin-directory-tracking-mode 'local) (setq comint-file-name-prefix "") (setq shell-dirtrack-p t))) - (cond + (cond (shell-dirtrack-p (let* ((proc (get-buffer-process (current-buffer))) (proc-mark (process-mark proc)) @@ -271,13 +271,14 @@ local one share the same directories (through NFS)." (store-match-data (match-data)) (nreverse list))) -(defun rlogin-carriage-filter (&rest ignored) - ;; When this function is called, the buffer will already have been - ;; narrowed to the region containing the most recently-inserted text. - ;; (See `comint-output-filter' in comint.el.) - (let ((point-marker (point-marker))) - (goto-char (point-min)) - (while (search-forward "\C-m" (point-max) t) +(defun rlogin-carriage-filter (string) + (let* ((point-marker (point-marker)) + (end (process-mark (get-buffer-process (current-buffer)))) + (beg (or (and (boundp 'comint-last-output-start) + comint-last-output-start) + (- end (length string))))) + (goto-char beg) + (while (search-forward "\C-m" end t) (delete-char -1)) (goto-char point-marker))) @@ -299,8 +300,8 @@ local one share the same directories (through NFS)." (defun rlogin-delchar-or-send-Ctrl-D (arg) "\ -Delete ARG characters forward, or send a C-d to process if at end of buffer." - (interactive "p") +Delete ARG characters forward, or send a C-d to process if at end of buffer." + (interactive "p") (if (eobp) (rlogin-send-Ctrl-D) (delete-char arg))) |