From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alin Soare Newsgroups: gmane.emacs.devel Subject: Midnight commander quick view. Date: Thu, 11 Sep 2014 17:51:57 +0300 Message-ID: <87sijy5hwy.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1410447179 31901 80.91.229.3 (11 Sep 2014 14:52:59 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 11 Sep 2014 14:52:59 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Sep 11 16:52:52 2014 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XS5jj-0004vd-NG for ged-emacs-devel@m.gmane.org; Thu, 11 Sep 2014 16:52:39 +0200 Original-Received: from localhost ([::1]:38953 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XS5jj-0006TI-DF for ged-emacs-devel@m.gmane.org; Thu, 11 Sep 2014 10:52:39 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:56325) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XS5jY-0006T0-93 for emacs-devel@gnu.org; Thu, 11 Sep 2014 10:52:37 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XS5jP-0002Lg-87 for emacs-devel@gnu.org; Thu, 11 Sep 2014 10:52:28 -0400 Original-Received: from mail-we0-x230.google.com ([2a00:1450:400c:c03::230]:45429) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XS5jO-0002KY-LN for emacs-devel@gnu.org; Thu, 11 Sep 2014 10:52:18 -0400 Original-Received: by mail-we0-f176.google.com with SMTP id q58so6929878wes.35 for ; Thu, 11 Sep 2014 07:52:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version:content-type; bh=YJ2HYmbgMWXEZZ3J0+ggFI3rt6IfttP42JU/XfrM8CU=; b=rweDtWAVMHxzdbUlXxewNsXIlp3hGe3ORCpgkGhoTH/ncjqtxV9K9Z1tr11ZiFhmQV yOYDF9p0Z5kMuWJcrRss41P0zHX/H2Vaxo1vqYoP0DC/qKobLEOnlzTYeNGuIT4CSml1 GcyqX2pV1JxiEXgmq9cFlSvDkrjo2bIPNZykjPo8/CSQZ1+7WMCt2dRQzf8CjhO+Cvca 4V546DH13K8APrNiEtumCiSthzz+vdNxuAWWLbxN7eOuK4xtnb7esgDBZk/4CiFiZfZm 0GfB69Pp9MbpFBdpdgKsWoEw18Rl3gVneiha0Cjv4EEuTZLMwiCThT5E6+re73wGDdIB V4xA== X-Received: by 10.180.93.5 with SMTP id cq5mr7956536wib.16.1410447130029; Thu, 11 Sep 2014 07:52:10 -0700 (PDT) Original-Received: from ThinkPad-T420 ([109.102.186.217]) by mx.google.com with ESMTPSA id xn15sm6194856wib.13.2014.09.11.07.52.08 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 11 Sep 2014 07:52:09 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c03::230 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:174176 Archived-At: I sent a stub for quick-view like in mc a few weeks ago. I sent here the latest version that I have been using for more than 10 days, and it seems stable. I did not need to modify it in the last past 10 days, even if I used it each day many times. Switch qv on and off is done with C-c C-q . It is buffer local. If we change the directory in dired, we have to reactivate it. ;;; -*- lexical-binding:t -*- (require 'dired) (defun qv () (let ((config (current-window-configuration)) (max-size 1e4) (qv-buffer (get-buffer-create "*quick view*"))) (defvar exit-keybinding (lambda (&optional arg) (interactive) (apply quick-view-object (list 'exit)))) (defvar init-keybinding (lambda (&optional arg) (interactive) (setq-local quick-view-object (qv)) (apply quick-view-object '(init)) (message "enter quick view"))) (defun get-key () init-keybinding) (defun update () (let ((f (dired-get-filename nil t))) (defun file-not-readable-p () (and (stringp f) (file-regular-p f) (not (file-readable-p f)))) (defun regular-file-p () (and (stringp f) (file-regular-p f) (file-readable-p f))) (defun already-opened-file-p () (and (stringp f) (file-regular-p f) (get-file-buffer f))) (with-current-buffer qv-buffer (setq buffer-read-only nil) (cond ((already-opened-file-p) (erase-buffer) (insert-buffer-substring (get-file-buffer f))) ((regular-file-p) (erase-buffer) (insert-file-contents-literally f nil 0 (min max-size (nth 7 (file-attributes f)))) (and (< max-size (nth 7 (file-attributes f))) (message "header preview truncated at byte %d" max-size))) ((file-not-readable-p) (erase-buffer) (insert "-- file not readble --")) (t (erase-buffer) (insert "-- no file at point --"))) (set-buffer-modified-p nil) (setq buffer-read-only t buffer-file-name nil)))) (defun init () (delete-other-windows) (split-window-sensibly) (balance-windows) (with-selected-window (save-window-excursion (other-window 1) (selected-window)) (switch-to-buffer qv-buffer) (setq buffer-undo-list t)) (add-hook 'post-command-hook 'update 'at-the-end t) (define-key dired-mode-map [(control ?c) (control ?q)] exit-keybinding) (setq undo-outer-limit max-size) (dired-hide-details-mode +1)) (defun exit () (setq-local quick-view-object nil) (remove-hook 'post-command-hook 'update t) (define-key dired-mode-map [(control ?c) (control ?q)] init-keybinding ) (kill-buffer qv-buffer) (dired-hide-details-mode -1) (set-window-configuration config) (message "exit qv")) (lambda (message) (apply message '())))) (define-key dired-mode-map [(control ?c) (control ?q)] (apply (qv) '(get-key))) -- No GNUs is bad news.