[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] feature/aptel/dynamic-modules-rc5 d45222a 09/20: linum-mod
From: |
Teodor Zlatanov |
Subject: |
[Emacs-diffs] feature/aptel/dynamic-modules-rc5 d45222a 09/20: linum-mode plays more nicely with other margin-setting extensions |
Date: |
Wed, 18 Nov 2015 19:17:01 +0000 |
branch: feature/aptel/dynamic-modules-rc5
commit d45222a71de531655cf730f7188e8d24beb848b7
Author: João Távora <address@hidden>
Commit: Ted Zlatanov <address@hidden>
linum-mode plays more nicely with other margin-setting extensions
linum.el will only modify the left margin if it needs to, and will
only reset the it back to 0 if it guesses that no-one has touched that
margin in the meantime.
As such, this is a more of a workaround than an actual fix, but fixes
the problems described in bug#20674 regarding the interaction with
modes such as darkroom-mode and olivetti-mode.
A similar fix was commited to nlinum.el in ELPA.git's
e7f5f549fbfb740b911fb7f33b42381ecece56d8
* linum.el (linum-delete-overlays): Restore margins more
criteriously.
(linum-update-window): Set margins more criteriously.
---
lisp/linum.el | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/lisp/linum.el b/lisp/linum.el
index 7b6a3ea..82c192e 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -120,7 +120,15 @@ Linum mode is a buffer-local minor mode."
(mapc #'delete-overlay linum-overlays)
(setq linum-overlays nil)
(dolist (w (get-buffer-window-list (current-buffer) nil t))
- (set-window-margins w 0 (cdr (window-margins w)))))
+ ;; restore margins if needed FIXME: This still fails if the
+ ;; "other" mode has incidently set margins to exactly what linum
+ ;; had: see bug#20674 for a similar workaround in nlinum.el
+ (let ((set-margins (window-parameter w 'linum--set-margins))
+ (current-margins (window-margins w)))
+ (when (and set-margins
+ (equal set-margins current-margins))
+ (set-window-margins w 0 (cdr current-margins))
+ (set-window-parameter w 'linum--set-margins nil)))))
(defun linum-update-current ()
"Update line numbers for the current buffer."
@@ -143,10 +151,10 @@ Linum mode is a buffer-local minor mode."
(defun linum--face-width (face)
(let ((info (font-info (face-font face)))
- width)
+ width)
(setq width (aref info 11))
(if (<= width 0)
- (setq width (aref info 10)))
+ (setq width (aref info 10)))
width))
(defun linum-update-window (win)
@@ -170,7 +178,7 @@ Linum mode is a buffer-local minor mode."
(visited (catch 'visited
(dolist (o (overlays-in (point) (point)))
(when (equal-including-properties
- (overlay-get o 'linum-str) str)
+ (overlay-get o 'linum-str) str)
(unless (memq o linum-overlays)
(push o linum-overlays))
(setq linum-available (delq o linum-available))
@@ -193,7 +201,12 @@ Linum mode is a buffer-local minor mode."
(setq width (ceiling
(/ (* width 1.0 (linum--face-width 'linum))
(frame-char-width)))))
- (set-window-margins win width (cdr (window-margins win)))))
+ ;; open up space in the left margin, if needed, and record that
+ ;; fact as a the window-parameter `linum--set-margins'
+ (let ((existing-margins (window-margins win)))
+ (when (> width (or (car existing-margins) 0))
+ (set-window-margins win width (cdr existing-margins))
+ (set-window-parameter win 'linum--set-margins (window-margins win))))))
(defun linum-after-change (beg end _len)
;; update overlays on deletions, and after newlines are inserted
- [Emacs-diffs] branch feature/aptel/dynamic-modules-rc5 created (now 6cc9efa), Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 bdd314d 02/20: Increment Emacs version on master branch, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 cb89512 03/20: gitmerge: Try to detect cherry-picks, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 1f2b30d 04/20: gitmerge: Fix git log command, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 f9b3ca4 01/20: Update verilog-mode.el to 2015-11-09-b121d60-vpo., Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 274f590 06/20: * lisp/progmodes/verilog-mode.el: Use with-silent-modifications, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 c41bf13 08/20: * lisp/progmodes/verilog-mode.el (verilog-save-buffer-state): Add backquote, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 d45222a 09/20: linum-mode plays more nicely with other margin-setting extensions,
Teodor Zlatanov <=
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 35c5205 10/20: Minor fix to comment indentation and typo in last commit, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 7076009 12/20: * lisp/progmodes/cc-defs.el: Use with-silent-modifications, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 7e70b27 13/20: Fix issue where a new tempfile was created every refresh, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 543b928 07/20: ; ChangeLog.2 fixes, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 e8a941e 11/20: * lisp/loadup.el: Set max-lisp-eval-depth here, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 970c64a 14/20: Add interactive seek command., Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 d3203d0 05/20: ; Auto-commit of ChangeLog files., Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 10b9929 15/20: Add catch-all & no-signal version of PUSH_HANDLER, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 1bbd450 16/20: Add portable layer for dynamic loading, Teodor Zlatanov, 2015/11/18
- [Emacs-diffs] feature/aptel/dynamic-modules-rc5 449d1b2 17/20: Add new User Pointer (User_Ptr) type, Teodor Zlatanov, 2015/11/18