docs(Emacs scripts): reorganize file
This commit is contained in:
parent
9c1fe06d26
commit
2ef0f4fc89
@ -23,102 +23,6 @@ buffer in new Emacs buffers.
|
||||
(file-list))))
|
||||
#+end_src
|
||||
|
||||
** Switch between buffers
|
||||
Two default shortcuts I really like from Spacemacs are ~SPC b m~ and ~SPC
|
||||
b s~, which bring the user directly to the ~*Messages*~ buffer and the
|
||||
~*scratch*~ buffer respectively. These functions do exactly this.
|
||||
#+begin_src emacs-lisp
|
||||
(defun switch-to-messages-buffer ()
|
||||
"Switch to Messages buffer."
|
||||
(interactive)
|
||||
(switch-to-buffer (messages-buffer)))
|
||||
|
||||
(defun switch-to-scratch-buffer ()
|
||||
"Switch to Messages buffer."
|
||||
(interactive)
|
||||
(switch-to-buffer "*scratch*"))
|
||||
#+end_src
|
||||
|
||||
** Screenshots
|
||||
Since Emacs27, it is possible for Emacs to take screenshots of itself
|
||||
in various formats. I’m mainly interested in the SVG and PNG format,
|
||||
so I’ll only write functions for these. It isn’t really redundant with
|
||||
the ~screenshot.el~ package used [[file:./packages/applications.md#screenshot][here]] since these functions take a
|
||||
screenshot of Emacs as a whole rather than of a code snippet.
|
||||
|
||||
First, we have a general function which is a slight modification of
|
||||
the function shared by Alphapapa in [[https://www.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/g2c2c6y/][this Reddit comment]]. I modified it
|
||||
to make it possible to pass as an argument the format the screenshot
|
||||
will be taken as or ask the user which format they would like to save
|
||||
it as.
|
||||
#+begin_src emacs-lisp
|
||||
(defun self-screenshot (&optional type)
|
||||
"Save a screenshot of type TYPE of the current Emacs frame.
|
||||
As shown by the function `', type can wield the value `svg',
|
||||
`png', `pdf'.
|
||||
|
||||
This function will output in /tmp a file beginning with \"Emacs\"
|
||||
and ending with the extension of the requested TYPE."
|
||||
(interactive (list
|
||||
(intern (completing-read "Screenshot type: "
|
||||
'(png svg pdf postscript)))))
|
||||
(let* ((extension (pcase type
|
||||
('png ".png")
|
||||
('svg ".svg")
|
||||
('pdf ".pdf")
|
||||
('postscript ".ps")
|
||||
(otherwise (error "Cannot export screenshot of type %s" otherwise))))
|
||||
(filename (make-temp-file "Emacs-" nil extension))
|
||||
(data (x-export-frames nil type)))
|
||||
(with-temp-file filename
|
||||
(insert data))
|
||||
(kill-new filename)
|
||||
(message filename)))
|
||||
#+end_src
|
||||
|
||||
I used this function to take the screenshots you can see in this
|
||||
document.
|
||||
|
||||
** Handle new windows
|
||||
The two functions below allow the user to not only create a new window
|
||||
to the right or below the current window (respectively), but also to
|
||||
focus the new window immediately.
|
||||
#+begin_src emacs-lisp
|
||||
(defun split-window-right-and-focus ()
|
||||
"Spawn a new window right of the current one and focus it."
|
||||
(interactive)
|
||||
(split-window-right)
|
||||
(windmove-right))
|
||||
|
||||
(defun split-window-below-and-focus ()
|
||||
"Spawn a new window below the current one and focus it."
|
||||
(interactive)
|
||||
(split-window-below)
|
||||
(windmove-down))
|
||||
|
||||
(defun kill-buffer-and-delete-window ()
|
||||
"Kill the current buffer and delete its window."
|
||||
(interactive)
|
||||
(progn
|
||||
(kill-this-buffer)
|
||||
(delete-window)))
|
||||
#+end_src
|
||||
|
||||
** Resize windows
|
||||
#+begin_src emacs-lisp
|
||||
(with-eval-after-load 'hydra
|
||||
(defhydra windows-adjust-size ()
|
||||
"
|
||||
_s_: enlarge
|
||||
_c_: enlarge _r_: right
|
||||
_t_: shrink
|
||||
"
|
||||
("c" enlarge-window-horizontally)
|
||||
("t" shrink-window)
|
||||
("s" enlarge-window)
|
||||
("r" shrink-window-horizontally)))
|
||||
#+end_src
|
||||
|
||||
** Extend ~add-to-list~
|
||||
One function I find missing regarding ~add-to-list~ is ~add-all-to-list~
|
||||
which enables the user to add multiple elements to a list at once.
|
||||
@ -164,3 +68,99 @@ APPEND and COMPARE-FN, see `add-to-list'."
|
||||
nil))
|
||||
32))))
|
||||
#+end_src
|
||||
|
||||
** Handle new windows
|
||||
The two functions below allow the user to not only create a new window
|
||||
to the right or below the current window (respectively), but also to
|
||||
focus the new window immediately.
|
||||
#+begin_src emacs-lisp
|
||||
(defun split-window-right-and-focus ()
|
||||
"Spawn a new window right of the current one and focus it."
|
||||
(interactive)
|
||||
(split-window-right)
|
||||
(windmove-right))
|
||||
|
||||
(defun split-window-below-and-focus ()
|
||||
"Spawn a new window below the current one and focus it."
|
||||
(interactive)
|
||||
(split-window-below)
|
||||
(windmove-down))
|
||||
|
||||
(defun kill-buffer-and-delete-window ()
|
||||
"Kill the current buffer and delete its window."
|
||||
(interactive)
|
||||
(progn
|
||||
(kill-this-buffer)
|
||||
(delete-window)))
|
||||
#+end_src
|
||||
|
||||
** Resize windows
|
||||
#+begin_src emacs-lisp
|
||||
(with-eval-after-load 'hydra
|
||||
(defhydra windows-adjust-size ()
|
||||
"
|
||||
_s_: enlarge
|
||||
_c_: enlarge _r_: right
|
||||
_t_: shrink
|
||||
"
|
||||
("c" enlarge-window-horizontally)
|
||||
("t" shrink-window)
|
||||
("s" enlarge-window)
|
||||
("r" shrink-window-horizontally)))
|
||||
#+end_src
|
||||
|
||||
** Screenshots
|
||||
Since Emacs27, it is possible for Emacs to take screenshots of itself
|
||||
in various formats. I’m mainly interested in the SVG and PNG format,
|
||||
so I’ll only write functions for these. It isn’t really redundant with
|
||||
the ~screenshot.el~ package used [[file:./packages/applications.md#screenshot][here]] since these functions take a
|
||||
screenshot of Emacs as a whole rather than of a code snippet.
|
||||
|
||||
First, we have a general function which is a slight modification of
|
||||
the function shared by Alphapapa in [[https://www.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/g2c2c6y/][this Reddit comment]]. I modified it
|
||||
to make it possible to pass as an argument the format the screenshot
|
||||
will be taken as or ask the user which format they would like to save
|
||||
it as.
|
||||
#+begin_src emacs-lisp
|
||||
(defun self-screenshot (&optional type)
|
||||
"Save a screenshot of type TYPE of the current Emacs frame.
|
||||
As shown by the function `', type can wield the value `svg',
|
||||
`png', `pdf'.
|
||||
|
||||
This function will output in /tmp a file beginning with \"Emacs\"
|
||||
and ending with the extension of the requested TYPE."
|
||||
(interactive (list
|
||||
(intern (completing-read "Screenshot type: "
|
||||
'(png svg pdf postscript)))))
|
||||
(let* ((extension (pcase type
|
||||
('png ".png")
|
||||
('svg ".svg")
|
||||
('pdf ".pdf")
|
||||
('postscript ".ps")
|
||||
(otherwise (error "Cannot export screenshot of type %s" otherwise))))
|
||||
(filename (make-temp-file "Emacs-" nil extension))
|
||||
(data (x-export-frames nil type)))
|
||||
(with-temp-file filename
|
||||
(insert data))
|
||||
(kill-new filename)
|
||||
(message filename)))
|
||||
#+end_src
|
||||
|
||||
I used this function to take the screenshots you can see in this
|
||||
document.
|
||||
|
||||
** Switch between buffers
|
||||
Two default shortcuts I really like from Spacemacs are ~SPC b m~ and ~SPC
|
||||
b s~, which bring the user directly to the ~*Messages*~ buffer and the
|
||||
~*scratch*~ buffer respectively. These functions do exactly this.
|
||||
#+begin_src emacs-lisp
|
||||
(defun switch-to-messages-buffer ()
|
||||
"Switch to Messages buffer."
|
||||
(interactive)
|
||||
(switch-to-buffer (messages-buffer)))
|
||||
|
||||
(defun switch-to-scratch-buffer ()
|
||||
"Switch to Messages buffer."
|
||||
(interactive)
|
||||
(switch-to-buffer "*scratch*"))
|
||||
#+end_src
|
||||
|
Loading…
Reference in New Issue
Block a user