unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Alin Soare <as1789@gmail.com>
Cc: Emacs Dev <emacs-devel@gnu.org>
Subject: Re: Fwd: Tabs for console.
Date: Wed, 08 Dec 2010 23:29:36 -0500	[thread overview]
Message-ID: <jwvvd33bnd1.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <AANLkTinX9jJ6K5KCncFx+G9+uQYbswzVs7tb4o-2c3Do@mail.gmail.com> (Alin Soare's message of "Wed, 8 Dec 2010 10:14:01 +0200")

>> >> Where is it?  In the frame's parameters?  Or is it accessed via a new
>> >> frame-tabs and set-frame-tabs?
>> >>
>> >> struct frame
>> > {
>> > ...
>> >     /*
>> >      * an alist  of the form ((alist_tab_parameters))
>> >      */
>> >     Lisp_Object tab_bar_items;
>> > ...
>> > }
>> 
>> So it's not in the frame's parameters: how is it accessible from Elisp?
[...]
> So far it is accesible via frame-parameters, but in my code this access is
> not useful/used.

IIUC it is also (write-) accessible via `make-tab', right?

> I could separate all tabs parameters into a struct tab, and keep inside
> struct frame only 3 fields.

> struct frame
> {

>    bool subscribe_to_tabs;
>    int tab_bar_lines;
>    char *regexp;
> }

I don't care about such details for now: I'm concerned about the API it
presents to Elisp.

> Yes, like this. Or the :initcode is executed from (make-tab, like in my
> example, and for my example there is no reason to keep it memorized as a
> parameter in tab's alist parameters, because in this example it is not
> useful any more).

I'm still very far from understanding what you mean.
So here's how I imagine things working:

- some function to add/control/create a tabbar.
  (make-tab-bar PLACE)
  IIUC this function also accepts an INIT-CODE argument, which is run
  when the user presses the "+" button on the tab-bar.
- some function to add a tab to a tabbar
  (make-tab TABBAR ACTIVATE-FUNCTION DEACTIVATE-FUNCTION)
- probably also some function to delete a tab (delete-tab TABBAR TAB)
- probably also some deletion-hook in case the user presses the "X"
  button to delete a tab.

Now, all of ACTIVATE-FUNCTION, DEACTIVATE-FUNCTION, and DELETION-HOOK
could either be specified in make-tab or in make-tab-bar, depending on
whether we want to impose a uniform behavior.

If the ACTIVATE-FUNCTION is shared by all tabs, we'll also need each tab
to have a DATA argument, which is the equivalent of your environment.
  
> But the :initcode can be very useful, because a tab should be
> re-initialized sometimes.

That sounds odd.  When would that be?

> Yes, one can store private data, but if we need more private data than a
> variable, we need to name every stored value.

That doesn't matter to the tabbar code: the tab only ever needs 1 chunk of
private data passed to the activate-function.  That chunk can be
anything the activate-function needs: a struct, a list, an alist, you
name it: the tabbar code has no business looking inside.

>> Yes, the symbol `sym' assigned by `setq' above is a global variable.
>> It is assigned a value which is itself a symbol and that symbol is
>> indeed uninterned, but I'm talking about the symbol `sym' not about the
>> value stored into its value cell.
> This is a mistake in my code, it should not be . I forgot to call  a
> (make-unbound 'sym)

That doesn't solve the problem: it still affects the global variable
`sym'.

> ya, in my code I called the symbols tab:activate, and in messages I wrote
> :activate. Sorry.

No, you didn't write :activate, but :activate-code.  Such vagueness
makes it very difficult to figure out what you mean.

>> The tabbar code doesn't need to care about what that value is, it just
>> needs to store it and pass it along; the init-code and (de)activate
>> functions will decide what to do with it.
>> It can be a window-config or anything else.  That should make your
>> environment business unnecessary.
> Yes, if it is only 1 value, we know that it is on the first position of
> private-data list, and can access it via cadr.

"we" here would be the activate-function, right?

>> So it will need to change.  But does `make-tab' create a new tab or
>> a tabbar?  If a tab, then I don't understand any more why the init-code
>> is needed.

> Yes, tabs must be separate from frames, and keep indepedent of every
> other thing.  A frame/window can subscribe to tabs, and show them when
> it is activated/etc.

That doesn't answer my question: does `make-tab' create a new tab or
a tabbar?


        Stefan



  parent reply	other threads:[~2010-12-09  4:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <AANLkTim8zuFRh2L81g9KgtDon=U5Mvr+QO+HWGE1nqXP@mail.gmail.com>
2010-10-27 16:39 ` Fwd: Tabs for console Alin Soare
2010-11-08 19:22   ` Stefan Monnier
2010-11-08 19:51     ` Alin Soare
     [not found]       ` <AANLkTim8BoGpECQUUNfPidbn2k_HP77sykR=HYqw9BOE@mail.gmail.com>
     [not found]         ` <AANLkTinPBfV8OC7d9qOBWGW6130D2nXjg+=Nv2rKqMr1@mail.gmail.com>
     [not found]           ` <jwvhbewqnjj.fsf-monnier+emacs@gnu.org>
2010-12-02 22:43             ` Alin Soare
2010-12-02 22:45               ` Alin Soare
2010-12-03  8:19                 ` martin rudalics
2010-12-03  9:37                 ` Andreas Schwab
2010-12-04 21:48                   ` Alin Soare
2010-12-03  9:52                 ` Andreas Schwab
2010-12-03 11:11                   ` Alin Soare
2010-12-03 12:29                     ` Dimitri Fontaine
2010-12-04 21:42                       ` Alin Soare
2010-12-04 21:55                       ` Alin Soare
2011-03-11  8:52       ` A Soare
     [not found]     ` <AANLkTikwua2bfyvJkt+sn2vR_CzTZA6Hs0Lw=NJSVwT4@mail.gmail.com>
     [not found]       ` <jwvd3peoig0.fsf-monnier+emacs@gnu.org>
     [not found]         ` <AANLkTikPRKbvq0mg2X1Huio1z5sF3UvF6+cpT10mH-H-@mail.gmail.com>
     [not found]           ` <jwvzksilkfd.fsf-monnier+emacs@gnu.org>
     [not found]             ` <AANLkTi=MiubmGJ_Gk9OVzHY7uc+DOkHHpj5Ht+j7uNx8@mail.gmail.com>
     [not found]               ` <jwvtyiqk2al.fsf-monnier+emacs@gnu.org>
     [not found]                 ` <AANLkTi=0g00xn2P_yKE0gGkH-ZaZSvz+8yY=yy2=-6W=@mail.gmail.com>
     [not found]                   ` <jwvsjyai7lv.fsf-monnier+emacs@gnu.org>
2010-12-07  4:47                     ` Fwd: " Alin Soare
2010-12-07  4:50                       ` Alin Soare
2010-12-07 17:06                       ` Stefan Monnier
2010-12-08  8:14                         ` Alin Soare
     [not found]                           ` <AANLkTikaXr_4bVR2_v7HVFfPB93Sw10e63cKqTRwOunS@mail.gmail.com>
2010-12-08 11:16                             ` Alin Soare
2010-12-09  4:29                           ` Stefan Monnier [this message]
2010-12-09  8:26                             ` Fwd: " Alin Soare
2010-12-10  3:35                               ` Stefan Monnier
2010-12-10  8:15                                 ` Alin Soare
2010-12-10 20:13                                   ` Stefan Monnier
2010-12-10 21:09                                     ` Alin Soare
2010-12-10 21:23                                       ` Davis Herring
2010-12-10 21:34                                         ` Alin Soare
2010-12-12 20:02                                           ` Alin Soare
2010-12-13 17:23                                             ` Stefan Monnier
2010-12-13 21:01                                               ` Alin Soare
2010-12-14 15:25                                 ` Alin Soare
2010-10-27 20:34 ` Alin Soare

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvvd33bnd1.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=as1789@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).