Tips on how I am using StumpWM

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Tips on how I am using StumpWM

bugs
Hello,

I am user of StumpWM, I would like to share some
tips with you.

The idea is on using the X clipboard and
forwarding it straight to various programs.

I have the PostgreSQL database with all
contacts. Whenever I am in terminal or any
application where a name or email address appear,
I can mark the email address with mouse or keys,
and then press C-t u

(define-key *root-map* (kbd "u") "exec cf-open-emacs-for-xclip.lisp")

The program is not really useful for everybody,
but it shows the idea.

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")

(defun main ()
  (let* ((my-string (read-xclip))
         (my-string (string-trim '(#\" #\Newline) my-string)))
    (if my-string
        (shell (format nil "emacsclient -c -s /home/data1/protected/tmp/emacs1001/server -e \"(cf-search \\\"~A\\\")\"" my-string))
      (progn (play-fail)
             (notify "Nothing found")))
    (exit)))

(main)

The database is accessible by various means, in my
case GNU Emacs is opening and giving me list of
available contacts for specific email address or
names.

Another example of using the X clipboard are those
spam and phishing emails. In my case I am using
mutt. Pressing h is to view headers. First line
could show something like:

Received: from cz.webasyst.net (cz.webasyst.net
        [::ffff:193.161.85.10]

Then marking the IP number with the mouse and
pressing C-t m in my case is finding quickly the
abuse email address.

(define-key *root-map* (kbd "m") "exec find-abuse-email.lisp")

In terminal it is copied back with Shift-Insert
and email body with full headers is quickly
forwarded to the abuse email address. The speed in
getting the abuse email helped to block so many
phishing attempts. I wrote this with CLISP. It is
just a concept, and surely it can be done much
simpler. This is few years old, and it worked most
of times to find the abuse email, and copy it back
into clipboard. If somebody wish to get it
working, I am willing to help.

;;; This piece of software is reading the clipboard input, when you
;;; get spam email with the mutt, or other email program, you may open
;;; the full headers and find the IP address, something like
;;; 85.185.244.101, you would mark the email address with the mouse,
;;; and call this script, if you bind it to some key, for example with
;;; alt-ctrl-m, and script will find the abuse email address. You then
;;; forward email to the abuse email address to complain about the
;;; spam. More about us http://www.rcdwealth.com

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")

(defun read-xclip-abuse nil
  (let ((command (concatenate 'string
                              "xclip -out | xargs whois | grep -i abuse | grep @ | head -1")))
    (ignore-errors (with-open-stream (str (ext:make-pipe-input-stream command))
      (read-line str)))))

(defun find-email (str)
  (let* ((my-list (regexp:regexp-split " " str))
         (my-email (find-if (lambda (x) (search "@" x)) my-list)))
    (if my-email
      (progn (ext:shell (format nil "echo ~a | xclip -in" my-email))
             (notify (format nil "Abuse email: ~a" my-email))
             (play-win))
      (play-fail))))

(defun main nil
  (let ((my-string (read-xclip-abuse)))
    (if my-string
      (find-email my-string)
      (progn (play-fail)
             (notify (format nil "Email not found")))))
  (exit))

(main)


Another example is that I like quick keyboard
shortcuts to send a voice mail or record a voice
note.

(define-key *root-map* (kbd "V") "exec voice-mail.lisp")
(define-key *root-map* (kbd "M-v") "exec record-voice-note.lisp")

voice-mail.lisp as concept:
===========================

(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")

(defparameter *my-tmp-directory* "/home/data1/protected/tmp/")
(defparameter *my-snd-format* ".ogg") ;; .ogg or others?

(defun voice-prepare ()
  (let* ((filename (timestamp-filename))
         (filename-path (concatenate 'string *my-tmp-directory* filename *my-snd-format*))
         (body-path (concatenate 'string filename-path ".txt"))
         (body-text (format nil "Voice message from Mr. Jean Louis is attached: ~A~A" filename *my-snd-format*))
         (command-1 (voice-record-command filename-path))
         (command-2 (format nil "echo ~A > ~A" body-text body-path))
         (xterm-1 (format nil "xterm -e ~A" command-1))
         (xterm-2 (format nil "xterm -e mutt -a ~A -i ~A -s \"Voice message by Mr. Jean Louis: ~A~A\"" filename-path body-path filename *my-snd-format*)))
    (shell command-2)
    (shell xterm-1)
    (shell xterm-2)))

(voice-prepare)



record-voice-note.lisp as concept:
==================================

(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/configure-system.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/connect.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/cf-tools.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")

(setf *sound-recordings-dir* "/home/data1/protected/Media/Sound/Recordings/")

(defparameter *my-snd-format* ".ogg") ;; .ogg or others?

(defun record-voice-note ()
  (let* ((filename (timestamp-filename))
         (year (substring filename 0 4))
         (month (substring filename 5 7))
         (day (substring filename 8 10))
         (date (substring filename 0 10))
         (filename-dir (concatenate 'string *sound-recordings-dir* year "/" month "/" date "/"))
         (filename-path (concatenate 'string filename-dir filename *my-snd-format*))
         (command-1 (voice-record-command filename-path))
         (xterm-1 (format nil "xterm -e ~A" command-1))
         (rox-open (format nil "rox \"~A\"" filename-dir)))
    (ensure-directories-exist filename-path :verbose t)
    (shell xterm-1)
    (shell rox-open)))

(record-voice-note)


Another example is using GNU Emacs to complete any
form in web browsers, or entering text anywhere
back into the clipboard.

(define-key *root-map* (kbd "y") "exec emacs-everywhere.lisp")

emacs-everywhere.lisp:
======================

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(defparameter *emacs* "emacs-client-x")
(defparameter *tmp-dir* "/home/data1/protected/tmp/emacs-everywhere/")
(ensure-directories-exist *tmp-dir*)

(defun tmp-filename ()
  (concatenate 'string *tmp-dir* (timestamp-filename) ".txt"))

(defun emacs-tmp-filename (tmp-filename)
  (let ((command (format nil "~A ~A" *emacs* (tmp-filename))))
    command))

(let ((tmp-filename (tmp-filename)))
  (shell (emacs-tmp-filename tmp-filename))
  (if (probe-file tmp-filename)
    (progn
      (shell (format nil "xclip -selection clipboard -in '~A'" tmp-filename))
      (shell "xclip -out"))))


Those are concepts, they work on my side. If
somebody needs the pieces, I will send it. I am
sure many of them can be done in simpler manner,
even by just using shell.

Jean

_______________________________________________
Stumpwm-devel mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel
Reply | Threaded
Open this post in threaded view
|

Re: Tips on how I am using StumpWM

Dany Haddad
Awesome! I have something similar but for sending code snippets to a repl for evaluation. Useful for some python data science stuff some times :)


> On Mar 3, 2019, at 5:38 PM, Jean Louis <[hidden email]> wrote:
>
> Hello,
>
> I am user of StumpWM, I would like to share some
> tips with you.
>
> The idea is on using the X clipboard and
> forwarding it straight to various programs.
>
> I have the PostgreSQL database with all
> contacts. Whenever I am in terminal or any
> application where a name or email address appear,
> I can mark the email address with mouse or keys,
> and then press C-t u
>
> (define-key *root-map* (kbd "u") "exec cf-open-emacs-for-xclip.lisp")
>
> The program is not really useful for everybody,
> but it shows the idea.
>
> (load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")
>
> (defun main ()
>  (let* ((my-string (read-xclip))
>     (my-string (string-trim '(#\" #\Newline) my-string)))
>    (if my-string
>    (shell (format nil "emacsclient -c -s /home/data1/protected/tmp/emacs1001/server -e \"(cf-search \\\"~A\\\")\"" my-string))
>      (progn (play-fail)
>             (notify "Nothing found")))
>    (exit)))
>
> (main)
>
> The database is accessible by various means, in my
> case GNU Emacs is opening and giving me list of
> available contacts for specific email address or
> names.
>
> Another example of using the X clipboard are those
> spam and phishing emails. In my case I am using
> mutt. Pressing h is to view headers. First line
> could show something like:
>
> Received: from cz.webasyst.net (cz.webasyst.net
>        [::ffff:193.161.85.10]
>
> Then marking the IP number with the mouse and
> pressing C-t m in my case is finding quickly the
> abuse email address.
>
> (define-key *root-map* (kbd "m") "exec find-abuse-email.lisp")
>
> In terminal it is copied back with Shift-Insert
> and email body with full headers is quickly
> forwarded to the abuse email address. The speed in
> getting the abuse email helped to block so many
> phishing attempts. I wrote this with CLISP. It is
> just a concept, and surely it can be done much
> simpler. This is few years old, and it worked most
> of times to find the abuse email, and copy it back
> into clipboard. If somebody wish to get it
> working, I am willing to help.
>
> ;;; This piece of software is reading the clipboard input, when you
> ;;; get spam email with the mutt, or other email program, you may open
> ;;; the full headers and find the IP address, something like
> ;;; 85.185.244.101, you would mark the email address with the mouse,
> ;;; and call this script, if you bind it to some key, for example with
> ;;; alt-ctrl-m, and script will find the abuse email address. You then
> ;;; forward email to the abuse email address to complain about the
> ;;; spam. More about us http://www.rcdwealth.com
>
> (load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")
>
> (defun read-xclip-abuse nil
>  (let ((command (concatenate 'string
>                              "xclip -out | xargs whois | grep -i abuse | grep @ | head -1")))
>    (ignore-errors (with-open-stream (str (ext:make-pipe-input-stream command))
>      (read-line str)))))
>
> (defun find-email (str)
>  (let* ((my-list (regexp:regexp-split " " str))
>         (my-email (find-if (lambda (x) (search "@" x)) my-list)))
>    (if my-email
>      (progn (ext:shell (format nil "echo ~a | xclip -in" my-email))
>             (notify (format nil "Abuse email: ~a" my-email))
>             (play-win))
>      (play-fail))))
>
> (defun main nil
>  (let ((my-string (read-xclip-abuse)))
>    (if my-string
>      (find-email my-string)
>      (progn (play-fail)
>             (notify (format nil "Email not found")))))
>  (exit))
>
> (main)
>
>
> Another example is that I like quick keyboard
> shortcuts to send a voice mail or record a voice
> note.
>
> (define-key *root-map* (kbd "V") "exec voice-mail.lisp")
> (define-key *root-map* (kbd "M-v") "exec record-voice-note.lisp")
>
> voice-mail.lisp as concept:
> ===========================
>
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")
>
> (defparameter *my-tmp-directory* "/home/data1/protected/tmp/")
> (defparameter *my-snd-format* ".ogg") ;; .ogg or others?
>
> (defun voice-prepare ()
>  (let* ((filename (timestamp-filename))
>         (filename-path (concatenate 'string *my-tmp-directory* filename *my-snd-format*))
>         (body-path (concatenate 'string filename-path ".txt"))
>         (body-text (format nil "Voice message from Mr. Jean Louis is attached: ~A~A" filename *my-snd-format*))
>         (command-1 (voice-record-command filename-path))
>         (command-2 (format nil "echo ~A > ~A" body-text body-path))
>         (xterm-1 (format nil "xterm -e ~A" command-1))
>         (xterm-2 (format nil "xterm -e mutt -a ~A -i ~A -s \"Voice message by Mr. Jean Louis: ~A~A\"" filename-path body-path filename *my-snd-format*)))
>    (shell command-2)
>    (shell xterm-1)
>    (shell xterm-2)))
>
> (voice-prepare)
>
>
>
> record-voice-note.lisp as concept:
> ==================================
>
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/configure-system.lisp")
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/connect.lisp")
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/cf-tools.lisp")
> (load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")
>
> (setf *sound-recordings-dir* "/home/data1/protected/Media/Sound/Recordings/")
>
> (defparameter *my-snd-format* ".ogg") ;; .ogg or others?
>
> (defun record-voice-note ()
>  (let* ((filename (timestamp-filename))
>     (year (substring filename 0 4))
>     (month (substring filename 5 7))
>     (day (substring filename 8 10))
>     (date (substring filename 0 10))
>         (filename-dir (concatenate 'string *sound-recordings-dir* year "/" month "/" date "/"))
>     (filename-path (concatenate 'string filename-dir filename *my-snd-format*))
>         (command-1 (voice-record-command filename-path))
>         (xterm-1 (format nil "xterm -e ~A" command-1))
>     (rox-open (format nil "rox \"~A\"" filename-dir)))
>    (ensure-directories-exist filename-path :verbose t)
>    (shell xterm-1)
>    (shell rox-open)))
>
> (record-voice-note)
>
>
> Another example is using GNU Emacs to complete any
> form in web browsers, or entering text anywhere
> back into the clipboard.
>
> (define-key *root-map* (kbd "y") "exec emacs-everywhere.lisp")
>
> emacs-everywhere.lisp:
> ======================
>
> (load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
> (defparameter *emacs* "emacs-client-x")
> (defparameter *tmp-dir* "/home/data1/protected/tmp/emacs-everywhere/")
> (ensure-directories-exist *tmp-dir*)
>
> (defun tmp-filename ()
>  (concatenate 'string *tmp-dir* (timestamp-filename) ".txt"))
>
> (defun emacs-tmp-filename (tmp-filename)
>  (let ((command (format nil "~A ~A" *emacs* (tmp-filename))))
>    command))
>
> (let ((tmp-filename (tmp-filename)))
>  (shell (emacs-tmp-filename tmp-filename))
>  (if (probe-file tmp-filename)
>    (progn
>      (shell (format nil "xclip -selection clipboard -in '~A'" tmp-filename))
>      (shell "xclip -out"))))
>
>
> Those are concepts, they work on my side. If
> somebody needs the pieces, I will send it. I am
> sure many of them can be done in simpler manner,
> even by just using shell.
>
> Jean
>
> _______________________________________________
> Stumpwm-devel mailing list
> [hidden email]
> https://lists.nongnu.org/mailman/listinfo/stumpwm-devel

_______________________________________________
Stumpwm-devel mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel
Reply | Threaded
Open this post in threaded view
|

Re: Tips on how I am using StumpWM

Tim Cross
In reply to this post by bugs
This is really good stuff - shows how powerful/useful stumpwm is. thanks.

On Mon, 4 Mar 2019 at 10:39, Jean Louis <[hidden email]> wrote:
Hello,

I am user of StumpWM, I would like to share some
tips with you.

The idea is on using the X clipboard and
forwarding it straight to various programs.

I have the PostgreSQL database with all
contacts. Whenever I am in terminal or any
application where a name or email address appear,
I can mark the email address with mouse or keys,
and then press C-t u

(define-key *root-map* (kbd "u") "exec cf-open-emacs-for-xclip.lisp")

The program is not really useful for everybody,
but it shows the idea.

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")

(defun main ()
  (let* ((my-string (read-xclip))
         (my-string (string-trim '(#\" #\Newline) my-string)))
    (if my-string
        (shell (format nil "emacsclient -c -s /home/data1/protected/tmp/emacs1001/server -e \"(cf-search \\\"~A\\\")\"" my-string))
      (progn (play-fail)
             (notify "Nothing found")))
    (exit)))

(main)

The database is accessible by various means, in my
case GNU Emacs is opening and giving me list of
available contacts for specific email address or
names.

Another example of using the X clipboard are those
spam and phishing emails. In my case I am using
mutt. Pressing h is to view headers. First line
could show something like:

Received: from cz.webasyst.net (cz.webasyst.net
        [::ffff:193.161.85.10]

Then marking the IP number with the mouse and
pressing C-t m in my case is finding quickly the
abuse email address.

(define-key *root-map* (kbd "m") "exec find-abuse-email.lisp")

In terminal it is copied back with Shift-Insert
and email body with full headers is quickly
forwarded to the abuse email address. The speed in
getting the abuse email helped to block so many
phishing attempts. I wrote this with CLISP. It is
just a concept, and surely it can be done much
simpler. This is few years old, and it worked most
of times to find the abuse email, and copy it back
into clipboard. If somebody wish to get it
working, I am willing to help.

;;; This piece of software is reading the clipboard input, when you
;;; get spam email with the mutt, or other email program, you may open
;;; the full headers and find the IP address, something like
;;; 85.185.244.101, you would mark the email address with the mouse,
;;; and call this script, if you bind it to some key, for example with
;;; alt-ctrl-m, and script will find the abuse email address. You then
;;; forward email to the abuse email address to complain about the
;;; spam. More about us http://www.rcdwealth.com

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/utilities.lisp")

(defun read-xclip-abuse nil
  (let ((command (concatenate 'string
                              "xclip -out | xargs whois | grep -i abuse | grep @ | head -1")))
    (ignore-errors (with-open-stream (str (ext:make-pipe-input-stream command))
      (read-line str)))))

(defun find-email (str)
  (let* ((my-list (regexp:regexp-split " " str))
         (my-email (find-if (lambda (x) (search "@" x)) my-list)))
    (if my-email
      (progn (ext:shell (format nil "echo ~a | xclip -in" my-email))
             (notify (format nil "Abuse email: ~a" my-email))
             (play-win))
      (play-fail))))

(defun main nil
  (let ((my-string (read-xclip-abuse)))
    (if my-string
      (find-email my-string)
      (progn (play-fail)
             (notify (format nil "Email not found")))))
  (exit))

(main)


Another example is that I like quick keyboard
shortcuts to send a voice mail or record a voice
note.

(define-key *root-map* (kbd "V") "exec voice-mail.lisp")
(define-key *root-map* (kbd "M-v") "exec record-voice-note.lisp")

voice-mail.lisp as concept:
===========================

(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")

(defparameter *my-tmp-directory* "/home/data1/protected/tmp/")
(defparameter *my-snd-format* ".ogg") ;; .ogg or others?

(defun voice-prepare ()
  (let* ((filename (timestamp-filename))
         (filename-path (concatenate 'string *my-tmp-directory* filename *my-snd-format*))
         (body-path (concatenate 'string filename-path ".txt"))
         (body-text (format nil "Voice message from Mr. Jean Louis is attached: ~A~A" filename *my-snd-format*))
         (command-1 (voice-record-command filename-path))
         (command-2 (format nil "echo ~A > ~A" body-text body-path))
         (xterm-1 (format nil "xterm -e ~A" command-1))
         (xterm-2 (format nil "xterm -e mutt -a ~A -i ~A -s \"Voice message by Mr. Jean Louis: ~A~A\"" filename-path body-path filename *my-snd-format*)))
    (shell command-2)
    (shell xterm-1)
    (shell xterm-2)))

(voice-prepare)



record-voice-note.lisp as concept:
==================================

(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/configure-system.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/connect.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/cf-tools.lisp")
(load #"/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/soundtools.lisp")

(setf *sound-recordings-dir* "/home/data1/protected/Media/Sound/Recordings/")

(defparameter *my-snd-format* ".ogg") ;; .ogg or others?

(defun record-voice-note ()
  (let* ((filename (timestamp-filename))
         (year (substring filename 0 4))
         (month (substring filename 5 7))
         (day (substring filename 8 10))
         (date (substring filename 0 10))
         (filename-dir (concatenate 'string *sound-recordings-dir* year "/" month "/" date "/"))
         (filename-path (concatenate 'string filename-dir filename *my-snd-format*))
         (command-1 (voice-record-command filename-path))
         (xterm-1 (format nil "xterm -e ~A" command-1))
         (rox-open (format nil "rox \"~A\"" filename-dir)))
    (ensure-directories-exist filename-path :verbose t)
    (shell xterm-1)
    (shell rox-open)))

(record-voice-note)


Another example is using GNU Emacs to complete any
form in web browsers, or entering text anywhere
back into the clipboard.

(define-key *root-map* (kbd "y") "exec emacs-everywhere.lisp")

emacs-everywhere.lisp:
======================

(load "/home/data1/protected/Programming/git/RCDBusiness/lib/lisp/date-time.lisp")
(defparameter *emacs* "emacs-client-x")
(defparameter *tmp-dir* "/home/data1/protected/tmp/emacs-everywhere/")
(ensure-directories-exist *tmp-dir*)

(defun tmp-filename ()
  (concatenate 'string *tmp-dir* (timestamp-filename) ".txt"))

(defun emacs-tmp-filename (tmp-filename)
  (let ((command (format nil "~A ~A" *emacs* (tmp-filename))))
    command))

(let ((tmp-filename (tmp-filename)))
  (shell (emacs-tmp-filename tmp-filename))
  (if (probe-file tmp-filename)
    (progn
      (shell (format nil "xclip -selection clipboard -in '~A'" tmp-filename))
      (shell "xclip -out"))))


Those are concepts, they work on my side. If
somebody needs the pieces, I will send it. I am
sure many of them can be done in simpler manner,
even by just using shell.

Jean

_______________________________________________
Stumpwm-devel mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel


--
regards,

Tim

--
Tim Cross


_______________________________________________
Stumpwm-devel mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel