[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master fd37d9c 1/3: multishell - settle known multishell-list sor
From: |
ken manheimer |
Subject: |
[elpa] master fd37d9c 1/3: multishell - settle known multishell-list sort instability issues. |
Date: |
Mon, 01 Feb 2016 05:17:28 +0000 |
branch: master
commit fd37d9cca2520218b2229f18c42e1d45f0805b9b
Author: Ken Manheimer <address@hidden>
Commit: Ken Manheimer <address@hidden>
multishell - settle known multishell-list sort instability issues.
Increment version to 1.1.2
---
multishell-list.el | 18 +++-------------
multishell.el | 53 ++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/multishell-list.el b/multishell-list.el
index df4731e..8177981 100644
--- a/multishell-list.el
+++ b/multishell-list.el
@@ -3,7 +3,7 @@
;; Copyright (C) 2016 Free Software Foundation, Inc. and Ken Manheimer
;; Author: Ken Manheimer <address@hidden>
-;; Version: 1.1.1
+;; Version: 1.1.2
;; Created: 2016 -- first public availability
;; Keywords: processes
;; URL: https://github.com/kenmanheimer/EmacsMultishell
@@ -63,17 +63,16 @@ supplemented by our own when buffer is inactive.)"
(revised (multishell-read-unbracketed-entry
(format "Edit shell spec for %s: " name)
nil
- entry))
- (revised-path (and revised (cadr (multishell-split-entry revised))))
+ entry
+ 'no-record))
(revised-name (multishell-name-from-entry revised))
buffer)
(when (not (string= revised entry))
- (multishell-delete-history-name name)
+ (multishell-replace-entry entry revised)
(when (and (not (string= name revised-name))
(setq buffer (get-buffer (multishell-bracket name))))
(with-current-buffer buffer
(rename-buffer (multishell-bracket revised-name))))
- (multishell-register-name-to-path revised-name revised-path)
(revert-buffer)
(goto-char where))))
@@ -138,15 +137,6 @@ supplemented by our own when buffer is inactive.)"
tabulated-list-entries #'multishell-list-entries)
(tabulated-list-init-header))
-(defvar multishell-list-already-re-reverting nil
- "Don't set - internal for `multishell-list-revert-buffer-kludge'.")
-(defun multishell-list-revert-buffer-kludge ()
- "Double revert for kludge workaround of untable sorting."
- (if (not multishell-list-already-re-reverting)
- (let ((multishell-list-already-re-reverting t))
- (revert-buffer))))
-(add-hook 'tabulated-list-revert-hook 'multishell-list-revert-buffer-kludge)
-
(define-key multishell-list-mode-map (kbd "d") 'multishell-list-delete)
(define-key multishell-list-mode-map (kbd "\C-k") 'multishell-list-delete)
(define-key multishell-list-mode-map (kbd "k") 'multishell-list-delete)
diff --git a/multishell.el b/multishell.el
index 283be37..5540864 100644
--- a/multishell.el
+++ b/multishell.el
@@ -3,7 +3,7 @@
;; Copyright (C) 1999-2016 Free Software Foundation, Inc. and Ken Manheimer
;; Author: Ken Manheimer <address@hidden>
-;; Version: 1.1.1
+;; Version: 1.1.2
;; Created: 1999 -- first public availability
;; Keywords: processes
;; URL: https://github.com/kenmanheimer/EmacsMultishell
@@ -59,6 +59,15 @@
;;
;; Change Log:
;;
+;; * 2016-01-31 1.1.2 Ken Manheimer:
+;; - Settle puzzling instability of multishell-all-entries
+;; - The accumulations was putting items going from more to less active
+;; categories to be put at the end, not beginning.
+;; - Also, using history for prompting changes history - implement
+;; no-record option to avoid this when needed.
+;; - Implement simple edit-in-place multishell-replace-entry and use in
+;; multishell-list-edit-entry.
+;; - Remove now (hopefully) unnecessary multishell-list-revert-buffer-kludge.
;; * 2016-01-30 1.1.1 Ken Manheimer:
;; - shake out initial multishell-list glitches:
;; - (Offer to) delete shell buffer, if present, when deleting entry.
@@ -143,7 +152,7 @@
(require 'savehist)
(require 'multishell-list)
-(defvar multishell-version "1.1.1")
+(defvar multishell-version "1.1.2")
(defun multishell-version (&optional here)
"Return string describing the loaded multishell version."
(interactive "P")
@@ -272,6 +281,20 @@ Promote added/changed entry to the front of the list."
(setq multishell-history (push (concat name path)
multishell-history))))
+(defun multishell-replace-entry (entry revised)
+ "Replace every instance of ENTRY in `multishell-history' with REVISED.
+
+Revised entry is situated where former one was.
+
+Returns non-nil iff any changes were made."
+ (let ((candidates multishell-history)
+ did-revisions)
+ (while (setq candidates (member entry candidates))
+ (setcar candidates revised
+ did-revisions t)
+ (setq candidates (cdr candidates)))
+ did-revisions))
+
(defun multishell-history-entries (name)
"Return `multishell-history' entry that starts with NAME, or nil if none."
(let (got)
@@ -295,9 +318,13 @@ historical shells, collectively, using `multishell-list' -
see below.
Customize-group `multishell' to set up a key binding and tweak behaviors.
Manage your collection of current and historical shells by
-recursively invoking \\[multishell-pop-to-shell] at either of the
-`multishell-pop-to-shell' universal argument prompts, or at any time via
-\\[multishell-list]. Hit ? in the listing buffer for editing commands.
+recursively invoking \\[multishell-pop-to-shell] at the
+`multishell-pop-to-shell' universal argument prompts, eg:
+
+ \\[universal-argument] \\[multishell-pop-to-shell]
\\[multishell-pop-to-shell]
+
+\(That will be just a few keys if you do the above
+customization.) Hit ? in the listing buffer for editing commands.
==== Basic operation:
@@ -567,20 +594,28 @@ completions."
active-names (push name active-names))
(setq present (push entry present)))
(setq past (push entry past))))
- (setq multishell-history (append active-entries present past))
+ ;; Reverse present and past lists
+ (setq multishell-history (append (reverse active-entries)
+ (reverse present)
+ (reverse past)))
(if active-duplicated
(append multishell-history active-names)
multishell-history)))
-(defun multishell-read-unbracketed-entry (prompt default &optional initial)
+(defun multishell-read-unbracketed-entry (prompt default
+ &optional initial no-record)
"PROMPT for shell buffer name, sans asterisks. Indicate DEFAULT in prompt.
Optional INITIAL is preliminary value to be edited.
+Optional NO-RECORD prevents changes to `multishell-history'
+across the activity.
+
Input and completion can include associated path, if any.
Return what's provided, if anything, else nil."
- (let* ((candidates (multishell-all-entries 'active-duplicated))
+ (let* ((was-multishell-history multishell-history)
+ (candidates (multishell-all-entries 'active-duplicated))
(got (completing-read prompt
;; COLLECTION:
(reverse candidates)
@@ -592,6 +627,8 @@ Return what's provided, if anything, else nil."
initial
;; HIST:
'multishell-history)))
+ (when no-record
+ (setq multishell-history was-multishell-history))
(if (not (string= got ""))
got
nil)))