From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Vitalie Spinu Newsgroups: gmane.emacs.devel Subject: Re: [Emacs-diffs] widen-limits c331b66: Implement buffer-widen-limits functionality Date: Tue, 22 Mar 2016 20:44:52 +0100 Message-ID: <8737riqouj.fsf@gmail.com> References: <20160322022539.16038.77264@vcs.savannah.gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1458675911 28501 80.91.229.3 (22 Mar 2016 19:45:11 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 22 Mar 2016 19:45:11 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Mar 22 20:45:05 2016 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 1aiSEj-0000z3-AU for ged-emacs-devel@m.gmane.org; Tue, 22 Mar 2016 20:45:05 +0100 Original-Received: from localhost ([::1]:39299 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiSEi-0002ba-SO for ged-emacs-devel@m.gmane.org; Tue, 22 Mar 2016 15:45:04 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40466) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiSEd-0002ag-LP for emacs-devel@gnu.org; Tue, 22 Mar 2016 15:45:01 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aiSEY-0005Rh-PJ for emacs-devel@gnu.org; Tue, 22 Mar 2016 15:44:59 -0400 Original-Received: from mail-wm0-x234.google.com ([2a00:1450:400c:c09::234]:36131) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiSEY-0005Rd-7b for emacs-devel@gnu.org; Tue, 22 Mar 2016 15:44:54 -0400 Original-Received: by mail-wm0-x234.google.com with SMTP id r129so108477616wmr.1 for ; Tue, 22 Mar 2016 12:44:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=gvUl4S3gERxUnaaqPCAHdH8eOWidcCbn2Fqb/CnG1To=; b=MuwWdApWWiKWUGyYxgWReEwSer94ilmqgkPY45CIhlEq/Gbna/f6ysWnk4jD1qoZNb JUQv072qaBIjrNe5Y5ah9l1XPP2xNmohUrDiGkLFYwOgXcoCGYRjop+geFUaTyTN3hv5 Q99fiYlaB5mc8x2MvuBIOJbOsv7l8BIpGxzNbtrm8FvsUW6pjCuGj/OLrrrztj9dTHb3 H/gKj5x12uqgW9+ZMVTwtGyp9IflMK8siOAtOZk8MdJp+Pn6MfJmICCjPPpObjQ5utCU pOj0Rv17WBQOAOHfMbVHqmmZ3CwTkF31sLBBMj5xWtpWUXhag3090QaMeORUdggdkM6g rpNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=gvUl4S3gERxUnaaqPCAHdH8eOWidcCbn2Fqb/CnG1To=; b=F4Sc5aNRrGQAyY+jUliXX4OD4XZ5d/Mj7u2n3HR6NSkmzWLr7y9Hh6ojvM8UUWQeFs DA3PKJ9JzXrdrr1Ia2sfvO9p3PVNQ8b5G/CpYoTibYOjfhHhJtq05sEXd1jYMI1e1voc fKZxR3c1lR4OrO8WyQ+IZamBRHqzlY9dhR8F4CYez+UI8I19ugDrg37FOc69Jq/I3JS3 6ZFWqp+8AovzICK3J1HuM3aoU2zJ6Xbw/39JcfLGuLZ/iUJVRXX907BQ819JDESdfIIM cL8YOwFwPGMTbvHv1cPUs+NWbWNoLdhOi/ABgFecMgljvqgPxzcxGcWhytoLPbfVLq7+ ZePg== X-Gm-Message-State: AD7BkJKPfZM6pDNm6mvxpbKx/BCgGf2RW8oQV68tucAVs2YV1GpRVxCcrbyMcD1t6unflg== X-Received: by 10.28.173.71 with SMTP id w68mr22981721wme.88.1458675893459; Tue, 22 Mar 2016 12:44:53 -0700 (PDT) Original-Received: from localhost ([143.176.214.220]) by smtp.gmail.com with ESMTPSA id g203sm18775573wmf.23.2016.03.22.12.44.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Mar 2016 12:44:52 -0700 (PDT) In-Reply-To: (Stefan Monnier's message of "Tue, 22 Mar 2016 08:08:22 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.92 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::234 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:202099 Archived-At: Sure. Fixed. This convention is not mentioned in CONTRIBUTE btw. Vitalie >> On Tue, Mar 22 2016 08:08, Stefan Monnier wrote: > Hi Vitalie, > For tentative branches where you don't want to have to follow all the > coding conventions (especially the convention about formatting and > content of commit messages), please use branch names of the form "scratch/*". > Stefan >>>>>> "Vitalie" == Vitalie Spinu writes: >> branch: widen-limits >> commit c331b6626a427fb89303fea75faebd8c39d343a8 >> Author: Vitalie Spinu >> Commit: Vitalie Spinu >> Implement buffer-widen-limits functionality >> `widen` now respects restrictions imposed by new variable >> `hard-widen-limits` >> --- >> src/buffer.c | 19 +++++++++++++++++-- >> src/buffer.h | 17 +++++++++++++++++ >> src/editfns.c | 15 ++++++++++++++- >> 3 files changed, 48 insertions(+), 3 deletions(-) >> diff --git a/src/buffer.c b/src/buffer.c >> index f06d7e0..1b62d3a 100644 >> --- a/src/buffer.c >> +++ b/src/buffer.c >> @@ -329,6 +329,11 @@ bset_scroll_up_aggressively (struct buffer *b, Lisp_Object val) > b-> scroll_up_aggressively_ = val; >> } >> static void >> +bset_widen_limits (struct buffer *b, Lisp_Object val) >> +{ >> + b->widen_limits_ = val; >> +} >> +static void >> bset_selective_display (struct buffer *b, Lisp_Object val) >> { > b-> selective_display_ = val; >> @@ -847,6 +852,7 @@ CLONE nil means the indirect buffer's state is reset to default values. */) >> bset_display_count (b, make_number (0)); >> bset_backed_up (b, Qnil); >> bset_auto_save_file_name (b, Qnil); >> + bset_widen_limits (b, b->base_buffer->widen_limits_); >> set_buffer_internal_1 (b); >> Fset (intern ("buffer-save-without-query"), Qnil); >> Fset (intern ("buffer-file-number"), Qnil); >> @@ -961,6 +967,7 @@ reset_buffer_local_variables (struct buffer *b, bool permanent_too) >> things that depend on the major mode. >> default-major-mode is handled at a higher level. >> We ignore it here. */ >> + bset_widen_limits(b, Qnil); >> bset_major_mode (b, Qfundamental_mode); >> bset_keymap (b, Qnil); >> bset_mode_name (b, QSFundamental); >> @@ -2167,7 +2174,7 @@ so the buffer is truly empty after this. */) >> { >> Fwiden (); >> - del_range (BEG, Z); >> + del_range (BEGWL, ZWL); > current_buffer-> last_window_start = 1; >> /* Prevent warnings, or suspension of auto saving, that would happen >> @@ -5037,6 +5044,7 @@ init_buffer_once (void) >> bset_display_count (&buffer_local_flags, make_number (-1)); >> bset_display_time (&buffer_local_flags, make_number (-1)); >> bset_enable_multibyte_characters (&buffer_local_flags, make_number (-1)); >> + bset_widen_limits (&buffer_local_flags, make_number (-1)); >> /* These used to be stuck at 0 by default, but now that the all-zero value >> means Qnil, we have to initialize them explicitly. */ >> @@ -5160,6 +5168,7 @@ init_buffer_once (void) >> bset_cursor_type (&buffer_defaults, Qt); >> bset_extra_line_spacing (&buffer_defaults, Qnil); >> bset_cursor_in_non_selected_windows (&buffer_defaults, Qt); >> + bset_widen_limits (&buffer_defaults, Qnil); >> bset_enable_multibyte_characters (&buffer_defaults, Qt); >> bset_buffer_file_coding_system (&buffer_defaults, Qnil); >> @@ -5367,7 +5376,6 @@ defvar_per_buffer (struct Lisp_Buffer_Objfwd *bo_fwd, const char *namestring, >> emacs_abort (); >> } >> - >> /* Initialize the buffer routines. */ >> void >> syms_of_buffer (void) >> @@ -5796,6 +5804,13 @@ If you set this to -2, that means don't turn off auto-saving in this buffer >> if its text size shrinks. If you use `buffer-swap-text' on a buffer, >> you probably should set this to -2 in that buffer. */); >> + DEFVAR_PER_BUFFER ("buffer-widen-limits", &BVAR (current_buffer, widen_limits), >> + Qnil, >> + doc: /* When non-nil `widen` will widen to these limits. >> +Must be a cons of the form (MIN . MAX) where MIN and MAX are integers >> +of hard widen limits in this buffer. This is an experimental variable >> +intended primarily for multi-mode engines. */); >> + >> DEFVAR_PER_BUFFER ("selective-display", &BVAR (current_buffer, selective_display), >> Qnil, >> doc: /* Non-nil enables selective display. >> diff --git a/src/buffer.h b/src/buffer.h >> index 87b7cee..4075bbf 100644 >> --- a/src/buffer.h >> +++ b/src/buffer.h >> @@ -59,6 +59,10 @@ INLINE_HEADER_BEGIN >> #define Z (current_buffer->text->z) >> #define Z_BYTE (current_buffer->text->z_byte) >> +/* Positions that take into account widen limits. */ >> +#define BEGWL (BUF_BEGWL (current_buffer)) >> +#define ZWL (BUF_ZWL(current_buffer)) >> + >> /* Macros for the addresses of places in the buffer. */ >> /* Address of beginning of buffer. */ >> @@ -128,6 +132,15 @@ INLINE_HEADER_BEGIN >> : NILP (BVAR (buf, begv_marker)) ? buf->begv_byte \ >> : marker_byte_position (BVAR (buf, begv_marker))) >> +/* Hard positions in buffer. */ >> +#define BUF_BEGWL(buf) \ >> + ((NILP (BVAR (buf, widen_limits))) ? BUF_BEG (buf) \ >> + : XINT( XCAR (BVAR (buf, widen_limits)))) >> + >> +#define BUF_ZWL(buf) \ >> + ((NILP (BVAR (buf, widen_limits))) ? BUF_Z (buf) \ >> + : XINT( XCDR (BVAR (buf, widen_limits)))) >> + >> /* Position of point in buffer. */ >> #define BUF_PT(buf) \ >> (buf == current_buffer ? PT \ >> @@ -150,6 +163,7 @@ INLINE_HEADER_BEGIN >> : NILP (BVAR (buf, zv_marker)) ? buf->zv_byte \ >> : marker_byte_position (BVAR (buf, zv_marker))) >> + >> /* Position of gap in buffer. */ >> #define BUF_GPT(buf) ((buf)->text->gpt) >> #define BUF_GPT_BYTE(buf) ((buf)->text->gpt_byte) >> @@ -748,6 +762,9 @@ struct buffer >> See `cursor-type' for other values. */ >> Lisp_Object cursor_in_non_selected_windows_; >> + /* Cons of hard widen limits */ >> + Lisp_Object widen_limits_; >> + >> /* No more Lisp_Object beyond this point. Except undo_list, >> which is handled specially in Fgarbage_collect. */ >> diff --git a/src/editfns.c b/src/editfns.c >> index 2ac0537..e5ab637 100644 >> --- a/src/editfns.c >> +++ b/src/editfns.c >> @@ -3480,12 +3480,25 @@ DEFUN ("delete-and-extract-region", Fdelete_and_extract_region, >> return empty_unibyte_string; >> return del_range_1 (XINT (start), XINT (end), 1, 1); >> } >> + >> >> DEFUN ("widen", Fwiden, Swiden, 0, 0, "", >> doc: /* Remove restrictions (narrowing) from current buffer. >> -This allows the buffer's full text to be seen and edited. */) >> +This allows the buffer's full text to be seen and edited. >> +If `buffer-widen-limits` is non-nil, widen only to those limits. */) >> (void) >> { >> + >> + if (!NILP (BVAR(current_buffer, widen_limits))) >> + { >> + Lisp_Object hl = BVAR(current_buffer, widen_limits); >> + CHECK_CONS(hl); >> + CHECK_NUMBER(XCAR(hl)); >> + CHECK_NUMBER(XCDR(hl)); >> + Fnarrow_to_region(XCAR(hl), XCDR(hl)); >> + return Qnil; >> + } >> + >> if (BEG != BEGV || Z != ZV) > current_buffer-> clip_changed = 1; >> BEGV = BEG; >> _______________________________________________ >> Emacs-diffs mailing list >> Emacs-diffs@gnu.org >> https://lists.gnu.org/mailman/listinfo/emacs-diffs