Showing posts with label basic. Show all posts
Showing posts with label basic. Show all posts

replace-regexp and numbering lines






I saw the Got Emacs? posting showing off the new emacs-24
rectangle-numbers-lines command, to number a bunch of lines in buffer,
i.e..:





foo
bar
cuux




becomes:





1 foo
2 bar
3 cuux




Very cool! An alternative is to use cua-mode, mark the column for the
numbers with cua-set-rectangle-mark (C-RET), and then use M-x cua-sequence-rectangle (which takes you throught the steps, and has a lot of
flexibility.



But let's look at yet another way: using replace-regexp. If we select (mark)
the list once more, we can do M-x replace-regexp RET ^ RET \#. RET Note that
the # is a special meta-character that represents the number of replacements already made. This has the somewhat clumsy side-effect that your
list be numbered, starting at 0 rather than 1, so you should add a
dummy-element at the beginning. Clearly, replace-regexp is inferior for
simply adding some line numbers – however, it has the flexibility to do some
smarter things.



Smarter things? Yes! replace-regexp allows you to use arbitrary
Lisp-expressions in the replace strings. So, let's suppose that we want to use
letters instead of numbers for our lines. Easy – again, select (mark) your
lines, M-x replace-regexp RET ^ RET \,(format "%c. " (+ ?a \#)) RET and we get:





a. foo
b. bar
c. cuux




Admittedly, not the most world-shattering thing, but it does show the powers
hidden in something as common as replace-regexp.


who holds this value?





Something from the category of useful things hiding in emacs… Suppose you
are looking for the variable that holds a certain value. How to find it?



Easy: M-x apropos-value



So, for example, finding all variables that hold your e-mail address:



M-x apropos-value RET me@example.com RET



and you'll get all the matches in the *Apropos*-buffer. HT: Stephen
Eglen.



Also check the various other M-x apropos-... commands, they all help you
find useful information if you can remember a word. Except for… M-x apropos-zippy… eh?




setting the frame title






The 'frame title' (window title) that emacs uses in graphical environments
defaults to something like emacs@hostname.



Of course emacs lets us customize this, by changing the value of
frame-title-format. Emacs accepts many different things there, (see the
documentation for frame-title-format and mode-line-format for that), but
let's look at an example.



Instead of the default emacs@hostname, I find it more useful to include the
name of the file I'm working on instead, or, in case of non-file buffers, the
buffer name. To do this, I have something like the following in my .emacs:





(setq frame-title-format
'("" invocation-name ": "(:eval (if (buffer-file-name)
(abbreviate-file-name (buffer-file-name))
"%b"))))





As you see, frame-title-format is a template for the items that are present
in the title bar; i.e.. emacs concatenates the items in the list, and it
supports various %-constructs, which are replaced with actual values; see
below.



In addition to the %-constructs, you can use :eval to make emacs evaluate
the expression whenever it wants to update the title bar.



invocation-name is the name of the emacs binary.



abbreviate-file-name replaces the home directory part in file names with
~; for very deep paths it might be nice to do some abbreviation as well as
some shells do; this is left as an exercise to the reader :)



You can experiment with some other things to put in frame-title-format;
use the :eval construct as above to use emacs-lisp functions, and the
various %-specifiers which are replaced by certain values; the emacs
documentation lists the following:





%b -- print buffer name.      %f -- print visited file name.
%F -- print frame name.
%* -- print %, * or hyphen. %+ -- print *, % or hyphen.
%& is like %*, but ignore read-only-ness.
% means buffer is read-only and * means it is modified.
For a modified read-only buffer, %* gives % and %+ gives *.
%s -- print process status.
%i -- print the size of the buffer.
%I -- like %i, but use k, M, G, etc., to abbreviate.
%p -- print percent of buffer above top of window, or Top, Bot or All.
%P -- print percent of buffer above bottom of window, perhaps plus Top,
or print Bottom or All.
%n -- print Narrow if appropriate.
%t -- visited file is text or binary (if OS supports this distinction).
%z -- print mnemonics of keyboard, terminal, and buffer coding systems.
%Z -- like %z, but including the end-of-line format.
%e -- print error message about full memory.
%@ -- print @ or hyphen. @ means that default-directory is on a
remote machine.
%[ -- print one [ for each recursive editing level. %] similar.
%% -- print %. %- -- print infinitely many dashes.
Decimal digits after the % specify field width to which to pad.





So, if we'd like to include the host (system) name and some indication of the
status of this buffer, we could do something like:





(setq frame-title-format
'("emacs%@" (:eval (system-name)) ": " (:eval (if (buffer-file-name)
(abbreviate-file-name (buffer-file-name))
"%b")) " [%*]"))





