I am using emacs 23.2 with the GTK toolkit. I built emacs from source using the following configure-params:
./configure --prefix=/usr --without-makeinfo --without-sound
Which builds emacs with the following configuration:
Where should the build process find the source code? /home/****/incoming/emacs-23.2
What operating system and machine description files should Emacs use?
`s/gnu-linux.h' and `m/intel386.h'
What compiler should emacs be built with? gcc -g -O2 -Wdeclaration-after-statement -Wno-pointer-sign
Should Emacs use the GNU version of malloc? yes
(Using Doug Lea's new malloc from the GNU C Library.)
Should Emacs use a relocating allocator for buffers? yes
Should Emacs use mmap(2) for buffer allocation? no
What window system should Emacs use? x11
What toolkit should Emacs use? GTK
Where do we find X Windows header files? Standard dirs
Where do we find X Windows libraries? Standard dirs
Does Emacs use -lXaw3d? no
Does Emacs use -lXpm? yes
Does Emacs use -ljpeg? yes
Does Emacs use -ltiff? yes
Does Emacs use a gif library? yes -lgif
Does Emacs use -lpng? yes
Does Emacs use -lrsvg-2? no
Does Emacs use -lgpm? yes
Does Emacs use -ldbus? yes
Does Emacs use -lgconf? no
Does Emacs use -lfreetype? yes
Does Emacs use -lm17n-flt? no
Does Emacs use -lotf? yes
Does Emacs use -lxft? yes
Does Emacs use toolkit scroll bars? yes
My OS is OpenSuSE 11.1, GTK version is 2.14.4.
When I’m scrolling within files of a common size (about 1000 lines) holding the up/down-keys, emacs almost hangs and produces about 50% CPU-load. I use the following plugins:
- ido
- linum
- tabbar
- auto-complete-config
Starting emacs with -q fixes the problem, but then I don’t have any plugins. I can’t figure out, which part of my .emacs is responsible for this behaviour.
Here’s an excerpt of my .emacs-file:
(require 'ido)
(ido-mode 1)
(require 'linum)
(global-linum-mode 1)
(require 'tabbar)
(tabbar-mode 1)
(tabbar-local-mode 0)
(tabbar-mwheel-mode 0)
(setq tabbar-buffer-groups-function
(lambda ()
(list "All")))
(global-set-key [M-left] 'tabbar-backward)
(global-set-key [M-right] 'tabbar-forward)
;; hide the toolbar (gtk etc.)
(tool-bar-mode -1)
;; Mouse scrolling enhancements
(setq mouse-wheel-progressive-speed nil)
(setq mouse-wheel-scroll-amount '(5 ((shift) . 5) ((control) . nil)))
;; Smart-HOME
(defun smart-beginning-of-line ()
"Forces the cursor to jump to the first none whitespace char of the current line when pressing HOME"
(interactive)
(let ((oldpos (point)))
(back-to-indentation)
(and (= oldpos (point))
(beginning-of-line))))
(put 'smart-beginning-of-line 'CUA 'move)
(global-set-key [home] 'smart-beginning-of-line)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(column-number-mode t)
'(cua-mode t nil (cua-base))
'(custom-buffer-indent 4)
'(delete-selection-mode nil)
'(display-time-24hr-format t)
'(display-time-day-and-date 1)
'(display-time-mode t)
'(global-font-lock-mode t nil (font-lock))
'(inhibit-startup-buffer-menu t)
'(inhibit-startup-screen t)
'(pc-select-meta-moves-sexps t)
'(pc-select-selection-keys-only t)
'(pc-selection-mode t nil (pc-select))
'(scroll-bar-mode (quote right))
'(show-paren-mode t)
'(standard-indent 4)
'(uniquify-buffer-name-style (quote forward) nil (uniquify)))
(setq-default tab-width 4)
(setq-default indent-tabs-mode t)
(setq c-basic-offset 4)
;; Highlighting of the current line
(global-hl-line-mode 1)
(set-face-background 'hl-line "#E8F2FE")
(defalias 'yes-or-no-p 'y-or-n-p)
(display-time)
(set-language-environment "Latin-1")
;; Change cursor color according to mode
(setq djcb-read-only-color "gray")
;; valid values are t, nil, box, hollow, bar, (bar . WIDTH), hbar,
;; (hbar. HEIGHT); see the docs for set-cursor-type
(setq djcb-read-only-cursor-type 'hbar)
(setq djcb-overwrite-color "red")
(setq djcb-overwrite-cursor-type 'box)
(setq djcb-normal-color "black")
(setq djcb-normal-cursor-type 'bar)
(defun djcb-set-cursor-according-to-mode ()
"change cursor color and type according to some minor modes."
(cond
(buffer-read-only
(set-cursor-color djcb-read-only-color)
(setq cursor-type djcb-read-only-cursor-type))
(overwrite-mode
(set-cursor-color djcb-overwrite-color)
(setq cursor-type djcb-overwrite-cursor-type))
(t
(set-cursor-color djcb-normal-color)
(setq cursor-type djcb-normal-cursor-type))))
(add-hook 'post-command-hook 'djcb-set-cursor-according-to-mode)
(define-key global-map '[C-right] 'forward-sexp)
(define-key global-map '[C-left] 'backward-sexp)
(define-key global-map '[s-left] 'windmove-left)
(define-key global-map '[s-right] 'windmove-right)
(define-key global-map '[s-up] 'windmove-up)
(define-key global-map '[s-down] 'windmove-down)
(define-key global-map '[S-down-mouse-1] 'mouse-stay-and-copy)
(define-key global-map '[C-M-S-down-mouse-1] 'mouse-stay-and-swap)
(define-key global-map '[S-mouse-2] 'mouse-yank-and-kill)
(define-key global-map '[C-S-down-mouse-1] 'mouse-stay-and-kill)
(define-key global-map "\C-a" 'mark-whole-buffer)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:inherit nil :stipple nil :background "#f7f9fa" :foreground "#191919" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width normal :foundry "unknown" :family "DejaVu Sans Mono"))))
'(font-lock-builtin-face ((((class color) (min-colors 88) (background light)) (:foreground "#642880" :weight bold))))
'(font-lock-comment-face ((((class color) (min-colors 88) (background light)) (:foreground "#3f7f5f"))))
'(font-lock-constant-face ((((class color) (min-colors 88) (background light)) (:weight bold))))
'(font-lock-doc-face ((t (:inherit font-lock-string-face :foreground "#3f7f5f"))))
'(font-lock-function-name-face ((((class color) (min-colors 88) (background light)) (:foreground "Black" :weight bold))))
'(font-lock-keyword-face ((((class color) (min-colors 88) (background light)) (:foreground "#7f0055" :weight bold))))
'(font-lock-preprocessor-face ((t (:inherit font-lock-builtin-face :foreground "#7f0055" :weight bold))))
'(font-lock-string-face ((((class color) (min-colors 88) (background light)) (:foreground "#0000c0"))))
'(font-lock-type-face ((((class color) (min-colors 88) (background light)) (:foreground "#7f0055" :weight bold))))
'(font-lock-variable-name-face ((((class color) (min-colors 88) (background light)) (:foreground "Black"))))
'(minibuffer-prompt ((t (:foreground "medium blue"))))
'(mode-line ((t (:background "#222222" :foreground "White"))))
'(tabbar-button ((t (:inherit tabbar-default :foreground "dark red"))))
'(tabbar-button-highlight ((t (:inherit tabbar-default :background "white" :box (:line-width 2 :color "white")))))
'(tabbar-default ((t (:background "gray90" :foreground "gray50" :box (:line-width 3 :color "gray90") :height 100))))
'(tabbar-highlight ((t (:underline t))))
'(tabbar-selected ((t (:inherit tabbar-default :foreground "blue" :weight bold))))
'(tabbar-separator ((t nil)))
'(tabbar-unselected ((t (:inherit tabbar-default)))))
Any suggestions?
Kind regards,
mefiX
Looks OK to me. The fact that it runs OK with emacs -q is key, since it means you can solve the problem.
Now, I hope that someone offers you a simple diagnosis based on your files, but if not (and hey it’s been 7 hours), you can always try the standard .emacs-debugging slow coach. It’s not particularly fun, but it’ll work.
Chose your pleasure:
(A) Divide and Conquer
Divide your .emacs mentally into 4 parts. Now figure out which quarter is causing your problem by making four separate trial emacs configs: the first with 1/4 of your emacs, the next with half, the next with three quarters, and the final one with everything.
If you don’t find the culprit, you can further divide. If you suspect you have a culprit, or just like the look of this method better, try this:
(B) Check each step
load a blank emacs with
emacs -qvisit your .emacs in a buffer
visit your 1K line file in another buffer.
use eval-last-sexp C-x C-e, or eval-region to try each section or line in your .emacs, either systematically from the beginning, or starting with any suspect function calls.
Slowly but surely, you’ll smoke it out. Sorry I can’t offer you instant diagnosis.