Mercurial > emacs
view lisp/indent.el @ 4872:628cbf7e7005
(comint-after-partial-file-name-command):
Renamed from comint-after-partial-pathname-command.
(comint-match-partial-file-name, comint-after-partial-file-name):
Renamed from comint-match-partial-pathname, etc.
(comint-last-output-start): New variable to record
where most recent process output started from.
(comint-mode): Initialise it.
(comint-output-filter): Set it.
(comint-previous-matching-input-string): Moved to
comint-previous-matching-input-position.
(comint-previous-matching-input-string): Use it.
(comint-search-arg, comint-search-start,
comint-previous-input-string): New subroutines.
(comint-previous-input, comint-next-input,
comint-previous-matching-input, comint-next-matching-input,
comint-previous-matching-input-from-input,
comint-next-matching-input-from-input): Use them.
(comint-mode-map): Added signal menu-bar. Moved
comint-backward/forward-matching-input to output menu-bar, since
they move within the buffer rather than do input.
(comint-send-input, comint-after-pmark-p,
comint-kill-input, comint-proc-query): Removed serialisation of
obtaining the process mark's marker-position.
Commented out comint-load-hooks.
(comint-dynamic-simple-complete): New subroutine.
(comint-dynamic-complete-filename-command): New variable.
(comint-after-partial-pathname-command): New variable.
(comint-after-partial-pathname): New subroutine.
(comint-dynamic-complete): Use them.
(comint-mode): Make them local.
Renamed comint-dynamic-complete-command to
comint-dynamic-complete-command-command for consistency.
Renamed comint-file-name-addsuffix/autolist/recexact to
comint-completion-addsuffix/autolist/recexact for consistency.
(comint-replace-by-expanded-history): Check if input
ring size is not big enough for relative reference.
(comint-read-input-ring, comint-input-ring-file-name):
From shell.el.
(shell-write-input-ring): New subroutine.
(comint-file-name-prefix): New variable.
(comint-directory): New inline subroutine.
(comint-dynamic-complete-filename, comint-dynamic-complete-variable,
comint-dynamic-list-filename-completions): Use it.
(comint-dynamic-complete-filename,
comint-dynamic-complete-variable,
comint-dynamic-list-filename-completions): Make sure local
completion-ignore-case is nil.
(comint-next-prompt, comint-previous-prompt): Use
paragraph-start and paragraph motion commands rather than
re-search-forward and re-search-backward commands.
(comint-dynamic-list-input-ring,
comint-previous-matching-input-string): Use ring-empty-p rather
than zerop and ring-length.
(comint-input-ignoredups): New variable.
(comint-send-input, shell-read-input-ring): Use it.
(comint-mode): Make comint-input-ignoredups local. Doc fix.
(comint-scroll-to-bottom-on-input): New variable.
(comint-scroll-to-bottom-on-output): New variable.
(comint-scroll-show-maximum-output): New variable.
(comint-output-filter-hook): New variable, defaults to
comint-postoutput-scroll-to-bottom.
(comint-output-filter): Renamed from comint-filter
for consistency. Now calls comint-output-filter-hook.
(comint-preinput-scroll-to-bottom): New subroutine.
(comint-postoutput-scroll-to-bottom): New subroutine.
(comint-show-maximum-output): New command.
(comint-copy-old-input): New command.
(comint-send-input): Run comint-output-filter-hook if
necessary as a kludge to prevent messy redisplays.
(comint-mode-map): Added comint-show-maximum-output to
C-c C-e and menu-bar output, and comint-copy-old-input to C-c C-i
and menu-bar input.
(comint-mode): Make local variables
comint-scroll-to-bottom-on-input, before-change-function,
comint-scroll-to-bottom-on-output, comint-scroll-show-maximum-output,
and comint-output-filter-hook.
(comint-version): Deleted--no need for separate version.
(comint-input-ring-index): Make this a permanent local.
(comint-mode): Don't alter comint-input-ring-index or comint-input-ring
if already set meaningfully.
(comint-mode-map): Added keys M-R/S for
comint-previous/next-matching-input-from-input and to completion
menu-bar. Added comint-forward/backward-matching-input and
comint-previous/next-matching-input to completion menu-bar.
(comint-mode): Doc fix for functionality.
(comint-exec-1): Uses setenv.
(comint-update-env): Removed.
(comint-input-ring-size): Incremented to 32, as with
command history.
(comint-dynamic-list-input-ring): Check for zero
length ring. Use ring length, not ring size, when generating
list. Use buffer " *Input History*".
(comint-previous-matching-input-string): Check for zero-length ring.
Check last item in case at end of cycle and it's a match.
(comint-searching-input-ring): New subroutine.
(comint-regexp-arg): New subroutine.
(comint-previous-matching-input-from-input): New command.
(comint-next-matching-input-from-input): New command.
(comint-replace-by-expanded-history): Fix for matching
inside quotes. Fix to allow argument subrange specifiers. Fix to
identify and reject absolute input number references.
(comint-within-quotes): New subroutine.
(comint-how-many-region): New subroutine.
(comint-args): New subroutine.
(comint-delim-arg): New subroutine.
(comint-arguments): New subroutine.
(comint-delimiter-argument-list): New variable.
(comint-send-input): Inserts input arguments into ring
separated by single spaces.
(comint-filter): Checks the buffer's process to make
sure it's still there. Otherwise, set-buffer will fail.
(comint-backward-matching-input): New command.
(comint-forward-matching-input): New command.
(comint-next-prompt, comint-previous-prompt):
Error if reach beg/end of buffer.
(comint-dynamic-complete): Fix for absolute input
number references.
(comint-dynamic-complete-filename): Changed listings
function to comint-dynamic-list-filename-completions. Uses
file-directory-p rather than string-match to test for directories.
(comint-dynamic-list-completions): Changed to list the
list of completions supplied as the function argument. Use buffer
" *Completions*".
(comint-match-partial-pathname): New subroutine.
(comint-dynamic-complete-variable): New command.
(comint-dynamic-list-filename-completions): New function.
(comint-previous-input):
Don't use replace-match; just insert before deleting.
(comint-magic-space): Use self-insert command.
(comint-history-file-name): New variable.
(comint-mode): Initialize comint-input-ring before
running comint-mode-hook.
(comint-input-autoexpand): New variable.
(comint-dynamic-complete-command): New variable.
(comint-get-current-command): New variable.
(comint-read-input-ring): New function.
(comint-send-input): Handle history expansion.
(comint-input-sentinel): Doc fix.
(comint-mode-map): Added key binding for C-c C-h.
Added menu bars for completion, input and output.
(comint-dynamic-list-input-ring): New function.
(comint-previous-input-string): New subroutine.
(comint-previous-input): Use it.
(comint-previous-matching-input-string): New subroutine.
(comint-previous-matching-input): Use it.
(comint-replace-by-expanded-history): New command.
(comint-magic-space): New command.
(comint-replace-by-expanded-filename): Now replaces
expanded match for a filename, and then calls filename completion
comint-dynamic-complete-filename to do file name completion.
(comint-kill-output): Don't kill prompt.
(comint-show-output): Don't move point if it's
visible where it is, and if point is moved, put it after prompt.
(comint-dynamic-complete): Totally new definition.
(comint-dynamic-complete-filename): New name for old
function comint-dynamic-complete, completes files and lists
candidates, souped up for configurability.
(comint-dynamic-complete-variable): New command.
(comint-file-name-autolist): New variable.
(comint-file-name-addsuffix): New variable,
(comint-file-name-recexact): New variable.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 22 Oct 1993 02:57:36 +0000 |
parents | 600d0d832d99 |
children | 1fa576a274b5 |
line wrap: on
line source
;;; indent.el --- indentation commands for Emacs ;; Copyright (C) 1985 Free Software Foundation, Inc. ;; Maintainer: FSF ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ;;; Commentary: ;; Commands for making and changing indentation in text. These are ;; described in the Emacs manual. ;;; Code: (defvar indent-line-function 'indent-to-left-margin "\ Function to indent current line.") (defun indent-according-to-mode () "Indent line in proper way for current major mode." (interactive) (funcall indent-line-function)) (defun indent-for-tab-command () "Indent line in proper way for current major mode." (interactive) (if (eq indent-line-function 'indent-to-left-margin) (insert-tab) (funcall indent-line-function))) (defun insert-tab () (if abbrev-mode (expand-abbrev)) (if indent-tabs-mode (insert ?\t) (indent-to (* tab-width (1+ (/ (current-column) tab-width)))))) (defun indent-rigidly (start end arg) "Indent all lines starting in the region sideways by ARG columns. Called from a program, takes three arguments, START, END and ARG." (interactive "r\np") (save-excursion (goto-char end) (setq end (point-marker)) (goto-char start) (or (bolp) (forward-line 1)) (while (< (point) end) (let ((indent (current-indentation))) (delete-region (point) (progn (skip-chars-forward " \t") (point))) (or (eolp) (indent-to (max 0 (+ indent arg)) 0))) (forward-line 1)) (move-marker end nil))) ;; This is the default indent-line-function, ;; used in Fundamental Mode, Text Mode, etc. (defun indent-to-left-margin () (or (= (current-indentation) left-margin) (let (epos) (save-excursion (beginning-of-line) (delete-region (point) (progn (skip-chars-forward " \t") (point))) (indent-to left-margin) (setq epos (point))) (if (< (point) epos) (goto-char epos))))) (defvar indent-region-function nil "Function which is short cut to indent region using indent-according-to-mode. A value of nil means really run indent-according-to-mode on each line.") (defun indent-region (start end column) "Indent each nonblank line in the region. With no argument, indent each line using `indent-according-to-mode', or use `indent-region-function' to do the whole region if that's non-nil. If there is a fill prefix, make each line start with the fill prefix. With argument COLUMN, indent each line to that column. Called from a program, takes three args: START, END and COLUMN." (interactive "r\nP") (if (null column) (if fill-prefix (save-excursion (goto-char end) (setq end (point-marker)) (goto-char start) (let ((regexp (regexp-quote fill-prefix))) (while (< (point) end) (or (looking-at regexp) (and (bolp) (eolp)) (insert fill-prefix)) (forward-line 1)))) (if indent-region-function (funcall indent-region-function start end) (save-excursion (goto-char end) (setq end (point-marker)) (goto-char start) (or (bolp) (forward-line 1)) (while (< (point) end) (or (and (bolp) (eolp)) (funcall indent-line-function)) (forward-line 1)) (move-marker end nil)))) (setq column (prefix-numeric-value column)) (save-excursion (goto-char end) (setq end (point-marker)) (goto-char start) (or (bolp) (forward-line 1)) (while (< (point) end) (delete-region (point) (progn (skip-chars-forward " \t") (point))) (or (eolp) (indent-to column 0)) (forward-line 1)) (move-marker end nil)))) (defun indent-relative-maybe () "Indent a new line like previous nonblank line." (interactive) (indent-relative t)) (defun indent-relative (&optional unindented-ok) "Space out to under next indent point in previous nonblank line. An indent point is a non-whitespace character following whitespace. If the previous nonblank line has no indent points beyond the column point starts at, `tab-to-tab-stop' is done instead." (interactive "P") (if abbrev-mode (expand-abbrev)) (let ((start-column (current-column)) indent) (save-excursion (beginning-of-line) (if (re-search-backward "^[^\n]" nil t) (let ((end (save-excursion (forward-line 1) (point)))) (move-to-column start-column) ;; Is start-column inside a tab on this line? (if (> (current-column) start-column) (backward-char 1)) (or (looking-at "[ \t]") unindented-ok (skip-chars-forward "^ \t" end)) (skip-chars-forward " \t" end) (or (= (point) end) (setq indent (current-column)))))) (if indent (let ((opoint (point-marker))) (delete-region (point) (progn (skip-chars-backward " \t") (point))) (indent-to indent 0) (if (> opoint (point)) (goto-char opoint)) (move-marker opoint nil)) (tab-to-tab-stop)))) (defvar tab-stop-list '(8 16 24 32 40 48 56 64 72 80 88 96 104 112 120) "*List of tab stop positions used by `tab-to-tab-stops'.") (defvar edit-tab-stops-map nil "Keymap used in `edit-tab-stops'.") (if edit-tab-stops-map nil (setq edit-tab-stops-map (make-sparse-keymap)) (define-key edit-tab-stops-map "\C-x\C-s" 'edit-tab-stops-note-changes) (define-key edit-tab-stops-map "\C-c\C-c" 'edit-tab-stops-note-changes)) (defvar edit-tab-stops-buffer nil "Buffer whose tab stops are being edited--in case the variable `tab-stop-list' is local in that buffer.") (defun edit-tab-stops () "Edit the tab stops used by `tab-to-tab-stop'. Creates a buffer *Tab Stops* containing text describing the tab stops. A colon indicates a column where there is a tab stop. You can add or remove colons and then do \\<edit-tab-stops-map>\\[edit-tab-stops-note-changes] to make changes take effect." (interactive) (setq edit-tab-stops-buffer (current-buffer)) (switch-to-buffer (get-buffer-create "*Tab Stops*")) (use-local-map edit-tab-stops-map) (make-local-variable 'indent-tabs-mode) (setq indent-tabs-mode nil) (overwrite-mode 1) (setq truncate-lines t) (erase-buffer) (let ((tabs tab-stop-list)) (while tabs (indent-to (car tabs) 0) (insert ?:) (setq tabs (cdr tabs)))) (let ((count 0)) (insert ?\n) (while (< count 8) (insert (+ count ?0)) (insert " ") (setq count (1+ count))) (insert ?\n) (while (> count 0) (insert "0123456789") (setq count (1- count)))) (insert "\nTo install changes, type C-c C-c") (goto-char (point-min))) (defun edit-tab-stops-note-changes () "Put edited tab stops into effect." (interactive) (let (tabs) (save-excursion (goto-char 1) (end-of-line) (while (search-backward ":" nil t) (setq tabs (cons (current-column) tabs)))) (bury-buffer (prog1 (current-buffer) (switch-to-buffer edit-tab-stops-buffer))) (setq tab-stop-list tabs)) (message "Tab stops installed")) (defun tab-to-tab-stop () "Insert spaces or tabs to next defined tab-stop column. The variable `tab-stop-list' is a list of columns at which there are tab stops. Use \\[edit-tab-stops] to edit them interactively." (interactive) (if abbrev-mode (expand-abbrev)) (let ((tabs tab-stop-list)) (while (and tabs (>= (current-column) (car tabs))) (setq tabs (cdr tabs))) (if tabs (indent-to (car tabs)) (insert ?\ )))) (defun move-to-tab-stop () "Move point to next defined tab-stop column. The variable `tab-stop-list' is a list of columns at which there are tab stops. Use \\[edit-tab-stops] to edit them interactively." (interactive) (let ((tabs tab-stop-list)) (while (and tabs (>= (current-column) (car tabs))) (setq tabs (cdr tabs))) (if tabs (move-to-column (car tabs) t)))) (define-key global-map "\t" 'indent-for-tab-command) (define-key esc-map "\034" 'indent-region) (define-key ctl-x-map "\t" 'indent-rigidly) (define-key esc-map "i" 'tab-to-tab-stop) ;;; indent.el ends here