emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [External] : Re: A feature to go to last edit locations


From: Jean Louis
Subject: Re: [External] : Re: A feature to go to last edit locations
Date: Wed, 15 Feb 2023 08:45:19 +0300
User-agent: Mutt/2.2.9+54 (af2080d) (2022-11-21)

* Drew Adams <drew.adams@oracle.com> [2023-02-14 19:24]:
> > > And you can sort/access Info bookmarks that you've visited most or
> > > least etc.
> > 
> > That is good feature. I have made more stronger
> > generalization and defined elementary objects.
> > One could think of it as bookmarks, but they are
> > not (only). Objects can be chunks of text, word,
> > paragraph, PDF, PDF by page, Message-ID, Video,
> > Video at time, anything which is defined by user.
> 
> Same with bookmarks.  You can bookmark anything Emacs can know or
> reach.  And without defining anything you can bookmark regions and
> (if you use library zones.el) sets of regions (zones).

I did not know. I will use it as food thought.

I see it is excellent:
https://www.emacswiki.org/emacs/BookmarkPlus

I did not research it well, tried short, and did not research. You
have done good work. Because I have not research it, I did not know
it.

I am following the design here:

Elementary Objects:
https://www.dougengelbart.org/content/view/110/460/#2a1a

Then it becomes so similar to the work with "Bookmark+" library.

There are several nice features that I have to duplicate to adapt for
RCD Notes & Hyperscope for Emacs.

The last "Emacs Points" were not meant to be bookmarks, more like a
list of global and local locations which user may use to move there
and forth.

In general we have similar features, you call it bookmarks, I call it
Hyperdocuments and objects.

Purpose of our work is not same. My objects can be for example Org
objects, it would be non-file database entry. I do not think that
Bookmark+ has been designed to hold for example LaTeX.

I like and understand your writing, like here in example:

> * You can combine bookmarks, to make composite, or sequence,
>  bookmarks. Invoking a sequence bookmark invokes each of its component
>  bookmarks in turn. A component bookmark can itself be a sequence
>  bookmark.

I have it same, I can combine, or find interesection of elementary
objects, I can mark what I need or take all list of visible ones and
make new object contaning all those.

What is to be done with the object is decided by it's type and
subtype.

I understand that ideas spring up in my mind which you read and then
say "Hey, that already exists in Bookmark+", but I did not know.

Even then, objects are saved in the database, and related to planning,
and represent themselves notes, tasks, not just bookmarks pointing to
notes and tasks, they are related to people, can be shared and so I
canot reuse your library, apart from reusing ideas, food for thought.

I am trying to find all the 70 types, and I tried this to see it:

(insert (format "%s" bmkp-types-alist))((autofile
. bmkp-autofile-history) (autonamed . bmkp-autonamed-history)
(bookmark-file . bmkp-bookmark-file-history) (bookmark-list
. bmkp-bookmark-list-history) (desktop . bmkp-desktop-history) (dired
. bmkp-dired-history) (dired-this-dir . bmkp-dired-history) (eww
. bmkp-eww-history) (file . bmkp-file-history) (file-this-dir
. bmkp-file-history) (gnus . bmkp-gnus-history) (image
. bmkp-image-history) (info . bmkp-info-history) (local-file
. bmkp-local-file-history) (man . bmkp-man-history) (non-file
. bmkp-non-file-history) (region . bmkp-region-history) (remote-file
. bmkp-remote-file-history) (snippet . bmkp-snippet-history)
(specific-buffers . bmkp-specific-buffers-history) (specific-files
. bmkp-specific-files-history) (temporary . bmkp-temporary-history)
(url . bmkp-url-history) (variable-list . bmkp-variable-list-history))

I have found these 24 possible completions:

autofile autonamed bookmark-file bookmark-list desktop dired
dired-this-dir eww file file-this-dir gnus image info local-file man
non-file region remote-file snippet specific-buffers specific-files
temporary url variable-list

I would like to see those 70 types.

I have tried invoking function:

> Bookmark+ adds over 70 types of bookmark. (You can see what they all
> are by invoking function ‘bmkp-types-alist’.)

But that does not seem to be the function, it is alist, but I do not
see 70 types.

I fully agree to the idea of bookmarks how you expanded the feature. 

Can you save window configuration over session? I would like to do
that. That is not same as desktop which is slow and cannot narrow to
window configuration.

Defining user types is clear to me, though not as easy. 

With objects I can also change their types and subtypes at any time.

And there is the notion of a set, to go inside of the set of objects,
into the subtree. I believe it is possible in bookmarks+ too.

The work you have done in general is easier managed by using the
database. That way it could become easily collaborative Hyperdocument
management.

I have tagging too, so it would be trivial function to start tagging
single or multiple files in Dired, as all files would be slurped
automatically as Hyperdocuments or elementary objects into the Dynamic
Knowledge Repository and Emacs would only ask me for tags. Those
existing files in the database would be re-used.

You have done great documentation and I have also to start doing it
for my software.

There are many similar features developed from my side.

- capturing region (bookmarking) I did not do, it would be one minute
  to implement it.

- snippet to kill ring, I have that all and use it very often. Object
  has name (which could be arbitrary long), description, text, report,
  internal report, hyperlink, arguments, and many other
  properties. Then many times I need name+link, or
  name+description+link, or name + text, or only text in kill ring,
  that is single key. Often I want it inserted in the side window.

- I also have marking, deleting, activatig (jumping to), but my
  objects can be any type of markup, they are like files but in the
  database, but can point in different types to files on the file
  system

- In fact file in file system is not what I remember, I work almost
  exclusively with the Dynamic Knowledge Repository and not with file
  sytem directly. 

