Mercurial > emacs
view lisp/auto-show.el @ 20914:8f189ffad604
(c-forward-syntactic-ws, c-backward-syntactic-ws):
Don't narrow, just make a simple check against the given limit.
(c-collect-line-comments): New function.
(c-literal-limits): New function that finds the start and end pos
of a comment or string surrounding point.
(c-literal-limits-fast): A faster variant of `c-literal-limits'
for newer Emacsen where the state returned from
`parse-partial-sexp' contains the starting pos of the last literal.
(c-parse-state): Use (c-point 'bod) instead of
beginning-of-defun directly.
(c-guess-basic-syntax): Fixed a few byte compiler warnings.
(c-backward-to-start-of-do): Break infloop for
invalid code, e.g. when someone types while (TRUE) { at the top of
a buffer, we shouldn't hang when the { is typed!
(c-backward-to-start-of-if): Ensure never
move forward, not even if point < lim.
(c-search-uplist-for-classkey): When searching up for a class key,
instead of hardcoding the extended search for "extern", use the new
variable c-extra-toplevel-key, which is language dependent. For C++,
this variable includes the keyword "namespace" which will match C++
namespace introducing blocks.
(c-guess-basic-syntax): Support for recognizing C++ namespace
blocks, by elaborating on the mechanism used to find external
language blocks. Searches which hardcoded "extern" now use
c-extra-toplevel-key, a language dependent variable. Case clauses
that were modified: CASE 5A.1, CASE 5A.4, CASE 5F, CASE 5I, CASE
14A.
CASE 3: we can now determine whether we're at the beginning of a
cpp macro definition, or inside the middle of one. Set syntax to
'cpp-macro in the former case, 'cpp-macro-cont in the latter. In
both cases, the relpos is the beginning of the macro.
(c-forward-syntactic-ws): Added code that skips forward over
multi-line cpp macros.
(c-beginning-of-macro): Moved, and made into a defsubst. This
function can now actually find the beginning of a multi-line C
preprocessor macro.
(c-backward-syntactic-ws): Use c-beginning-of-macro to skip backwards
over multi-line macro definitions.
(c-in-literal, c-fast-in-literal): Use c-beginning-of-macro to
find out whether we're in a multi-line macro definition.
(c-fast-in-literal): Function which should be faster than
c-in-literal. In XEmacs, this uses buffer-syntactic-context.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 17 Feb 1998 07:08:44 +0000 |
parents | 93652fd3234d |
children | 4bdc30f27628 |
line wrap: on
line source
;;; auto-show.el --- perform automatic horizontal scrolling as point moves ;;; This file is in the public domain. ;;; Keywords: scroll display minor-mode ;;; Author: Pete Ware <ware@cis.ohio-state.edu> ;;; Maintainer: FSF ;;; Commentary: ;;; This file provides functions that ;;; automatically scroll the window horizontally when the point moves ;;; off the left or right side of the window. ;;; Once this library is loaded, automatic horizontal scrolling ;;; occurs whenever long lines are being truncated. ;;; To request truncation of long lines, set the variable ;;; Setting the variable `truncate-lines' to non-nil. ;;; You can do this for all buffers as follows: ;;; ;;; (set-default 'truncate-lines t) ;;; Here is how to do it for C mode only: ;;; ;;; (set-default 'truncate-lines nil) ; this is the original value ;;; (defun my-c-mode-hook () ;;; "Run when C-mode starts up. Changes ..." ;;; ... set various personal preferences ... ;;; (setq truncate-lines t)) ;;; (add-hook 'c-mode-hook 'my-c-mode-hook) ;;; ;;; ;;; As a finer level of control, you can still have truncated lines but ;;; without the automatic horizontal scrolling by setting the buffer ;;; local variable `auto-show-mode' to nil. The default value is t. ;;; The command `auto-show-mode' toggles the value of the variable ;;; `auto-show-mode'. ;;; Code: (defgroup auto-show nil "Perform automatic horizontal scrolling as point moves." :group 'editing) (defcustom auto-show-mode t "*Non-nil enables automatic horizontal scrolling, when lines are truncated. The default value is t. To change the default, do this: (set-default 'auto-show-mode nil) See also command `auto-show-mode'. This variable has no effect when lines are not being truncated. This variable is automatically local in each buffer where it is set." :type 'boolean :group 'auto-show) (make-variable-buffer-local 'auto-show-mode) (defcustom auto-show-shift-amount 8 "*Extra columns to scroll. for automatic horizontal scrolling." :type 'integer :group 'auto-show) (defcustom auto-show-show-left-margin-threshold 50 "*Threshold column for automatic horizontal scrolling to the right. If point is before this column, we try to scroll to make the left margin visible. Setting this to 0 disables this feature." :type 'integer :group 'auto-show) (defun auto-show-truncationp () "True if line truncation is enabled for the selected window." (or truncate-lines (and truncate-partial-width-windows (< (window-width) (frame-width))))) ;;;###autoload (defun auto-show-mode (arg) "Turn automatic horizontal scroll mode on or off. With arg, turn auto scrolling on if arg is positive, off otherwise. This mode is enabled or disabled for each buffer individually. It takes effect only when `truncate-lines' is non-nil." (interactive "P") (setq auto-show-mode (if (null arg) (not auto-show-mode) (> (prefix-numeric-value arg) 0)))) (defun auto-show-make-point-visible (&optional ignore-arg) "Scroll horizontally to make point visible, if that is enabled. This function only does something if `auto-show-mode' is non-nil and longlines are being truncated in the selected window. See also the command `auto-show-mode'." (interactive) (if (and auto-show-mode (auto-show-truncationp) (equal (window-buffer) (current-buffer))) (let* ((col (current-column)) ;column on line point is at (scroll (window-hscroll)) ;how far window is scrolled (w-width (- (window-width) (if (> scroll 0) 2 1))) ;how wide window is on the screen (right-col (+ scroll w-width))) (if (and (< col auto-show-show-left-margin-threshold) (< col (window-width)) (> scroll 0)) (scroll-right scroll) (if (< col scroll) ;to the left of the screen (scroll-right (+ (- scroll col) auto-show-shift-amount)) (if (or (> col right-col) ;to the right of the screen (and (= col right-col) (not (eolp)))) (scroll-left (+ auto-show-shift-amount (- col (+ scroll w-width)))) ) ) ) ) ) ) ;; Do auto-scrolling after commands. (add-hook 'post-command-hook 'auto-show-make-point-visible) ;; Do auto-scrolling in comint buffers after process output also. (add-hook 'comint-output-filter-functions 'auto-show-make-point-visible t) (provide 'auto-show) ;; auto-show.el ends here