Write an Emacs Function
Table of Contents
Writing an emacs lisp command
(defun transpose-windows ()
"transpose current-window and next-window"
(interactive)
(setq buffer-1 (buffer-name))
(message "jumping to other window")
(other-window)
(setq buffer-2 (buffer-name))
(switch-to-buffer (buffer-1))
(other-window -1)
(switch-to-buffer (buffer-2)))
(setq cur-buffer (buffer-name))
(buffer-name)
(transpose-windows)
writing commands incrementally
Emacs has many great features to help yoy write functions. For instance you can evaluate functions and variable write in the emacs editing buffer by typing:
C-x C-e
after the variable name or after the closing parenthesis of a function. And the results will be echoed in the mini-buffer.
For instance you could type the following into a buffer, and then type C-x C-e after, to evaluate.
(buffer-name)
transpose_windows.org
- Next Incremental Step
Start with a simple command to save the current buffer's name in a variable and then jump to other window and write both that variable and the current buffer's name ```cl (defun jmp-print-buffer () "jump to next-window and swap to current buffer" (interactive) (setq buffer1 (buffer-name)) (message "buffer1 is %s" buffer1) (other-window 1) (message "buffer1 was %s" buffer1) (message "buffer-name is %s" buffer-name)) ```Next, write a function to save buffer name, jump to other-window and switch buffers to that buffer.
```cl (defun jmp-swap () "jump to next-window and swap to current buffer" (interactive) (setq buffer-1 (buffer-name)) (message "buffer-1 is %s" buffer-1) (other-window -1) (switch-to-buffer buffer-1) (message "buffer-1 is %s" buffer-1) (message "buffer-name is %s" buffer-name)) ```
This works!!
Now, its time to finish the program!
Transpose-windows
(defun transpose-windows ()
"Swap buffer in current window with next window."
(interactive)
(setq buffer1 (buffer-name))
(other-window 1)
(setq buffer2 (buffer-name))
;;(message "current buffer was %s" buffer1)
;;(message "current buffer now: %s" (buffer-name))
;;(message "oh yes! will switch to %s" buffer2)
(switch-to-buffer buffer1)
(other-window -1)
(switch-to-buffer buffer2))