[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [STUMP] need help about defun "gnus" command
From: |
Feng Shu |
Subject: |
Re: [STUMP] need help about defun "gnus" command |
Date: |
Fri, 28 Feb 2014 09:48:42 +0800 |
User-agent: |
Gnus/5.13001 (Ma Gnus v0.10) Emacs/24.3.50 (gnu/linux) |
David Bjergaard <address@hidden> writes:
> Hi,
>
> I'm not entirely sure what's going wrong. Could you clarify what the
> difference between working and not working? Also, you may not want the quote:
I think it's defcommand's problem, But I can't find the reason too for
I can't find the error information.
>
> Two pieces of code you might want to use as a reference:
> https://github.com/dss-project/dswm-modules/tree/master/emacs
> and
> https://gitorious.org/dss-project/stumpmacs/source/1a2d69f20f0843fce5c5213a539824020786ad27:stumpmacs/daemon.lisp#L99
this package is too complex for me ...
>
> I hope to integrate the latter some day...
>
> Does:
> #+begin_src lisp
> (defcommand gnus () ()
> (run-shell-command "emacsclient -c -e '(gnus)'"))
> #+end_src
It's work, Now I use function like this:
#+begin_src
(defun escape-instance-name (str)
(let (buf)
(map nil #'(lambda (ch)
(if (or (char= ch #\()
(char= ch #\))
(char= ch #\")
(char= ch #\ ))
(push #\_ buf)
(push ch buf)))
str)
(coerce (reverse buf) 'string)))
(defun emacsclient-eval (&optional expression create-frame frame-name file)
(let ((name (or frame-name
(escape-instance-name expression))))
(run-or-raise
(concat "emacsclient --server-file=default "
(when create-frame (concat "-c -F '((name . \"" name "\"))' "))
(when expression (concat " --eval '" expression "'"))
file)
(list :instance name))))
(defcommand org-capture-contacts () ()
(emacsclient-eval "(progn (kill-new \"\") (eh-org-capture nil
\"contacts\"))"))
#+end_src
I don't like write sexp string, for example "(progn (kill-new \"\")
(eh-org-capture nil \"contacts\"))"
to my stumpwmrc, which will used by emacsclient as --eval argument.
I find
(string-downcase
(prin1-to-string
'(progn (kill-new "")
(eh-org-capture nil "contacts"))))
get "(progn (kill-new \"\") (eh-org-capture nil \"contacts\"))"
and the first one is much cleaner for me ...
> work?
> Cheers,
>
> Dave
>
>
> Feng Shu <address@hidden> writes:
>
>> Hi:
>>
>> I defun a emacsclient-eval function like this
>>
>> #+begin_src lisp
>> (defun escape-instance-name (str)
>> (let (buf)
>> (map nil #'(lambda (ch)
>> (if (or (char= ch #\()
>> (char= ch #\))
>> (char= ch #\")
>> (char= ch #\ ))
>> (push #\_ buf)
>> (push ch buf)))
>> str)
>> (coerce (reverse buf) 'string)))
>>
>> (defun emacsclient-eval (&optional expression create-frame frame-name file)
>> (let* ((expr-string (string-downcase (prin1-to-string expression)))
>> (name (or frame-name
>> (escape-instance-name expression))))
>> (run-or-raise
>> (concat "emacsclient --server-file=default "
>> (when create-frame (concat "-c -F '((name . \"" name "\"))' "))
>> (when expr-string (concat " --eval '" expr-string "'"))
>> file)
>> (list :instance name))))
>>
>> #+end_src
>>
>> this can work,
>> #+begin_src
>> (emacsclient-eval '(gnus))
>> #+end_src
>>
>> but the follow command defun can't work, someone can help me? thanks!
>>
>> #+begin_src
>> (defcommand gnus () ()
>> (emacsclient-eval '(gnus)))
>> #+end_src
>>
>> -- feng shu
>>
>>
>> _______________________________________________
>> Stumpwm-devel mailing list
>> address@hidden
>> https://lists.nongnu.org/mailman/listinfo/stumpwm-devel
--