Static Template
Current Index:
Следуйте коду, который вы пишете, замена изображений работает правильно, за исключением того, что ввод массива изображений имеет тот же URL.
Поскольку метод indexOf возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если его нет.
var images = ['1.png', '1.png', '1.png'];
//no matter how many times to execute images.indexOf('1.png'), it's always return 0.
Таким образом, лучшее решение состоит в том, чтобы заменить curIndex
глобальным числом, как показано ниже:
var curIndex = 0;
function prev() {
...
curIndex -= 1
}
function next() {
...
curIndex += 1;
}
Это решение должно избегать проблемы, с которой вы сталкиваетесь.
Это пример, и он дает некоторые доказательства правильности вашего сценария.
Есть два направления, чтобы найти проблему. Один, чтобы проверить ввод изображений, а другой, попробуйте отладить код в реальной среде.
In addition to Adam Rosenfield's solution, I recommend to use Emacs in server mode. You may add (server-start)
to your dotemacs, and run emacsclient
instead of emacs
whenever you want to open file in Emacs. That way you have to pay the loading cost of Emacs only once, after then clients pop up immediately.
Edit
You're right, v22 does not create a new frame. Create a shell script that do the trick:
#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'
I would have to check my customization, but there is a package called gnuserve or emacsclient. It migrates a lot so you will have to google for it.
It runs one emacs session in the background. Any further sessions of emacs are essentially just new frames of that session. One advatage is quick startup times for your later sessions.
Это не отвечает на вопрос, но довольно уместно
Я не знаю, как заставить его работать быстрее, но есть несколько вещей, которые я мог бы предложить:
для большинства вещей, которые вы делаете в командной строке, вы можете сделать это в emacs:
или вы можете запустить emacs так:
файл emacs .ext &
Одна вещь, о которой другие не упомянули, - это включить библиотеки elisp, которые вы используете как часть сброшенного Emacs , чтобы перенести время загрузки библиотеки из запуска Emacs Emacs построить. Это не для слабонервных, но если вы загрузите несколько библиотек в .emacs
, это может выиграть несколько секунд времени запуска.
Emacs is designed to run "all the time" (or at least for long periods of time), thus starting and stopping Emacs several times during a day is not recommended.
I would suggest using screen. Screen is a terminal multiplexer, giving you an unlimited virtual terminals in one terminal.
After installing simply write "screen emacs" in your terminal. Emacs will start as usual, but pressing "c-a c" (that is press ctrl-a and then c) will open a new virtual terminal. You can get back to emacs by pressing "c-a c-a" (that's two times ctrl-a).
You can even detach from the running screen session, the key sequence is "c-a d".
Re-attach to the session by issuing "screen -R" and you will be back where you left. This enables you to start an emacs session at work, detach, go home, and re-attach from home.
I've been running Emacs like this for months in a row.
Here's the official web site: http://www.gnu.org/software/screen/ but try googling for screen tutorials and howtos
"I tend to open and close emacs a lot, because I'm more comfortable using the bash command line for file/directory manipulation and compiling."
You're describing the way an editor like vim is used like. Shoot in&out. Emacs is usually kept open, and mostly all is done from "within it". hiena already answered what would be the correct approach here.
Проверьте файл .emacs
и посмотрите, загружаете ли вы ненужные пакеты. Загрузка пакетов может занять значительное количество времени. Например, вам может потребоваться загрузить пакет php-mode
, если вы редактируете файл PHP. Вы можете сделать это, установив подключаемую процедуру, хотя я не уверен в деталях.
Также убедитесь, что все загружаемые вами пакеты скомпилированы (файлы .elc
). Вы можете скомпилировать файл elisp
, запустив
emacs -batch -f batch-byte-compile thefile.el
Скомпилированные пакеты загружаются намного быстрее, чем не скомпилированные пакеты.
Один из
M-x shell
M-x eshell
M-x term
M-x ansi-term
должен отвечать вашим требованиям командной строки из Emacs.
Вы также можете использовать M -!
(он же Mx shell- команда
) для выполнения однострочных без перехода в оболочку.
Несколько советов:
Использование автозагрузки
Использование автозагрузки избавляет вас от загрузки библиотек до их использования. Например:
(if (locate-library "ediff-trees")
(автозагрузка 'ediff-trees "ediff-trees" "Запустить дерево ediff" т))
Скомпилируйте ваш .emacs.
Дает вам небольшое увеличение скорости, хотя есть ошибки, если вы работать с контролем версий, и ваш .emacs новее, чем .emacs.elc. Один из распространенных приемов:
(defun autocompile nil
"скомпилировать себя, если ~ / .emacs"
(Интерактивный)
(требуется 'bytecomp)
(let ((dotemacs (имя-файла-user-init-файл)))
(if (string = (buffer-file-name) (файл-chase-links dotemacs))
(байт-компиляция-файл dotemacs))))
(add-hook 'after-save-hook' автокомпиляция)
Научитесь любить сервер emacs.
Запуск emacs в качестве сервера означает, что вам никогда не придется его закрывать. тем не мение Я заметил, что вы все еще используете emacs22. emacs23 поддерживает multi-tty, что делает намного проще запустить emacs за один сеанс экрана, а затем вызвать новые окна в другом терминале. Я использую Emacs для редактирования почты для моей почты client (mutt) и emacsclient отлично подходят для таких быстрых изменений.
Не закрывать Emacs каждый раз, когда вы хотите использовать оболочку.Используйте Ctrl-Z, чтобы переместить Emacs на задний план, и команду fg
в Bash, чтобы переместить его обратно на передний план.
Другие покрывали с помощью gnuserve
и emacsclient
], и я бы предложил компиляцию в emacs (возможность перехода к ошибкам компиляции - выигрыш).
Но, в частности, ускорение .emacs может быть сделано:
Байт, компилирующий файл .emacs, который Вы можете сделать это автоматически, используя этот фрагмент кода
. Заменить как можно больше операторов (require 'package)
функциональностью автозагрузки . Это задержит загрузку lisp до тех пор, пока это действительно не потребуется. Использование этой техники позволило мне ускорить мой запуск с> 6 секунд до <1. Это займет немного работы, потому что не все библиотеки поставляются с пометкой autoload
.
Удаление кода / функциональности, которые вы больше не используете.
Попробуйте запустить emacs с опцией - no-site-file
, чтобы избежать загрузки ненужных пакетов при установке сайта site-start. el
.
Если вы действительно серьезны, вы можете свернуть свои собственные emacs с уже загруженными вашими любимыми функциями. Это, конечно, означает, что более важно вносить изменения в то, что у вас есть в .emacs
, потому что это часть двоичного файла. Перейдите по ссылке для получения информации о том, как использовать dump-emacs
.
Купить более быстрый компьютер и / или более быстрый диск.
Теперь, как это сделать Вы узнаете, что загружает ваш .emacs? С целью убрать функционал или отложить его? Проверьте буфер * Messages *
, который содержит строки вроде:
Loading /home/tjackson/.emacs.tjackson.el (source)... Loading /home/tjackson/installed/emacs/lisp/loaddefs.el (source)...done Loading /user/tjackson/.elisp/source/loaddefs.el (source)...done Loading autorevert...done Loading /home/tjackson/.emacs.tjackson.el (source)...done
Если вы заметите, операторы Загрузка
могут быть вложенными: первый .emacs.tjackson.el
заканчивается на ...
и последняя строка показывает, что загрузка .emacs.tjackson.el
равна ... выполнено
. Все эти другие файлы загружаются из моего файла .emacs.tjackson.el
. Все остальные загрузки являются атомарными.
Примечание: Если у вас большой .emacs, возможно, что буфер * Messages *
потеряет некоторые сообщения, потому что он сохраняет только фиксированное количество информации. Вы можете добавить эту настройку вначале в свой .emacs
, чтобы хранить все сообщения:
(setq message-log-max t)
Примечание: Если команда 'load
подавит сообщения, если четвертый Аргумент nomessage
не ноль, поэтому удалите все такие вызовы (или посоветуйте '
Одна вещь, которая помогла мне сократить время загрузки my .emacs
, в дополнение к автозагрузке
(как предлагали другие), является eval-after-load . В следующем примере задержка вызова к sql-set-product
избавляет вас от необходимости загружать sql
в ваш .emacs
, делая существующий sql
автозагрузка более эффективна.
(eval-after-load "sql" '(progn (sql-set-product 'mysql) (setq sql-mysql-options '("-C" "-t" "-f" "-n")) (setq sql-sqlite-program "sqlite3") ))
Конечно, для некоторых пакетов будет доступен хук , который позволяет делать то же самое, но иногда нет, или этот способ просто доказывает проще думать.