1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-04 08:47:11 +00:00
emacs/lisp
Michael Albinus 684950eb94 Make call of remote `id' more performant in Tramp
* lisp/net/tramp-adb.el (tramp-adb-handle-file-exists-p): New defun.
(tramp-adb-file-name-handler-alist): Use it.
(tramp-adb-handle-file-executable-p)
(tramp-adb-handle-file-readable-p)
(tramp-adb-handle-file-writable-p)
(tramp-adb-handle-get-remote-uid)
(tramp-adb-handle-get-remote-gid)
(tramp-adb-handle-get-remote-groups): Use caches consequently.

* lisp/net/tramp-sh.el (tramp-perl-id, tramp-python-id): New defconsts.
(tramp-sh-handle-get-remote-uid, tramp-sh-handle-get-remote-gid)
(tramp-sh-handle-get-remote-groups): Use caches consequently.
(tramp-sh-handle-file-writable-p): Use `file-writable-p'.
(tramp-expand-script): Handle also "python" expansion.
(tramp-get-remote-id): Do not set connection property anymore,
this is done differently now.
(tramp-get-remote-uid-with-id, tramp-get-remote-uid-with-perl)
(tramp-get-remote-uid-with-python, tramp-get-remote-gid-with-id)
(tramp-get-remote-gid-with-perl)
(tramp-get-remote-gid-with-python): Remove.

* lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-file-executable-p)
(tramp-sudoedit-handle-file-exists-p)
(tramp-sudoedit-handle-file-readable-p)
(tramp-sudoedit-handle-file-writable-p):
(tramp-sudoedit-handle-get-remote-uid)
(tramp-sudoedit-handle-get-remote-gid)
(tramp-sudoedit-handle-get-remote-groups): Use caches consequently.

