alternative to (require ...)

16 views
Skip to first unread message

Sam Halliday

unread,
Feb 24, 2004, 11:32:51 AM2/24/04
to
hi there,

most of the 3rd party packages i have for emacs (such as color-theme, php-mode,
htmlize) are loaded in my ~/.emacs file by statements such as

(require 'htmlize)

but if this package is not installed on the system, emacs bails on loading the
rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
~/.emacs file and use it wherever i am using emacs.

is there an alternative command i can use, which doesn't result in emacs crying
if it can't find the package? or at least if there is an "if exists" check i
could do and incorporate into a wrapper function, say called (requests ...)

cheers,
Sam
--
Free High School Science Texts
http://savannah.nongnu.org/projects/fhsst
Sam's Homepages
http://fommil.homeunix.org/~samuel
http://www.ma.hw.ac.uk/~samuel

Kevin Rodgers

unread,
Feb 24, 2004, 12:21:48 PM2/24/04
to
Sam Halliday wrote:

> most of the 3rd party packages i have for emacs (such as color-theme, php-mode,
> htmlize) are loaded in my ~/.emacs file by statements such as
>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on loading the
> rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
> ~/.emacs file and use it wherever i am using emacs.
>
> is there an alternative command i can use, which doesn't result in emacs crying
> if it can't find the package? or at least if there is an "if exists" check i
> could do and incorporate into a wrapper function, say called (requests ...)

(condition-case nil
(require 'foo)
(error nil))


--
Kevin Rodgers

Eli Zaretskii

unread,
Feb 24, 2004, 12:19:15 PM2/24/04
to help-gn...@gnu.org
> From: Sam Halliday <dev...@example.com>
> Newsgroups: gnu.emacs.help
> Date: Tue, 24 Feb 2004 16:32:51 +0000

>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on loading the
> rest of my ~/.emacs file. this is quite annoying as i like to maintain a single
> ~/.emacs file and use it wherever i am using emacs.
>
> is there an alternative command i can use, which doesn't result in emacs crying
> if it can't find the package? or at least if there is an "if exists" check i
> could do and incorporate into a wrapper function, say called (requests ...)

Use condition-case. Here's an example:

(condition-case err
(require 'saveplace)
(error
(message "Cannot save places %s" (cdr err))))

Reiner Steib

unread,
Feb 24, 2004, 12:36:26 PM2/24/04
to
On Tue, Feb 24 2004, Kevin Rodgers wrote:

> Sam Halliday wrote:
>
>> most of the 3rd party packages i have for emacs (such as
>> color-theme, php-mode, htmlize) are loaded in my ~/.emacs file by
>> statements such as (require 'htmlize)

Often you can `autoload' some functions instead of requiring the whole
package.

> (condition-case nil
> (require 'foo)
> (error nil))

What's wrong with (require 'foo nil t)?

,----[ C-h f require RET ]
| require is a built-in function.
| (require FEATURE &optional FILENAME NOERROR)
|
| [...]
| If the optional third argument NOERROR is non-nil,
| then return nil if the file is not found instead of signaling an error.
`----

Bye, Reiner.
--
,,,
(o o)
---ooO-(_)-Ooo--- PGP key available via WWW http://rsteib.home.pages.de/

David Kastrup

unread,
Feb 24, 2004, 12:40:46 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

> most of the 3rd party packages i have for emacs (such as
> color-theme, php-mode, htmlize) are loaded in my ~/.emacs file by
> statements such as
>
> (require 'htmlize)
>
> but if this package is not installed on the system, emacs bails on
> loading the rest of my ~/.emacs file. this is quite annoying as i
> like to maintain a single ~/.emacs file and use it wherever i am
> using emacs.
>
> is there an alternative command i can use, which doesn't result in
> emacs crying if it can't find the package? or at least if there is
> an "if exists" check i could do and incorporate into a wrapper
> function, say called (requests ...)

(condition-case nil
(require 'htmlize)
(error (message "Skipping load of htmlize")))

--
David Kastrup, Kriemhildstr. 15, 44793 Bochum

Ole Laursen

unread,
Feb 24, 2004, 1:47:58 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

[...]

> but if this package is not installed on the system, emacs bails on
> loading the rest of my ~/.emacs file. this is quite annoying as i
> like to maintain a single ~/.emacs file and use it wherever i am
> using emacs.

I do the following in my .emacs:

(if (file-readable-p "~/.local-emacs")
(load "~/.local-emacs"))

Then I put the stuff that is specific for a particular site into
.local-emacs so that I can keep the .emacs files synchronised.

--
Ole Laursen
http://www.cs.auc.dk/~olau/

jasonr

unread,
Feb 24, 2004, 4:12:58 PM2/24/04
to
Sam Halliday <dev...@example.com> writes:

> (require 'htmlize)


>
> is there an alternative command i can use, which doesn't result in
> emacs crying if it can't find the package?

I use:

(if (require 'htmlize nil t)
(progn
;; htmlize specific settings here
))


Or if there are no htmlize specific settings, just

(require 'htmlize nil t)

Sam Halliday

unread,
Feb 24, 2004, 5:41:36 PM2/24/04
to
Jason Rumney wrote:
> (if (require 'htmlize nil t)
> (progn
> ;; htmlize specific settings here
> ))

thanks to everyone who has responded to this thread, you have all been a
great help!

this answer seems to be the most practical; i am away to update my
~/.emacs and see if i can make an equivalent if statement for the
(autoload...) packages :-)

Reply all
Reply to author
Forward
0 new messages