2012-01-24 2 views
16

Можно ли прокручивать всю видимую часть буфера в Emacs, но оставить точку там, где она есть. Пример: точка находится в нижней части окна, и я хочу увидеть текст, который прокручивается в верхней части окна без движущейся точки.Emacs: буфер прокрутки не указывает

Редактировать: Я полагаю, C-lC-l вид делает то, что я хотел.

ответ

9

попробуйте эти. Изменение M-n и M-p клавиш по своему вкусу

;;; scrollers 
(global-set-key "\M-n" "\C-u1\C-v") 
(global-set-key "\M-p" "\C-u1\M-v") 
+3

+1 Я использую нечто подобное: '(общемировом set-key "\ Mn" (lambda() (интерактивный) (прокрутка 4))) 'и' (глобальный набор-ключ "\ Mp" (lambda() (интерактивный) (прокрутка вниз 4))) '. – Ben

+0

@kindahero: Спасибо - это именно то, что я хотел :) – SabreWolfy

+8

К сожалению, точка по-прежнему будет двигаться после того, как она попадет в верхнюю или нижнюю часть окна. Интересно, можно ли этого избежать (без перекомпоновки Emacs) ... – celwell

5

Это может быть полезно. Согласно странице EmacsWiki на прокрутке;

Переменная scroll-preserve-screen-position может быть полезна для некоторых. Когда вы прокрутите вниз и снова вверх, точка должна закончиться тем же , с которой вы начали. Значение может быть переключено с помощью встроенного в режиме M-x scroll-lock-mode.

6
;;;_*====================================================================== 
;;;_* define a function to scroll with the cursor in place, moving the 
;;;_* page instead 
;; Navigation Functions 
(defun scroll-down-in-place (n) 
    (interactive "p") 
    (previous-line n) 
    (unless (eq (window-start) (point-min)) 
    (scroll-down n))) 

(defun scroll-up-in-place (n) 
    (interactive "p") 
    (next-line n) 
    (unless (eq (window-end) (point-max)) 
    (scroll-up n))) 

(global-set-key "\M-n" 'scroll-up-in-place) 
(global-set-key "\M-p" 'scroll-down-in-place) 
+1

Это должен быть правильный ответ, прокручивается на месте относительно курсора/указателя. Благодаря!! – cevaris

+1

Чтобы избежать предупреждений компилятора, я заменил '(предыдущая строка n)' на '(forward-line (* -1 n))' и '(next-line n)' with '(forward-line n)' – garyp

+0

Это на самом деле работает, но только если я переключу «предыдущую строку» и «следующую строку» вокруг, потому что он в противном случае перескакивает на две строки. –

1

Я думаю, что это лучше:

(defun gcm-scroll-down() 
     (interactive) 
     (scroll-up 1)) 
    (defun gcm-scroll-up() 
     (interactive) 
     (scroll-down 1)) 
    (global-set-key [(control down)] 'gcm-scroll-down) 
    (global-set-key [(control up)] 'gcm-scroll-up) 

ссылка: emacs wiki

Смежные вопросы