* lisp/net/tramp.el (tramp-check-cached-permissions):
Call `tramp-get-remote-groups' only if needed.
(tramp-get-remote-groups): Do not return default value.
(tramp-read-id-output): New defun.

* test/lisp/net/tramp-tests.el (tramp--test-deftest-with-perl):
Suppress also remote `id'.
2022-09-08 10:36:08 +02:00
..
calc Use substitute-command-keys in a few more places 2022-08-23 21:08:38 +02:00
calendar * lisp/calendar/time-date.el (seconds-to-time): Use the original arg list 2022-08-14 10:41:40 -04:00
cedet Fix semantic-find-file-noselect binding of recentf-exclude 2022-08-31 12:11:43 +02:00
emacs-lisp cl-symbol-macrolet: Fix recent regression 2022-09-06 00:08:35 -04:00
emulation Make some versions in docs match package version 2022-09-01 11:12:06 +02:00
erc Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
eshell Let external Eshell processes send stdout and stderr to different places 2022-09-04 15:15:01 -07:00
gnus Use shr as default for mm-text-html-renderer 2022-08-26 22:14:17 +02:00
image image-dired: Fix moving forward when marking files 2022-09-08 02:15:22 +02:00
international Allow easy entry of single chars in `read-char-by-name' 2022-09-02 10:56:59 +02:00
language Speed up display of Arabic 2022-08-06 16:55:51 +03:00
leim/quail Improve the bengali-probhat input method 2022-08-10 15:24:23 +03:00
mail Treat smtp-auth method from auth-info as a symbol 2022-08-25 18:14:55 +02:00
mh-e Make mh-colors-available-p obsolete 2022-08-24 06:38:36 +02:00
net Make call of remote `id' more performant in Tramp 2022-09-08 10:36:08 +02:00
nxml Make rng-collapse-space obsolete 2022-08-09 22:44:21 +02:00
obsolete Make "rlogin" method obsolete in url*.el 2022-09-03 07:23:08 +02:00
org Merge from origin/emacs-28 2022-09-05 06:30:32 +02:00
play Use frame-monitor-attributes in gamegrid 2022-09-02 11:36:10 +02:00
progmodes Apply syntax highlighting for all python f-strings 2022-09-06 12:54:42 +02:00
term * lisp/term/linux.el (gpm-mouse-enable): Remove left-over declaration 2022-09-03 22:58:44 -04:00
textmodes Use use-region-beginning/end in replacement commands (bug#45607) 2022-09-04 19:55:59 +03:00
url Make "rlogin" method obsolete in url*.el 2022-09-03 07:23:08 +02:00
vc Add new user option 'diff-add-log-use-relative-names' 2022-09-08 08:21:15 +02:00
abbrev.el Make add-mode-abbrev use the active region 2022-07-11 15:34:15 +02:00
align.el Prefer :risky defcustom keyword 2022-07-11 11:30:00 +02:00
allout-widgets.el
allout.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
ansi-color.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
apropos.el Mark keys in apropos.el for substitute-command-keys 2022-08-03 16:18:00 +02:00
arc-mode.el Make `C' in over tramp work in archive mode 2022-07-17 12:12:58 +02:00
array.el Fix namespacing issues in array.el 2022-08-10 11:21:24 +02:00
auth-source-pass.el
auth-source.el auth-source: Fix wrong-type-argument when searching secret services 2022-08-22 16:56:57 +02:00
autoinsert.el Put safe-local-variable property on auto-insert 2022-07-08 13:08:21 +02:00
autorevert.el Don't end autorevert message with a period 2022-08-21 17:28:14 +02:00
avoid.el Silence byte-compiler warning about x-pointer-invisible 2022-05-27 09:42:12 +02:00
battery.el Fix Linux APM BIOS flag testing in battery.el 2022-08-17 20:11:25 +03:00
bindings.el Fix mode line mouse-1 binding when showing only column numbers 2022-07-23 10:32:50 +03:00
bookmark.el Prefer pos-bol and pos-eol in bookmark.el 2022-08-21 18:04:40 +02:00
bs.el Make bs-help obsolete in favor of describe-mode 2022-07-21 09:23:20 +02:00
buff-menu.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
button.el Add support for user-customizable icons 2022-07-28 14:39:38 +02:00
calculator.el
case-table.el
cdl.el
ChangeLog.1
ChangeLog.2
ChangeLog.3
ChangeLog.4
ChangeLog.5 ; Fix typos 2022-07-19 14:13:25 +02:00
ChangeLog.6
ChangeLog.7
ChangeLog.8
ChangeLog.9 ; Fix typos: prefer American spelling 2022-07-13 13:04:22 +02:00
ChangeLog.10
ChangeLog.11
ChangeLog.12 ; Fix typos 2022-08-08 14:23:29 +02:00
ChangeLog.13
ChangeLog.14
ChangeLog.15
ChangeLog.16
ChangeLog.17 ; Fix typos: prefer American spelling 2022-07-13 13:04:22 +02:00
char-fold.el Use format-prompt' in describe-char-fold-equivalences' 2022-09-02 15:11:50 +02:00
chistory.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
cmuscheme.el
color.el Merge from origin/emacs-28 2022-05-28 07:06:30 +02:00
comint.el New user option to disable deleting current input in comint mouse-2 2022-07-23 09:15:24 +02:00
completion.el ; * lisp/completion.el: Remove code commented out since 1990. 2022-07-12 12:22:57 +02:00
composite.el Fix deletion of composed text 2022-06-27 15:32:53 +03:00
COPYING
cus-dep.el Adjust autoload require in cus-dep.el 2022-08-04 17:03:14 +02:00
cus-edit.el Under no-X builds, allow any value for 'fringe-bitmap' options 2022-09-01 18:34:45 -07:00
cus-face.el Update font scaling documentation to not talk about "face height" 2022-06-20 01:26:05 +02:00
cus-start.el Only preserve PRIMARY and CLIPBOARD selection ownership by default 2022-07-15 21:47:09 +08:00
cus-theme.el
custom.el Make compat function custom-reset-variables obsolete 2022-08-07 14:50:05 +02:00
dabbrev.el
delim-col.el
delsel.el Revert "Make mouse-2 respect delete-selection mode" 2022-07-13 13:37:05 +02:00
descr-text.el Fix 'describe-char' in "C" locale 2022-08-10 15:31:59 +03:00
desktop.el Remove some spurious references to XEmacs 2022-08-03 11:41:43 +02:00
dframe.el Remove some XEmacs compat code for display-graphic-p 2022-05-15 01:10:11 +02:00
dired-aux.el dired-guess: Support zstandard archives 2022-09-08 02:48:46 +02:00
dired-x.el Move dired-guess commands from dired-x to dired 2022-08-17 16:21:09 +02:00
dired.el Fix update of Dired display when it was called on a cons cell 2022-09-04 08:40:52 +03:00
dirtrack.el ; * lisp/dirtrack.el: Restore important information in commentary. 2022-07-12 20:00:16 +03:00
disp-table.el ; Minor improvements in 'standard-display-by-replacement-char' 2022-09-08 10:14:10 +03:00
display-fill-column-indicator.el
display-line-numbers.el
dnd.el ; Fix typos: prefer American spelling 2022-07-14 12:13:31 +02:00
doc-view.el ; * lisp/doc-view.el (doc-view): Fix punctuation. 2022-08-30 19:35:25 +02:00
dom.el
dos-fns.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
dos-vars.el
dos-w32.el
double.el
dynamic-setting.el
ebuff-menu.el
echistory.el
ecomplete.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
edmacro.el * lisp/edmacro.el (edmacro-sanitize-for-string): Fix condition. 2022-08-19 13:41:31 +02:00
ehelp.el
elec-pair.el Make buffer-local-value obsolete as a generalized variable 2022-08-23 12:22:42 +02:00
electric.el Make buffer-local-value obsolete as a generalized variable 2022-08-23 12:22:42 +02:00
elide-head.el
emacs-lock.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
env.el * test/lisp/env-tests.el: New file. 2022-08-05 11:47:05 +02:00
epa-dired.el
epa-file.el
epa-hook.el
epa-ks.el time-convert): Deprecate calls without an explicit FORM arg 2022-08-05 18:46:31 -04:00
epa-mail.el * lisp/epa-mail.el (epa-mail-mode-map): Use defvar-keymap. 2022-07-02 06:36:26 +02:00
epa.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
epg-config.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
epg.el Simplify a few timestamps 2022-08-01 01:17:16 -07:00
expand.el
ezimage.el ; Delete stale and incorrect comment in ezimage.el 2022-08-08 21:33:24 +02:00
face-remap.el ; Fix typos 2022-07-14 12:52:32 +02:00
facemenu.el
faces.el Merge from origin/emacs-28 2022-09-02 23:57:18 +02:00
ffap.el Make ffap-file-finder work again 2022-09-06 12:24:32 +02:00
filecache.el
fileloop.el
filenotify.el
files-x.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
files.el Make file-parent-directory more efficient 2022-09-01 12:08:05 +02:00
filesets.el Make unused function filesets-ormap obsolete 2022-08-10 00:45:50 +02:00
find-cmd.el
find-dired.el * lisp/find-dired.el (lookfor-dired): Make obsolete. 2022-08-04 12:35:24 +02:00
find-file.el One more fix for find-file.el 2022-08-30 19:09:00 +03:00
find-lisp.el Add some new find-lisp commands 2022-09-06 12:54:42 +02:00
finder.el Make finder-mode inherit special-mode 2022-08-12 15:08:19 +02:00
flow-ctrl.el
foldout.el
follow.el
font-core.el Delete fast-lock.el and lazy-lock.el 2022-07-28 15:32:42 +02:00
font-lock.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
format-spec.el
format.el Re-add comment on autoloading cookies in preloaded files 2022-07-11 11:31:03 +02:00
forms.el Audit symbol quoting in Lisp doc strings 2022-05-24 12:36:51 +02:00
frame.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
frameset.el
fringe.el Make the bookmark fringe icon look like a bookmark 2022-08-15 21:15:42 -07:00
generic-x.el Speed up generation of loaddefs files 2022-05-31 18:08:33 +02:00
help-at-pt.el
help-fns.el ; * lisp/help-fns.el (help-fns--key-bindings): Fix previous change. 2022-09-06 00:15:49 +02:00
help-macro.el
help-mode.el Fix spacing in *Help* buttons 2022-07-22 22:43:38 +02:00
help.el Fix return value of help--key-description-fontified 2022-08-19 20:36:12 +02:00
hex-util.el ; * lisp/hex-util.el: Mention ash instead of lsh. 2022-08-09 13:20:00 +02:00
hexl.el
hfy-cmap.el Don't generate separate autoload file for htmlfontify 2022-06-05 18:23:17 +02:00
hi-lock.el Prefer :risky defcustom keyword 2022-07-11 11:30:00 +02:00
hilit-chg.el Clarify highlight-changes-rotate-faces doc string 2022-06-07 12:22:10 +02:00
hippie-exp.el
hl-line.el
htmlfontify.el Make htmlfontify-version variable obsolete 2022-08-13 13:00:46 +02:00
ibuf-ext.el * lisp/ibuf-ext.el (ibuffer-remove-alist): Simplify. 2022-08-09 21:58:00 +02:00
ibuf-macs.el Make ibuffer-aif obsolete in favor of if-let 2022-08-09 18:15:56 +02:00
ibuffer.el Make ibuffer-aif obsolete in favor of if-let 2022-08-09 18:15:56 +02:00
icomplete.el Prefer defvar-keymap in icomplete.el 2022-09-07 23:38:55 +02:00
ido.el Make ffap-file-finder work again 2022-09-06 12:24:32 +02:00
ielm.el
iimage.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
image-file.el
image-mode.el Merge from origin/emacs-28 2022-08-19 06:30:21 +02:00
image.el Fix some no-X build warnings 2022-08-22 19:22:33 +02:00
imenu.el Make imenu--create-keymap more resilient 2022-07-07 20:21:38 +02:00
indent.el Use substitute-command-keys in a few more places 2022-08-23 21:08:38 +02:00
info-look.el Make dynamic info-lookup more backwards-compatible 2022-08-27 15:44:12 +02:00
info-xref.el
info.el Merge from origin/emacs-28 2022-09-01 06:17:37 +02:00
informat.el Make some additional defcustom types more restrictive 2022-07-06 19:29:51 +02:00
isearch.el Use use-region-beginning/end in replacement commands (bug#45607) 2022-09-04 19:55:59 +03:00
isearchb.el
jit-lock.el * lisp/jit-lock.el (jit-lock-function): Update comment 2022-09-06 17:29:34 -04:00
jka-cmpr-hook.el
jka-compr.el
json.el
jsonrpc.el ; Fix typos: prefer American spelling 2022-07-14 12:13:31 +02:00
kermit.el
keymap.el Signal error on duplicate key definitions 2022-08-02 14:29:43 +02:00
kmacro.el Fix remaining byte-compile warnings in loaddefs.el 2022-07-31 11:29:52 +02:00
ldefs-boot.el ; Auto-commit of loaddefs files. 2022-09-01 05:10:19 +02:00
linum.el ; Delete some commented out code from linum.el 2022-08-25 20:03:47 +02:00
loadhist.el * lisp/loadhist.el (loadhist-unload-element): Remove auxiliary function info 2022-09-03 10:54:50 -04:00
loadup.el * lisp/loadup.el: Always fix-up all loaded compilation units 2022-08-18 11:03:25 +02:00
locate.el
lpr.el
ls-lisp.el Delete aliases obsolete since 21.1 and 22.1 2022-07-31 11:01:57 +02:00
macros.el
Makefile.in Clarify lisp/Makefile.in comment 2022-08-07 14:41:01 +02:00
man.el New option 'thrifty' for Man-notify-method 2022-08-26 13:12:28 +02:00
master.el
mb-depth.el
md4.el
menu-bar.el Prefer defvar-keymap in some trivial cases 2022-07-20 09:27:30 +02:00
midnight.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
minibuf-eldef.el Make minibuffer-eldef-shorten-default obsolete 2022-09-02 14:51:27 +02:00
minibuffer.el string-equal-ignore-case: new function 2022-07-26 13:49:28 -04:00
misc.el Add duplicate-dwim (bug#56418) 2022-07-26 14:23:30 +02:00
misearch.el
mouse-copy.el
mouse-drag.el
mouse.el Fix some no-X build warnings 2022-08-22 19:22:33 +02:00
mpc.el Fix namespace problem in mpc.el 2022-08-04 11:39:16 +02:00
msb.el Drop support for the dead third-party w3 package 2022-07-09 17:27:49 +02:00
mwheel.el ; Fix warning in mwheel.el 2022-07-04 17:01:53 +02:00
newcomment.el Revert "Allow commenting out white space lines in latex-mode" 2022-05-31 20:20:23 +02:00
notifications.el
novice.el
obarray.el
outline.el Don't replace the first character with an arrow in outline-minor-mode 2022-09-04 20:02:20 +03:00
paren.el Add a basic widget type for buffer predicates 2022-09-04 16:29:06 +02:00
password-cache.el
pcmpl-cvs.el
pcmpl-gnu.el
pcmpl-linux.el
pcmpl-rpm.el
pcmpl-unix.el Make pcomplete/{rsh,rlogin} into alias for pcomplete/ssh 2022-07-12 16:38:37 +02:00
pcmpl-x.el
pcomplete.el pcomplete-parse-arguments: Fix last change 2022-06-08 01:08:22 +03:00
pgtk-dnd.el Fix PGTK DND after a source leaves without dropping anything 2022-07-23 15:00:34 +08:00
pixel-scroll.el Fix pixel-scroll-precision in a corner case 2022-08-23 15:53:10 +02:00
plstore.el Autoload safe local property for plstore-encrypt-to 2022-07-06 20:53:52 +02:00
printing.el Use substitute-command-keys in a few more places 2022-08-23 21:08:38 +02:00
proced.el
profiler.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
ps-bdf.el
ps-mule.el
ps-print.el Merge from origin/emacs-28 2022-08-13 06:30:27 +02:00
ps-samp.el
README
recentf.el Do not connect unreachable remote hosts in recentf 2022-08-29 12:05:02 +02:00
rect.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
register.el
registry.el
repeat.el * lisp/repeat.el (describe-repeat-maps): Handle non-symbol keymap (bug#21634). 2022-07-06 20:40:48 +03:00
replace.el Use use-region-beginning/end in replacement commands (bug#45607) 2022-09-04 19:55:59 +03:00
reposition.el
reveal.el
rfn-eshadow.el
rot13.el
rtree.el
ruler-mode.el * lisp/ruler-mode.el (ruler-mode-map): Use defvar-keymap. 2022-07-02 06:36:26 +02:00
savehist.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
saveplace.el Fix namespace problem in saveplace.el 2022-08-05 12:28:59 +02:00
scroll-all.el
scroll-bar.el
scroll-lock.el
select.el Prevent selection converter from signalling if buffer is narrowed 2022-08-13 17:49:42 +08:00
server.el Merge from origin/emacs-28 2022-09-06 06:30:27 +02:00
ses.el Merge from origin/emacs-28 2022-07-14 11:37:42 +02:00
shadowfile.el
shell.el Remove some useless eval-when-compile 2022-07-04 14:56:11 +02:00
simple.el Use use-region-beginning/end in replacement commands (bug#45607) 2022-09-04 19:55:59 +03:00
skeleton.el
so-long.el Merge from origin/emacs-28 2022-07-14 11:37:42 +02:00
sort.el
soundex.el
speedbar.el Drop support for XEmacs package EFS 2022-07-28 00:11:12 +02:00
sqlite-mode.el Fix cl-generic bootstrap problems 2022-06-24 11:04:51 +02:00
sqlite.el
startup.el Fix point adjustment in recreated *Messages* buffers 2022-08-29 16:52:07 +03:00
strokes.el Remove many items obsolete since 24.1 2022-07-08 14:10:38 +02:00
subr.el Improve save-match-data hygiene 2022-09-07 18:02:26 +02:00
svg.el
t-mouse.el t-mouse.el: Make sure we apply the setting to new terminals 2022-08-30 17:55:03 -04:00
tab-bar.el * lisp/tab-bar.el (tab-prefix-map): Fix key broken by conversion. 2022-07-28 22:49:09 +03:00
tab-line.el Make some additional defcustom types more restrictive 2022-07-06 19:29:51 +02:00
tabify.el
talk.el
tar-mode.el Omit some (current-time) calls 2022-08-01 01:17:16 -07:00
tempo.el
term.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
thingatpt.el Clarify face-at-point doc string and add (thing-at-point 'face) 2022-08-12 15:54:55 +02:00
thread.el
thumbs.el Fix some no-X build warnings 2022-08-22 19:22:33 +02:00
time-stamp.el
time.el Make some defcustom types more restrictive 2022-07-05 18:33:29 +02:00
timezone.el
tmm.el
tool-bar.el Prefer defvar-keymap in some trivial cases 2022-07-20 09:27:30 +02:00
tooltip.el Delete obsolete variable tooltip-use-echo-area 2022-07-09 13:35:41 +02:00
transient.el * lisp/transient.el: Update to package version v0.3.7-158-gc09b34e 2022-08-07 00:28:18 +02:00
tree-widget.el Make the Unicode tree widget prettier 2022-06-05 15:59:37 +02:00
tutorial.el Don't have the tutorial ask to save if we haven't moved 2022-05-20 03:59:39 +02:00
type-break.el Rename timep to type-break-timep 2022-08-04 11:39:23 +02:00
uniquify.el Fix up some prefix registration problems in doc strings 2022-08-04 11:03:10 +02:00
userlock.el
vcursor.el ; Delete not-useful comments referring to Emacs 19. 2022-08-19 18:05:51 +02:00
version.el
view.el Don't lose read-only marking when reverting a view-mode buffer 2022-08-24 13:39:41 +02:00
w32-fns.el Speed up generation of loaddefs files 2022-05-31 18:08:33 +02:00
w32-vars.el
wdired.el Merge from origin/emacs-28 2022-08-26 06:30:29 +02:00
whitespace.el Fix whitespace-mode display table restoration logic 2022-07-15 12:07:19 +02:00
wid-browse.el ; * lisp/wid-browse.el (widget-browse): Delete commented out code. 2022-07-21 21:10:13 +02:00
wid-edit.el Add a basic widget type for buffer predicates 2022-09-04 16:29:06 +02:00
widget.el Drop support for the dead third-party w3 package 2022-07-09 17:27:49 +02:00
windmove.el ; Normalize some "Author" headers 2022-07-20 22:38:01 +02:00
window.el Add new functions for splitting the root window 2022-09-05 20:57:21 +02:00
winner.el Make many seldom-used generalized variables obsolete 2022-08-21 22:12:43 +02:00
woman.el Avoid using aliases for color functions 2022-08-09 22:28:08 +02:00
x-dnd.el ; Fix typos 2022-08-08 14:23:29 +02:00
xdg.el Make point-at-eol and point-at-bol obsolete 2022-08-23 04:54:57 +02:00
xml.el
xt-mouse.el
xwidget.el Revert "Prefer defvar-keymap in xwidget.el" 2022-07-21 09:19:14 +08:00
yank-media.el

This directory contains source code for the parts of Emacs that are
written in Emacs Lisp.  *.el files are Emacs Lisp source, and the
corresponding *.elc files are byte-compiled versions.  Byte-compiled
files are architecture-independent.

The term subdirectory contains Lisp files that customize Emacs for
certain terminal types.  When Emacs starts, it checks the TERM
environment variable to get the terminal type and loads
'term/${TERM}.el' if it exists.

The other subdirectories hold Lisp packages grouped by their general
purpose.