Of course, some of the information is available elsewhere already, but it
might be clearer in the frame-title. Or not – there's a lot of room for
tweaking and experimentation here.


undo






One of the advantages that text-editors have over daily life is the ease of
undoing things. Emacs in particular has a powerful undo-system to return to
the previous state of things.



Undo can be activated by pressing C-x u or C-_; if you are more comfortable
with using C-z for undo (as is the standard in many non-Emacs environments),
you can of course add that key binding as well, by putting in your .emacs:




(global-set-key (kbd "C-z") 'undo)




This overrides the default of C-z triggering suspend-frame, which is not a
great loss for most people.



Emacs-undo has some nice features - for example, if you have selected some text
('marked a region'), the undo operation only applies to that area. At the same
time, however, the undo-model can be confusing: in emacs, undo is treated like
any other command, which means that undo can be applied even to… undo,
which is different from what most other editors do. Let me give an example – if
it's confusing or tedious then, well, that's what it is…



Suppose I type




hello
world




now I press C-_, and I get




hello




Now I type foo




hello
foo




And press C-_ C-_; and I get back:




hello
world




This is because we're 'undoing the undo' of adding the word 'world', and thus,
it reappears! When you try this in most other editors, it would result in




hello




because those editors completely forget about 'world' after it is undone.



So, emacs' model is strictly more powerful - but some (many? )people find it a
bit confusing, esp. when a series of 'undos' is interrupted by a 'do'.



If you prefer the model that many other editors use, you might be interested in
redo-mode, in particular in RedoPlus. Using that package, undo (or rather,
redo) follows a different model. In that model, redo is 'special': it's
not registered as a buffer change, and as such it's conceptually different
from the redo=undo-undo model that emacs uses by default. As seen above, you
actually lose some information in the process.



Yet another way to tackle the undo-problem is implemented by UndoTree: the
states of your buffer are seen as nodes in a tree, and you can freely move to
specific nodes. UndoTree is as powerful as the emacs system, yet easier to
understand. It can even visualize the tree of changes - and you can then by
clicking on a node go back to the corresponding buffer state.



Now, when using UndoTree, let's look at our example again:



We started with:




hello
world




then did C-_ (which removed 'world') and typed 'foo' to get:




hello
foo




Now press C-u again, and 'foo' disappear. Now we press C-x u
(undo-tree-visualize) and we get a buffer with:




  |
o
|
|
x
|
/ \
o o




and we can now visually move to any of the nodes, and our buffer is instantly
brought back. Cool! The two branches correspond to the states 'world' and 'foo'.
I have been undo-tree-mode for the last few weeks, and it works very well:
usually I don't even notice it, but when I need the extra power, it's there.



I am told that UndoTree is inspired by the way the vim-text editor does
this. Anyway, there is another very powerful feature in the vim undo-system
that would be nice to have in emacs to: time-based undo. In vim you can e.g. say
something like:




:earlier 5m




to go to the state of your buffer 5 minutes ago. That would be a nice addition
for undo-tree-mode!



Update Tavis Rudd notes that pressing t in undo-tree-visualizer-mode
(i.e.. what you see when your press C-x u) will give you timestamps instead of
o and x:




                  |
|
18:54:20
|
|
18:54:20
________|___
/ \
18:54:15 18:53:37
| |
| |
18:54:15 18:53:37
___|___ |
/ \ |
18:54:10 18:53:43 18:53:36





narrowing buffer contents





'Narrowing' is yet another of those many useful emacs features that took me
years to appreciate, mostly because I never really tried it. I may not be the
only one, so here's a short introduction.



Narrowing is the concept of hiding the buffer contents except for what you
are currently working on. This is useful when you don't want to be distracted,
but also because it allows you to execute commands only on the narrowed
part. You can narrow different things:

















what's shownnamebinding
region (selection)narrow-to-regionC-x n n
current pagenarrow-to-pageC-x n p
functionnarrow-to-defunC-x n d
everythingwidenC-x n w




I never used narrowing for the current page, but apparently it's used by
e.g. Info-Mode to show only one page.



That last one is pretty important to remember; it's not totally obvious how
to get back to 'normal' mode where you can see everything. For this very
reason ('where the #>*$@ did my text go'), always-helpful emacs by defaults
disables narrow-to-region (but, for some reason, not the other ones). To
enable it, put the following in your .emacs:





(put 'narrow-to-region 'disabled nil)





Also note that the mode-line will show 'Narrow' when you're in narrow mode,
lest you forget.



When you're using org-mode there is an additional one you might want to
memorize:












what's shownnamebinding
subtreeorg-narrow-to-subtreeC-x n s




I'm using that last one quite often; I have org-files where I keep meeting notes
etc., and when in a certain meeting, I only want to see the notes for that
specific meeting.



One bug? feature? of narrowing is that line-numbering is relative to the
narrowed area rather than the full buffer. I'd prefer to have the real line
numbers.


some handy key bindings






Emacs offers many handy key bindings; every now and then I come across a new
one, which has been hiding there somewhere for a decade or more… Here are
some of my favorites – I'm listing those that are (a) often useful, (b) might
not be known by everyone already (c) don't require any external packages or
setup.




  • M-27 x gives you xxxxxxxxxxxxxxxxxxxxxxxxxxx; and, believe it or not,
    works also with different characters and numbers;


  • M-m jumps to the first non-whitespace character on the current line;


  • M-^ joins two lines into one – like vi(m)'s :join,
    except that point must be on the second line, not the first;


  • M-/ auto-completes based on words in all your buffers; there are more
    powerful alternatives, but this one does not require any setup;


  • C-h k followed by some key or key combination tells you what it does, C-h m describes the currently active modes, with their key bindings;


  • C-h f documents the current function, C-h v does the same for
    variables. C-h a gives you information about commands - for example to get
    date-related commands, press C-h a date. This will, however, also get
    you commands related to update; instead, you can use C-h a \bdate
    (because C-h a accepts regular expressions);


  • C-x C-o will delete all the empty lines around your current cursor
    position, except for one;


  • M-q re-aligns the current paragraph; I use it all the time when writing
    e-mails etc. (you might want to check out filladapt for a version that gives
    you a bit more smartness with indentations, lists etc.);


  • C-x 8 RET in a recent emacs version gives you an auto-completable list of
    special characters to insert. So if I need, say, the Yen-character, I type
    C-x 8 RET ye TAB and I get YEN SIGN, which RET will then insert:
    ¥. Note that the completion only works on the start of the character name,
    so if you'd want to include the α-character, you'd need to know that its
    UCS-name is GREEK SMALL LETTER ALPHA… (you can try *alpha or TAB the
    empty string, and search in the results buffer, but that's rather slow);


  • C-h l shows your last 300 key presses ('lossage'). Interesting to see, and
    it might be useful when defining keyboard macros.




What are your favorites? Please share them in the comments.


keyboard macros






Keyboard macros are a truly classic emacs feature. Still, I only started to
use them years after I got sucked into emacs – not so uncommon for emacs
features… There may be more people like me, so let's raise the awareness a
bit.



Keyboard macros allow you to record a number of keystrokes, and replay those at
some later point. This can be a great time-saver when you need to do repetitive
things. In many cases, they are an easy alternative to writing some elisp to get
a job done. Note, keyboard macros are should not be confused with elisp-macros,
which are something else altogether.






an example






So, when would we want to use a keyboard macro? Let's take some tedious task --
for example, we have a list of a few hundred names:





Newton, Isaac
Einstein, Albert
Maxwell, James
Turing, Alan
...





and we want to turn that into:





Isaac Newton
James Maxwell
Alan Turing
...





so, roughly, put the last name after the first name, and remove the comma.



We can solve this in different ways; we could simple change each line by
hand. That's a fine solution if there are only a few lines, but it gets boring
rather quickly.



Another way is to use regular expressions (see Building regular expressions);
in this case, it's fairly easy to come up with one (assuming you know regular
expressions). But let's see how we can solve it with a keyboard macro.



Schematically, we can solve this with the following:


















actionkey
go to beginning of a lineC-a
kill (cut) the first wordM-d
delete the next two charactersDEL DEL
go to the end of the lineC-e
insert a spaceSPC
yank (paste)C-y
go to the next lineC-n





This may look like some magical incantation, but it comes quite natural when you
are actually doing the editing.



An important thing to remember when working with keyboard macros is that you
do your commands in such a way that they can be repeated for each line. Suppose
you would select Newton with shift-select, i.e., C-SPC at the beginning of
the line and pressing the right arrow key 6 times – that works for Newton,
but not for Einstein. Instead, we need to use M-d ('kill-word')
instead.







defining a macro






Now that we have solved the problem for a single line, let's make a keyboard
macro.



We move the cursor to the first line, and start the definition by pressing
C-x (, or alternatively, F3. Then, we press the commands C-a, M-d, DEL DEL, C-e, SPC, C-y, C-n (as in the list above). To finish the
definition, press C-x ), (or F4).



Hurray, we have our macro. Now, let's use it.







using the macro






Now, to execute the last defined macro, you press C-x e. We could repeat that
for our whole list, but fortunately there's an easier way to repeat a macro n
times, using a prefix argument. For example, to repeat the macro 123 times,
you first press C-u 123 and then C-x e.



There's a slightly shorter way to do this: instead of C-u 123 we can write
M-123, and for C-x e we can use F4 (kmacro=end-or-call-macro).



You can even repeat the macro until the end of the buffer is reached with C-u 0 C-x e; this only makes sense if the macros ever reaches the end of the buffer
of course. (Remember that you can always terminate with C-g, keyboard-quit)



You can also apply your keyboard macro to all lines in the selected area
(region) with M-x apply-macro-to-region-lines (or C-x C-k r). Important to
remember: this will actually move the cursor (point) to the start of each line,
and then execute the macro. If you want your macro like that, the
go-to-the-next-line should not be part of your macro, or you will be skipping
lines.







saving macros for later use






If you want to use multiple macros, you can name them. You can do this with
M-x name-last-kbd-macro. If you name your macro, say, foo (inventive as we
are), you can then execute it after that as M-x foo, which will be available
until you exit emacs.



If you want to have the macro for future emacs sessions as well, you can use
insert-kbd-macro, which will give you an elisp version of your macro. For our
example, this will look like:





(fset 'foo 
[?\C-a ?\M-d delete delete ?\C-e ? ?\C-y ?\C-n])





Not very readable, but we can put this in .emacs, and we can use it the next
time we start emacs as well. We can also add a key binding for this, for
example:





(global-set-key (kbd "C-c f") 'foo)





This will bind foo to C-c f.








final notes






Keyboard macros can be useful and easy, but they are fundamentally connected
to key presses – so, if you remap your keys to something different, your
macros may not work anymore. Also, the macros are pretty much write-only in
the way we use them here. You can edit them in the macro editor though, with
M-x edit-kbd-macro M-x foo; we'll then get something like:





;; Keyboard Macro Editor.  Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: C-a M-d 2*<delete> C-e SPC C-y C-n

Command: foo
Key: none

Macro:

C-a ;; move-beginning-of-line
M-d ;; kill-word
2*<delete> ;; delete-char
C-e ;; move-end-of-line
SPC ;; self-insert-command
C-y ;; yank
C-n ;; next-line





Keyboard macros can be quite a useful trick in your arsenal. And I have not
even gone into more advanced tricks like macros with variations or the
macro ring. Please refer to the section Keyboard macros in the emacs
manual (C-h r) for all the details.



And, finally, don't let the text-based example limit your imagination – you
can turn just about any repetitive sequence of tasks into a macro.


interactive replacement





I recently found an interesting little package called iedit.el, which allows

you to interactive replacements on multiple strings at the same time. That is,

as you do one replace, you can see how all the same matches being replaced as

you type. It's hard to explain in words, you just have to try it out.

So, how to install this package?

  • First, download the package (see the link above)

  • Put it in a directory where emacs can find it; for example,

    ~/.emacs.d/elisp. If you haven't done so already, you can tell emacs to look in that directory by adding to your .emacs:

    (setq load-path (cons "~/emacs.d/elisp/" load-path))

  • Then, tell emacs to load this specific module; you can add

    (require 'iedit)
    to your .emacs to load it (alternatively, you could use the autoload facility)


  • then, define a key binding for this:

    (define-key global-map (kbd "C-;") 'iedit-mode)

  • Now, search for some strings that appears multiple times in your buffer, select it,

    press C-; (Ctrl+;), and watch how all other matching strings are

    changing at the same time.

Very nice.

scrolling






Scrolling It's an integral part of just about any graphical user interface,
including emacs. However, I always found that the default way scrolling works
in emacs left something to be desired. It puts the scroll bar on the left (!),
and when scrolling around, it does not scroll smoothly, but instead it seem to
do so in bursts. But, this being emacs, we can change it!




First, the position of the scroll bar. Presumably for historical reasons,
emacs puts the scroll bar on the left of the window, unlike most other
programs. We can easily change that, by putting the following in .emacs
(or ~/.emacs.d/init.el):




(set-scroll-bar-mode 'right)





Instead of right, you can also use left, or nil to hide the scroll bar
completely. You can also do this through the menu (Options / Show/Hide /
Scroll bar). Note that on X, when the cursor (point) reaches the end of the
document, the slider on the scroll bar may not be at the bottom; I understand
this is because of some disagreement between Emacs and the toolkit (GTK+ in
this case).



Now, what about the other issue, the non-smoothness when scrolling with the
cursor-keys or with C-n, C-p? Below are my settings for making scrolling a
bit smoother, and the explanation. Of course, these are just my personal
preferences.





(setq
scroll-margin 0
scroll-conservatively 100000
scroll-preserve-screen-position 1)







  • The scroll-margin. This determines when scrolling should start; by
    setting it to 0, emacs will start to scroll whenever you are entering the
    top or bottom line of the window. You can also this to, say, 5 to let
    scrolling start whenever you're getting closer than 5 lines from top or bottom



  • Then, scroll-conservatively determines how far the cursor is allowed to
    be distanced from the center of the screen when scrolling start. The
    default sets this to 0, which means that whenever you start scrolling, the
    cursor jumps to the center of the screen. I find that quite annoying, so I
    set it to some big number (the 'effective maximum' for that is
    lines-in-window / 2, but you can put any bigger number there to avoid the
    jumpiness)


  • scroll-preserve-screen-position tries to maintain the current screen
    position when you scroll using Page-Up/Page-Down. I like that.




There are also the variables scroll-up-aggressively and

scroll-down-aggressively. Normally, they determine how far emacs will scroll
(up and down, respectively) when it does so. However, they don't make any
difference with a big scroll-conservatively like I am using. Still, if you
want to play with it, their values are fractions between 0.0 and 1.0
(inclusive); a value of 1 means that it will move a full screen when scrolling
starts, a value of 0.0 causes a move of only one single line.



making buffer names unique





When you open a file in emacs, the buffer gets the name of that file. That's
all fine, but what if you open multiple files with the same name? At least for
me, it's a fairly common to have a number of different Makefile.am buffers

Makefile.am<3> etc., but that does really help to find the right one
at the same time. Emacs does make those names unique – Makefile.am<2>,
quickly.



To do that, emacs provides uniquify – it makes buffer names unique. In your
.emacs:





(require 'uniquify) 
(setq
uniquify-buffer-name-style 'post-forward
uniquify-separator ":")





This is emacs, so you can influence the way in which the names are made
unique. I prefer post-forward, and as separator I use a : rather than the
default |. Note, instead of post-forward there are other bizarre styles,
please see the documentation.



Anyway, now, when opening ('visiting') files test/a/foo and test/b/foo,
their buffers get the names foo:a and foo:b. In other words, the name
followed by a colon and part of the path. I think it's much clearer than the
default names foo and foo<2>. One could ask why emacs should not use

uniquify as its default behavior; it seems a clear improvement.



Uniquify is a small convenience that's been a documented part of emacs for 20
years. Still, somehow I missed it until this year. I suspect I am not the only
one - which is why I write this.


bookmarks







Emacs has a very useful system for bookmarks – shortcuts to often-used
files. It's also one of those features I only really started using after years
of emacs – there seem to be many of such obvious features…



Bookmarks are especially handy if you have long file names, or for examples
the special file names for editing root-owned files discussed here before.



To start using bookmarks effectively, there are only a few important key
bindings to memorize: C-x r m ('make') will create a new bookmark,
defaulting to the current file. Then, you can jump to an existing bookmark
with C-x r b ('bookmark') Finally, you can see the list of your bookmarks
with C-x r l ('list').



There are a few customizations you can put in your .emacs:




(setq 
bookmark-default-file "~/.emacs.d/bookmarks" ;; keep my ~/ clean
bookmark-save-flag 1) ;; autosave each change)






the kill-ring

Last time, I discussed registers, and mentioned the kill-ring. The kill-ring is the 'normal' clipboard emacs uses for cut/copy/paste of text. The cool name comes from the fact that in emacs terminology, 'killing' means what 'cutting' means in many other programs. The kill-ring contains the cut (and copied!) text parts; cut-copy-paste have their own entry.

As mentioned in the registers entry, many programs only allow you to paste the last copied/cut text block, and that is what the kill-ring does by default (when you press C-y). However, you can choose older ones using the menu (Edit/Paste from kill menu). Alternatively, you can use a prefix key (e.g., M-3 C-y will insert the third most recently killed ('cut') text).

The kill 'ring' behaves mostly like a list; by default (emacs 22, 23) there are 60 positions available in the ring, after which older entries are thrown away. You can put (setq kill-ring-max 120) in your .emacs in the unlikely case that 60 is not enough.

Update:An anonymous commenter mentions the useful M-y ('yank-pop') key binding, which lets you cycle through the items in the kill-ring. Quite useful indeed, thanks!

If you're using the GTK+-version of emacs (the graphical version in X/Linux/Unix environments), you can even have the Edit/Paste from kill menu-menu in a separate frame (window), and paste text by clicking there. To this, go to the menu Edit/Paste from kill menu, and click on the dotted line at the top of the sub menu.

using registers

UPDATED Emacs is full of wonderful features, but sometimes it takes some time to find them. Today, let's discuss one such feature, registers. Registers are dicussed in the Emacs Manual, but it took me quite some time before I understood what they're good for. So let me discuss them here - maybe I am not the only one.

To explain the use of register, let's look at the normal cut-copy-pasting of text first. When you have cut or copied some text, it lives in a place we call the clipboard, from with you can then paste it. But in most programs, if you copy/cut text again, it replaces what was already on the clip board.

Now, what about registers? In emacs, we have a special clipboard with multiple places to store things, each named by a single number or letter. We call these places registers. Thus, you can save some text to register A, some other text to register B, and later paste the contents of register A or B. The key bindings (shortcuts) for this are good to remember:


C-x r s Rsave region (selection) into register R
C-x r i Rinsert the contents of register R

So, to save the current region/selection in register 2, you would type: C-x r s 2, and to insert the contents of that register later, you'd do C-x r i 2. It's a really useful thing to add to your emacs muscle memory.

(Note: the clipboard that emacs uses for 'normal' cut/copy/paste, the 'kill-ring', allows for multiple (but unnamed) entries as well - but we'll discuss the kill-ring in some other entry.)

viewing register contents


One obvious problem with registers is that for most people it's very hard to remember what went into which register, if you use more than two or three registers. There is M-x view-register, but that's only marginally useful. It would be much nicer if we could get a list of all registers in use and a preview of their contents. To do that, we can use the list-register.el package (see installing packages). The package adds a function list-registers (and some others). I use a key binding C-x r v for that, which somewhat logically follows the other ones:

C-x r vview registers

(require 'list-register)
(global-set-key (kbd "C-x r v") 'list-register)

An alternative would be to use C-x r l (for list registers), but that one has already been taken by bookmark-bmenu-list, which shows a list of your bookmarks -- to be discussed some other time).

I would vote for including the list-registers functionality in emacs. Having registers without a way to view them, makes them much less useful.

more than words


Personally, I seldomly use registers for anything but text; however, you can store other things in registers as well (see the Emacs Manual registers section for details):

objectstoreretrievenotes
rectangleC-x r r RC-x r i R save rectangle into register R (see working with rectangular selections, and insert it);
buffer/positionC-x r <SPC> RC-x r j Rsave buffer/position in register R, and jump back to it
windowC-x r w RC-x r j Rsave window configuration in register R, and jump back to it. Note that what emacs calls a window is called a window pane elsewhere, see emacs terminology)
frameC-x r f RC-x r j Rsave frame configuration in register R, and jump back to it. Note that what emacs calls a frame is called a window elsewhere, see emacs terminology

As you can see, some of the objects share the keybinding for retrieving them. In other words, what happens when you retrieve register R depends on the type of object you put in there before.

While registers are quite useful, I think they would be easier to use if they were integrated with the normal cut-copy-paste (the 'kill-ring'). Another issue is that you cannot access your registers from other programs. Actually, recent MS-Office versions do this in a bit nicer way...

Followers

Popular Posts