- No matter what is the type or subtype, I have made function to list
  all bookmarks of the type where cursor is positioned. You have made
  all the special functions or commands in menu to jump to those
  types or show list of interesection. If I press C-u then I am asked
  for types, but otherwise I can list by types or subtypes depending
  where is cursor.

- I strive to make automatic functions, automatic keybindings,
  automated menus. If thers is new type, that shall appear
  automatically. The key binding may be explained uniquely in the type
  data itself, not in Emacs Lisp program, but in the
  database. Database can make sure it is unique.

As your thinking and design was straight forward, I have to use this
page for my learning and adaptation, to make RCD Notes & Hyperscope
for GNU Emacs more straight forward.

Bookmark+ by Drew Adams:
https://www.emacswiki.org/emacs/BookmarkPlus

My personal work is rather capricious and not necessarily
systematic. The system works, that is what matters, development is not
for purpose of development or pleasing others but for business
needs. Though one day it will come out.

Features are listed here:

RCD Notes & Hyperscope for GNU Emacs, The Dynamic Knowledge Repository:
https://gnu.support/gnu-emacs/rcd-notes-for-gnu-emacs/index.html

> > It is true that I can jump to it, I can insert it in text, or make
> > reports, project documents, convert to hyperlinks and similar.
> > 
> > How is object activated, can be also defined by user. It is not hard
> > coded. Function can be inserted in the database by administrator.
> 
> Same with bookmarks.  "Jumping to" a bookmark can mean/do anything.
> A bookmark is essentially a named, usually-persistent closure.

Some of my often used cases:

- With markup Asciidoctor or LaTeX, etc., jumping fetch the text from
  database, creates the PDF, and displays it. It is file which is not
  on file system and it's PDF or HTML is generated at each new "jump"
  which I call "Activation". Object get it's file name automatically,
  usually the UUID or ID, or user can assign file name.

  Another type of activation is sharing, there is sharing to related
  people, or those not yet related. Related people are more
  important. Then objects may be shared by using E-mail, XMPP, SMS,
  anyhow. If necessary object may be published and then it's URL
  shared with the related or unrelated person. Any unrelated person
  becomes related with tag similar to "INFORMED BY EMAIL".

  Then any markup can be converted any how, so it is quite possible
  for me to mix Asciidoctor, text, Markdown, Org, txt2tags,
  reStructuredText how I wish, this is because objects are separate
  and markup conversions can be defined in separate list. If the
  mixed-object Hyperdocument has LaTeX markup, all the consisting
  elementary objects would be converted from their markup to main
  LaTeX markup, as example.

In general my system is used for people relationship management and
business project management and planning.

> > When moving between objects, I have "ring" in the database, this makes
> > it possible to visually reconstruct what was done, visited, by any
> > single day by which individual collaborative user. That is similar to
> > "last visit" only related to any kind of object, need not be bookmark.
> 
> Maybe (maybe not) your rings are like Bookmark+'s feature of letting
> you cycle among any set of bookmarks, either direction.  Cycling
> usually means "jumping", but it can mean doing anything at all
> to/with the bookmarks.

I like to cycle through buffers or just cycling over names of objects
(Hyperdocuments) with single key "." or "," for forward and
backward. Because elementary objects are in their sets, the cycling
becomes litle more semantic.

Though the single ring point of the "cycle" has it's date creation,
that means I could derive it to the list of all viewed, tackled,
activating, edited Hyperdocuments of that day, or even hour. This
implies that work of the day can be seen.

People section is interesting and communication center, it is like
call center. All the 100 last people with communication are shown and
then this helps visually that they do not get lost. People are ranked
too, it is easy to get list of 200 or 1000 people who matters, and
initiate calls, SMS, XMPP, e-mails with them. 

> https://www.emacswiki.org/emacs/BookmarkPlus#BookmarkNavigationList
> 
> > Time of last activation (visit) I keep also in a general log
> 
> A general log is what bookmarks intentionally get away from.
> 
> A feature of the basic design of bookmarks is that info about a
> thing - or one aspect/view/set-of-info about a thing - is stored in
> a record in a bookmark file, which is totally separate from whatever
> might store that thing itself.  And you can have any number of
> bookmark files.  And the same bookmark can be in any number of
> bookmark files.

I understand it the notion behind it.

General log is used on my side for human to spot patterns and needs of
a human, as that way I can see which actions are repeated or what
could be integrated better.

That bookmarked was activated (jumped to) is stored in the ring table,
separate list of data, and also in hyperdocumentactions table, though
there are many ways of tackling objects, some are edited heavily as
they, some are never edited only jumped to, some are tagged, some have
timestamps, people related, too many things. Those different
timestamps get automatically generated in those other different
tables. They can serve as information what was done in past with which
object. Putting that huge information in single object would be on my
side overkill.

If it is only simple one like "last jumped to", it works without
problem.

It is of course best when everything is stored in the object. With
complexities that becomes less helpful. Example is having objects with
20 different markups, 101 types, and 107 subtypes. How many
combinations are those? I am using about 305 combinations, but do not
believe that is a total number. And this is only one example among
many others.

Now if I keep that "type" stored in the same data object, that would
imply that my program need to know about that type, it implies I must
program the type, and work on it.

Isn't it better having types, subtypes, however we call it, to be in a
separate list, and then let the user define what to do based on that
type. Normally it is simple function like (hyperscope-evince hs::id)
which would open up PDF indexed (bookmarked).

The notion comes from relational database principles, tables are
related. Keeping it in single table is possible, though makes things
with development rather harder, as it demands programmer to program.

Instead one can make user to define user's extension, and basic
program remains the same.

-- 
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

In support of Richard M. Stallman
https://stallmansupport.org/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]