help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: Screenshots, frame shots straight from Emacs


From: Hongyi Zhao
Subject: Re: Screenshots, frame shots straight from Emacs
Date: Fri, 23 Jul 2021 18:32:44 +0800

On Fri, Jul 23, 2021 at 6:28 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
>
> On Fri, Jul 23, 2021 at 4:56 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
> >
> > On Fri, Jul 23, 2021 at 1:55 PM Jean Louis <bugs@gnu.support> wrote:
> > >
> > > * Hongyi Zhao <hongyi.zhao@gmail.com> [2021-07-23 03:53]:
> > > > 1. Have the delay feature, so that I can do some operations before the
> > > > screenshot is captured, say, click on mouse button, open a dropdown
> > > > menu, and so on.
> > >
> > > This improved function will allow that you invoke for example:
> > >
> > > C-5 M-x frameshot to delay for 5 seconds.
> >
> > Good idea.
> >
> > > But this Emacs function I think will not allow to get the screenshot of 
> > > the dropdown, maybe it
> > > requires using threads, now I don't know how to do it within Emacs.
> >
> > Anyway, thank you very much for your help.
> >
> > > (defun frameshot (&optional prefix)
> > >   "Save Emacs frame as frame shot.
> > >
> > > Directory is determined by variable `frameshot-directory' and if
> > > not defined, it will be saved in the `$HOME' directory."
> > >   (interactive "p")
> > >   (let ((delay (or prefix 0)))
> > >     (run-with-timer
> > >      delay nil
> > >      (lambda ()
> > >        (let* ((image (x-export-frames nil (or frameshot-format 'png)))
> > >               (base-directory (or frameshot-directory (getenv "HOME")))
> > >               (directory (concat (file-name-as-directory base-directory) 
> > > (format-time-string "%Y/%m/%Y-%m-%d/")))
> > >               (file (concat directory (format-time-string 
> > > "Screenshot-%Y-%m-%d-%T.") (symbol-name frameshot-format))))
> > >          (make-directory directory t)
> > >          (with-temp-file file
> > >            (insert image))
> > >          (find-file directory)
> > >          (message "Frame shot saved as `%s'" file))))))
> > >
> > > To capture all screen I am using this external Common Lisp script,
> > > that invokes maim:
> > >
> > > #!/usr/bin/clisp
> > >
> > > (load 
> > > "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
> > >
> > > (defparameter *image-capture-program* "maim")
> > > (defparameter *image-type* ".png")
> > > (defparameter *image-directory* 
> > > "/home/data1/protected/Media/Pictures/Screenshots")
> > >
> > > (let* ((filename (concatenate 'string (timestamp-filename) *image-type*))
> > >        (year (substring filename 0 4))
> > >        (month (substring filename 5 7))
> > >        (date (substring filename 0 10))
> > >        (directory (concatenate 'string *image-directory* "/" year "/" 
> > > month "/" date "/"))
> > >        (command (concatenate 'string *image-capture-program* " \"" 
> > > directory filename "\""))
> > >        (rox-command (concatenate 'string "rox " directory)))
> > >   (print directory)
> > >   (print command)
> > >   (ensure-directories-exist directory)
> > >   (shell command)
> > >   (shell rox-command))
> > >
> > > You could install either `maim' or other system screenshot program and
> > > use that one.
> >
> > Thank you for recommending `maim' to me. From its official description
> > [1], it can be seen as an improved scrot, which is the one used by me
> > now.
> >
> > [1] https://github.com/naelstrof/maim
>
> Further comment, based on my tries and the discussions here [1], the
> imagemagick and shutter [2] are more powerful and versatile than maim
> and scrot.
>
> [1] https://askubuntu.com/questions/584778/how-to-capture-a-drop-down-menu
> [2] https://github.com/shutter-project/shutter

So I suggest don't use tools like maim and scrot if imagemagick or
shutter can be directly invoked from within Emacs.

Hongyi



reply via email to

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